From 204151d95c43c8e464068937f1cbd312f13ba8aa Mon Sep 17 00:00:00 2001 From: Lenheart <947330670@qq.com> Date: Sat, 8 Nov 2025 12:21:06 +0800 Subject: [PATCH] no message --- Base/UI/Lenheart_Each_Class.nut | 2 +- CSBase/CallBack/DrawHudMain.nut | 37 + CSBase/CallBack/DrawMain.nut | 231 ++ CSBase/CallBack/GetDamageRate.nut | 84 + CSBase/CallBack/PackControl.nut | 183 + CSBase/CallBack/PushDamage.nut | 32 + CSBase/Interface.nut | 30 + CSBase/UI/Lenheart_Ani_Class.nut | 85 + CSBase/UI/Lenheart_Character_Info_Class.nut | 512 +++ CSBase/UI/Lenheart_Cursor_Class.nut | 57 + CSBase/UI/Lenheart_Each_Class.nut | 418 ++ CSBase/UI/Lenheart_Event_Class.nut | 374 ++ CSBase/UI/Lenheart_UI_Class.nut | 1456 +++++++ CSBase/UI/OldWindowsMap.nut | 52 + CSBase/_ENUM/_ENUM_.nut | 426 ++ CSBase/_Tool/Animation_Class.nut | 545 +++ CSBase/_Tool/BaseTool_Class.nut | 516 +++ CSBase/_Tool/Hacker_Class.nut | 60 + CSBase/_Tool/Hacker_RegApi.nut | 301 ++ CSBase/_Tool/Image_Class.nut | 80 + CSBase/_Tool/Json_Class.nut | 661 ++++ CSBase/_Tool/MemoryClass.nut | 204 + CSBase/_Tool/Packet_Class.nut | 61 + CSBase/_Tool/Script_Class.nut | 713 ++++ CSBase/_Z_Data/CharacterInfoData.nut | 113 + FileConfig.json | 27 + Project/HudUi/HudUi.nut | 16 +- Project/NpcTransaction/NpcTransaction.nut | 62 +- user/116.205.165.25/1_atgunner_1.c | 3396 ++++++++++++++++ user/116.205.165.25/1_atgunner_2.c | 2796 ++++++++++++++ user/116.205.165.25/1_atgunner_3.c | 2971 ++++++++++++++ user/116.205.165.25/1_atgunner_4.c | 3523 +++++++++++++++++ user/116.205.165.25/1_atgunner_5.c | 3756 ++++++++++++++++++ user/116.205.165.25/1_atgunner_6.c | 1254 ++++++ user/116.205.165.25/25_priest_1.c | 2946 ++++++++++++++ user/116.205.165.25/25_priest_2.c | 3591 +++++++++++++++++ user/116.205.165.25/25_priest_3.c | 2078 ++++++++++ user/116.205.165.25/2_atpriest_1.c | 3758 ++++++++++++++++++ user/116.205.165.25/2_atpriest_2.c | 2636 +++++++++++++ user/116.205.165.25/2_atpriest_3.c | 3679 ++++++++++++++++++ user/116.205.165.25/2_atpriest_4.c | 3511 +++++++++++++++++ user/116.205.165.25/2_atpriest_5.c | 2969 ++++++++++++++ user/116.205.165.25/2_atpriest_6.c | 2264 +++++++++++ user/116.205.165.25/3_atswordman_1.c | 2761 +++++++++++++ user/116.205.165.25/3_atswordman_2.c | 2513 ++++++++++++ user/116.205.165.25/3_atswordman_3.c | 2387 ++++++++++++ user/116.205.165.25/3_atswordman_4.c | 2419 ++++++++++++ user/116.205.165.25/3_atswordman_5.c | 3839 +++++++++++++++++++ user/116.205.165.25/3_atswordman_6.c | 3324 ++++++++++++++++ user/116.205.165.25/3_atswordman_7.c | 3300 ++++++++++++++++ user/116.205.165.25/3_atswordman_8.c | 3622 +++++++++++++++++ user/116.205.165.25/4_fighter_1.c | 3620 +++++++++++++++++ user/116.205.165.25/4_fighter_2.c | 2980 ++++++++++++++ user/116.205.165.25/4_fighter_3.c | 1190 ++++++ user/116.205.165.25/5_gunner_1.c | 3058 +++++++++++++++ user/116.205.165.25/5_gunner_2.c | 3201 ++++++++++++++++ user/116.205.165.25/5_gunner_3.c | 1970 ++++++++++ user/116.205.165.25/6_mage_1.c | 3366 ++++++++++++++++ user/116.205.165.25/6_mage_10.c | 2862 ++++++++++++++ user/116.205.165.25/6_mage_11.c | 1622 ++++++++ user/116.205.165.25/6_mage_12.c | 3301 ++++++++++++++++ user/116.205.165.25/6_mage_13.c | 2132 ++++++++++ user/116.205.165.25/6_mage_2.c | 3354 ++++++++++++++++ user/116.205.165.25/6_mage_3.c | 804 ++++ user/116.205.165.25/6_mage_4.c | 3012 +++++++++++++++ user/116.205.165.25/6_mage_5.c | 2677 +++++++++++++ user/116.205.165.25/6_mage_6.c | 3464 +++++++++++++++++ user/116.205.165.25/6_mage_7.c | 3579 +++++++++++++++++ user/116.205.165.25/6_mage_8.c | 3089 +++++++++++++++ user/116.205.165.25/6_mage_9.c | 1881 +++++++++ user/116.205.165.25/7_swordman_1.c | 2540 ++++++++++++ user/116.205.165.25/7_swordman_2.c | 3521 +++++++++++++++++ user/116.205.165.25/7_swordman_3.c | 1255 ++++++ user/116.205.165.25/8_thief_1.c | 3677 ++++++++++++++++++ user/116.205.165.25/8_thief_2.c | 2596 +++++++++++++ user/116.205.165.25/8_thief_3.c | 2563 +++++++++++++ user/116.205.165.25/8_thief_4.c | 3139 +++++++++++++++ user/116.205.165.25/8_thief_5.c | 3467 +++++++++++++++++ user/116.205.165.25/8_thief_6.c | 939 +++++ user/116.205.165.25/config | 51 + user/43.249.195.64/a.nut | 0 user/43.249.195.64/config | 1 + 82 files changed, 151530 insertions(+), 12 deletions(-) create mode 100644 CSBase/CallBack/DrawHudMain.nut create mode 100644 CSBase/CallBack/DrawMain.nut create mode 100644 CSBase/CallBack/GetDamageRate.nut create mode 100644 CSBase/CallBack/PackControl.nut create mode 100644 CSBase/CallBack/PushDamage.nut create mode 100644 CSBase/Interface.nut create mode 100644 CSBase/UI/Lenheart_Ani_Class.nut create mode 100644 CSBase/UI/Lenheart_Character_Info_Class.nut create mode 100644 CSBase/UI/Lenheart_Cursor_Class.nut create mode 100644 CSBase/UI/Lenheart_Each_Class.nut create mode 100644 CSBase/UI/Lenheart_Event_Class.nut create mode 100644 CSBase/UI/Lenheart_UI_Class.nut create mode 100644 CSBase/UI/OldWindowsMap.nut create mode 100644 CSBase/_ENUM/_ENUM_.nut create mode 100644 CSBase/_Tool/Animation_Class.nut create mode 100644 CSBase/_Tool/BaseTool_Class.nut create mode 100644 CSBase/_Tool/Hacker_Class.nut create mode 100644 CSBase/_Tool/Hacker_RegApi.nut create mode 100644 CSBase/_Tool/Image_Class.nut create mode 100644 CSBase/_Tool/Json_Class.nut create mode 100644 CSBase/_Tool/MemoryClass.nut create mode 100644 CSBase/_Tool/Packet_Class.nut create mode 100644 CSBase/_Tool/Script_Class.nut create mode 100644 CSBase/_Z_Data/CharacterInfoData.nut create mode 100644 user/116.205.165.25/1_atgunner_1.c create mode 100644 user/116.205.165.25/1_atgunner_2.c create mode 100644 user/116.205.165.25/1_atgunner_3.c create mode 100644 user/116.205.165.25/1_atgunner_4.c create mode 100644 user/116.205.165.25/1_atgunner_5.c create mode 100644 user/116.205.165.25/1_atgunner_6.c create mode 100644 user/116.205.165.25/25_priest_1.c create mode 100644 user/116.205.165.25/25_priest_2.c create mode 100644 user/116.205.165.25/25_priest_3.c create mode 100644 user/116.205.165.25/2_atpriest_1.c create mode 100644 user/116.205.165.25/2_atpriest_2.c create mode 100644 user/116.205.165.25/2_atpriest_3.c create mode 100644 user/116.205.165.25/2_atpriest_4.c create mode 100644 user/116.205.165.25/2_atpriest_5.c create mode 100644 user/116.205.165.25/2_atpriest_6.c create mode 100644 user/116.205.165.25/3_atswordman_1.c create mode 100644 user/116.205.165.25/3_atswordman_2.c create mode 100644 user/116.205.165.25/3_atswordman_3.c create mode 100644 user/116.205.165.25/3_atswordman_4.c create mode 100644 user/116.205.165.25/3_atswordman_5.c create mode 100644 user/116.205.165.25/3_atswordman_6.c create mode 100644 user/116.205.165.25/3_atswordman_7.c create mode 100644 user/116.205.165.25/3_atswordman_8.c create mode 100644 user/116.205.165.25/4_fighter_1.c create mode 100644 user/116.205.165.25/4_fighter_2.c create mode 100644 user/116.205.165.25/4_fighter_3.c create mode 100644 user/116.205.165.25/5_gunner_1.c create mode 100644 user/116.205.165.25/5_gunner_2.c create mode 100644 user/116.205.165.25/5_gunner_3.c create mode 100644 user/116.205.165.25/6_mage_1.c create mode 100644 user/116.205.165.25/6_mage_10.c create mode 100644 user/116.205.165.25/6_mage_11.c create mode 100644 user/116.205.165.25/6_mage_12.c create mode 100644 user/116.205.165.25/6_mage_13.c create mode 100644 user/116.205.165.25/6_mage_2.c create mode 100644 user/116.205.165.25/6_mage_3.c create mode 100644 user/116.205.165.25/6_mage_4.c create mode 100644 user/116.205.165.25/6_mage_5.c create mode 100644 user/116.205.165.25/6_mage_6.c create mode 100644 user/116.205.165.25/6_mage_7.c create mode 100644 user/116.205.165.25/6_mage_8.c create mode 100644 user/116.205.165.25/6_mage_9.c create mode 100644 user/116.205.165.25/7_swordman_1.c create mode 100644 user/116.205.165.25/7_swordman_2.c create mode 100644 user/116.205.165.25/7_swordman_3.c create mode 100644 user/116.205.165.25/8_thief_1.c create mode 100644 user/116.205.165.25/8_thief_2.c create mode 100644 user/116.205.165.25/8_thief_3.c create mode 100644 user/116.205.165.25/8_thief_4.c create mode 100644 user/116.205.165.25/8_thief_5.c create mode 100644 user/116.205.165.25/8_thief_6.c create mode 100644 user/116.205.165.25/config create mode 100644 user/43.249.195.64/a.nut create mode 100644 user/43.249.195.64/config diff --git a/Base/UI/Lenheart_Each_Class.nut b/Base/UI/Lenheart_Each_Class.nut index 7a48928..06198cb 100644 --- a/Base/UI/Lenheart_Each_Class.nut +++ b/Base/UI/Lenheart_Each_Class.nut @@ -146,7 +146,7 @@ class Lenheart_EachC extends LenheartNewUI_Windows { LenheartNewUI_Windows.SyncPos(X, Y); NPC_Index = Rindro_BaseToolClass.GetEachNpcId(); - if (NPC_Index) { + if (NPC_Index && (L_Sq_GetPlayerEachName().len() <= 0)) { if (!NPC_Flag) { NPC_Flag = true; InitNpcButton(); diff --git a/CSBase/CallBack/DrawHudMain.nut b/CSBase/CallBack/DrawHudMain.nut new file mode 100644 index 0000000..96437c1 --- /dev/null +++ b/CSBase/CallBack/DrawHudMain.nut @@ -0,0 +1,37 @@ +/* +文件名:DrawHudMain.nut +路径:Base/CallBack/DrawHudMain.nut +创建日期:2024-08-29 09:39 +文件用途: +*/ +//血槽背景 +function L_HUD_BloodBackground() { + local RootTab = getroottable(); + local obj = sq_getMyCharacter(); + if (!obj) return; + if (RootTab.rawin("HudUi_Obj")) { + RootTab.HudUi_Obj.BottomShow(obj); + } + if (RootTab.rawin("EventList_Obj")) { + foreach(win in EventList_Obj.Events) { + win.EventShow(obj); + } + } + +} + +getroottable().Camera_Pos <- {}; + +//城镇摄像机 +function L_Sync_Camera_Pos(Camera_Object) { + // print(Camera_Object); + // print(Camera_Object); + getroottable().Camera_Pos.X <- L_sq_RA(Camera_Object + 0x638); + getroottable().Camera_Pos.Y <- L_sq_RA(Camera_Object + 0x63C); +} + + +function Sq_DrawChannel() { + // L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer_calendarui.img", 0, 0, 0); +} + diff --git a/CSBase/CallBack/DrawMain.nut b/CSBase/CallBack/DrawMain.nut new file mode 100644 index 0000000..98dd929 --- /dev/null +++ b/CSBase/CallBack/DrawMain.nut @@ -0,0 +1,231 @@ +/* +文件名:DrawMain.nut +路径:Base/CallBack/DrawMain.nut +创建日期:2024-08-06 18:58 +文件用途:绘制回调 +*/ +//在DrawMain后面调用 +function L_drawMainCustomUI_All() { + + local obj = sq_getMyCharacter(); + if (!obj) return; + + local RootTab = getroottable(); + + //获取与上一帧的dt + if (!(RootTab.rawin("Rindro_DurationFlag"))) { + Rindro_DurationFlag <- L_Getmicroseconds(); + Rindro_Duration <- 0; + } else { + local NowM = L_Getmicroseconds(); + Rindro_Duration = (NowM - Rindro_DurationFlag); + Rindro_DurationFlag = NowM; + } + + //下帧执行任务事件 + if (RootTab.rawin("LenheartNextFrameFuncTab")) { + foreach(Func in RootTab["LenheartNextFrameFuncTab"]) { + Func(); + } + RootTab["LenheartNextFrameFuncTab"] = []; + } else { + RootTab.LenheartNextFrameFuncTab <- []; + } + + //重载逻辑 + Sq_ReloadLogic(); + + //初始化活动图标 + Lenheart_EventList_Fun(obj); + + //加载注册Base函数窗口 + if (RootTab.rawin("LenheartBaseFuncTab")) { + local LenheartFunc = RootTab["LenheartBaseFuncTab"]; + foreach(Func in LenheartFunc) { + Func(obj); + } + } + + //加载注册Ex函数窗口 + if (RootTab.rawin("LenheartFuncTab")) { + local LenheartFunc = RootTab["LenheartFuncTab"]; + foreach(name,Func in LenheartFunc) { + + if(name = "GetDamageRateFuncN"){ + print(name); + Func(obj); + } + + } + } + + //所有插件初始化完毕 + if (!getroottable().rawin("LenheartPluginsInitFlag")) { + local T = { + op = 25001021, + } + Rindro_BaseToolClass.SendPackEx(T); + getroottable().LenheartPluginsInitFlag <- true; + } + + // for (local i = 0; i< 100; i++) { + // for (local z = 0; z < 100; z++) { + // sq_PutPixel(sq_RGBA(230, 200, 155, 255), 200 + i, 200 + z); + // } + // } + + // sq_DrawBox(100, 100, 100, 100, 0xffffffff); + + + // L_Sq_CallFunc(0x11E86C0, "char", FFI_STDCALL, ["int", "int", "int", "int", "int"], 10, 10, 750, 350, 0xffffffff); + + // for (local i = 0; i< 100; i++) { + // for (local z = 0; z< 100; z++) { + // sq_PutPixel(sq_RGBA(230, 200, 155, 255), 200 + i, 200 + z); + // } + // } + + // L_sq_Test(0x11A7B65); + // local Device = NativePointer(0x1B45AB8).readInt(); + // print(format("Device:0x%02x", Device)); + // L_sq_Test(Device); + + // if (!TTTAAA) TTTAAA = Rindro_Draw_Character(0, [601590000, 1751501, 601500069], "rest.ani", null); + // if (TTTAAA) TTTAAA.Draw(120, 200); +} + + + + +// for (local i = 0; i < 42; i++) { +// local Value = MemoryTool.DecodeMemoryData(0x394e8c00+0x1050 + (i * 4)); +// if(Value == 151)print("Value :" + i * 4); +// } +// print(MemoryTool.DecodeMemoryData(0x1DFFB240)); +// MemoryTool.EncodeMemoryData(0x304bdc00+0x1054,7); +// TTTAAA <- null; + +// L_NewWindows("Lenheart", 56, 0x1); +// L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], 0x01ADE090, 56, 0, 0); +// getroottable().Lsnzz <- Clock(); + +// dofile("sqr/Base/_Tool/Json.nut"); + +// print(T); + + + +// Register_DPS_Pack(1, function(Jso) { +// printT(Jso); +// }); + +// for (local i = 0; i< 50; i++) { +// local asos = sq_CreateCharacter(0,0); +// // asos.setValid(false); +// // local obj = sq_GetCNRDObjectToActiveObject(asos); +// // sq_SendDestroyPacketPassiveObject(obj); +// // sendDestroyPacket(obj); + +// // sq_SendDestroyPacketPassiveObject(asos); + +// // sq_AddObject(sq_getMyCharacter(), asos, OBJECTTYPE_VIRTUALCHARACTER, false); +// // asos.setValid(false); +// // L_sq_Test(L_Sq_GetObjectAddress(asos)); +// L_Sq_CallFunc(0x5A44B0, "void", FFI_MS_CDECL, ["int"], L_Sq_GetObjectAddress(asos)); +// } + + + + +// local asos = sq_CreateAICharacter(900); + + + +// // sq_DeleteParticleCreater(asos); +// local asos = sq_CreateAICharacter(419); +// asos.setCurrentPos(sq_getMyCharacter().getXPos() + 100, sq_getMyCharacter().getYPos(), 0); +// sq_AddObject(sq_getMyCharacter(), asos, OBJECTTYPE_VIRTUALCHARACTER, false); +// sq_ChangeDrawLayer(asos, ENUM_DRAWLAYER_CLOSEBACK); + + +// L_sq_GoDungeon(1504); + +// CargoType <- 0; +// Sq_GetExeStr_Map[21910] <- function(Index) { +// CargoType = 0; +// return 21910; +// } +// Sq_GetExeStr_Map[21911] <- function(Index) { +// CargoType = 1; +// return 21911; +// } +// Rindro_Haker.LoadHook(0xE67800, ["int", "int"], +// function(args) { +// //点击了仓库转移物品 +// if (args[0] == 0x2B) { +// if (CargoType == 0) { +// printf("点击个人仓库转移物品"); +// local T = { +// op = 21091001, +// type = 0, +// } +// Rindro_BaseToolClass.SendPackEx(T); +// return [0]; +// } +// if (CargoType == 1) { +// printf("点击账号仓库转移物品"); +// local T = { +// op = 21091001, +// type = 1, +// } +// Rindro_BaseToolClass.SendPackEx(T); +// return [0]; +// } +// } +// return null; +// }, +// function(args) { +// // print(666); +// // print(format("%02x", args.pop())); +// // TTTAni <- args.pop(); +// return null; +// }); + + + +// function onAttack_Swordman(obj, damager, boundingBox, isStuck) +// { +// local Mon = sq_GetCNRDObjectToActiveObject(damager); +// Mon.setHp(0, null, true); +// } + +// function getCurrentModuleDamageRate(obj) { +// local LLJob = sq_getJob(obj); +// local LLGrowT = sq_getGrowType(obj); +// if (LLJob == 0 && LLGrowT == 2) +// return 2100000000.0; + +// return 1.0; +// } + +// function onStartDungeon_Swordman(obj) { +// print(666); +// obj.setEnableDamageBox(false); +// } + + +// local chrobj = sq_CreateCharacter(0, 4); + +// print("-----------------------------------------------/"); +// foreach(member, val in chrobj.getclass()) { +// ::print(member + "\n"); +// local attr; +// if ((attr = chrobj.getclass().getattributes(member)) != null) { +// foreach(i, v in attr) { +// ::print("\t" + i + " = " + (typeof v) + "\n"); +// } +// } else { +// ::print("\t\n") +// } + +// } \ No newline at end of file diff --git a/CSBase/CallBack/GetDamageRate.nut b/CSBase/CallBack/GetDamageRate.nut new file mode 100644 index 0000000..8f6bcce --- /dev/null +++ b/CSBase/CallBack/GetDamageRate.nut @@ -0,0 +1,84 @@ +/* +文件名:GetDamageRate.nut +路径:Base/CallBack/GetDamageRate.nut +创建日期:2024-08-09 14:10 +文件用途:获取伤害倍率 +*/ +RindroDamageRate <- 1.0; + +function L_getCurrentModuleDamageRate(obj) { + if (!obj) + return 1.0; + + local ClientRat = 1.0; + try { + ClientRat = getCurrentModuleDamageRate(obj).tofloat(); + } catch (exception) { + ClientRat = 1.0; + } + + return (RindroDamageRate * ClientRat); +} + + +function Lenheart_GetDamageRate_Fun(obj) { + //在城镇时 + if (sq_GetCurrentModuleType() == 1) { + RindroDamageRate = 1.0; + } +} + +//修改伤害回调 +function SetDamageRateCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + RindroDamageRate = Jso.rate; +} +Pack_Control.rawset(2024110902, SetDamageRateCallBack); + +getroottable()["LenheartFuncTab"].rawset("GetDamageRateFuncN", Lenheart_GetDamageRate_Fun); + + +// ModuleDamageTable <- { +// //这个1是 副本编号 +// [1] = { +// //这个0是大职业编号 比如说鬼剑士就是 0 女格斗家就是 1 在character/character.lst 这个文件里可以看 +// [0] = { +// //这个0 和 1 是转职编号 0就是未转职 1 就是转了剑魂 +// [0] = 1.0, +// [1] = 3.0 +// } +// }, +// //2号副本 +// [2] ={ +// //女格斗家职业 +// [1] = { +// [0] = 1.0, +// [1] = 3.0 +// } +// } +// } + + +// function getCurrentModuleDamageRate(obj) +// { +// local Rate = 1.0; +// local stage = sq_GetGlobaludpModuleStage(); +// local dungeon = sq_GetDungeonByStage(stage); +// local dungeonIndex = sq_GetDuegonIndex(dungeon); + +// local LLJob = sq_getJob(obj); +// local LLGrowT = sq_getGrowType(obj); + +// //处于生效副本中 +// if(ModuleDamageTable.rawin(dungeonIndex)){ +// //自己是生效职业 +// if(ModuleDamageTable[dungeonIndex].rawin(LLJob)){ +// //是生效转职 +// if(ModuleDamageTable[dungeonIndex][LLJob].rawin(LLGrowT)){ +// Rate += ModuleDamageTable[dungeonIndex][LLJob][LLGrowT].tofloat(); +// } +// } +// } + +// return Rate; +// } \ No newline at end of file diff --git a/CSBase/CallBack/PackControl.nut b/CSBase/CallBack/PackControl.nut new file mode 100644 index 0000000..60a2430 --- /dev/null +++ b/CSBase/CallBack/PackControl.nut @@ -0,0 +1,183 @@ +/* +文件名:PackControl.nut +路径:Base/PackControl/PackControl.nut +创建日期:2024-08-06 22:13 +文件用途: +*/ +Pack_Control <- {} +Pack_Hex_Control <- {} +Pack_DPS_Control <- {} + +function Register_DPS_Pack(Id, Func) { + Pack_DPS_Control.rawset(Id, Func); +} + +function Sq_Pack_Control(Chunk) { + try { + local Pack_Json = Json.Decode(Chunk); + if (Pack_Json.op == 2147483646) { + if (Pack_DPS_Control.rawin(Pack_Json.dps_id)) { + local Jso = Json.Decode(Chunk); + Jso.rawdelete("op"); + Pack_DPS_Control[Pack_Json.dps_id](Jso); + } + } else { + if (Pack_Control.rawin(Pack_Json.op)) { + try { + Pack_Control[Pack_Json.op](Chunk); + } catch (exception) { + print("error pack: " + Pack_Json.op); + } + } + } + } catch (exception) { + // print("error packmsg: " + Pack_Json.op); + print(exception); + } + +} + +function Sq_Pack_ControlLocal(Chunk) { + local Pack_Json = Json.Decode(Chunk); + if (Pack_Json.op == 2147483646) { + if (Pack_DPS_Control.rawin(Pack_Json.dps_id)) { + local Jso = Json.Decode(Chunk); + Jso.rawdelete("op"); + Pack_DPS_Control[Pack_Json.dps_id](Jso); + } + } else { + if (Pack_Control.rawin(Pack_Json.op)) { + Pack_Control[Pack_Json.op](Chunk); + } + } +} + +//字节流包 +function Sq_BlobPack_Control(Size, Pointer) { + local Pack = Packet(); + Pack.Load(Pointer, Size); + local Op = Pack.GetInt(); + //读取位置回到原点 + // Pack.Seek(0); + + if (Pack_Hex_Control.rawin(Op)) { + Pack_Hex_Control[Op](Pack); + } +} + + +function SendPackToDP_S(Id, T) { + T.op <- 2147483646; + T.dps_id <- Id; + Rindro_BaseToolClass.SendPackEx(T); +} + + +//进入副本回调 +function LenheartGotoDgnCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + local DgnId = Jso.map.id; + local DgnRate = Jso.map.ra; + L_sq_GoDungeon(DgnId); +} +Pack_Control.rawset(2024041602, LenheartGotoDgnCallBack); + + +//进入副本增加属性 +function LenheartAdditionalAttributes(obj) { + obj = sq_ObjectToSQRCharacter(obj); + //在副本中 + if (sq_GetCurrentModuleType() == 3) { + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/lenheartap.nut")) { + if ("LenheartAttributesTable" in getroottable()) { + local Abarr = {}; + foreach(AtObj in getroottable()["LenheartAttributesTable"]) { + foreach(Apos, At in AtObj) { + if (!Abarr.rawin(Apos)) Abarr[Apos] <- At; + else 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 == "strength") change_appendage.addParameter(0, false, Value.tofloat()); //力量 + else if (Key == "intelligence") change_appendage.addParameter(1, false, Value.tofloat()); //智力 + else if (Key == "vitality") change_appendage.addParameter(2, false, Value.tofloat()); //体力 + else if (Key == "spirit") change_appendage.addParameter(3, false, Value.tofloat()); //精神 + else if (Key == "physicalAttack") change_appendage.addParameter(4, false, Value.tofloat()); //物攻 + else if (Key == "magicAttack") change_appendage.addParameter(31, false, Value.tofloat()); //魔攻 + else if (Key == "independentAttack") { + change_appendage.addParameter(53, false, Value.tofloat()); //独立 + change_appendage.addParameter(54, false, Value.tofloat()); //独立 + } else if (Key == "physicalDefense") change_appendage.addParameter(5, false, Value.tofloat()); //物理防御 + else if (Key == "magicDefense") change_appendage.addParameter(32, false, Value.tofloat()); //魔法防御 + else if (Key == "physicalCritical") change_appendage.addParameter(15, false, Value.tofloat() / 10.0); //物理暴击 + else if (Key == "magicCritical") change_appendage.addParameter(16, false, Value.tofloat() / 10.0); //魔法暴击 + else if (Key == "attackSpeed") change_appendage.addParameter(10, false, Value.tofloat()); //攻速 + else if (Key == "releaseSpeed") change_appendage.addParameter(12, false, Value.tofloat()); //释放 + else if (Key == "moveSpeed") change_appendage.addParameter(11, false, Value.tofloat()); //移速 + else if (Key == "resistance") change_appendage.addParameter(39, false, Value.tofloat()); //抗磨 + else if (Key == "hitRate") change_appendage.addParameter(33, false, Value.tofloat()); //命中 + else if (Key == "avoidance") change_appendage.addParameter(27, false, Value.tofloat()); //闪避 + else if (Key == "hpRecovery") change_appendage.addParameter(14, false, Value.tofloat()); //HP恢复 + else if (Key == "mpRecovery") change_appendage.addParameter(29, false, Value.tofloat()); //MP恢复 + else if (Key == "stun") change_appendage.addParameter(41, false, Value.tofloat()); //僵直 + else if (Key == "hardStun") change_appendage.addParameter(34, false, Value.tofloat()); //硬直 + else if (Key == "fire") change_appendage.addParameter(42, false, Value.tofloat()); //火强 + else if (Key == "fireResistance") change_appendage.addParameter(20, false, Value.tofloat()); //火抗 + else if (Key == "water") change_appendage.addParameter(43, false, Value.tofloat()); //冰强 + else if (Key == "waterResistance") change_appendage.addParameter(21, false, Value.tofloat()); //冰抗 + else if (Key == "light") change_appendage.addParameter(45, false, Value.tofloat()); //光强 + else if (Key == "lightResistance") change_appendage.addParameter(23, false, Value.tofloat()); //光抗 + else if (Key == "dark") change_appendage.addParameter(44, false, Value.tofloat()); //暗强 + else if (Key == "darkResistance") 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); +} + + +//进入副本增加属性 +function LenheartAdditionalCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + if ("LenheartAttributesTable" in getroottable()) { + local T = getroottable()["LenheartAttributesTable"]; + T.rawset("LenheartCollectBoxAb", Jso.Attribute); + } else { + local T = {}; + T.rawset("LenheartCollectBoxAb", Jso.Attribute); + getroottable().rawset("LenheartAttributesTable", T); + } +} +Pack_Control.rawset(20069016, LenheartAdditionalCallBack); + + +getroottable().PluginsCompatibilityModeCallBack <- false; +//兼容模式 +function CompatibilityModeCallBack(Chunk) { + getroottable().PluginsCompatibilityModeCallBack <- true; +} +Pack_Control.rawset(30004, CompatibilityModeCallBack); \ No newline at end of file diff --git a/CSBase/CallBack/PushDamage.nut b/CSBase/CallBack/PushDamage.nut new file mode 100644 index 0000000..b65c7c6 --- /dev/null +++ b/CSBase/CallBack/PushDamage.nut @@ -0,0 +1,32 @@ +/* +文件名:PushDamage.nut +路径:Base/CallBack/PushDamage.nut +创建日期:2024-08-30 14:41 +文件用途:发生伤害时 +*/ +PushDamageFontDataFuncTab <- {}; +PushDamageFontFuncTab <- {}; + +function Sq_PushDamageData(ObjAddress, MySelfAddress, Value) { + // print("MyCharacter: " + format("%02x", L_sq_RA(0x1AB7CDC))); + // print("ObjAddress: " + format("%02x", ObjAddress)); + // print("A1: " + format("%02x", A1)); + // print("A2: " + format("%02x", A2)); + // print(" "); + foreach(Func in PushDamageFontFuncTab) { + Func(ObjAddress, MySelfAddress, Value); + } +} + +function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type, A1, A2) { + + local Flag = true; + foreach(Func in PushDamageFontDataFuncTab) { + local Ret = Func(ObjAddress, X, Y, Z, Value, Type, A1, A2); + if (Ret == false) { + Flag = false; + } + } + + return Flag; +} \ No newline at end of file diff --git a/CSBase/Interface.nut b/CSBase/Interface.nut new file mode 100644 index 0000000..0f5c9a2 --- /dev/null +++ b/CSBase/Interface.nut @@ -0,0 +1,30 @@ +/* +文件名:Interface.nut +路径:Base/Interface.nut +创建日期:2025-05-01 07:39 +文件用途:所有基础文件加载以后 将会执行的逻辑 用于初始化一些接口和默认设置 +*/ + +//消息框黏贴 +NativePointer(0x011C53B0).writeShort(0x1B0); + +//修复233号弹窗 +NativePointer(0x00727017).writeByteArray([0xEB, 0x11, 0x90, 0x90, 0x90, 0x90, 0x90]); + +//反遍历函数 +NativePointer(0x1370FD7).writeInt(0); + +//全局的道具信息 +if (!getroottable().rawin("Rindro_ItemInfoObject")) Rindro_ItemInfoObject <- {}; + +//开启热重载目录 +if(getroottable().rawin("RINDROLOCAL") && RINDROLOCAL == true)Sq_AutoReload("sqr"); + + +print("cs base "); +print("cs base "); +print("cs base "); +print("cs base "); +print("cs base "); +print("cs base "); +print("cs base "); \ No newline at end of file diff --git a/CSBase/UI/Lenheart_Ani_Class.nut b/CSBase/UI/Lenheart_Ani_Class.nut new file mode 100644 index 0000000..a501dbd --- /dev/null +++ b/CSBase/UI/Lenheart_Ani_Class.nut @@ -0,0 +1,85 @@ +/* +文件名:Lenheart_Ani_Class.nut +路径:Base/UI/Lenheart_Ani_Class.nut +创建日期:2024-08-06 18:56 +文件用途:Ani +*/ +class Lenheart_Ani { + + X = 0; + Y = 0; + + ImgPath = null; + ImgFrame = null; + + + //播放状态 + State = 0; + //循环 + LoopFlag = true; + + //当前帧数 + CurFrame = 0; + //初始化时间 + InitTime = 0; + //Ani当前帧播放时间 + PlayCurTime = 0; + + + //img 路径 调用帧数组 + constructor(path, frame, Pos) { + ImgPath = ("Character/" + path + ".img").tolower(); + ImgFrame = frame; + InitTime = Clock(); + State = 1; + X = Pos[0]; + Y = Pos[1]; + } + + + function Show(dt) { + if (State == 1) { + if (ImgFrame) { + local NowFrameObj = ImgFrame[CurFrame]; + PlayCurTime += dt; + L_sq_DrawImg(ImgPath, NowFrameObj.ImgIndex, NowFrameObj.Pos[0] + X, NowFrameObj.Pos[1] + Y); + if (PlayCurTime >= NowFrameObj.Delay) { + CurFrame++; + //播放完成 + if (CurFrame >= ImgFrame.len()) { + if (LoopFlag) CurFrame = 0; + else State = 0; + } + InitTime = Clock(); + PlayCurTime = 0; + } + } + } + } + + function ShowEx(dt,gRgba,rate_x,rate_y) { + if (State == 1) { + if (ImgFrame) { + local NowFrameObj = ImgFrame[CurFrame]; + PlayCurTime += dt; + L_sq_DrawImg(ImgPath, NowFrameObj.ImgIndex, NowFrameObj.Pos[0] + X, NowFrameObj.Pos[1] + Y,1,gRgba,rate_x,rate_y); + if (PlayCurTime >= NowFrameObj.Delay) { + CurFrame++; + //播放完成 + if (CurFrame >= ImgFrame.len()) { + if (LoopFlag) CurFrame = 0; + else State = 0; + } + InitTime = Clock(); + PlayCurTime = 0; + } + } + } + } + + function Reset() + { + CurFrame = 0; + State = 1; + } +} \ No newline at end of file diff --git a/CSBase/UI/Lenheart_Character_Info_Class.nut b/CSBase/UI/Lenheart_Character_Info_Class.nut new file mode 100644 index 0000000..018e9f7 --- /dev/null +++ b/CSBase/UI/Lenheart_Character_Info_Class.nut @@ -0,0 +1,512 @@ +/* +文件名:Lenheart_Character_Info_Class.nut +路径:Base/UI/Lenheart_Character_Info_Class.nut +创建日期:2024-08-27 12:13 +文件用途:个人信息属性面板 +*/ +return; +class Lenheart_Character_Info_ClassC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + NoWindow = true; + + //是否可见 + Visible = false; + + //图标路径 + IconPath = "interface2/profile/profile_icon1.img"; + + //我的信息 + MyInfo = null; + + //滚轮偏移值 + YOffset = 0; + + + function My_GetCharacterInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + MyInfo = Jso.Attribute; + } + + //初始化 + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + Pack_Control.rawset(20069014, My_GetCharacterInfoCallBack.bindenv(this)); + } + + function RegisterWidget() { + // //关闭按钮 + // local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276); + // CloseButton.OnClick = function() { + // this.Visible = false; + // }.bindenv(this); + // Childrens.append(CloseButton); + } + + //绘制主界面 + function DrawMain(obj) { + DrawInfo(obj); + } + + function CheckPosInDrawBox(PosY) { + if ((PosY + YOffset) >= 0 && (PosY + YOffset)< 144) return true; + return false; + } + + //绘制信息 + function DrawInfo(obj) { + if (MyInfo) { + + //生命魔法值 + local PosOffset = 0; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 0, X + 4, Y + 3 + YOffset); + L_sq_DrawCode("HP", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local HpStr = MyInfo.CurHp.tostring() + "/" + MyInfo.MaxHp.tostring(); + L_sq_DrawCode(HpStr, X + 128 - LenheartTextClass.GetStringLength(HpStr), Y + 4 + (0 * 18) + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + + L_sq_DrawImg(IconPath, 1, X + 130, Y + 3 + YOffset); + L_sq_DrawCode("MP", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local HpStr = MyInfo.CurMp.tostring() + "/" + MyInfo.MaxMp.tostring(); + L_sq_DrawCode(HpStr, X + 248 - LenheartTextClass.GetStringLength(HpStr), Y + 4 + (0 * 18) + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + //力量智力 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 2, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("力量", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.Strength.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + + L_sq_DrawImg(IconPath, 3, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("智力", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.Intellect.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + //体力精神 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 4, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("体力", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.Vitality.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + + L_sq_DrawImg(IconPath, 5, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("精神", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.Spirit.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + //物理攻击魔法攻击 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 6, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("物理攻击", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.PhysicalAttack.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + + L_sq_DrawImg(IconPath, 7, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("魔法攻击", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.MagicalAttack.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + //独立攻击力 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 31, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("独立攻击力(物理/魔法)", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.IndependentAttack.tostring(); + L_sq_DrawCode(Str, X + 248 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + //物理防御魔法防御 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 8, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("物理防御", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.PhysicalDefend.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + + L_sq_DrawImg(IconPath, 9, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("魔法防御", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.MagicalDefend.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + //物理暴击 魔法暴击 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 10, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("物理暴击", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = format("%0.1f%%", MyInfo.PhysicalCrit); + L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 11, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("魔法暴击", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = format("%0.1f%%", MyInfo.MagicalCrit); + L_sq_DrawCode(Str2, X + 253 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //攻击速度 释放速度 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 12, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("攻击速度", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = format("%0.1f%%", MyInfo.AttackSpeed); + L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 13, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("释放速度", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = format("%0.1f%%", MyInfo.ReleaseSpeed); + L_sq_DrawCode(Str2, X + 253 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //移动速度 抗魔 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 14, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("移动速度", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = format("%0.1f%%", MyInfo.MoveSpeed); + L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 15, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("抗魔", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.AntiMagic.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //命中率 回避率 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 16, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("命中率", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = format("%0.1f%%", MyInfo.HitRate); + L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 17, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("回避率", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = format("%0.1f%%", MyInfo.DodgeRate); + L_sq_DrawCode(Str2, X + 253 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //HP恢复量 MP恢复量 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 18, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("HP恢复量", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.HPRecovery.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 19, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("MP恢复量", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.MPRecovery.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //僵直度 硬直 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 20, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("僵直度", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.StunRate.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 21, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("硬直", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.StunResist.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //火属性强化 火属性抗性 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 22, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("火属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.FireStrength.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 23, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("火属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.FireResist.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //冰属性强化 冰属性抗性 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 24, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("冰属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.IceStrength.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 25, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("冰属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.IceResist.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //光属性强化 光属性抗性 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 26, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("光属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.LightStrength.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 27, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("光属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.LightResist.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //暗属性强化 暗属性抗性 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 28, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("暗属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.DarkStrength.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 29, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("暗属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.DarkResist.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + + //名望值 罪恶值 + PosOffset += 18; + if (CheckPosInDrawBox(PosOffset)) { + L_sq_DrawImg(IconPath, 53, X + 4, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("名望值", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str = MyInfo.Fame.tostring(); + L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + + L_sq_DrawImg(IconPath, 45, X + 130, Y + 3 + PosOffset + YOffset); + L_sq_DrawCode("最终伤害", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1); + local Str2 = MyInfo.FinalDamage.tostring(); + L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1); + } + } + } + + function Show(obj) { + + } + + function RealShow(obj) { + + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + } + + //override + //鼠标滚轮事件回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) { + if (Flag) { + if (YOffset< 0) YOffset += 18; + } + if (!Flag) { + if (YOffset > (-145)) YOffset -= 18; + } + } + + //调用原生方法 + LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + } + + GetMyInfoFlag = false; + + //逻辑入口 + function Proc(obj) { + Visible = false; + LenheartNewUI_Windows.SyncPos(X, Y); + + local WindowX = sq_GetPopupWindowMainCotrol(74); + + if (!WindowX) { + GetMyInfoFlag = false; + } + + if (!WindowX) return; + + if (!GetMyInfoFlag) { + GetMyInfoFlag = true; + local T = { + op = 20069013, + Info = Lenheart_Character_GetAttribute(null) + } + SendPackEx(T); + } + + X = Base_X; + Y = Base_Y; + } + + Base_X = 0; + Base_Y = 0; + + function SyncState(Args) { + Base_X = Args[0] + 800; + Base_Y = Args[1] - 174; + local obj = sq_getMyCharacter(); + RealShow(obj); + Visible = true; + } + +} +DrawCodeCallBackFunc.Rindro_Character_Info <- function(Args) { + if (getroottable().rawin("Lenheart_Character_Info_Class_Obj")) { + local MyWindow = getroottable().rawget("Lenheart_Character_Info_Class_Obj"); + MyWindow.SyncState(Args); + } +} + +//个人信息窗口逻辑 +function L_Character_Info_Window(WindowObject) { + return false; + // //返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行 + // local Flag = false; + // if (getroottable().rawin("Lenheart_Character_Info_Class_Obj")) { + // local MyWindow = getroottable().rawget("Lenheart_Character_Info_Class_Obj"); + // local Ret = MyWindow.SyncState(WindowObject); + // if (Ret) Flag = true; + // } + // return Flag; +} + +getroottable().rawdelete("Lenheart_Character_Info_Class_Obj"); + +function Lenheart_Character_Info_Class_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Lenheart_Character_Info_Class_Obj")) { + RootTab.rawset("Lenheart_Character_Info_Class_Obj", LenheartNewUI_CreateWindow(Lenheart_Character_Info_ClassC, "个人信息属性面板窗口", 0, 0, 263, 146, 0)); + } +} + +getroottable()["LenheartFuncTab"].rawset("Lenheart_Character_Info_ClassFuncN", Lenheart_Character_Info_Class_Fun); + + + +class Lenheart_Other_Character_Info_ClassC extends Lenheart_Character_Info_ClassC { + //调试模式 + // DeBugMode = true; + + //不是窗口 + NoWindow = true; + + //是否可见 + Visible = false; + + //图标路径 + IconPath = "interface2/profile/profile_icon1.img"; + + //我的信息 + MyInfo = null; + + //滚轮偏移值 + YOffset = 0; + + function Other_GetCharacterInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + MyInfo = Jso.Attribute; + } + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + Pack_Control.rawset(20069012, Other_GetCharacterInfoCallBack.bindenv(this)); + } + + function RegisterWidget() { + + } + + function Show(obj) { + + } + + function DrawMain(obj) { + DrawInfo(obj); + } + + function RealShow(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + } + + + //override + //鼠标滚轮事件回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + + if (Flag) { + if (YOffset< 0) YOffset += 18; + } + if (!Flag) { + if (YOffset > (-145)) YOffset -= 18; + } + + //调用原生方法 + LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + } + + //逻辑入口 + function Proc(obj) { + Visible = false; + LenheartNewUI_Windows.SyncPos(X, Y); + + local WindowX = sq_GetPopupWindowMainCotrol(74); + if (!WindowX || !OldWindowAddress) return; + X = L_sq_RA(OldWindowAddress + 0x14); + Y = L_sq_RA(OldWindowAddress + 0x18) + 154; + + } + + OldWindowAddress = null; + + function SyncState(Address) { + OldWindowAddress = Address; + local obj = sq_getMyCharacter(); + RealShow(obj); + Visible = true; + return true; + } + +} + +//他人信息窗口逻辑 +function L_Other_Character_Info_Window(WindowObject) { + return false; + //返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行 + local Flag = false; + if (getroottable().rawin("Lenheart_Other_Character_Info_Class_Obj")) { + local MyWindow = getroottable().rawget("Lenheart_Other_Character_Info_Class_Obj"); + local Ret = MyWindow.SyncState(WindowObject); + if (Ret) Flag = true; + } + return Flag; +} + +getroottable().rawdelete("Lenheart_Other_Character_Info_Class_Obj"); + +function Lenheart_Other_Character_Info_Class_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Lenheart_Other_Character_Info_Class_Obj")) { + RootTab.rawset("Lenheart_Other_Character_Info_Class_Obj", LenheartNewUI_CreateWindow(Lenheart_Other_Character_Info_ClassC, "他人信息属性面板窗口", 0, 0, 263, 146, 0)); + } +} + +getroottable()["LenheartFuncTab"].rawset("Lenheart_Other_Character_Info_ClassFuncN", Lenheart_Other_Character_Info_Class_Fun); \ No newline at end of file diff --git a/CSBase/UI/Lenheart_Cursor_Class.nut b/CSBase/UI/Lenheart_Cursor_Class.nut new file mode 100644 index 0000000..7f2fdad --- /dev/null +++ b/CSBase/UI/Lenheart_Cursor_Class.nut @@ -0,0 +1,57 @@ +/* +文件名:Lenheart_Cursor_Class.nut +路径:Base/UI/Lenheart_Cursor_Class.nut +创建日期:2024-09-25 19:23 +文件用途:鼠标绘制逻辑 +*/ +class Rindro_Cursor { + + //强制锁 + ForceLockState = false; + + + //是否启用 + UseState = 0; + + TypeState = 0; + SubState = 0; + + constructor() { + + } + + function Proc(Xpos, Ypos) { + + //使用自建的鼠标绘制函数 + if (UseState) { + //工作类型为0 + if (TypeState == 0) { + //常规状态 + if (SubState == 0) { + L_sq_DrawImg("interface/newstyle/windows/cursor.img", 0, Xpos, Ypos); + } + //按下状态 + else if (SubState == 1) { + L_sq_DrawImg("interface/newstyle/windows/cursor.img", 1, Xpos, Ypos); + } + } else { + L_sq_DrawImg("interface/newstyle/windows/cursor.img", TypeState, Xpos, Ypos); + } + + } + } + + function Sync(Xpos, Ypos) { + Proc(Xpos, Ypos); + return UseState; + } +} +_Rindro_Cusor_ <- Rindro_Cursor(); + +function SyncRindro_Cursor(Xpos, Ypos) { + if (getroottable().rawin("_Rindro_Cusor_")) { + local Ret = _Rindro_Cusor_.Sync(Xpos, Ypos); + return Ret; + } + return false; +} \ No newline at end of file diff --git a/CSBase/UI/Lenheart_Each_Class.nut b/CSBase/UI/Lenheart_Each_Class.nut new file mode 100644 index 0000000..7a48928 --- /dev/null +++ b/CSBase/UI/Lenheart_Each_Class.nut @@ -0,0 +1,418 @@ +/* +文件名:Lenheart_Each_Class.nut +路径:Base/UI/Lenheart_Each_Class.nut +创建日期:2024-09-30 14:46 +文件用途:交互界面类 +*/ +class LenheartNewUI_Each_BaseButton extends LenheartNewUI_CommonUi { + State = 0; + BaseIdx = 29; + DWidth = null; + Path = null; + Idx = null; + SetFlag = null; + SetIndex = null; + + Icon = null; + IconIdx = null; + Str = null; + StrColor = sq_RGBA(189, 159, 126, 250); + + constructor(X, Y, W, H, Path, Idx) { + this.DWidth = W; + this.Path = Path; + this.Idx = Idx; + LenheartNewUI_CommonUi.constructor(X, Y, W, H); + + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + //不可用 + if (State == 8) { + // L_sq_DrawImg(Path, Idx + 3, X, Y); + } else { + //按下 + if (isLBDown) { + L_sq_DrawImg(Path, Idx + 1, X, Y); + if (Icon) L_sq_DrawImg(Icon, IconIdx, X + 3, Y + 2); + if (Str) L_sq_DrawCode(Str, X + 60 - LenheartTextClass.GetStringLength(Str) / 2, Y + 5, StrColor, 0, 1); + } + //悬停 + else if (isInRect) { + L_sq_DrawImg(Path, Idx, X, Y); + if (Icon) L_sq_DrawImg(Icon, IconIdx, X + 3, Y + 1); + if (Str) L_sq_DrawCode(Str, X + 60 - LenheartTextClass.GetStringLength(Str) / 2, Y + 4, StrColor, 0, 1); + } + //普通 + else { + L_sq_DrawImg(Path, 0, X, Y); + if (Icon) L_sq_DrawImg(Icon, IconIdx, X + 3, Y + 1); + if (Str) L_sq_DrawCode(Str, X + 60 - LenheartTextClass.GetStringLength(Str) / 2, Y + 4, StrColor, 0, 1); + } + } + } + + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + if (isLBDown && OnClick) { + OnClick(this); + } + isLBDown = false; + } +} + +class Lenheart_EachC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + NoWindow = true; + + //是否可见 + // Visible = false; + + Info = null; + + NPC_Index = null; + NPC_Flag = false; + NPC_ButtonMap = null; + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + NPC_ButtonMap = {}; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + } + + function RegisterWidget() { + + } + + function Show(obj) { + + } + + function TopShow(obj) { + if (NPC_Index) { + SyncPos(); + LenheartNewUI_Windows.Show(obj); + } + } + + function DrawMain(obj) { + // if (Info) { + // local NPC_Index = Rindro_BaseToolClass.GetEachNpcId(); + // } + + + } + + + // function BottomShow() {} + + //初始化NPC按钮 + function InitNpcButton() { + Childrens = []; + if (NPC_ButtonMap.rawin(NPC_Index)) { + foreach(Func in NPC_ButtonMap[NPC_Index]) { + Func(this); + } + } + this.Visible = true; + } + + function AddEachForNpc(Index, Func) { + if (NPC_ButtonMap.rawin(Index)) { + NPC_ButtonMap[Index].append(Func); + return; + } + NPC_ButtonMap.rawset(Index, [Func]); + } + + function RemoveEachForNpc(Index) { + NPC_ButtonMap.rawdelete(Index); + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + + NPC_Index = Rindro_BaseToolClass.GetEachNpcId(); + if (NPC_Index) { + if (!NPC_Flag) { + NPC_Flag = true; + InitNpcButton(); + } + } else { + NPC_Flag = false; + } + } + + function CloseAllEach() { + local EachClassObject = L_sq_RA(0x1ADE0E0); + if (EachClassObject) { + local FristChildOffset = (EachClassObject + 0x68); + for (local i = 0; i< 74; i++) { + local AddressBuf = FristChildOffset + (4 * i); + local ChildAddress = L_sq_RA(AddressBuf); + if (ChildAddress) { + local OpenFlag = L_sq_RA(ChildAddress + 0xC); + if (OpenFlag = 257) L_sq_WA(ChildAddress + 0xC, 256); + } + } + } + } + + function Lenheart_Get_Each_Info() { + local EachCount = 0; + local Xpos = 0; + local Ypos = 0; + local EachClassObject = L_sq_RA(0x1ADE0E0); + if (EachClassObject) { + local FristChildOffset = (EachClassObject + 0x68); + for (local i = 0; i< 74; i++) { + local AddressBuf = FristChildOffset + (4 * i); + local ChildAddress = L_sq_RA(AddressBuf); + if (ChildAddress) { + local OpenFlag = L_sq_RA(ChildAddress + 0xC); + if (OpenFlag == 257) EachCount++; + } + //第0个的时候记录一下坐标 + if (i == 0) { + Xpos = L_sq_RA(ChildAddress + 0x14); + Ypos = L_sq_RA(ChildAddress + 0x18); + } + } + } + return { + Count = EachCount, + X = Xpos, + Y = Ypos + }; + } + + //override + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + //调用原生方法 + LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); + + + } + + function SyncPos() { + //读取交互坐标数据 + Info = Lenheart_Get_Each_Info(); + + X = Info.X; + Y = Info.Y + (21 * Info.Count); + //宽度 + Width = 100; + //高度 + Height = (21 * Childrens.len()); + //同步子对象坐标 + foreach(pos, winobj in Childrens) { + winobj.X = Info.X; + winobj.Y = Info.Y + (21 * (Info.Count + pos)); + + } + } +} + + +function Lenheart_Each_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("L_Each_Obj")) { + RootTab.rawset("L_Each_Obj", LenheartNewUI_CreateWindow(Lenheart_EachC, "玩家与NPC交互界面窗口", 0, 0, 0, 0, 0)); + } +} + +getroottable()["LenheartFuncTab"].rawset("Lenheart_EachN", Lenheart_Each_Fun); + + + + + +class Lenheart_PlayerEachC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + NoWindow = true; + + //是否可见 + // Visible = false; + + Info = null; + Basic = null; + + //当前交互角色姓名 + PlayerEach_Name = null; + PlayerEach_Flag = false; + PlayerEach_ButtonMap = null; + + //通用按钮 + PlayerEach_CommonButtonMap = null; + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + PlayerEach_ButtonMap = {}; + PlayerEach_CommonButtonMap = {}; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + } + + function RegisterWidget() {} + + function Show(obj) {} + + function TopShow(obj) {} + + function DrawMain(obj) {} + + function MySelfShow() { + if (PlayerEach_Name) { + local obj = sq_getMyCharacter(); + LenheartNewUI_Windows.Show(obj); + } + } + + + //初始化NPC按钮 + function InitNpcButton() { + Childrens = []; + if (PlayerEach_ButtonMap.rawin(PlayerEach_Name)) { + foreach(Func in PlayerEach_ButtonMap[PlayerEach_Name]) { + Func(this); + } + } + foreach(Func in PlayerEach_CommonButtonMap) { + Func(this); + } + this.Visible = true; + } + + function AddEachForCommon(Index, Func) { + PlayerEach_CommonButtonMap.rawset(Index, Func); + } + + function RemoveEachForCommon(Index) { + PlayerEach_CommonButtonMap.rawdelete(Index); + } + + function AddEachForPlayerName(Index, Func) { + if (PlayerEach_ButtonMap.rawin(Index)) { + PlayerEach_ButtonMap[Index].append(Func); + return; + } + PlayerEach_ButtonMap.rawset(Index, [Func]); + } + + function RemoveEachForPlayerName(Index) { + PlayerEach_ButtonMap.rawdelete(Index); + } + + function CloseAllEach() { + if (Basic) { + L_sq_WA(L_sq_P2I(Basic) + 0xC, 256); + } + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + + local Str = L_Sq_GetPlayerEachName(); + if (Str.len() > 0) { + PlayerEach_Name = Str; + } + if (PlayerEach_Name) { + if (!PlayerEach_Flag) { + PlayerEach_Flag = true; + InitNpcButton(); + } + } else { + PlayerEach_Flag = false; + } + } + + //override + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); + } + + function SelfSyncPos(gInfo) { + //读取交互坐标数据 + Info = gInfo; + Basic = gInfo.BasicAdd; + + X = Info.X; + Y = Info.Y + (21 * Info.Count); + //宽度 + Width = 100; + //高度 + Height = (21 * Childrens.len()); + //同步子对象坐标 + foreach(pos, winobj in Childrens) { + winobj.X = Info.X; + winobj.Y = Info.Y + (21 * (Info.Count + pos)); + } + } +} + + +RindroPlayerEachDrawFlag <- false; +RindroPlayerEachDrawCountBuffer <- 0; +RindroPlayerEachDrawCount <- 0; +Rindro_Haker.LoadHook(0x10002A0, ["pointer", "int", "int"], + function(args) { + if (L_Sq_GetPlayerEachName().len() <= 0) return; + local Xpos = L_sq_RA(L_sq_P2I(args[0]) + 0x14); + local Ypos = L_sq_RA(L_sq_P2I(args[0]) + 0x18); + + if (!RindroPlayerEachDrawFlag) { + local RootTab = getroottable(); + RindroPlayerEachDrawFlag = true; + if (RootTab.rawin("L_PlayerEach_Obj")) { + RootTab["L_PlayerEach_Obj"].SelfSyncPos({ + X = Xpos, + Y = Ypos, + Count = RindroPlayerEachDrawCount, + BasicAdd = args[0] + }); + RootTab["L_PlayerEach_Obj"].MySelfShow(); + } + } + RindroPlayerEachDrawCountBuffer++; + // print(args[0]); + return null; + + }, + function(args) { + return null; + }); + + +function Lenheart_PlayerEach_Fun(obj) { + local RootTab = getroottable(); + RindroPlayerEachDrawFlag = false; + RindroPlayerEachDrawCount = RindroPlayerEachDrawCountBuffer; + RindroPlayerEachDrawCountBuffer = 0; + if (!RootTab.rawin("L_PlayerEach_Obj")) { + RootTab.rawset("L_PlayerEach_Obj", LenheartNewUI_CreateWindow(Lenheart_PlayerEachC, "玩家与玩家交互界面窗口", 0, 0, 0, 0, 0)); + } +} + +getroottable()["LenheartFuncTab"].rawset("Lenheart_PlayerEachN", Lenheart_PlayerEach_Fun); \ No newline at end of file diff --git a/CSBase/UI/Lenheart_Event_Class.nut b/CSBase/UI/Lenheart_Event_Class.nut new file mode 100644 index 0000000..9aed30d --- /dev/null +++ b/CSBase/UI/Lenheart_Event_Class.nut @@ -0,0 +1,374 @@ +/* +文件名:Lenheart_Event_Class.nut +路径:Base/UI/Lenheart_Event_Class.nut +创建日期:2024-08-11 09:47 +文件用途:活动图标 +*/ + + +class LenheartNewUI_EventButton extends LenheartNewUI_CommonUi { + State = 0; + BaseIdx = 29; + DWidth = null; + Path = null; + Idx = null; + BindObj = null; + Timer = 0; + EffFlag = true; + ShowName = null; + + constructor(X, Y, Path, Idx) { + this.DWidth = 20; + this.Path = Path; + this.Idx = Idx; + LenheartNewUI_CommonUi.constructor(X, Y, 20, 20); + Timer = Clock(); + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + T_DrawDynamicAni(obj, "common/yosinevent/eventsystemeff.ani", X, Y, "EventIcon" + ObjectId); + //不可用 + if (State == 8) { + L_sq_DrawImg(Path, Idx + 3, X, Y + 1); + } else { + //按下 + if (isLBDown) { + L_sq_DrawImg(Path, Idx + 1, X, Y); + } + //悬停 + else if (isInRect) { + L_sq_DrawImg(Path, Idx, X, Y); + } + //普通 + else { + L_sq_DrawImg(Path, Idx, X, Y); + } + } + } + + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) isLBDown = true; + } + + //鼠标左键弹起回调 overr + function OnMouseLbUp(MousePos_X, MousePos_Y) { + if (isLBDown && OnClick) { + local obj = sq_getMyCharacter(); + obj.sq_PlaySound("CLICK_BUTTON1"); + OnClick(this); + } + isLBDown = false; + } +} + + +class Rindro_Event extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + EventFlag = true; + //不是窗口 + NoWindow = true; + //显示标志位 + PosIdx = null; + + //闪烁透明度 + Alpha = 250; + //闪烁模式 + BlinkMode = false; + //时间 + Timer = 0; + + //是否可见 + Visible = true; + + //主要Button + MainButton = null; + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + Timer = Clock(); + } + + //绘制主界面 + function DrawMain(obj) { + local RT = Clock() - Timer; + + //根据模式调整透明度 + if (!BlinkMode) Alpha = sq_GetUniformVelocity(250, 130, RT, 500); + else Alpha = sq_GetUniformVelocity(130, 250, RT, 500); + //转换模式 + if (RT >= 500) { + Timer = Clock(); + BlinkMode = !BlinkMode; + } + + + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface2/yosin/eventsystemeff.img", 0, X, Y, 1, sq_RGBA(255, 255, 255, Alpha), 1.0, 1.0); + L_sq_ReleaseDrawImgModel(); + } + + function Show(obj) { + // DrawMain(obj); + // LenheartNewUI_Windows.Show(obj); + } + + function EventShow(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + } + + function TopShow(obj) { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 20, 20)) { + local XposOffset = 0; + local Len = LenheartTextClass.GetStringLength(MainButton.ShowName); + local Count = ((Len - 10) / 15) + 1; + XposOffset = (-(10 + Count * 15) / 2) + 10; + + L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X + XposOffset, Y - 24); + for (local i = 0; i< Count; i++) { + L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X + XposOffset + 5 + (15 * i), Y - 24); + } + L_sq_DrawImg("interface2/yosin/eventsystem.img", 2, X + XposOffset + 5 + (15 * Count), Y - 24); + L_sq_DrawCode(MainButton.ShowName, X - Len / 2 + 12, Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1); + } + } + + function SyncEventIcon() { + local Count = L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c); + X = EventList_Obj.X + (((Count + PosIdx) % 8) * 20); + Y = EventList_Obj.Y - ((Count + PosIdx) / 8) * 20; + } + + //逻辑入口 + function Proc(obj) { + //同步图标位置 + SyncEventIcon(); + LenheartNewUI_Windows.SyncPos(X, Y); + } +} + +class Rindro_EventList { + + X = 0; + Y = 0; + + //活动数组 + Events = null; + EventsMap = null; + + function YosinEventIconInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + X = Jso.YosinEventIconInfoXpos; + Y = Jso.YosinEventIconInfoYpos; + + + getroottable()["LenheartEventOffset"] <- { + x = X - 456, + y = Y + }; + + L_sq_RefreshEventIcon(); + } + + constructor() { + + Events = []; + EventsMap = {}; + Pack_Control.rawset(30002, YosinEventIconInfoCallBack.bindenv(this)); + + } + + //添加活动 + function AddEvent(Name, Idx, WindowObject, ...) { + if (EventsMap.rawin(Name)) return EventsMap.rawget(Name); + local Window = LenheartNewUI_CreateWindow(Rindro_Event, Name, 0, 0, 20, 20, 0) + local Flag = Events.len(); + local ImgPath = "interface2/yosin/eventsystemlist.img"; + if (vargc == 1) ImgPath = vargv[0]; + local ButtonBuf = LenheartNewUI_EventButton(0, 0, ImgPath, Idx); + ButtonBuf.BindObj = WindowObject; + ButtonBuf.ShowName = Name; + ButtonBuf.OnClick = function(B_obj) { + if (B_obj.BindObj) B_obj.BindObj.OpenCallBack(); + }.bindenv(this); + Window.AddChild(ButtonBuf); + Window.PosIdx = Events.len(); + Window.MainButton = ButtonBuf; + Events.append(Window); + EventsMap.rawset(Name, Window); + return Window; + } + + //检测是否悬停活动图标 + function CheckInEvent(MousePos_X, MousePos_Y) { + if (sq_GetPopupWindowMainCotrol(244)) return; + foreach(Window in Events) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Window.X, Window.Y, Window.Width, Window.Height)) { + getroottable().WindowsShowABFlag <- true; + } + } + } +} + +getroottable().rawdelete("EventList_Obj") + +function Lenheart_EventList_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("EventList_Obj")) { + RootTab.rawset("EventList_Obj", Rindro_EventList()); + } +} + +//获取活动图标坐标 在活动图标变动时会被调用 +function Sq_Get_Event_Pos_X() { + if (getroottable().rawin("LenheartEventOffset")) { + return getroottable()["LenheartEventOffset"].x; + } else { + getroottable()["LenheartEventOffset"] <- { + x = 277, + y = 530 + }; + return getroottable()["LenheartEventOffset"].x; + } +} + +function Sq_Get_Event_Pos_Y() { + if (getroottable().rawin("LenheartEventOffset")) { + return getroottable()["LenheartEventOffset"].y; + } else { + getroottable()["LenheartEventOffset"] <- { + x = 277, + y = 530 + }; + return getroottable()["LenheartEventOffset"].y; + } +} + + + +/* +//活动图标类 +class Rindro_EventIcon extends LenheartNewUI_CommonUi { + //Key + Key = null; + //活动图标文字 + EventStr = null; + //活动图标Ani编号 + EventFrame = null; + //绑定对象 + BandObject = null; + + //图标img路径 + ImgPath = "interface2/yosin/eventsystemlist.img"; + + x = null; + y = null; + + constructor(gEventStr, gEventFrame, gKey, gBandObject) { + this.EventStr = gEventStr; + this.EventFrame = gEventFrame; + this.Key = gKey; + this.BandObject = gBandObject; + + 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(ImgPath, EventFrame, X, Y + 1); + //T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key); + } else { + //绘制活动图标 + L_sq_DrawImg(ImgPath, 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; + } +} +*/ \ No newline at end of file diff --git a/CSBase/UI/Lenheart_UI_Class.nut b/CSBase/UI/Lenheart_UI_Class.nut new file mode 100644 index 0000000..fac5ab1 --- /dev/null +++ b/CSBase/UI/Lenheart_UI_Class.nut @@ -0,0 +1,1456 @@ +/* +文件名:Lenheart_UI_Class.nut +路径:Base/UI/Lenheart_UI_Class.nut +创建日期:2024-08-06 18:56 +文件用途:UI +*/ + +//新窗口队列 +L_Windows_List <- []; +//渲染窗口的默认层在下层 即A层 +WindowsShowABFlag <- false; +//左键单击过的Flag 因为要模拟左键单击还原鼠标状态如果存在这个Flag将不响应鼠标消息一次 +Rindro_MouseClickFlag <- false; + + +//鼠标类 +class R_Mouse { + //是否锁定鼠标 + function IsLock() { + return L_sq_RAB(0x1B46886); + } + //锁定鼠标 + function Lock() { + + _Rindro_Cusor_.UseState = 1; + L_sq_WAB(0x1B46886, 1); + //技能描述窗口 + Sq_Memory_WriteByteArr(L_sq_I2P(0x4CC47E), [0xE9, 0xA0, 0x00, 0x00, 0x00, 0x90]); + //物品描述窗口 + // Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x90, 0x90, 0x90, 0x90, 0x90, 0x90]); + //buff信息描述窗口 + Sq_Memory_WriteByteArr(L_sq_I2P(0x4BF532), [0x90, 0x90, 0x90, 0x90]); + //原生商城 个人信息等按钮的悬停 + L_sq_WAB(0x4C4690, 0xC3); + //活动图标的悬停 + L_sq_WAB(0x11C6510, 0xC3); + } + //解锁鼠标 + function UnLock() { + + _Rindro_Cusor_.UseState = 0; + L_sq_WAB(0x1B46886, 0); + Sq_Memory_WriteByteArr(L_sq_I2P(0x4CC47E), [0x39, 0x05, 0xE0, 0xF6, 0xA3, 0x01]); + // Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x56, 0xE8, 0x10, 0xFE, 0xFF, 0xFF]); + Sq_Memory_WriteByteArr(L_sq_I2P(0x4BF532), [0x75, 0x07, 0x32, 0xC0]); + L_sq_WAB(0x4C4690, 0x55); + L_sq_WAB(0x11C6510, 0x55); + } + //获取鼠标工作类型 + function GetType() { + return _Rindro_Cusor_.TypeState; + // return L_sq_RAB(0x1b46898); + } + //设置鼠标工作类型 + function SetType(Type) { + + _Rindro_Cusor_.TypeState = Type; + // L_sq_WAB(0x1b46898, Type); + } + //鼠标0状态下是否按下 + function GetBaseState() { + return _Rindro_Cusor_.SubState; + // return L_sq_RAB(0x1B46874); + } + //鼠标0状态设置是否按下 + function SetBaseState(Flag) { + + _Rindro_Cusor_.SubState = Flag; + // return L_sq_WAB(0x1B46874, Flag); + } + + //还原鼠标 + function Restore() { + //这里判断是否有锁定鼠标 如果有就解锁 + if (R_Mouse.IsLock()) R_Mouse.UnLock(); + //如果鼠标工作类型不是0则设置为0 + if (R_Mouse.GetType() != 0) R_Mouse.SetType(0); + //如果鼠标是按下状态则设置为未按下 + if (R_Mouse.GetBaseState() != 0) R_Mouse.SetBaseState(0); + } +} +//基础窗口类 所有UI类继承与本类 +class LenheartNewUI_BaseWindow extends Rindro_BaseToolClass { + //父控件 + Parent = null; + //子控件 + Childrens = null; + //回调事件 + CallBackFunc = null; + + constructor() { + + } + + //鼠标事件回调 + function OnMouseProc(Flag, MousePos_X, MousePos_Y) { + foreach(Window in Childrens) { + Window.OnMouseProc(Flag, MousePos_X, MousePos_Y); + } + } + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + foreach(Window in Childrens) { + Window.OnMouseLbDown(MousePos_X, MousePos_Y); + } + } + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + foreach(Window in Childrens) { + Window.OnMouseLbUp(MousePos_X, MousePos_Y); + } + } + //鼠标右键按下回调 + function OnMouseRbDown(MousePos_X, MousePos_Y) { + foreach(Window in Childrens) { + Window.OnMouseRbDown(MousePos_X, MousePos_Y); + } + } + //鼠标右键弹起回调 + function OnMouseRbUp(MousePos_X, MousePos_Y) { + foreach(Window in Childrens) { + Window.OnMouseRbUp(MousePos_X, MousePos_Y); + } + } + //鼠标滚轮时间回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + foreach(Window in Childrens) { + Window.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + } + } + //设置回调事件 + function SetCallBackFunc(Func) { + CallBackFunc = Func; + } + //显示 + function Show(obj) { + foreach(Window in Childrens) { + if (Window.CallBackFunc) Window.CallBackFunc(Window); + if (!Window.rawin("Visible")) print(Window.ObjectId + " 显示失败"); + if (Window.Visible) { + Window.Show(obj); + Window.TopShow(obj); + } + } + } + //同步坐标 + function SyncPos(X, Y) { + foreach(Window in Childrens) { + Window.SyncPos(X, Y); + } + } + + /* + * @函数作用: 添加子对象 + * @参数 name + */ + function AddChild(gChild) { + this.Childrens.append(gChild); + gChild.Parent = this; + } +} + +//游戏窗口类 +class LenheartNewUI_Windows extends LenheartNewUI_BaseWindow { + //窗口名称 + ObjectId = null; + //可用性 + Visible = true; + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //调试模式 + DeBugMode = false; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + M_Xpos = null; + M_Ypos = null; + //移动Flag + MoveFlag = false; + + //时间片段 + Duration = 0.0; + DurationFlag = 0.0; + + //是否是焦点 + IsFocus = false; + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + ObjectId = gObjectId; + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + ResetFocus(); + + //调用原生方法 + LenheartNewUI_BaseWindow.constructor(); + } + + + //切换到最上层窗口 即得到焦点时 + function ResetFocus() { + //遍历全局窗口数组将自己移除重新添加在末尾 + foreach(Index, WindowObj in L_Windows_List) { + if (WindowObj.ObjectId == this.ObjectId) L_Windows_List.remove(Index); + } + for (local i = L_Windows_List.len() - 1; i >= 0; i--) { + if (L_Windows_List[i].ObjectId == this.ObjectId) { + L_Windows_List.remove(i); + }else{ + L_Windows_List[i].IsFocus = false; + } + } + L_Windows_List.append(this); + //切换上层显示 + getroottable().WindowsShowABFlag <- true; + IsFocus = true; + } + + /* + * @函数作用: 移除子对象 + * @参数 子对象名称 + */ + function RemoveChild(ChildName) { + foreach(_Index, _Child in Childrens) { + if (_Child.ObjectId == ChildName) { + Childrens.remove(_Index); + return; + } + } + } + /* + * @函数作用: 移除子对象类 + * @参数 类 如果传入第二个参数false 则移除所有非该类的子对象 + * @返回值 + */ + function RemoveChilds(ClassName, ...) { + local RemoveIndexArr = []; + if (vargc == 1 && vargv[0] == false) { + foreach(_Index, _Child in Childrens) { + if (!(_Child instanceof ClassName)) { + RemoveIndexArr.append(_Index - RemoveIndexArr.len()); + } + } + } else { + foreach(_Index, _Child in Childrens) { + if (_Child instanceof ClassName) { + RemoveIndexArr.append(_Index - RemoveIndexArr.len()); + } + } + } + foreach(SaveIndex in RemoveIndexArr) { + Childrens.remove(SaveIndex); + } + } + + /* + * @函数作用: 添加子对象 + * @参数 name + */ + function AddChild(gChild) { + this.Childrens.append(gChild); + gChild.Parent = this; + } + + //关闭窗口 -并没有销毁只是隐藏 + function CloseWindow() { + this.Visible = false; + //还原鼠标 + R_Mouse.Restore(); + //左键单击还原游戏状态 + // L_sq_MouseClick(); + } + //销毁窗口 + function DestroyWindow() { + foreach(Index, WindowObj in L_Windows_List) { + if (WindowObj.ObjectId == this.ObjectId) L_Windows_List.remove(Index); + } + //还原鼠标 + R_Mouse.Restore(); + //左键单击还原游戏状态 + // L_sq_MouseClick(); + } + + //道具信息窗口地址 + ItemInfoDrawS = null; + //绘制道具相信信息 + ItemObject = null; + + //获取道具信息并生成缓存 + function GetItemInfo(Id) { + if (!Rindro_ItemInfoObject.rawin(Id)) { + local ItemObject = L_sq_GetItem(Id); + if (!ItemObject) ItemObject = L_sq_GetItem(3037); + Rindro_ItemInfoObject.rawset(Id, ItemObject); + } + } + //绘制道具带道具信息 带道具边框 + function DrawItemEx(X, Y, Id, Count) { + GetItemInfo(Id); + local Rarity = L_sq_RA(Rindro_ItemInfoObject[Id] + 0xF4); + L_sq_DrawImg("interface2/rindro_reward.img", Rarity, X - 3, Y - 3); + DrawItemBase(X, Y, Id, Count); + } + //绘制道具带道具信息 + function DrawItemBase(X, Y, Id, Count) { + GetItemInfo(Id); + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + //打开道具信息窗口 + if (!ItemInfoDrawS) { + ItemInfoDrawS = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Rindro_ItemInfoObject[Id], 41); + //校准道具信息窗口位置 + L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], ItemInfoDrawS, IMouse.GetXPos(), IMouse.GetYPos(), 28, 28); + //我自己UI打开的道具信息窗口需要把渲染队列改为下层 以显示我打开的道具 + getroottable().WindowsShowABFlag <- false; + } + } else { + if (ItemInfoDrawS) { + L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0); + ItemInfoDrawS = null; + } + } + } + + //绘制标题 + function DrawWindowTitle(Width) { + //绘制标题 + DrawTriptych(X - 1, Y, Width, "interface/lenheartwindowcommon.img", 9); + if (IsFocus) { + L_sq_SetDrawImgModel(2, 0); + DrawTriptychDetail(X - 1, Y , Width, "interface/lenheartwindowcommon.img", 109, 114, 115); + L_sq_ReleaseDrawImgModel(); + } + } + + //生成DT + function GenerateDt() { + try { + local CurT = L_Getmicroseconds(); + Duration = (CurT - DurationFlag); + DurationFlag = CurT; + } catch (exception) { + + } + } + + function Show(obj) { + GenerateDt(); + if (!Visible) return; + + //调用原生方法 + LenheartNewUI_BaseWindow.Show(obj); + if (DeBugMode) DeBug(obj); + + //初始化绘制道具 + // ItemInfoDrawS = null; + } + + function TopShow(obj) { + + } + + function DeBug(obj) { + sq_DrawBox(X, Y, Width, Height, 0xffffffff); + sq_DrawBox(X, Y, Width, TitleH, 0xffffffff); + } + + //override + function OnMouseProc(Flag, MousePos_X, MousePos_Y) { + if (!Visible) return; + //设定拖动逻辑 + if (Flag == 1) { + if (MoveFlag) { + //左键拖动 + X = B_X - (M_Xpos - MousePos_X); + Y = B_Y - (M_Ypos - MousePos_Y); + } + } + //调用原生方法 + LenheartNewUI_BaseWindow.OnMouseProc(Flag, MousePos_X, MousePos_Y); + } + + //override + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + if (!Visible) return; + //如果点击事件在窗口内 + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) { + ResetFocus(); + //如果点下去在标题栏 + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, TitleH)) { + MoveFlag = true; + M_Xpos = MousePos_X; //原始鼠标位置数据 + M_Ypos = MousePos_Y; + B_X = X; //原始窗口位置 + B_Y = Y; + } + } + //调用原生方法 + LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y); + } + //override + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + if (!Visible) return; + if (MoveFlag) { + MoveFlag = false; + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + //调用原生方法 + LenheartNewUI_BaseWindow.OnMouseLbUp(MousePos_X, MousePos_Y); + } + //override + //鼠标右键按下回调 + function OnMouseRbDown(MousePos_X, MousePos_Y) { + if (!Visible) return; + //调用原生方法 + LenheartNewUI_BaseWindow.OnMouseRbDown(MousePos_X, MousePos_Y); + } + //override + //鼠标右键弹起回调 + function OnMouseRbUp(MousePos_X, MousePos_Y) { + if (!Visible) return; + //调用原生方法 + LenheartNewUI_BaseWindow.OnMouseRbUp(MousePos_X, MousePos_Y); + } + //override + //鼠标滚轮事件回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + if (!Visible) return; + //调用原生方法 + LenheartNewUI_BaseWindow.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + } +} + + +//创建窗口 如果已存在则返回窗口 +function LenheartNewUI_CreateWindow(ClassName, gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + foreach(Index, WindowObj in L_Windows_List) { + if (WindowObj.ObjectId == gObjectId) { + return WindowObj; + } + } + return ClassName(gObjectId, gX, gY, gWidth, gHeight, gTitleH); +} +//销毁窗口 +function LenheartNewUI_DestoryWindow(gObjectId) { + foreach(Index, WindowObj in L_Windows_List) { + if (WindowObj.ObjectId == gObjectId) { + L_Windows_List.remove(Index); + return true; + } + } + return false; +} + + +//遍历窗口查询是否有悬停在新窗口中 +function CheackMouseInNewWindows(MousePos_X, MousePos_Y) { + local Flag = false; + foreach(Window in L_Windows_List) { + if (!Window.Visible) continue; + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Window.X, Window.Y, Window.Width, Window.Height)) { + Flag = true; + // print(Window.ObjectId); + // Sout("%L",Window.ObjectId); + return Flag; + } + } + return Flag; +} +//遍历是否悬停在原生窗口上 +function CheackMouseInOldWindows() { + // if (!NotOldWindowsMap.rawin(L_sq_RA(0x1A32950)) && (L_sq_RA(0x1A32950) <= 2390 || L_sq_RA(0x1A32950) >= 2500) && (L_sq_RA(0x1A32950) <= 120 || L_sq_RA(0x1A32950) >= 140)) { + // return true; + // } + // local Id = L_sq_RA(0x1A32950); + // if (Id == Rindro_Info_Base_Nowindow || Id <= 300) return false; + // return true; + + + //城镇基础背景窗口 副本背景 城镇背景 拓展技能按钮 切换技能页按钮 + local OldBaseWindowArr = [0x184D0C4, 0x0184CF6C, 0x15A249C, 0x184D174]; + local WindowAddress = L_sq_RA(0x1B474D4); + if (WindowAddress) { + local Flag = L_sq_RA(WindowAddress); + foreach(value in OldBaseWindowArr) { + if (Flag == value) { + //空地 + if (Flag == 0x184D0C4 || Flag == 0x0184CF6C) { + //都为0的时候城镇背景 508是血槽那一块的逻辑 坐标Y是508 + if ((L_sq_RA(WindowAddress + 0x14) == 0 && (L_sq_RA(WindowAddress + 0x18) == 0 || L_sq_RA(WindowAddress + 0x18) == 508))) { + return false; + } + } else { + //原生窗口里的按钮 + if (Flag == 0x184D174) return true; + return false; + } + } + } + } + return true; +} + +//设定鼠标逻辑 +function RunMouseLogic(MousePos_X, MousePos_Y) { + //解锁鼠标 如果鼠标已处于锁定状态 并且没有悬停在任何窗口上 解锁鼠标 + if (R_Mouse.IsLock()) { + //不在任何新窗口上 + if (!CheackMouseInNewWindows(MousePos_X, MousePos_Y)) { + //还原鼠标 + R_Mouse.Restore(); + } + //在任何老窗口上 并且渲染层为A层 也就是下层渲染 + else if (CheackMouseInOldWindows() && !getroottable().WindowsShowABFlag) { + //还原鼠标 + R_Mouse.Restore(); + } + } + //锁定鼠标 如果鼠标处于未锁定状态 并且悬停在任意一个窗口上 + else if (!R_Mouse.IsLock() && CheackMouseInNewWindows(MousePos_X, MousePos_Y)) { + //如果没有悬停任何原生窗口直接锁 + if (!CheackMouseInOldWindows()) { + //锁定鼠标 + R_Mouse.Lock(); + //设置鼠标模式 + R_Mouse.SetType(1); + } + //如果有悬停原生窗口 就要判断AB层 + else { + if (getroottable().WindowsShowABFlag) { + //锁定鼠标 + R_Mouse.Lock(); + //设置鼠标模式 + R_Mouse.SetType(1); + } + } + } +} + +//鼠标消息回调 +function L_MouseCallBack(MouseState, MouseFlag, MousePos_X, MousePos_Y) { + + // //获取基础无窗口的位置的值 + // if (!Rindro_Info_Base_Nowindow) { + // if (!sq_getMyCharacter()) return; + // if (!Rindro_Info_Base_Nowindow) { + // IMouse.SetPos((800 * 0.45).tointeger(), (600 * 0.1).tointeger()); + // if (MousePos_X == (getroottable().Rindro_Scr_Width * 0.45).tointeger() && MousePos_Y == (getroottable().Rindro_Scr_High * 0.1).tointeger()) { + // Rindro_Info_Base_Nowindow = L_sq_RA(0x1A32950); + // } + // } + // } + //用于抵消Esc造成的点击事件 + // if (Rindro_MouseClickFlag) { + // Rindro_MouseClickFlag--; + // return; + // } + if (MouseState == 0x200) { + //常规事件就要设定鼠标是否锁定逻辑 + if (_Rindro_Cusor_.ForceLockState == false) + RunMouseLogic(MousePos_X, MousePos_Y); + } + + //判断是否悬停活动图标 没悬停在老窗口上 没在选图界面 + if (getroottable().rawin("EventList_Obj") && !CheackMouseInOldWindows() && sq_GetCurrentModuleType() != 2) EventList_Obj.CheckInEvent(MousePos_X, MousePos_Y); + + + //如果渲染层级在下级 即A层 或者是 鼠标没有悬停在任何新窗口上时 执行判断 如果悬停在原生窗口 就解除鼠标锁定 如果点击 就改变渲染层级 + if (!getroottable().WindowsShowABFlag || !CheackMouseInNewWindows(MousePos_X, MousePos_Y)) { + if (CheackMouseInOldWindows()) { + //如果点击了原生窗口 或者使用了滚轮 就把渲染队列改成下 + if (MouseState == 0x201 || MouseState == 0x20a) { + getroottable().WindowsShowABFlag <- false; + } + if (MouseState != 0x20a) return; + } + } + + //克隆一遍窗口列表 + local WindowListF = clone(L_Windows_List); + WindowListF.reverse(); + //判断滚轮是向上还是向下的 + local Flag = MouseFlag == 0xff880000 ? 0 : 1; + foreach(Window in WindowListF) { + if (Window.Visible) { + switch (MouseState) { + //常规或者拖动事件 + case 0x200: { + Window.OnMouseProc(MouseFlag, MousePos_X, MousePos_Y); + break; + } + //左键点击 + case 0x201: { + //如果点击了新窗口就把渲染队列改成上 + getroottable().WindowsShowABFlag <- true; + Window.OnMouseLbDown(MousePos_X, MousePos_Y); + break; + + } + //左键松开 + case 0x202: { + if (getroottable().WindowsShowABFlag) L_sq_WA(0x1B46874, 0); + Window.OnMouseLbUp(MousePos_X, MousePos_Y); + break; + } + //右键点击 + case 0x204: { + Window.OnMouseRbDown(MousePos_X, MousePos_Y); + break; + } + //右键松开 + case 0x205: { + Window.OnMouseRbUp(MousePos_X, MousePos_Y); + break; + } + //滚轮事件 + case 0x20a: { + Window.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + break; + } + } + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Window.X, Window.Y, Window.Width, Window.Height)) return; + } + } +} +//打开原生窗口回调 +function L_OpenOldWindowCallBack(WindowIndex) { + //将新窗口渲染队列改为下层 抵消窗口 Esc窗口 登录可能显示的任务窗口 + if (WindowIndex != 170 && WindowIndex != 176 && WindowIndex != 276 && WindowIndex != 275 && WindowIndex != 278 && WindowIndex != 279 && WindowIndex != 283 && WindowIndex != 36) { + + getroottable().WindowsShowABFlag <- false; + } +} + +//窗口逻辑入口 +function L_WindowsLogic(obj) { + //是否存在一个窗口Flag + local WindowExistence = false; + //遍历窗口队列 如果可见则调用Show 只要有一个可见就写入Flag + foreach(Window in L_Windows_List) { + if (sq_GetCurrentModuleType() != 2) Window.Proc(obj); + if (Window.Visible) { + if (sq_GetCurrentModuleType() != 2) Window.Show(obj); + if (sq_GetCurrentModuleType() != 2) Window.TopShow(obj); + if (!Window.rawin("NoWindow")) { + WindowExistence = true; + } + } + } + + //如果可见 需要调用一个原生窗口抵消ESC + if (WindowExistence) { + local W = sq_GetPopupWindowMainCotrol(170); + if (!W) L_NewWindows("Lenheart", 170, 0x65535); + else { + W.SetVisible(false); + W.SetEnable(false); + } + } + //没有任何新窗口打开 并且原生窗口开启者 + else { + local W = sq_GetPopupWindowMainCotrol(170); + if (W) { + L_sq_UseSkill(DIK_ESCAPE); + } + } + //如果按下ESC键要将所有的窗口关闭 + if (WindowExistence) { + if (KeyPressNB.isKeyPress(48, "AllLenheartWindows") || sq_GetCurrentModuleType() == 2) { + local Flag = false; + foreach(Window in L_Windows_List) { + if (!Window.rawin("NoWindow")) { + Flag = true; + Window.CloseWindow(); + } + } + if (Flag) { + getroottable().WindowsShowABFlag <- false; + //还原鼠标 + R_Mouse.Restore(); + L_Sq_CallFunc(0x11A8B60, "void", FFI_MS_CDECL, []); + // L_sq_MouseClick(); + Rindro_MouseClickFlag = 5; + } + } + } + +} +//绘制下层回调 +function L_DrawWindow_A() { + local obj = sq_getMyCharacter(); + if (!obj) return; + + //A层只在下层渲染 + if (getroottable().WindowsShowABFlag == false) L_WindowsLogic(obj); +} +//绘制上层回调 +function L_DrawWindow_B() { + local obj = sq_getMyCharacter(); + if (!obj) return; + + //B层只在上层渲染 + if (getroottable().WindowsShowABFlag) L_WindowsLogic(obj); + + local RootTab = getroottable(); + if (RootTab.rawin("LenheartTopFuncTab")) { + local LenheartFunc = RootTab["LenheartTopFuncTab"]; + foreach(Func in LenheartFunc) { + Func(obj); + } + } +} + + + + +class LenheartNewUI_CommonUi extends LenheartNewUI_BaseWindow { + X = 0; + Y = 0; + Localtion_X = 0; + Localtion_Y = 0; + Width = null; + Height = null; + isLBDown = false; + isInRect = false; + + OnClick = null; + OnClickEx = null; + OnClickSound = null; + ObjectId = null; + + Visible = true; + + TopCallBackFunc = null; + + Data = null; + DeBugMode = false; + + constructor(x, y, width, height) { + this.Localtion_X = x; + this.Localtion_Y = y; + this.Width = width; + this.Height = height; + + ObjectId = Clock(); + } + + //同步坐标 + function SyncPos(x, y) { + this.X = Localtion_X + x; + this.Y = Localtion_Y + y; + } + + //鼠标事件回调 + function OnMouseProc(Flag, MousePos_X, MousePos_Y) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) isInRect = true; + else isInRect = false; + } + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) { + isLBDown = true; + if (!OnClickSound) { + R_Utils.PlaySound("CLICK_BUTTON1"); + } else { + R_Utils.PlaySound(OnClickSound); + } + } + } + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + if (isLBDown) { + if (OnClick) OnClick(); + if (OnClickEx) OnClickEx(this); + } + isLBDown = false; + } + + //鼠标右键按下回调 + function OnMouseRbDown(MousePos_X, MousePos_Y) { + + } + //鼠标右键弹起回调 + function OnMouseRbUp(MousePos_X, MousePos_Y) { + + } + //鼠标滚轮时间回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + + } + + function TopShow(obj) { + if (TopCallBackFunc) TopCallBackFunc(obj, this); + if (DeBugMode) DeBug(obj); + } + + function DeBug(obj) { + sq_DrawBox(X, Y, Width, Height, 0xffffffff); + } + +} + +class LenheartNewUI_BaseButton extends LenheartNewUI_CommonUi { + 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; + LenheartNewUI_CommonUi.constructor(X, Y, W, H); + + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + //不可用 + 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 LenheartNewUI_Button extends LenheartNewUI_CommonUi { + State = 0; + BaseIdx = 29; + DWidth = null; + Path = "interface/lenheartwindowcommon.img"; + Idx = 172; + FillWidth = 2; + FirstWidth = 28; + + + + constructor(X, Y, W) { + this.DWidth = W; + LenheartNewUI_CommonUi.constructor(X, Y, W + 28 * 2, 24); + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + //不可用 + 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 LenheartNewUI_VerticalButton extends LenheartNewUI_CommonUi { + State = 0; + BaseIdx = 29; + DHeight = null; // 改为高度 + Path = "interface/lenheartwindowcommon.img"; + Idx = 172; + FillHeight = 2; // 改为填充高度 + FirstHeight = 28; // 改为首节高度 + Width = 24; // 固定宽度,垂直按钮宽度通常是固定的 + + constructor(X, Y, H) { + this.DHeight = H; + LenheartNewUI_CommonUi.constructor(X, Y, 24, H + 28 * 2); // 宽度固定,高度动态 + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + //不可用 + if (State == 8) { + L_sq_Draw3Image_Vertical(X + 1, Y, this.Width, this.DHeight, Path, Idx + 9, FillHeight, FirstHeight); + } else { + //按下 + if (isLBDown) { + L_sq_Draw3Image_Vertical(X + 1, Y, this.Width, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight); + } + //悬停 + else if (isInRect) { + L_sq_Draw3Image_Vertical(X, Y, this.Width, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight); + } + //普通 + else { + L_sq_Draw3Image_Vertical(X, Y, this.Width, this.DHeight, Path, Idx, FillHeight, FirstHeight); + } + } + } +} + + +class LenheartNewUI_ButtonText extends LenheartNewUI_Button { + TextStr = null; + TextX = null; + TextY = null; + TextColor = null; + TextRColor = null; + + TextXoffset = null; + TextYoffset = null; + + constructor(X, Y, W, Str) { + LenheartNewUI_Button.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(obj) { + LenheartNewUI_Button.Show(obj); + 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 LenheartNewUI_BaseInput extends LenheartNewUI_CommonUi { + State = 0; + InputState = 0; + DWidth = null; + str = ""; + sliceCode = "|"; + BaseTime = 0; + InputController = null; + CallBack = null; + + constructor(X, Y, W, H) { + this.DWidth = W; + LenheartNewUI_CommonUi.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 Show(obj) { + //光标闪烁 + 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); + this.OnClick = function() { + 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") { + local oldStr = str; + str = StrBuf; + if (CallBack) CallBack(this, oldStr); + } else { + InputController = null; + InputState = 0; + } + } + } + + function SetStr(Value) { + L_sq_SetInputBoxStr(InputController, Value); + } +} + +//复选框 +class LenheartNewUI_SwitchButton extends LenheartNewUI_CommonUi { + State = 0; + ImgIndex = null; + ImgPath = "interface/lenheartwindowcommon.img"; + + constructor(X, Y) { + LenheartNewUI_CommonUi.constructor(X, Y, 14, 15); + } + + function Show(obj) { + //不可用 + if (State == 8) { + L_sq_DrawImg(ImgPath, ImgIndex ? ImgIndex + 3 : 141, X, Y + 1); + } else { + //悬停 + if (isLBDown) { + L_sq_DrawImg(ImgPath, ImgIndex ? ImgIndex + 2 : 140, X, Y + 1); + } + //按下 + else if (isInRect) { + if (State == 0) + L_sq_DrawImg(ImgPath, ImgIndex ? ImgIndex + 1 : 139, X, Y); + if (State == 1) + L_sq_DrawImg(ImgPath, ImgIndex ? ImgIndex + 2 : 140, X, Y); + } + //普通 + else { + if (State == 0) + L_sq_DrawImg(ImgPath, ImgIndex ? ImgIndex : 138, X, Y); + if (State == 1) + L_sq_DrawImg(ImgPath, ImgIndex ? ImgIndex + 2 : 140, X, Y); + + } + } + } +} + +class LenheartNewUI_SwitchButtonText extends LenheartNewUI_SwitchButton { + + TextStr = null; + TextX = 0; + TextY = 0; + TextColor = null; + TextRColor = null; + + + constructor(X, Y, Str) { + LenheartNewUI_SwitchButton.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(obj) { + LenheartNewUI_SwitchButton.Show(obj); + 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 LenheartNewUI_Tabbars extends LenheartNewUI_CommonUi { + State = 0; + Path = "interface/lenheartwindowcommon.img"; + Idx = 29; + + constructor(X, Y, ...) { + if (vargc == 2) { + LenheartNewUI_CommonUi.constructor(X, Y, vargv[0], vargv[1]); + } else { + LenheartNewUI_CommonUi.constructor(X, Y, 61, 19); + } + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + //不可用 + 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 LenheartNewUI_TabbarsText extends LenheartNewUI_Tabbars { + TextStr = null; + TextX = null; + TextY = null; + TextColor = null; + TextRColor = null; + + TextXoffset = null; + TextYoffset = null; + + constructor(X, Y, Str, ...) { + if (vargc == 2) { + LenheartNewUI_Tabbars.constructor(X, Y, vargv[0], vargv[1]); + } else { + LenheartNewUI_Tabbars.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(obj) { + LenheartNewUI_Tabbars.Show(obj); + 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 Yosin_DragButton extends LenheartNewUI_CommonUi { + State = 0; + DHeight = null; // 改为高度 + Path = "interface/lenheartwindowcommon.img"; + Idx = 172; + FillHeight = 2; // 改为填充高度 + FirstHeight = 7; // 改为首节高度 + Width = 9; // 固定宽度,垂直按钮宽度通常是固定的 + Visible = true; + DeBugMode = false; + + BasePos = null; + MoveFlag = false; + //鼠标相对位置 + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + Move_Value = 0; + Max_Move_Value = 0; + + CurrentMovePosY = 0; + + //当前滚动值 + CurrentScrollValue = 0.0; + + OnChange = null; + + constructor(X, Y, H) { + this.DHeight = H; + LenheartNewUI_CommonUi.constructor(X, Y, Width, H + 7 * 2); // 宽度固定,高度动态 + + BasePos = { + x = X, + y = Y + } + + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show(obj) { + //不可用 + if (State == 8) { + L_sq_Draw3Image_Vertical(X + 1, Y, this.DHeight, Path, Idx + 9, FillHeight, FirstHeight); + } else { + //按下 + if (isLBDown) { + L_sq_Draw3Image_Vertical(X, Y + 1, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight); + } + //悬停 + else if (isInRect) { + L_sq_Draw3Image_Vertical(X, Y, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight); + } + //普通 + else { + L_sq_Draw3Image_Vertical(X, Y, this.DHeight, Path, Idx, FillHeight, FirstHeight); + } + } + } + + + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + LenheartNewUI_CommonUi.OnMouseLbDown(MousePos_X, MousePos_Y); + + if (isInRect) { + MoveFlag = true; + M_Xpos = MousePos_X; //原始鼠标位置数据 + M_Ypos = MousePos_Y; + B_X = X; //原始窗口位置 + B_Y = Y; + } + } + + //鼠标事件回调 + function OnMouseProc(Flag, MousePos_X, MousePos_Y) { + LenheartNewUI_CommonUi.OnMouseProc(Flag, MousePos_X, MousePos_Y); + + //移动 + if (MoveFlag) { + Move_Value = MousePos_Y - M_Ypos + CurrentMovePosY; + if (Move_Value > 0 && Move_Value <= Max_Move_Value) { + Y = (Move_Value); + Localtion_Y = (BasePos.y + Move_Value); + if (OnChange) { + local Rate = Move_Value.tofloat() / Max_Move_Value.tofloat(); + CurrentScrollValue = format("%.2f", Rate).tofloat(); + OnChange(CurrentScrollValue); + } + } + } + } + + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + LenheartNewUI_CommonUi.OnMouseLbUp(MousePos_X, MousePos_Y); + MoveFlag = false; + if (Move_Value< 0) Move_Value = 0; + if (Move_Value > Max_Move_Value) Move_Value = Max_Move_Value; + CurrentMovePosY = Move_Value; //记录当前移动位置 + } + + //设置最大移动值 + function SetMaxMoveValue(Value) { + Max_Move_Value = Value; + } + + //设置滚动回调函数 + function SetOnChange(OnChange) { + this.OnChange = OnChange; + } + + //设置滚动步进 + function SetStep(Step) { + // 计算新的移动值 + local newValue = CurrentMovePosY + (Step * Max_Move_Value).tointeger(); + + // 边界检查 + if (newValue< 0) newValue = 0; + if (newValue > Max_Move_Value) newValue = Max_Move_Value; + + // 更新位置 + Move_Value = newValue; + CurrentMovePosY = newValue; + Localtion_Y = BasePos.y + newValue; + // 更新并回调滚动值 + if (OnChange) { + local Rate = Move_Value.tofloat() / Max_Move_Value.tofloat(); + CurrentScrollValue = format("%.2f", Rate).tofloat(); + OnChange(CurrentScrollValue); + } + } + + //重置 + function Reset() { + Move_Value = 0; + CurrentMovePosY = 0; + Localtion_Y = BasePos.y; + // 更新并回调滚动值 + if (OnChange) { + local Rate = Move_Value.tofloat() / Max_Move_Value.tofloat(); + CurrentScrollValue = format("%.2f", Rate).tofloat(); + OnChange(CurrentScrollValue); + } + } +} + +class Yosin_ScrollBar { + + //上按钮 + UpButton = null; + //下按钮 + DownButton = null; + //滑动按钮 + ScrollButton = null; + //点击时步进的Y轴值 + Step = 0.0; + + Parent = null; + + constructor(X, Y, H, Sbtn_H) { + + + ScrollButton = Yosin_DragButton(X, Y + 13, Sbtn_H); + ScrollButton.SetFrame("interface/lenheartwindowcommon.img", 184); + //减去按钮高度 加滚动条长度加滚动条上下拼接长度15 加滚动条最大高度 + ScrollButton.SetMaxMoveValue(H - 26 - ScrollButton.Height); + + UpButton = LenheartNewUI_BaseButton(X, Y, 9, 13, "interface/lenheartwindowcommon.img", 16); + UpButton.OnClick = function() { + DoStep(-1); + }.bindenv(this); + + DownButton = LenheartNewUI_BaseButton(X, Y + H - 13, 9, 13, "interface/lenheartwindowcommon.img", 22); + DownButton.OnClick = function() { + DoStep(1); + }.bindenv(this); + } + + function DoStep(Flag) { + ScrollButton.SetStep(Step * Flag); + } + + function SetParent(Ui) { + Parent = Ui; + Ui.AddChild(UpButton); + Ui.AddChild(ScrollButton); + Ui.AddChild(DownButton); + } + + function RemoveSelf() { + for (local i = 0; i< Parent.Childrens.len(); i++) { + local obj = Parent.Childrens[i]; + if (obj == UpButton || obj == ScrollButton || obj == DownButton) { + Parent.Childrens.remove(i); + i--; + } + } + } + + function SetDebugModel(Flag) { + UpButton.DeBugMode = Flag; + ScrollButton.DeBugMode = Flag; + DownButton.DeBugMode = Flag; + } + + function SetOnChange(Func) { + ScrollButton.SetOnChange(Func); + } + + function SetStep(value) { + Step = value; + } + + function Reset() { + ScrollButton.Reset(); + } + +} \ No newline at end of file diff --git a/CSBase/UI/OldWindowsMap.nut b/CSBase/UI/OldWindowsMap.nut new file mode 100644 index 0000000..80f1567 --- /dev/null +++ b/CSBase/UI/OldWindowsMap.nut @@ -0,0 +1,52 @@ +/* +文件名:OldWindowsMap.nut +路径:Base/UI/OldWindowsMap.nut +创建日期:2024-08-06 18:56 +文件用途:用于查询是否鼠标悬停在原生窗口上的Flag 以下编号代表着没有悬停其他均为悬停在原生窗口 +*/ +NotOldWindowsMap <- {} +NotOldWindowsMap.rawset(92, 1); +NotOldWindowsMap.rawset(79, 1); +NotOldWindowsMap.rawset(2395, 1); +NotOldWindowsMap.rawset(2396, 1); +NotOldWindowsMap.rawset(3877, 1); +NotOldWindowsMap.rawset(3878, 1); +NotOldWindowsMap.rawset(3873, 1); +NotOldWindowsMap.rawset(3874, 1); +NotOldWindowsMap.rawset(3858, 1); +NotOldWindowsMap.rawset(3871, 1); +NotOldWindowsMap.rawset(3857, 1); +NotOldWindowsMap.rawset(3861, 1); +NotOldWindowsMap.rawset(3862, 1); +NotOldWindowsMap.rawset(93, 1); +NotOldWindowsMap.rawset(94, 1); +NotOldWindowsMap.rawset(95, 1); +NotOldWindowsMap.rawset(96, 1); +NotOldWindowsMap.rawset(97, 1); +NotOldWindowsMap.rawset(98, 1); +NotOldWindowsMap.rawset(99, 1); +NotOldWindowsMap.rawset(100, 1); +NotOldWindowsMap.rawset(101, 1); +NotOldWindowsMap.rawset(114, 1); +NotOldWindowsMap.rawset(88, 1); +NotOldWindowsMap.rawset(102, 1); +NotOldWindowsMap.rawset(108, 1); +NotOldWindowsMap.rawset(109, 1); +NotOldWindowsMap.rawset(103, 1); +NotOldWindowsMap.rawset(104, 1); +NotOldWindowsMap.rawset(110, 1); +NotOldWindowsMap.rawset(111, 1); +NotOldWindowsMap.rawset(105, 1); +NotOldWindowsMap.rawset(106, 1); +NotOldWindowsMap.rawset(112, 1); +NotOldWindowsMap.rawset(113, 1); +NotOldWindowsMap.rawset(107, 1); +NotOldWindowsMap.rawset(87, 1); +NotOldWindowsMap.rawset(86, 1); +NotOldWindowsMap.rawset(80, 1); +NotOldWindowsMap.rawset(81, 1); +NotOldWindowsMap.rawset(82, 1); +NotOldWindowsMap.rawset(83, 1); +NotOldWindowsMap.rawset(4067, 1); +NotOldWindowsMap.rawset(122, 1); +NotOldWindowsMap.rawset(120, 1); \ No newline at end of file diff --git a/CSBase/_ENUM/_ENUM_.nut b/CSBase/_ENUM/_ENUM_.nut new file mode 100644 index 0000000..0aadf47 --- /dev/null +++ b/CSBase/_ENUM/_ENUM_.nut @@ -0,0 +1,426 @@ +/* +文件名:_ENUM_KEY.nut +路径:Base/_ENUM/_ENUM_KEY.nut +创建日期:2024-08-06 22:09 +文件用途:按键枚举类 +*/ +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 */ +FFI_FIRST_ABI <- 0; +FFI_SYSV <- 1; +FFI_STDCALL <- 2; +FFI_THISCALL <- 3; +FFI_FASTCALL <- 4; +FFI_MS_CDECL <- 5; +FFI_PASCAL <- 6; +FFI_REGISTER <- 7; + + +function Sq_L_Medal(x, y) {} + +function Sq_SettingWindowCallBack(x, y) {} + +function Sq_BuffSwitchingCallBack(x, y) {} + +function Sq_SwitchingCallBack(x, y) {} + +function Sq_UpgradeCallBack(x, y) {} + +function Sq_RecoveryCallBack(x, y) {} + +function Sq_RecoveryTypeSetCallBack(Type) {} + +function Sq_DrawMainMaxLayerCustomUI(pack) {} + +function Lenheart(VmTop) {} + +function Sq_MouseEventCallBack(Lb, Rb, Mb) {} + +function Sq_SelectCharacter(Chunk) {} + +function Sq_DrawMainTopLayerCustomUI(pack) {} + +function Sq_GetExeStr_Event(StrIndex) { + return StrIndex; +} + +function Sq_CreatChr(chunk) {} + +function Sq_SendPackType_Event(Type) {} + +function Sq_SendPackByte_Event(Parm) {} + +function Sq_SendPackWord_Event(Parm) {} + +function Sq_SendPackDWord_Event(Parm) {} + +function Sq_SendPackChar_Event(Parm) {} + +function Sq_SendPack_Event() {} + +function Sq_DrawItemBack(Xpos, Ypos, Image) {} + +function Sq_DrawItemFront(Xpos, Ypos, Image) {} + +function Sq_GetDrawMonBloodSw() { + return false; +} + +function Sq_DrawMonsterBlood(Object, X, Y) {} + +function Sq_Set_Inventory_M_Pos(This) {} + +function Sq_Get_Ex_IntData(SkillAddress, Idx, objAddress) { + return 0; +} + +function Sq_Get_Ex_SkillCoolTime(SkillAddress, Idx, objAddress) { + return 0; +} + +function Sq_Get_Ex_LevelData(SkillAddress, Idx, objAddress) { + return 0; +} + +function Sq_PlayerEachPos(x, y) {} + +function Sq_DrawMainMaxLayerCustomUI(pack) {} + +function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type, A8, A9) { + return true; +} + +function Sq_PushDamageData(ObjAddress, MySelfAddress, Value); + +function Sq_Pack_Control(chunk) {} + +function Sq_MessageWindowDraw(a, c) {} + +function Sq_Get_Event_Pos_X() { + return 1; +} + +function Sq_Get_Event_Pos_Y() { + return 1; +} + +function Sq_L_OtherPlayerInfo(x, y, Type, Value, ImgBuf) { + local str = Value.tostring(); + local lenght = L_sq_GetStringDrawLength(str); + L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5); + return Value; +} + +function Sq_DrawMiniMapUI(a) {} + +function Sq_CompleteTask(a1, a2, a3) {} + +function L_drawMainCustomUI_All() {} + +function L_MouseCallBack(a, b, c, d) {} + +function L_DrawWindow_A() {} + +function L_DrawWindow_B() {} + +function L_OpenOldWindowCallBack(WindowIndex) {} + +function L_Old_Window_Get(WindowObject) {} + +function L_Character_Info_Window(WindowObject) { + return false; +} + +function L_Other_Character_Info_Window(WindowObject) { + return false; +} + +function L_Old_Window_Visible(WindowObject, Flag) {} + + +getroottable().LenheartBaseFuncTab <- {}; +getroottable().LenheartFuncTab <- {}; +getroottable().Rindro_Scr_Width <- L_sq_RA(0x4D848E); +getroottable().Rindro_Scr_High <- L_sq_RA(0x4D8495); + +//获取装备偏移 +function Rindro_GetEquAddr(addr) { + switch (addr) { + case 1: + return 0x3038; + break; + case 2: + return 0x304C; + break; + case 3: + return 0x3048; + break; + case 4: + return 0x3050; + break; + case 5: + return 0x3044; + break; + case 6: + return 0x3040; + break; + case 7: + return 0x3058; + break; + case 8: + return 0x305C; + break; + case 9: + return 0x3054; + break; + case 10: + return 0x3060; + break; + case 11: + return 0x3064; + break; + case 12: + return 0x303c; + break; + + + case 13: //帽子 + return 0x3010; + break; + case 14: //头部 + return 0x3014; + break; + case 15: //脸 + return 0x3018; + break; + case 16: + return 0x301c; + break; + case 17: + return 0x3020; + break; + case 18: + return 0x3024; + break; + case 19: + return 0x3028; + break; + case 20: + return 0x302c; + break; + case 21: + return 0x3030; + break; + case 22: + return 0x3034; + break; + case 23: + return 0x3030; + break; + case 24: + return 0x3068; + break; + case 25: + return 0x306C; + break; + case 26: + return 0x3070; + break; + case 27: + return 0x3074; + break; + } + return -1; +} + +//本地模式 +if(!getroottable().rawin("RINDROLOCAL"))RINDROLOCAL <- false; + +function deepcopy(obj) { + local copies = {}; // 用于跟踪已拷贝对象的表 + return _deepcopy(obj, copies); +} + +function _deepcopy(obj, copies) { + local type = typeof obj; + + // 处理基本类型 + if (type != "table" && type != "array" && type != "class" && type != "instance") { + return obj; + } + + // 处理循环引用 + if (obj in copies) { + return copies[obj]; + } + + // 创建新容器 + local newObj; + if (type == "array") { + newObj = array(obj.len()); + copies[obj] <- newObj; // 在拷贝前记录 + + for (local i = 0; i < obj.len(); i++) { + newObj[i] = _deepcopy(obj[i], copies); + } + } + else if (type == "table") { + newObj = {}; + copies[obj] <- newObj; // 在拷贝前记录 + + foreach(key, val in obj) { + // 键也需要深拷贝 + local newKey = _deepcopy(key, copies); + local newVal = _deepcopy(val, copies); + newObj[newKey] <- newVal; + } + } + else { // 类和实例(浅拷贝) + newObj = obj; + copies[obj] <- newObj; + } + + return newObj; +} \ No newline at end of file diff --git a/CSBase/_Tool/Animation_Class.nut b/CSBase/_Tool/Animation_Class.nut new file mode 100644 index 0000000..f28252d --- /dev/null +++ b/CSBase/_Tool/Animation_Class.nut @@ -0,0 +1,545 @@ +/* +文件名:Animation_Class.nut +路径:Base/_Tool/Animation_Class.nut +创建日期:2024-10-21 16:57 +文件用途:动画类 +*/ +class Rindro_Animation { + + //Ani是否可用 + IsUsability = true; + + //当前帧数 + CurrentFrameIndex = 0; + //当前帧时间 + CurrentIndexT = 0; + //当前帧 + CurrentFrame = null; + + //Ani的标签 + AnimationFlag = null; + //图片对象数组 + PngList = null; + //帧对象数组 + FrameList = null; + + //附加选项 + AdditionalOptions = null; + + //角度 + Angle = 0; + + + constructor(Data, ...) { + PngList = []; + FrameList = []; + + //附加选项 + if (vargc > 0) AdditionalOptions = vargv[0]; + + //初始化数据 + InitData(Data); + } + + + function InitData(Data) { + local Buf; + + if (type(Data) == "table") { + Buf = Data; + } + //从PVF数据加载 + else if (type(Data) == "string") { + local ReadObject = R_Utils.GetScriptFileReader(Data); + if (ReadObject) { + Buf = Rindro_Script.ReadAnimation(ReadObject); + } + } + + if (Buf) { + AnimationFlag = Buf.Flag; + FrameList = Buf.Frame; + foreach(FrameObj in FrameList) { + //如果有附加处理 格式化 + if (AdditionalOptions && AdditionalOptions.rawin("ImgFormat")) FrameObj.Img_Path = AdditionalOptions["ImgFormat"](FrameObj.Img_Path); + local Png = Rindro_Image.Load(FrameObj.Img_Path); + // Png.Draw(-500, -500); + + //如果有附加处理 坐标 + if (AdditionalOptions && AdditionalOptions.rawin("Pos")) { + FrameObj.Pos.x += AdditionalOptions["Pos"].x; + FrameObj.Pos.y += AdditionalOptions["Pos"].y; + } + // Spritebuf.SetPosition(FrameObj.Pos); + + PngList.append(Png); + } + } else { + AnimationFlag = {}; + FrameList.append({ + AttackBox = [], + DamageBox = [], + Delay = 800, + Flag = {}, + Img_Index = 0, + Img_Path = "", + Pos = { + x = -248, + y = -331 + } + }) + + // print(Data); + // print("创建Ani失败,找不到Ani数据"); + } + } + + + //重置Ani + function Reset() { + IsUsability = true; + FlushFrame(0); + } + + //获取当前帧信息 + function GetCurrentFrameInfo() { + return FrameList[CurrentFrameIndex]; + } + + function FlushFrame(Index) { + if (PngList.len() <= 0) return; + //同步当前帧 + CurrentFrameIndex = Index; + //当前帧更换为本帧 + CurrentFrame = PngList[CurrentFrameIndex]; + + local FlagBuf = FrameList[CurrentFrameIndex].Flag; + //关键帧 + if ("SET_FLAG" in FlagBuf) { + // if (StateMachine && StateMachine.State != -1) StateMachine.ChangeAniKeyFlag(FlagBuf.SET_FLAG); + } + //播放音效 + if ("PLAY_SOUND" in FlagBuf) { + R_Utils.PlaySound(FlagBuf.PLAY_SOUND); + } + } + + //绘制 + function DrawFrame(X, Y) { + + // local NowDrawPng = CurrentFrame; + if (FrameList.len() <= 0) return; + local FrameObj = FrameList[CurrentFrameIndex]; + // printT(FrameObj); + + + //坐标偏移 + local XOffset = FrameObj.Pos.x; + local YOffset = FrameObj.Pos.y; + + //染色 + local RGBA = sq_RGBA(255, 255, 255, 255); + if ("RGBA" in FrameObj.Flag) { + local Fbuf = FrameObj.Flag.RGBA; + RGBA = sq_RGBA(Fbuf[0].tointeger(), Fbuf[1].tointeger(), Fbuf[2].tointeger(), Fbuf[3].tointeger()); + } + + //缩放 + local XRate = 1.0; + local YRate = 1.0; + if ("IMAGE_RATE" in FrameObj.Flag) { + local Fbuf = FrameObj.Flag.IMAGE_RATE; + XRate = Fbuf.x; + YRate = Fbuf.y; + } + + //线性减淡 + if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) { + L_sq_SetDrawImgModel(2, 0); + } + + if (CurrentFrame) CurrentFrame.DrawExPng(FrameObj.Img_Index, X + XOffset, Y + YOffset, Angle, RGBA, XRate, YRate); + + //线性减淡 + if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) { + L_sq_ReleaseDrawImgModel(); + } + } + + + function Draw(X, Y) { + //可用性检查 + if (IsUsability) { + DrawFrame(X, Y); + //累加当前帧时间 + CurrentIndexT += Rindro_Duration; + + //当前帧时间 超过 当前帧延迟就需要切换帧了 + if ("Delay" in FrameList[CurrentFrameIndex] && CurrentIndexT >= FrameList[CurrentFrameIndex].Delay) { + CurrentIndexT = 0; + //如果当前帧小于总帧数就切换 + if (CurrentFrameIndex<(FrameList.len() - 1)) { + FlushFrame(CurrentFrameIndex + 1); + } + //说明播放完毕了 + else { + //如果有循环 + if ("LOOP" in AnimationFlag) { + FlushFrame(0); + } + //没有循环触发状态机回调 + else { + //将不再可用 + IsUsability = false; + } + } + } + } + } + + function DrawIndex(X, Y, Index) { + // return; + if (IsUsability) { + FlushFrame(Index); + DrawFrame(X, Y); + } + } +} + + +//绘制角色类 +class Rindro_Draw_Character { + + //名字 + Name = null; + //职业 + Job = null; + + //绘制体信息 + DrawInfo = null; + + //隐藏图层Map + HideMap = null; + + + ENUM_RINDRO_JOB_NAME = ["swordman", "fighter", "gunner", "mage", "priest", "atgunner", "thief", "atfighter", "atmage", "demonicswordman", "creatormage"]; + ENUM_RINDRO_JOB_TITLE_HEIGHT = [ + //男鬼剑士 + { + x = -42, + y = -154 + }, + //女格斗 + { + x = -42, + y = -140 + }, + //男神枪手 + { + x = -44, + y = -168 + }, + //女魔法师 + { + x = -46, + y = -126 + }, + //男圣职者 + { + x = -46, + y = -166 + }, + //女神枪手 + { + x = -42, + y = -156 + }, + //女暗夜使者 + { + x = -44, + y = -154 + }, + //男格斗家 + { + x = -45, + y = -160 + }, + //男魔法师 + { + x = -45, + y = -140 + }, + //黑暗武士 + { + x = -42, + y = -154 + }, + //缔造者 + { + x = -46, + y = -126 + }, + ]; + + ENUM_RINDRO_JOB_FACE_HEIGHT = [ + //男鬼剑士 + { + x = 11, + y = 111 + }, + //女格斗 + { + x = 9, + y = 103 + }, + //男神枪手 + { + x = 13, + y = 131 + }, + //女魔法师 + { + x = 14, + y = 87 + }, + //男圣职者 + { + x = 16, + y = 126 + }, + //女神枪手 + { + x = 11, + y = 119 + }, + + //女暗夜使者 + { + x = 12, + y = 115 + }, + //男格斗家 + { + x = 13, + y = 119 + }, + //男魔法师 + { + x = 13, + y = 101 + }, + //黑暗武士 + { + x = -42, + y = -154 + }, + //缔造者 + { + x = -46, + y = -126 + }, + ]; + + + //获取角色AniBy装备 + function GetCharacAniByEqu(Job, Equ, AniName) { + local AniList = []; + foreach(value in Equ) { + if (value > 0) { + local ListBuf = CreateEquipmentAni(value, Job, AniName); + AniList.extend(ListBuf); + } + } + local n = AniList.len(); + for (local i = 0; i< n - 1; i++) { + for (local j = i + 1; j< n; j++) { + if (AniList[i].Layer > AniList[j].Layer) { + // 交换两个元素 + local temp = AniList[i]; + AniList[i] = AniList[j]; + AniList[j] = temp; + } + } + } + return AniList; + } + + function CreateEquipmentAni(Index, Job, AniName) { + local AniList = []; + //获取装备或时装的文件路径 + local FilePath = R_Utils.GetEquPath(Index); + if (FilePath) { + local ReadObject = R_Utils.GetScriptFileReader("equipment/" + FilePath); + if (ReadObject) { + local Equ = Rindro_Script.ReadEquipment(ReadObject); + //职业名字 + local JobName = ENUM_RINDRO_JOB_NAME[Job]; + //没有装备类型 + if (!(Equ.rawin("equipment_type"))) Equ.equipment_type <- "normal"; + //光环单独处理 其他的在下面处理 + if (Equ.equipment_type == "aurora avatar") { + foreach(Path in Equ.Aurora.Back) { + // local AniBuf = Rindro_Animation(Path); + AniList.append({ + Ani = Path, + AniName = Path + Clock(), + Layer = -10000, + DrawType = "Native" + }); + } + foreach(Path in Equ.Aurora.Front) { + // local AniBuf = Rindro_Animation(Path); + AniList.append({ + Ani = Path, + AniName = Path + Clock(), + Layer = 10000, + DrawType = "Native" + }); + } + } + //称号 + else if (Equ.equipment_type == "title name") { + local PathBuf = "equipment/" + FilePath; + PathBuf = PathBuf.slice(0, R_Utils.String.FindLastSubstring(PathBuf, "/")); + local Path = PathBuf + "/" + Equ.custom_animation; + local Ao = { + Pos = ENUM_RINDRO_JOB_TITLE_HEIGHT[Job] + } + local AniBuf = Rindro_Animation(Path, Ao); + AniList.append({ + Ani = AniBuf, + Layer = 10001, + }); + } + + //没有Ani 就那种透明时装 + if (!(Equ.rawin("Ani_" + JobName))) return AniList; + + //记录时装的隐藏图层值 + if (Equ.rawin("hidelayer")) { + foreach(value in Equ["hidelayer"]) { + HideMap.rawset(value, true); + } + } + + //读取Ani配置 + local AniScript = Equ["Ani_" + JobName]; + // printT(AniScript); + if (Equ.equipment_type == "skin avatar") { + local Path; + if (JobName.find("at") >= 0) { + Path = format("character/%s/atanimation/%s", JobName.slice(2), AniName); + } else Path = format("character/%s/animation/%s", JobName, AniName); + local Ao = { + ImgVariation = AniScript.variation, + ImgFormat = function(ImgPath) { + if (ImgVariation[0] > 0) { + local Pos = ImgPath.find("%04d"); + ImgPath = ImgPath.slice(0, Pos) + "%02d%02d" + ImgPath.slice(Pos + 4); + return format(ImgPath, ImgVariation[0], ImgVariation[1]); + } else { + return format(ImgPath, ImgVariation[1]); + } + } + } + local AniBuf = Rindro_Animation(Path, Ao); + AniList.append({ + Ani = AniBuf, + Layer = -1, + }); + } else { + foreach(Info in AniScript.layer_variation) { + local PathBuf = "equipment/" + FilePath; + PathBuf = PathBuf.slice(0, R_Utils.String.FindLastSubstring(PathBuf, "/")); + local Path = PathBuf + "/" + Info.Path + "/" + AniName; + local Ao = { + ImgVariation = AniScript.variation, + ImgFormat = function(ImgPath) { + return format(ImgPath, ImgVariation[0], ImgVariation[1]); + } + } + local AniBuf = Rindro_Animation(Path, Ao); + AniList.append({ + Ani = AniBuf, + Layer = Info.Zorder, + }); + } + } + } + } + return AniList; + } + + constructor(Job, EquipmentArr, Action, Name) { + HideMap = {}; + DrawInfo = GetCharacAniByEqu(Job, EquipmentArr, Action); + this.Job = Job; + this.Name = Name; + } + + function Draw(X, Y) { + foreach(AniInfo in DrawInfo) { + // print(AniInfo.Layer); + if (!HideMap.rawin(AniInfo.Layer)) { + if (!AniInfo.rawin("DrawType") || AniInfo["DrawType"] != "Native") { + AniInfo.Ani.Draw(X, Y); + } else { + Rindro_BaseToolClass.DrawAniEx(X, Y, AniInfo.Ani, AniInfo.AniName); + } + } + } + + if (Name) { + L_sq_DrawCode(Name, 44 + X + ENUM_RINDRO_JOB_TITLE_HEIGHT[Job].x - (LenheartTextClass.GetStringLength(Name) / 2), Y + ENUM_RINDRO_JOB_TITLE_HEIGHT[Job].y + 24, sq_RGBA(255, 255, 255, 250), 1, 1); + } + } + + function DrawFace(X, Y) { + //兼容模式 + if (getroottable().PluginsCompatibilityModeCallBack){ + return; + } + setClip(X, Y, X + 22, Y + 18); //开始裁切 + foreach(AniInfo in DrawInfo) { + try { + AniInfo.Ani.DrawIndex(X + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].x, Y + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].y, 0); + } catch (exception) { + + } + } + releaseClip(); //裁切结束 + } +} +//鬼剑士 +//601580026 101550559 +// Sassq <- {}; +// Sassq[0] <- Rindro_Draw_Character(0, [ +// 601550071, +// 601560067, +// 601570062, +// 601500069, +// 601510068, +// 601540069, +// 601520061, +// 601530060, +// 601580026, +// 0, +// 27610, +// 26058 +// ], "rest.ani", "鬼剑士-Kina") +// //格斗家 +// Sassq[1] <- Rindro_Draw_Character(1, [26373, 102550540, 102560700, 102570504, 102520514, 102500742, 102510739, 102540664, 102580139, 102530474], "rest.ani", "Kina") +// //神枪手 +// Sassq[2] <- Rindro_Draw_Character(2, [26373, 104550553, 104560725, 104570492, 104520541, 104500750, 104510913, 104540671, 104580148, 104530494], "rest.ani", "Kina") +// //魔法师 +// Sassq[3] <- Rindro_Draw_Character(3, [26373, 106550521, 106560580, 106570446, 106520529, 106500603, 106510607, 106540583, 106580143, 106530461], "rest.ani", "Kina") +// //圣职者 +// Sassq[4] <- Rindro_Draw_Character(4, [26373, 108550600, 108560591, 108570687, 108520580, 108500587, 108510590, 108540562, 108580138, 108530560], "rest.ani", "Kina") +// //女枪 +// Sassq[5] <- Rindro_Draw_Character(5, [26373, 105550431, 105560424, 105570386, 105520415, 105500424, 105510429, 105540408, 105580144, 105530361], "rest.ani", "Kina") +// //暗夜 +// Sassq[6] <- Rindro_Draw_Character(6, [26373, 109550385, 109560393, 109570369, 109520406, 109500402, 109510414, 109540389, 109580134, 109530355], "rest.ani", "Kina") +// //男格斗 +// Sassq[7] <- Rindro_Draw_Character(7, [26373, 103550302, 103560311, 103570274, 103520297, 103500297, 103510301, 103540284, 103580128, 103530246], "rest.ani", "Kina") +// //男法 +// Sassq[8] <- Rindro_Draw_Character(8, [26373, 107550220, 107560223, 107570188, 107520224, 107500233, 107510231, 107540209, 107580129, 107530192], "rest.ani", "Kina") \ No newline at end of file diff --git a/CSBase/_Tool/BaseTool_Class.nut b/CSBase/_Tool/BaseTool_Class.nut new file mode 100644 index 0000000..20e9fe9 --- /dev/null +++ b/CSBase/_Tool/BaseTool_Class.nut @@ -0,0 +1,516 @@ +/* +文件名:BaseTool_Class.nut +路径:Base/_Tool/BaseTool_Class.nut +创建日期:2024-08-06 23:49 +文件用途:基础工具类 +*/ + +function printT(T) { + Sq_OutPutTable(Json.Encode(T)); +} +//Json类 +class Json { + function Encode(Table) { + + local JsonObj = JSONEncoder(); + return JsonObj.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 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(); + + local JsonObj = JSONParser(); + return JsonObj.parse(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_getMyCharacter(); + 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_getMyCharacter(); + obj = sq_GetCNRDObjectToActiveObject(obj); + if (KeyPressNB.KeyDown(obj, KeyValue, VarKey)) { + return true; + } + KeyPressNB.KeyUp(obj, KeyValue, VarKey); + } +} +//基础工具类 +class Rindro_BaseToolClass { + + function IsNumber(value) { + try { + local Buffer = value.tointeger(); + return true; + } catch (exception) { + return false; + } + } + + function GetItemNameById(ItemId) { + local ItemObject = L_sq_GetItem(ItemId); + local NamePointer = L_sq_RA(ItemObject + 0x20); + local ItemName = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString(); + return ItemName; + } + + 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(); + } + + function RegisterPack(Id, CallBack) { + Pack_Control.rawset(Id, CallBack); + } + + function RegisterHexPack(Id, CallBack) + { + Pack_Hex_Control.rawset(Id, CallBack); + } + + //绘制简易静态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; + } + + //超简易绘制动态Ani + function DrawAniEx(X, Y, AniPath, ...) { + local AniName = "简易播放Ani:" + AniPath; + if (vargc > 0) AniName = vargv[0]; + local obj = sq_getMyCharacter(); + local ani = obj.getVar().GetAnimationMap(AniName, AniPath); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, X, Y, true); + return ani; + } + + + + //初始化根表成员 + function InitClass(Name) { + local RootTab = getroottable(); + if (RootTab.rawin(Name) == true) { + RootTab.rawdelete(Name); + } + } + + //获取交互Npc名称 + function GetEachNpcId() { + local OneAddress = L_sq_RA(0x1ADE0E0); + if (OneAddress) { + local TowAddress = L_sq_RA(OneAddress + 8); + if (TowAddress) { + local Id = L_sq_RA(TowAddress + 0x210); + return Id; + } + } + return null; + } + + function DrawTriptych(X, Y, Width, Img, StartIndex) { + //如果没有载入img就载入 + if (!Rindro_Image_GlobalMap.rawin(Img)) { + Rindro_Image_GlobalMap[Img] <- Rindro_Image(Img); + } + Rindro_Image_GlobalMap[Img].DrawPng(StartIndex, X, Y); + //获取第一张图片的宽 + local FirstW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex).GetWidth(); + //获取中间的图片宽 + local MiddleW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 1).GetWidth(); + //获得最后一张图片的宽 + local LastW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 2).GetWidth(); + //绘制中间 + Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 1, X + FirstW, Y, 0, sq_RGBA(255, 255, 255, 250), (Width - LastW - FirstW).tofloat() / MiddleW, 1.0); + //绘制最后一张 + Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 2, X + Width - LastW, Y); + } + + function DrawTriptychDetail(X, Y, Width, Img, Fi, Mi, La) { + //如果没有载入img就载入 + if (!Rindro_Image_GlobalMap.rawin(Img)) { + Rindro_Image_GlobalMap[Img] <- Rindro_Image(Img); + } + Rindro_Image_GlobalMap[Img].DrawPng(Fi, X, Y); + //获取第一张图片的宽 + local FirstW = Rindro_Image_GlobalMap[Img].GetPng(Fi).GetWidth(); + //获取中间的图片宽 + local MiddleW = Rindro_Image_GlobalMap[Img].GetPng(Mi).GetWidth(); + //获得最后一张图片的宽 + local LastW = Rindro_Image_GlobalMap[Img].GetPng(La).GetWidth(); + //绘制中间 + Rindro_Image_GlobalMap[Img].DrawExPng(Mi, X + FirstW, Y, 0, sq_RGBA(255, 255, 255, 250), (Width - LastW - FirstW).tofloat() / MiddleW, 1.0); + //绘制最后一张 + Rindro_Image_GlobalMap[Img].DrawPng(La, X + Width - LastW, Y); + } + + function DrawNineBox(X, Y, Width, Height, Img, StartIndex) { + //如果没有载入img就载入 + if (!Rindro_Image_GlobalMap.rawin(Img)) { + Rindro_Image_GlobalMap[Img] <- Rindro_Image(Img); + } + //绘制左上角 + Rindro_Image_GlobalMap[Img].DrawPng(StartIndex, X, Y); + //获取左上角的图片宽高 + local LeftTopW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex).GetWidth(); + local LeftTopH = Rindro_Image_GlobalMap[Img].GetPng(StartIndex).GetHeight(); + + //绘制上边 + //获取上边的宽 + local TopW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 1).GetWidth(); + Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 1, X + LeftTopW, Y, 0, sq_RGBA(255, 255, 255, 250), (Width - LeftTopW * 2).tofloat() / TopW, 1.0); + + //绘制右上角 + Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 2, X + Width - LeftTopW, Y); + + //绘制左边 + //获取左边的高 + local LeftH = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 3).GetHeight(); + Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 3, X, Y + LeftTopH, 0, sq_RGBA(255, 255, 255, 250), 1.0, (Height - LeftTopH * 2).tofloat() / LeftH); + + //绘制中间 + //获取中间的宽高 + local MiddleW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 4).GetWidth(); + local MiddleH = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 4).GetHeight(); + Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 4, X + LeftTopW, Y + LeftTopH, 0, sq_RGBA(255, 255, 255, 250), (Width - LeftTopW * 2).tofloat() / MiddleW, (Height - LeftTopH * 2).tofloat() / MiddleH); + + //绘制右边 + Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 5, X + Width - LeftTopW, Y + LeftTopH, 0, sq_RGBA(255, 255, 255, 250), 1.0, (Height - LeftTopH * 2).tofloat() / LeftH); + + //绘制左下角 + Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 6, X, Y + Height - LeftTopH); + + //绘制下边 + Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 7, X + LeftTopW, Y + Height - LeftTopH, 0, sq_RGBA(255, 255, 255, 250), (Width - LeftTopW * 2).tofloat() / TopW, 1.0); + + //绘制右下角 + Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 8, X + Width - LeftTopW, Y + Height - LeftTopH); + } + + +} +//获取文字绘制长度 +class LenheartTextClass { + function GetStringLength(str) { + if (typeof str != "string") str = "无字符"; + return L_sq_GetStringDrawLength(str); + } +} + +class MemoryTool { + //给指定地址写入字节数组 + function WirteByteArr(Address, ByteArr) { + for (local i = 0; i< ByteArr.len(); i++) { + L_sq_WAB(Address + i, ByteArr[i]); + } + } + + + //解密读取内存地址的数据 + function DecodeMemoryData(Address) { + local nEax, nEcx8, nEsi, nEdx, nTmp; + nEax = NativePointer(L_sq_I2P(Address)).readInt(); + if (nEax == -1) return nEax; + nEcx8 = NativePointer(L_sq_I2P(Address + 8)).readInt(); + if (nEcx8 == -1) return nEcx8; + nEsi = NativePointer(L_sq_I2P(0x1AF8D78)).readInt(); + if (nEsi == -1) return nEdx; + nEdx = nEax >> 16; + nTmp = (nEdx << 2) + nEsi + 36; + nEdx = NativePointer(L_sq_I2P(nTmp)).readInt(); + if (nEdx == -1) return nEdx; + nEax = nEax & 65535; + nTmp = (nEax << 2) + nEdx + 8468; + nEax = NativePointer(L_sq_I2P(nTmp)).readInt(); + if (nEax == -1) return nEax; + nEdx = nEax & 0xFFFF; + nEsi = nEdx << 16; + nEsi = nEsi | nEdx; + nEax = nEsi ^ nEcx8; + return nEax; + } + + //加密写入内存地址数据 + function EncodeMemoryData(AddreSs, Data) { + local JEdi, JEcx, JEax, JEsi, JEdx, JSs; + JEcx = AddreSs; + JEax = L_sq_RA(0x1AF8DB8); + JEax = JEax + 1; + L_sq_WA(0x1AF8DB8, JEax); + JEdx = JEax; + JEdx = JEdx >> 8; + JEdx = JEdx << 24; + JEdx = JEdx >> 24; + JEdx = L_sq_RA(JEdx * 2 + 0x1843F58); + JEdx = JEdx & 0xFFFF; + JEax = JEax << 24; + JEax = JEax >> 24; + JSs = L_sq_RA(JEax * 2 + 0x1844158); + JSs = JSs & 0xFFFF; + JEdx = JEdx ^ JSs; + JEax = JEdx; + JEax = JEax & 0xFFFF; + JEsi = Data; + JEdx = JEsi >> 16; + + JSs = JEsi & 0xFFFF; + JEdx = JEdx + JSs; + JEdx = JEdx ^ JEax; + JEdi = JEdx; + JEdx = JEax; + JEax = JEax << 16; + JEax = JEax + JEdx; + JEsi = Data; + JEax = JEax ^ JEsi; + JEsi = AddreSs + 8; + L_sq_WA(JEsi, JEax); + JEax = L_sq_RA(AddreSs); + JEsi = L_sq_RA(0x1AF8D78); + + JEcx = JEdi; + JEcx = JEcx << 16; + JEcx = JEcx + JEdx; + JEdx = JEax; + JEdx = JEdx >> 16; + JEdx = L_sq_RA(JEsi + JEdx * 4 + 36); + JEax = JEax & 0xFFFF; + L_sq_WA(JEdx + JEax * 4 + 8468, JEcx); + } + + function DecodeMemoryDataF(Address) { + local Value = MemoryTool.DecodeMemoryData(Address); + local Bl = blob(); + Bl.writen(Value, 'i'); + Bl.seek(0); + return Bl.readn('f'); + } + + function ReadFloat(Address) { + local Arr = []; + for (local i = 0; i< 4; i++) { + Arr.append(L_sq_RAB(Address + i)); + } + // local Value = L_sq_RAB(Address); + // print(Value); + local Bl = blob(); + foreach(intvalue in Arr) { + Bl.writen(intvalue, 'c'); + } + // Bl.writen(Value, 'i'); + Bl.seek(0); + return Bl.readn('f'); + } +} + +//大数字 +class longlong { + Value = null; + //构造函数 不管是不是string类型都要转成string类型 + constructor(StrValue) { + Value = StrValue.tostring(); + } + + function _add(other) { + return longlong(L_sq_LongLongOperation(this.Value, other.Value, "+")); + } + + function _sub(other) { + return longlong(L_sq_LongLongOperation(this.Value, other.Value, "-")); + } + + function _mul(other) { + return longlong(L_sq_LongLongOperation(this.Value, other.Value, "*")); + } + + function _div(other) { + return L_sq_LongLongOperation(this.Value, other.Value, "/"); + } + + function _unm() { + return longlong(L_sq_LongLongOperation(longlong("0"), this.Value, "-")); + } + + function _modulo(other) { + return longlong(L_sq_LongLongOperation(this.Value, other.Value, "%")); + } + + function GetFormat(FType) { + local Buf = L_sq_LongLongOperation(this.Value, FType, "format"); + if (Buf.len()< 2) return Buf + ".0"; + local Value = Buf.slice(0, -1); + local Unit = Buf.slice(-1); + local RetStr = format(FType + Unit, Value.tofloat()); + return RetStr; + } + +} + + + +//任务队列 +class QuestQueue { + //队列 + Queue = null; + + constructor() { + Queue = {}; + } + + //添加任务 + function AddQuest(QuestName, QuestLogic, ...) { + local args = null; + if (vargc > 0) { + args = []; + for (local i = 0; i< vargc; i++) { + args.append(vargv[i]); + } + } + Queue[QuestName] <- { + Logic = QuestLogic, + InseartTime = Clock(), + arg = args + }; + } + + //移除任务 + function RemoveQuest(QuestName) { + if (Queue) { + Queue.rawdelete(QuestName); + } + } + + //执行任务 + function Run() { + if (Queue) { + local NowTime = Clock(); + foreach(QuestName, QuestInfo in Queue) { + if (QuestInfo.arg && QuestInfo.arg.len() > 0) { + local Arr = []; + Arr.append(getroottable()); + Arr.append(QuestName); + Arr.append(NowTime); + foreach(value in QuestInfo.arg) { + Arr.append(value); + } + QuestInfo.Logic.acall(Arr); + // QuestInfo.Logic(QuestName, NowTime - QuestInfo.InseartTime, QuestInfo.arg); + } else QuestInfo.Logic(QuestName, NowTime - QuestInfo.InseartTime); + } + } + } + + + //示例 + + /* + Obj.AddQuest("测试任务",function (Name,Time) + { + print(Time); + if(Time >= 2000)Obj.RemoveQuest(Name); + }.bindenv(this)); + */ +} \ No newline at end of file diff --git a/CSBase/_Tool/Hacker_Class.nut b/CSBase/_Tool/Hacker_Class.nut new file mode 100644 index 0000000..672c352 --- /dev/null +++ b/CSBase/_Tool/Hacker_Class.nut @@ -0,0 +1,60 @@ +/* +文件名:Hacker_Class.nut +路径:Base/_Tool/Hacker_Class.nut +创建日期:2024-09-24 06:25 +文件用途: +*/ +class _Rindro_Hacker { + HookTable = null; + + constructor() { + HookTable = {}; + } + + function UnLoadHook(AddressStr) { + Sq_DeHookFunc(HookTable[AddressStr]); + } + + function LoadHook(AddressStr, ArgumentArr, EnterFunc, LeaveFunc) { + //如果已经HOOK过 需要先卸载原来的HOOK + if (HookTable.rawin(AddressStr)) { + UnLoadHook(AddressStr); + print("地址: " + AddressStr + " 已经装载了Hook,本次操作将会卸载之前的Hook在执行。") + } + + local Controler = Sq_HookFunc(AddressStr, ArgumentArr, EnterFunc, LeaveFunc); + HookTable.rawset(AddressStr, Controler); + } +} +//初始化Hacker +if (!(getroottable().rawin("Rindro_Haker"))) Rindro_Haker <- _Rindro_Hacker(); + + +//重选角色时触发的回调函数(进入赛利亚房间) +OnSetCharacter_Control <- {} +Rindro_Haker.LoadHook(0x674350, ["pointer", "int"], + function(args) { + foreach(Func in OnSetCharacter_Control) { + Func(); + } + return null; + }, + function(args) { + + return null; + }); + +OnSetCharacter_Control.MarrySystem <- function() { + if (getroottable().rawin("Yosin_14SkillXpos1") && + getroottable().rawin("Yosin_14SkillXpos2") && + getroottable().rawin("Yosin_14SkillYpos1") && + getroottable().rawin("Yosin_14SkillYpos2") + ) { + for (local i = 6; i< 7; i++) { + L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x14, Yosin_14SkillXpos1 + (i * 31)); + L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x18, Yosin_14SkillYpos1); + L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x14, Yosin_14SkillXpos2 + (i * 31)); + L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x18, Yosin_14SkillYpos2); + } + } +}; \ No newline at end of file diff --git a/CSBase/_Tool/Hacker_RegApi.nut b/CSBase/_Tool/Hacker_RegApi.nut new file mode 100644 index 0000000..2b861f5 --- /dev/null +++ b/CSBase/_Tool/Hacker_RegApi.nut @@ -0,0 +1,301 @@ +/* +文件名:Hacker_RegApi.nut +路径:Base/_Tool/Hacker_RegApi.nut +创建日期:2024-09-25 18:31 +文件用途:注册API +*/ +//工具类 +class R_Utils { + + String = { + FindLastSubstring = function(str, substring) { + local strLen = str.len(); + local subLen = substring.len(); + local lastIndex = -1; + for (local i = 0; i <= strLen - subLen; i++) { + local found = true; + for (local j = 0; j< subLen; j++) { + if (str[i + j] != substring[j]) { + found = false; + break; + } + } + if (found) { + lastIndex = i; + } + } + return lastIndex; + } + } + //播放音效 + function PlaySound(SoundName) { + L_Sq_CallFunc(0x75BD70, "void", FFI_MS_CDECL, ["pointer", "int", "int", "int"], Memory.allocUtf8String(SoundName).C_Object, -1, 0, 0); + } + + //读取文件内容 + function ReadScript(Path, Size, CodePage) { + local ReadPath = L_sq_P2I(Memory.allocUtf8String(Path).C_Object); + local Reader = Memory.alloc(Size); + local ReadBuffer = L_sq_P2I(Reader.C_Object); + L_Sq_CallFunc(0x11A2030, "int", FFI_FASTCALL, ["int", "int", "int", "int", "int", "int"], 0x1D17638, 0, ReadPath, ReadBuffer, 0x100000, 0x19DAF4); + + + if (CodePage == "utf8") + return Reader.readUtf8String(); + if (CodePage == "unicode") + return Reader.readUnicodeString(); + if (CodePage == "big5") + return Reader.readBig5String(); + } + + //读取文件 + function GetScriptFileReader(Path, ...) { + local AllocSize = 102400; + if (vargc > 0) AllocSize = vargv[0]; + //读取路径 + local ReadPath = L_sq_P2I(Memory.allocUtf8String(Path).C_Object); + //读取缓存 + local Reader = Memory.alloc(AllocSize); + local ReadBuffer = L_sq_P2I(Reader.C_Object); + //实际读取大小 + local ReadSizeer = Memory.alloc(4); + local ReadSizeBuffer = L_sq_P2I(ReadSizeer.C_Object); + + local Flag = L_Sq_CallFunc(0x59E3D0, "bool", FFI_MS_CDECL, ["int", "int", "int", "int"], ReadPath, ReadBuffer, AllocSize, ReadSizeBuffer); + if (Flag) { + return { + Buffer = Reader, + Size = ReadSizeer.readInt() + }; + } else return null; + } + + //读取配置表 + function ReadScriptConfig(Path, Size, ...) { + local CodePage = "utf8"; + if (vargc > 0) CodePage = vargv[0]; + local Script = R_Utils.ReadScript(Path, Size, CodePage); + local Func = compilestring("return " + Script); + local Ret = Func(); + return Ret; + } + + //获取一个指定装备的角色对象 + function GetCharacByEqu(Job, GrowType, Equ) { + local Obj = sq_CreateCharacter(Job, GrowType); + local ObjAddress = L_Sq_GetObjectAddress(Obj); + foreach(value in Equ) { + local ItemObject = L_sq_GetItem(value); + // L_Sq_CallFunc(0x825570, "void", FFI_THISCALL, ["int", "int"], ObjAddress, ItemObject); + L_Sq_CallFunc(0x8265A0, "void", FFI_THISCALL, ["int", "int", "int"], ObjAddress, ItemObject, -1); + } + return sq_GetCNRDObjectToSQRCharacter(Obj); + } + + //获取装备编号的得文件路径 + function GetEquPath(Equ) { + local EquPathAddress = L_Sq_CallFunc(0x1219E80, "int", FFI_THISCALL, ["int", "int"], 0x1d7993c, Equ); + if (EquPathAddress) { + return NativePointer(EquPathAddress).readUnicodeString(); + } + return null; + } + + //获取Lst文件的返回Array + function GetLstArr(Path, Header) { + local Arr = []; + local LstBuf = R_Utils.GetScriptFileReader(Path); + if (LstBuf) { + local IO = Sq_Point2Blob(L_sq_P2I(LstBuf.Buffer.C_Object), LstBuf.Size); + local i = 2; + while (i< LstBuf.Size) { + if ((LstBuf.Size - i) >= 10) { + IO.seek(i + 6); //内容指示位 + local FindKey = IO.readn('i'); + local Key = Rindro_Script.GetBinString(FindKey); + if (Key) { + local StrFilePath = Header + Key.tolower(); + Arr.append(StrFilePath); + } + } else break; + i += 10; + } + } + return Arr; + } + + //通过处理函数获取文件Table + function GetFileTableByHandle(Path, Func) { + local Data = {}; + local FileData = R_Utils.GetScriptFileReader(Path); + if (FileData) { + if (FileData.Size >= 7) { + //创建Blob对象 + local IO = Sq_Point2Blob(L_sq_P2I(FileData.Buffer.C_Object), FileData.Size); + //以5为单步从第二位开始遍历字节 + local i = 2; + while (true) { + if (i< FileData.Size && FileData.Size - i >= 5) { + i = Func(Data, IO, i); + } else break; + } + } + } + return Data; + } +} + + + + + + +//根据List读取文件地址 +// Rindro_Haker.LoadHook(0x1219E80, ["int", "int", "int"], +// function(args) { +// // print(format("%02x", args[0])); + +// // print(args[2]); +// return null; +// }, +// function(args) { +// // print(666); +// // print(format("%02x", args.pop())); +// // TTTAni <- args.pop(); + + +// // local Path = NativePointer(L_sq_I2P(args.pop())).readUnicodeString(); +// // if (Path != "character/swordman/weapon/katana/kat_lowkogaras.equ" && Path != "new_elvengard.twn") { +// // print(args[0]); +// // print(args[1]); +// // // print(format("%02x", args[1])); +// // print(Path); +// // } +// return null; +// }); + +//可能是构造装备以及构造其他东西 +// Rindro_Haker.LoadHook(0x972220, ["int", "int", "int", "int"], +// function(args) { +// // print(format("%02x", args[0])); +// // local AniPath = NativePointer(L_sq_I2P(args[0])).readUnicodeString(); +// if (args[0] == 10402) { +// print(args[0]); +// print(args[1]); +// print(args[2]); +// } +// // print(args[2]); +// return null; +// }, +// function(args) { +// // print(666); +// // print(format("%02x", args.pop())); +// // TTTAni <- args.pop(); +// return null; +// }); + +//绘制字符 +getroottable().DrawCodeCallBackFunc <- {}; +// Rindro_Haker.LoadHook(0x1206BD0, ["int", "int", "int", "pointer", "int", "void"], +// function(args) { +// // print("nut:" + format("%02x", args[3])); + +// if (args[3]) { +// // for (local i = 0; i< 10000; i++) { +// local DrawCode = NativePointer((args[3])).readUnicodeString(); +// if (DrawCode in DrawCodeCallBackFunc) +// DrawCodeCallBackFunc[DrawCode](args); +// // } +// } +// return null; +// }, +// function(args) { +// // print(666); +// // print(format("%02x", args.pop())); +// // TTTAni <- args.pop(); +// return null; +// }); + + +//绘制城镇回调 +getroottable().DrawTownCallBackFunc <- {}; +Rindro_Haker.LoadHook(0x1108700, ["int", "void"], + function(args) { + // print("nut:" + format("%02x", args[3])); + // print(format("%02x", args[0])); + foreach(Func in DrawTownCallBackFunc) { + Func(); + } + return null; + }, + function(args) { + // print(666); + // print(format("%02x", args.pop())); + // TTTAni <- args.pop(); + return null; + }); + + +//顺图 +function Rindro_Gm_MoveMap(obj) { + if (sq_IsKeyDown(OPTION_HOTKEY_PAUSE_IN_TOWER, ENUM_SUBKEY_TYPE_ALL) && RINDROLOCAL) { + if (KeyPress.isKeyPress(0)) L_sq_MoveMap(2); + if (KeyPress.isKeyPress(1)) L_sq_MoveMap(0); + if (KeyPress.isKeyPress(2)) L_sq_MoveMap(3); + if (KeyPress.isKeyPress(3)) L_sq_MoveMap(1); + } +} +getroottable()["LenheartFuncTab"].rawset("Rindro_Gm_MoveMapFuncN", Rindro_Gm_MoveMap); + + +//丢弃物品回调 +getroottable().DiscardItemCallBackFunc <- {}; + +function Sq_DiscardItem(Item) { + local Flag = true; + foreach(Func in DiscardItemCallBackFunc) { + local Ret = Func(Item); + if (!Ret) Flag = false; + } + return Flag; +} + +//从exe获取字符串 +getroottable()["Sq_GetExeStr_Map"] <- {}; +function Sq_GetExeStr_Event(Index) +{ + if(Index in getroottable()["Sq_GetExeStr_Map"]){ + return getroottable()["Sq_GetExeStr_Map"][Index](Index); + } + return Index; +} + + +// //hook打开窗口 +// Rindro_Haker.LoadHook(0xE6E070, ["int","int","int","int","void"], +// function(args) { + +// return null; +// }, +// function(args) { +// // print(666); +// // print(format("%02x", args.pop())); +// // TTTAni <- args.pop(); +// return null; +// }); + + +// Rindro_Haker.LoadHook(0xE6E070, ["int", "int", "int", "int", "int"], +// function(args) { +// print("nut:" + format("%02x", args[0])); +// print("nut:" + format("%02x", args[1])); +// print("nut:" + format("%02x", args[2])); +// print("nut:" + format("%02x", args[3])); +// return null; +// }, +// function(args) { +// // print(666); +// // print(format("%02x", args.pop())); +// // TTTAni <- args.pop(); +// return null; +// }); \ No newline at end of file diff --git a/CSBase/_Tool/Image_Class.nut b/CSBase/_Tool/Image_Class.nut new file mode 100644 index 0000000..064e40e --- /dev/null +++ b/CSBase/_Tool/Image_Class.nut @@ -0,0 +1,80 @@ +/* +文件名:Image_Class.nut +路径:Base/_Tool/Image_Class.nut +创建日期:2024-10-21 16:58 +文件用途: 图片类 +*/ +class Rindro_Png { + C_Object = null; + Path = null; + Idx = null; + + constructor(Object, Path, Idx) { + this.Path = Path; + this.Idx = Idx; + this.C_Object = Object; + } + + function Draw(X, Y) { + L_Sq_CallFunc(0x11A8F60, "int", FFI_THISCALL, ["int", "int", "int", "int"], NativePointer(0x1B45B94).readInt(), X, Y, this.C_Object); + } + + function DrawEx(X, Y, Model, Rgba, Xrate, Yrate) { + L_Sq_CallFunc(0x11A97E0, "int", FFI_THISCALL, ["int", "int", "int", "int", "float", "float", "float", "int", "float", "float"], NativePointer(0x1B45B94).readInt(), X, Y, this.C_Object, Xrate, Yrate, Model, Rgba, 0, 0); + } + + function GetWidth() + { + return NativePointer(this.C_Object + 0x1C).readShort(); + } + + function GetHeight() + { + return NativePointer(this.C_Object + 0x1E).readShort(); + } +} +class Rindro_Image { + + Img = null; + Path = null; + + constructor(Path) { + this.Path = Path; + //读取Img + Img = L_Sq_CallFunc(0x11C0410, "int", FFI_THISCALL, ["int", "int", "int"], NativePointer(0x1B4684C).readInt(), 0, L_sq_P2I(Memory.allocUtf8String(Path).C_Object)); + } + + function GetPng(Idx) { + if (Img) { + local PngObject = L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Img, Idx); + return Rindro_Png(PngObject, Path, Idx); + } + } + + function DrawPng(Idx, X, Y) { + local Buffer = GetPng(Idx); + Buffer.Draw(X, Y); + } + + function DrawExPng(Idx, X, Y, Model, Rgba, Xrate, Yrate) { + local Buffer = GetPng(Idx); + Buffer.DrawEx(X, Y, Model, Rgba, Xrate, Yrate) + } + + //加载 + function Load(Path) { + if (!(getroottable().rawin("Rindro_Image_Map"))) getroottable().Rindro_Image_Map <- {}; + if (getroottable().Rindro_Image_Map.rawin(Path)) return getroottable().Rindro_Image_Map[Path]; + else { + getroottable().Rindro_Image_Map[Path] <- Rindro_Image(Path); + return getroottable().Rindro_Image_Map[Path]; + } + } +} +Rindro_Image_GlobalMap <- {}; +Rindro_Image_GlobalMap["lenheartui"] <- Rindro_Image("interface/lenheartwindowcommon.img"); +/* + local Png = TestImg.GetPng(0); + Png.Draw(200, 200); + Png.DrawEx(100, 400, 0, sq_RGBA(255, 255, 255, 255), 1.5, 1.5); +*/ \ No newline at end of file diff --git a/CSBase/_Tool/Json_Class.nut b/CSBase/_Tool/Json_Class.nut new file mode 100644 index 0000000..681c086 --- /dev/null +++ b/CSBase/_Tool/Json_Class.nut @@ -0,0 +1,661 @@ +/* +文件名:Json_Class.nut +路径:Base/_Tool/Json_Class.nut +创建日期:2024-09-27 23:54 +文件用途:Json类 +*/ + +class JSONParser { + + + static version = "1.0.1"; + + + state = ""; + stack = null; + container = null; + key = ""; + value = ""; + converter = null; + + constructor() { + stack = []; + container = {}; + } + + function parse(str, ...) { + if (vargc > 0) converter = vargc[0]; + + + + local string = { + go = function() { + state = "ok"; + }.bindenv(this), + firstokey = function() { + key = value; + state = "colon"; + }.bindenv(this), + okey = function() { + key = value; + state = "colon"; + }.bindenv(this), + ovalue = function() { + value = this._convert(value, "string", converter); + state = "ocomma"; + }.bindenv(this), + firstavalue = function() { + value = this._convert(value, "string", converter); + state = "acomma"; + }.bindenv(this), + avalue = function() { + value = value; + this._convert(value, "string", converter); + state = "acomma"; + }.bindenv(this) + }; + + + local number = { + go = function() { + state = "ok"; + }.bindenv(this), + ovalue = function() { + value = this._convert(value, "number", converter); + state = "ocomma"; + }.bindenv(this), + firstavalue = function() { + value = this._convert(value, "number", converter); + state = "acomma"; + }.bindenv(this), + avalue = function() { + value = this._convert(value, "number", converter); + state = "acomma"; + }.bindenv(this) + }; + + + + + local action = {}; + + + action["{"] <- { + go = function() { + stack.push({ + state = "ok" + }); + container = {}; + state = "firstokey"; + }.bindenv(this), + ovalue = function() { + stack.push({ + container = container, + state = "ocomma", + key = key + }); + container = {}; + state = "firstokey"; + }.bindenv(this), + firstavalue = function() { + stack.push({ + container = container, + state = "acomma" + }); + container = {}; + state = "firstokey"; + }.bindenv(this), + avalue = function() { + stack.push({ + container = container, + state = "acomma" + }); + container = {}; + state = "firstokey"; + }.bindenv(this) + }, + + action["}"] <- { + firstokey = function() { + local pop = stack.pop(); + value = container; + container = ("container" in pop) ? pop.container : null; + key = ("key" in pop) ? pop.key : null; + state = pop.state; + }.bindenv(this), + ocomma = function() { + local pop = stack.pop(); + container[key] <- value; + value = container; + container = ("container" in pop) ? pop.container : null; + key = ("key" in pop) ? pop.key : null; + state = pop.state; + }.bindenv(this) + }, + + action["["] <- { + go = function() { + stack.push({ + state = "ok" + }); + container = []; + state = "firstavalue"; + }.bindenv(this), + ovalue = function() { + stack.push({ + container = container, + state = "ocomma", + key = key + }); + container = []; + state = "firstavalue"; + }.bindenv(this), + firstavalue = function() { + stack.push({ + container = container, + state = "acomma" + }); + container = []; + state = "firstavalue"; + }.bindenv(this), + avalue = function() { + stack.push({ + container = container, + state = "acomma" + }); + container = []; + state = "firstavalue"; + }.bindenv(this) + }, + + action["]"] <- { + firstavalue = function() { + local pop = stack.pop(); + value = container; + container = ("container" in pop) ? pop.container : null; + key = ("key" in pop) ? pop.key : null; + state = pop.state; + }.bindenv(this), + acomma = function() { + local pop = stack.pop(); + container.push(value); + value = container; + container = ("container" in pop) ? pop.container : null; + key = ("key" in pop) ? pop.key : null; + state = pop.state; + }.bindenv(this) + }, + + action[":"] <- { + colon = function() { + + + + local err = false; + foreach(akey, avalue in container) { + if (akey == key) err = true; + break + } + if (err) throw "Duplicate key \"" + key + "\""; + state = "ovalue"; + }.bindenv(this) + }, + + action[","] <- { + ocomma = function() { + container[key] <- value; + state = "okey"; + }.bindenv(this), + acomma = function() { + container.push(value); + state = "avalue"; + }.bindenv(this) + }, + + action["true"] <- { + go = function() { + value = true; + state = "ok"; + }.bindenv(this), + ovalue = function() { + value = true; + state = "ocomma"; + }.bindenv(this), + firstavalue = function() { + value = true; + state = "acomma"; + }.bindenv(this), + avalue = function() { + value = true; + state = "acomma"; + }.bindenv(this) + }, + + action["false"] <- { + go = function() { + value = false; + state = "ok"; + }.bindenv(this), + ovalue = function() { + value = false; + state = "ocomma"; + }.bindenv(this), + firstavalue = function() { + value = false; + state = "acomma"; + }.bindenv(this), + avalue = function() { + value = false; + state = "acomma"; + }.bindenv(this) + }, + + action["null"] <- { + go = function() { + value = null; + state = "ok"; + }.bindenv(this), + ovalue = function() { + value = null; + state = "ocomma"; + }.bindenv(this), + firstavalue = function() { + value = null; + state = "acomma"; + }.bindenv(this), + avalue = function() { + value = null; + state = "acomma"; + }.bindenv(this) + } + + + + + state = "go"; + stack = []; + + + local start = 0; + + try { + + local result, token, tokenizer = _JSONTokenizer(); + + while (token = tokenizer.nextToken(str, start)) { + + if ("ptfn" == token.type) { + + action[token.value][state](); + } else if ("number" == token.type) { + + value = token.value; + number[state](); + } else if ("string" == token.type) { + + value = tokenizer.unescape(token.value); + string[state](); + } + + start += token.length; + } + + } catch (e) { + state = e; + } + + + if (state != "ok" || regexp("[^\\s]").capture(str, start)) { + local near = str.slice(start, GetMin(str.len(), start + 10)); + throw "JSON Syntax Error near `" + near + "`"; + } + + + return value; + } + + function GetMin(a, b) { + return a< b ? a : b; + } + + + function _convert(value, type, converter) { + if ("function" == typeof converter) { + + + + local parametercCount = 2; + + + if ("getinfos" in converter) { + parametercCount = converter.getinfos().parameters.len() - + 1; + } + + if (parametercCount == 1) { + return converter(value); + } else if (parametercCount == 2) { + return converter(value, type); + } else { + throw "Error: converter function must take 1 or 2 parameters" + } + + } else if ("number" == type) { + local Ret = (value.find(".") == null && value.find("e") == null && value.find("E") == null) ? value.tointeger() : value.tofloat(); + return Ret; + } else { + return value; + } + + } +} + + + +class _JSONTokenizer { + + _ptfnRegex = null; + _numberRegex = null; + _stringRegex = null; + _ltrimRegex = null; + _unescapeRegex = null; + + constructor() { + + this._ptfnRegex = regexp("^(?:\\,|\\:|\\[|\\]|\\{|\\}|true|false|null)"); + + + this._numberRegex = regexp("^(?:\\-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)"); + + + this._stringRegex = regexp("^(?:\\\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\\\")"); + + + this._ltrimRegex = regexp("^[\\s\\t\\n\\r]*"); + + + this._unescapeRegex = regexp("\\\\(?:(?:u\\d{4})|[\\\"\\\\/bfnrt])"); + } + + + function nextToken(str, ...) { + local start = 0; + if (vargc > 0) start = vargv[0]; + local + m, + type, + token, + value, + length, + whitespaces; + + + whitespaces = this._leadingWhitespaces(str, start); + start += whitespaces; + + if (m = this._ptfnRegex.capture(str, start)) { + + value = str.slice(m[0].begin, m[0].end); + type = "ptfn"; + } else if (m = this._numberRegex.capture(str, start)) { + + value = str.slice(m[0].begin, m[0].end); + type = "number"; + } else if (m = this._stringRegex.capture(str, start)) { + + value = str.slice(m[1].begin, m[1].end); + type = "string"; + } else { + return null; + } + + token = { + type = type, + value = value, + length = m[0].end - m[0].begin + whitespaces + }; + + return token; + } + + + function _leadingWhitespaces(str, start) { + local r = this._ltrimRegex.capture(str, start); + + if (r) { + return r[0].end - r[0].begin; + } else { + return 0; + } + } + + + _unescapeReplacements = { + b = "\b", + f = "\f", + n = "\n", + r = "\r", + t = "\t" + }; + + function unescape(str) { + + local start = 0; + local res = ""; + + while (start< str.len()) { + local m = this._unescapeRegex.capture(str, start); + + if (m) { + local token = str.slice(m[0].begin, m[0].end); + + + local pre = str.slice(start, m[0].begin); + res += pre; + + if (token.len() == 6) { + res += token; + } else { + local char = token.slice(1); + + if (char in this._unescapeReplacements) { + res += this._unescapeReplacements[char]; + } else { + res += char; + } + } + + } else { + res += str.slice(start); + break; + } + + start = m[0].end; + } + + return res; + } +} + + +class JSONEncoder { + + static VERSION = "2.0.0"; + + + + static _maxDepth = 32; + + + function encode(value) { + return this._encode(value); + } + + + function _encode(val, ...) { + local depth = 0; + if (vargc > 0) depth = vargv[0]; + + if (depth > this._maxDepth) { + throw "Possible cyclic reference"; + } + + local + r = "", + s = "", + i = 0; + + switch (typeof val) { + + case "table": + case "class": + s = ""; + + + foreach(k, v in val) { + if (typeof v != "function") { + s += ",\"" + k + "\":" + this._encode(v, depth + 1); + } + } + + s = s.len() > 0 ? s.slice(1) : s; + r += "{" + s + "}"; + break; + + case "array": + s = ""; + + for (i = 0; i< val.len(); i++) { + s += "," + this._encode(val[i], depth + 1); + } + + s = (i > 0) ? s.slice(1) : s; + r += "[" + s + "]"; + break; + + case "integer": + case "float": + case "bool": + r += val; + break; + + case "null": + r += "null"; + break; + + case "instance": + + if ("_serializeRaw" in val && typeof val._serializeRaw == "function") { + + + r += val._serializeRaw().tostring(); + + } else if ("_serialize" in val && typeof val._serialize == "function") { + + + r += this._encode(val._serialize(), depth + 1); + + } else { + + s = ""; + + try { + + + foreach(k, v in val) { + s += ",\"" + k + "\":" + this._encode(v, depth + 1); + } + + } catch (e) { + + + + foreach(k, v in val.getclass()) { + if (typeof v != "function") { + s += ",\"" + k + "\":" + this._encode(val[k], depth + 1); + } + } + + } + + s = s.len() > 0 ? s.slice(1) : s; + r += "{" + s + "}"; + } + + break; + + case "blob": + + + + r += "\"" + (val.len() ? this._escape(val.tostring()) : "") + "\""; + break; + + + default: + r += "\"" + this._escape(val.tostring()) + "\""; + break; + } + + return r; + } + + function _escape(str) { + local res = ""; + + for (local i = 0; i< str.len(); i++) { + + local ch1 = (str[i] & 0xFF); + + if ((ch1 & 0x80) == 0x00) { + + + ch1 = format("%c", ch1); + + if (ch1 == "\"") { + res += "\\\""; + } else if (ch1 == "\\") { + res += "\\\\"; + } else if (ch1 == "/") { + res += "\\/"; + } else if (ch1 == "\b") { + res += "\\b"; + } else if (ch1 == "\f") { + res += "\\f"; + } else if (ch1 == "\n") { + res += "\\n"; + } else if (ch1 == "\r") { + res += "\\r"; + } else if (ch1 == "\t") { + res += "\\t"; + } else if (ch1 == "\0") { + res += "\\u0000"; + } else { + res += ch1; + } + + } else { + + if ((ch1 & 0xE0) == 0xC0) { + + local ch2 = (str[++i] & 0xFF); + res += format("%c%c", ch1, ch2); + } else if ((ch1 & 0xF0) == 0xE0) { + + local ch2 = (str[++i] & 0xFF); + local ch3 = (str[++i] & 0xFF); + res += format("%c%c%c", ch1, ch2, ch3); + } else if ((ch1 & 0xF8) == 0xF0) { + + local ch2 = (str[++i] & 0xFF); + local ch3 = (str[++i] & 0xFF); + local ch4 = (str[++i] & 0xFF); + res += format("%c%c%c%c", ch1, ch2, ch3, ch4); + } + + } + } + + return res; + } +} \ No newline at end of file diff --git a/CSBase/_Tool/MemoryClass.nut b/CSBase/_Tool/MemoryClass.nut new file mode 100644 index 0000000..9e4bef3 --- /dev/null +++ b/CSBase/_Tool/MemoryClass.nut @@ -0,0 +1,204 @@ +/* +文件名:MemoryClass.nut +路径:Base/_Tool/MemoryClass.nut +创建日期:2024-09-24 08:22 +文件用途: +*/ + +class Memory { + + function alloc(Size) { + return NativePointer(Size.tostring()); + } + + function allocUtf8String(Str) { + return NativePointer(Str_Ptr(Str)); + } +} + +class NativePointer { + //大小 + Size = -1; + + C_Object = null; + + constructor(T) { + if (type(T) == "integer") { + C_Object = L_sq_I2P(T); + } else if (type(T) == "userdata") { + C_Object = T; + } else if (type(T) == "string") { + C_Object = Sq_New_Point(T.tointeger()); + Size = T; + //注册销毁伪析构 + Register_Destruction(C_Object, this); + } + } + + function add(intoffset) { + return NativePointer(L_sq_I2P(L_sq_P2I(this.C_Object) + intoffset)); + } + + function sub(intoffset) { + return NativePointer(L_sq_I2P(L_sq_P2I(this.C_Object) - intoffset)); + } + + function writeByteArray(arr) { + Sq_Memory_WriteByteArr(this.C_Object, arr); + } + + function readByteArray(size) { + local PointB = Sq_Point2Blob(this.C_Object, size); + local arr = []; + foreach(value in PointB) { + arr.append(value); + } + return arr; + } + + + function write(value, type) { + local Buf = blob(0); + Buf.writen(value, type); + local arr = []; + foreach(value in Buf) { + arr.append(value); + } + writeByteArray(arr); + } + + function writeS8(value) { + write(value, 'c'); + } + + function writeU8(value) { + write(value, 'b'); + } + + function writeS16(value) { + write(value, 's'); + } + + function writeU16(value) { + write(value, 'w'); + } + + function writeS32(value) { + write(value, 'i'); + } + + function writeU32(value) { + write(value, 'i'); + } + + function writeShort(value) { + write(value, 's'); + } + + function writeUShort(value) { + write(value, 'w'); + } + + function writeInt(value) { + write(value, 'i'); + } + + function writeUInt(value) { + write(value, 'i'); + } + + function writeFloat(value) { + write(value, 'f'); + } + + function writeDouble(value) { + write(value, 'd'); + } + + + function read(type) { + local Buf = Sq_Point2Blob(L_sq_P2I(this.C_Object), 4); + return Buf.readn(type); + } + + function readS8() { + return read('c'); + } + + function readU8() { + return read('b'); + } + + function readS16() { + return read('s'); + } + + function readU16() { + return read('w'); + } + + function readS32() { + return read('i'); + } + + function readU32() { + return read('i'); + } + + function readShort() { + return read('s'); + } + + function readUShort() { + return read('w'); + } + + function readInt() { + return read('i'); + } + + function readUInt() { + return read('i'); + } + + function readFloat() { + return read('f'); + } + + function readDouble() { + return read('d'); + } + + + function readUnicodeString(...) { + if (vargc > 0) { + return Sq_Memory_ReadString(this.C_Object, vargv[0]); + } else { + return Sq_Memory_ReadString(this.C_Object); + } + } + + function readUtf8String(...) { + if (vargc > 0) { + return Sq_Memory_ReadStringByUtf8(this.C_Object, vargv[0]); + } else { + return Sq_Memory_ReadStringByUtf8(this.C_Object); + } + } + + function readBig5String(...) { + if (vargc > 0) { + return Sq_Memory_ReadStringByBig5(this.C_Object, vargv[0]); + } else { + return Sq_Memory_ReadStringByBig5(this.C_Object); + } + } + + function readPointer() { + return Sq_ReadPoint(this.C_Object); + } + + function tostring() { + return this.C_Object.tostring(); + } +} \ No newline at end of file diff --git a/CSBase/_Tool/Packet_Class.nut b/CSBase/_Tool/Packet_Class.nut new file mode 100644 index 0000000..61c4b47 --- /dev/null +++ b/CSBase/_Tool/Packet_Class.nut @@ -0,0 +1,61 @@ +/* +文件名:Pack_Class.nut +路径:Base/_Tool/Pack_Class.nut +创建日期:2025-06-30 09:24 +文件用途:字节包 +*/ +class Packet { + + //读取指针位置 + Index = 0; + + //内存数据 + Pointer = null; + //包大小 + Size = 0; + + + //加载包 + function Load(P, S) { + Pointer = P; + Size = S; + } + + //读取指针跳转 + function Seek(...) { + local Pos = vargv[0]; + local Mode = 0; + if(vargc > 1) Mode = vargv[1]; + if (Mode == 0) { + Index = Pos; + } else if (Mode == 1) { + Index += Pos; + } else if (Mode == 2) { + Index -= Pos; + } + } + + //读取整形 + function GetInt() { + local Size_t = 4; + if (Index + Size_t > Size) { + print("读取包越界!"); + return; + } + local Buf = NativePointer(Pointer).add(Index).readInt(); + Index += Size_t; + return Buf; + } + + //读取流 + function GetStream(Size_t) { + if (Index + Size_t > Size) { + print("读取包越界!"); + return; + } + local Np = NativePointer(Pointer).add(Index); + Np.Size = Size_t; + Index += Size_t; + return Np; + } +} diff --git a/CSBase/_Tool/Script_Class.nut b/CSBase/_Tool/Script_Class.nut new file mode 100644 index 0000000..41704de --- /dev/null +++ b/CSBase/_Tool/Script_Class.nut @@ -0,0 +1,713 @@ +/* +文件名:Script_Class.nut +路径:Base/_Tool/Script_Class.nut +创建日期:2024-10-21 14:49 +文件用途:PVF读取类 +*/ +class BlobEx extends blob { + + constructor(BaseBlob) { + blob.constructor(BaseBlob.len()); + writeblob(BaseBlob); + } + + function writeblob(B) { + blob.writeblob(B); + seek(0); + } + + function GetUShort() { + return readn('s'); + } + + function GetShort() { + return readn('w'); + } + + function charPtrToInt(arr) { + local value = ((arr[0]) << 0) | + ((arr[1]) << 8) | + ((arr[2]) << 16) | + ((arr[3]) << 24); + return value; + } + + function GetInt() { + local CurTPos = tell(); + local Ret = charPtrToInt([this[CurTPos], this[CurTPos + 1], this[CurTPos + 2], this[CurTPos + 3]]); + seek(4, 'c'); + return Ret; + } + + function Get256() { + local Buf = readn('c'); + return (256.0 + Buf.tofloat()) % 256.0; + } + + function GetFloat() { + return readn('f'); + } + + function GetString(count) { + local MBuf = Memory.alloc(count); + local BlobBuf = readblob(count); + local arr = []; + foreach(value in BlobBuf) { + arr.append(value); + } + MBuf.writeByteArray(arr); + + return MBuf.readUtf8String(count); + } +} + +Rindro_Script_Bin_Data <- []; + +class _PVF_Data_ { + //数据 + Data = null; + //位置 + Pos = 0; + //最大值 + Max = 0; + + function _typeof() { + return "pvf_data"; + } + + constructor(gData) { + Data = gData; + Max = gData.len(); + } + + function Last() { + if (Pos > 0) { + Pos--; + return Get(); + } + return null; + } + + function Seek(i) { + if (Pos > 0 && Pos<(Max - 1)) { + Pos = i; + } + } + + function Get() { + local Ret = Data[Pos]; + if (Pos<(Max - 1)) { + Pos++; + } + return Ret; + } + + function Eof() { + if (Pos == Max - 1) + return true; + } + + function Next() { + if (Pos<(Max - 1)) { + Pos++; + return Get(); + } + return null; + } +} + +class Rindro_Script { + + function Get_Ani_Flip_Type(data) { + switch (data) { + case 1: + return "HORIZON"; + case 2: + return "VERTICAL"; + case 3: + return "ALL"; + default: + return ""; + } + } + + + function Get_Ani_Effect_Type(data) { + switch (data) { + case 0: + return "NONE"; + case 1: + return "DODGE"; + case 2: + return "LINEARDODGE"; + case 3: + return "DARK"; + case 4: + return "XOR"; + case 5: + return "MONOCHROME"; + case 6: + return "SPACEDISTORT"; + default: + return ""; + } + } + + function Get_Ani_Damage_Type(data) { + switch (data) { + case 0: + return "NORMAL"; + case 1: + return "SUPERARMOR"; + case 2: + return "UNBREAKABLE"; + default: + return ""; + } + } + + function Get_Ani_Flag(data) { + switch (data) { + case 0: + return "LOOP"; + case 1: + return "SHADOW"; + case 3: + return "COORD"; + case 7: + return "IMAGE_RATE"; + case 8: + return "IMAGE_ROTATE"; + case 9: + return "RGBA"; + case 10: + return "INTERPOLATION"; + case 11: + return "GRAPHIC_EFFECT"; + case 12: + return "DELAY"; + case 13: + return "DAMAGE_TYPE"; + case 14: + return "DAMAGE_BOX"; + case 15: + return "ATTACK_BOX"; + case 16: + return "PLAY_SOUND"; + case 17: + return "PRELOAD"; + case 18: + return "SPECTRUM"; + case 23: + return "SET_FLAG"; + case 24: + return "FLIP_TYPE"; + case 25: + return "LOOP_START"; + case 26: + return "LOOP_END"; + case 27: + return "CLIP"; + case 28: + return "OPERATION"; + default: + return ""; + } + } + + + function endswith(Str, cmp) { + local len = cmp.len(); + local EndStr = Str.slice(-len); + if (EndStr == cmp) + return true; + return false; + + } + + function InitLoad_String() { + if (getroottable().rawin("RindroLoadStringTable")) return; + getroottable().RindroLoadStringTable <- {}; + local N_String = R_Utils.GetScriptFileReader("n_string.lst"); + if (N_String) { + local IO = Sq_Point2Blob(L_sq_P2I(N_String.Buffer.C_Object), N_String.Size); + local i = 2; + while (i< N_String.Size) { + if ((N_String.Size - i) >= 10) { + IO.seek(i + 6); //内容指示位 + local FindKey = IO.readn('i'); + local Key = Rindro_Script.GetBinString(FindKey); + if (Key) { + local StrFilePath = Key.tolower(); + local StrFile = R_Utils.GetScriptFileReader(StrFilePath, 10240000); + if (StrFile) { + local StrBuffer = StrFile.Buffer.readUtf8String(StrFile.Size); + local StrArr = split(StrBuffer, "\r\n"); + foreach(index, strobj in StrArr) { + if (strobj.find(">") != null) { + local strobjarr = split(strobj, ">"); + if (strobjarr.len() > 1) { + getroottable().RindroLoadStringTable.rawset(strobjarr[0], Sq_ConvertWideChar(strobjarr[1], "big5")); + } + } + } + } + } + } else break; + i += 10; + } + } + } + + function GetBin() { + local BinFile = R_Utils.GetScriptFileReader("stringtable.bin", 40960000); + if (BinFile) { + local Ro = Sq_Point2Blob(L_sq_P2I(BinFile.Buffer.C_Object), BinFile.Size); + Ro = BlobEx(Ro.readblob(Ro.len())); + local Count = Ro.readn('i'); + + local CurrentIndex = 0; + for (local i = 0; i< Count; i++) { + Ro.seek(CurrentIndex * 4 + 4); + local StartPos = Ro.readn('i'); + local EndPos = Ro.readn('i'); + local Len = EndPos - StartPos; + Ro.seek(StartPos + 4); + if (Len > 0) { + local Str = Ro.GetString(Len); + Rindro_Script_Bin_Data.append(Str); + } else { + Rindro_Script_Bin_Data.append(""); + } + CurrentIndex++; + } + } + } + + function GetBinString(Index) { + if (!(getroottable().rawin("ENUM_TW_GROWTYPE_VERS")) || ENUM_TW_GROWTYPE_VERS >= 24112901) //24112901更新了新的读取bin文件的方式 + return L_sq_StringBinById(Index); + else { + if (Index< Rindro_Script_Bin_Data.len()) return Rindro_Script_Bin_Data[Index]; + return ""; + } + } + + function GetLoadString(Key) { + if (getroottable().RindroLoadStringTable.rawin(Key)) return getroottable().RindroLoadStringTable[Key]; + else return ""; + } + + function UnpackData(IO, i) { + local out = ""; + IO.seek(i); //内容指示位 + local currentByte = IO.readn('c'); //内容指示位 + local after = IO.GetInt(); + switch (currentByte) { + case 10: { + IO.seek(i - 4); + local Before = IO.readn('i'); + local Buf = Rindro_Script.GetBinString(after); + if (!Buf) { + Buf = ""; + } else { + Buf = "<" + Before + "::" + Buf + "`" + Rindro_Script.GetLoadString(Buf) + "`>"; + } + Buf = Buf + "\r\n"; + out += Buf; + break; + } + case 2: { + IO.seek(-4, 'c'); + local ret = IO.readn('i'); + return ret; + } + case 4: { + local Bbuf = blob(4); + Bbuf.writen(after, 'i'); + Bbuf.seek(0); + local Buf = Bbuf.readn('f'); + out += after + '\t'; + break; + } + case 6: + case 8: + case 7: + case 5: { + local Buf = Rindro_Script.GetBinString(after); + if (!Buf) Buf = ""; + return Buf; + } + case 9: { + IO.seek(i + 6); + local Before = IO.readn('i'); + local Buf = Rindro_Script.GetBinString(Before); + out += Rindro_Script.GetLoadString(Buf); + } + default: + out += ""; + break; + } + + return out; + } + + + function ReadEquipment(ReadObject) { + local EquipmentAtt = {}; + if (ReadObject.Size >= 7) { + //创建Blob对象 + local IOBUF = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size); + local IO = BlobEx(IOBUF.readblob(IOBUF.len())); + //以5为单步从第二位开始遍历字节 + local i = 2; + while (true) { + if (i< ReadObject.Size && ReadObject.Size - i >= 5) { + local str = Rindro_Script.UnpackData(IO, i); + i += 5; + + //名称 + if (str == "[name]") { + local RealKey = str.slice(1, str.len() - 1); + EquipmentAtt[RealKey] <- Rindro_Script.UnpackData(IO, i); + i += 5; + } + //装备类型 + else if (str == "[equipment type]") { + local Buf = Rindro_Script.UnpackData(IO, i); + EquipmentAtt["equipment_type"] <- Buf.slice(1, -1); + i += 5; + } + //称号动画 + else if (str == "[custom animation]") { + local Buf = Rindro_Script.UnpackData(IO, i).tolower(); + EquipmentAtt["custom_animation"] <- Buf; + i += 5; + } + //光环生成效果 + else if (str == "[aurora graphic effects]") { + EquipmentAtt["Aurora"] <- {}; + EquipmentAtt["Aurora"].Back <- []; + EquipmentAtt["Aurora"].Front <- []; + local Count = Rindro_Script.UnpackData(IO, i); + i += 5; + for (local z = 0; z< Count; z++) { + local Layer = Rindro_Script.UnpackData(IO, i); + i += 5; + local Path = Rindro_Script.UnpackData(IO, i).tolower(); + i += 5; + if (Layer == 0) EquipmentAtt["Aurora"].Back.append(Path); + if (Layer == 1) EquipmentAtt["Aurora"].Front.append(Path); + } + i += 5; + } + //隐藏图层 + else if (str == "[hide layer]") { + EquipmentAtt["hidelayer"] <- []; + while (true) { + local Buffer = Rindro_Script.UnpackData(IO, i); + i += 5; + if (Buffer == "[/hide layer]") { + break; + } + EquipmentAtt["hidelayer"].append(Buffer); + } + } + //Ani + else if (str == "[animation job]") { + local Job = Rindro_Script.UnpackData(IO, i).slice(1, -1); + local SpacePos = Job.find(" "); + if (SpacePos) { + Job = Job.slice(0, SpacePos) + Job.slice(SpacePos + 1); + } + i += 5; + EquipmentAtt["Ani_" + Job] <- {}; + i += 5; + + local Index1 = Rindro_Script.UnpackData(IO, i); + i += 5; + local Index2 = Rindro_Script.UnpackData(IO, i); + i += 5; + EquipmentAtt["Ani_" + Job].variation <- [Index1, Index2]; + EquipmentAtt["Ani_" + Job].layer_variation <- []; + while (true) { + try { + local Ret = Rindro_Script.UnpackData(IO, i); + i += 5; + if (Ret == "[animation job]" || (Rindro_Script.endswith(Ret, "]") && Ret != "[equipment ani script]" && Ret != "[layer variation]")) { + i -= 5; + break; + } else if (Ret == "[layer variation]") { + local InfoBuf = {}; + InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i); + i += 5; + InfoBuf.Path <- Rindro_Script.UnpackData(IO, i); + i += 5; + EquipmentAtt["Ani_" + Job].layer_variation.append(InfoBuf); + } + } catch (exception) { + break; + } + } + } + } else break; + } + } + return EquipmentAtt; + } + + + function ReadAnimation(ReadObject) { + local Ro = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size); + Ro = BlobEx(Ro.readblob(Ro.len())); + local AniObject = { + Img_List = [], + Frame = [], + Flag = {} + }; + + local Frame_Max = Ro.readn('s'); + local Img_Count = Ro.readn('s'); + + //Img的路径读取 存入数组 + for (local index = 0; index< Img_Count; index++) { + local Buf = Ro.readn('i'); + local ImgPath = Ro.GetString(Buf); + //有可能Img有空路径 + AniObject.Img_List.append(ImgPath); + } + //Ani头部标签数量 + local Ani_H_Item_Count = Ro.readn('s'); + + //处理标签 + for (local index = 0; index< Ani_H_Item_Count; index++) { + //标签类型 + local Type = Ro.readn('s'); + + switch (Type) { + case 0: + case 1: { + local Key = Rindro_Script.Get_Ani_Flag(Type); + local Value = Ro.readn('c'); + AniObject.Flag.rawset(Key, Value); + break; + } + case 3: + case 28: { + local Key = Rindro_Script.Get_Ani_Flag(Type); + local Value = Ro.readn('s'); + AniObject.Flag.rawset(Key, Value); + break; + } + case 18: + // print("残影解析"); + //此处无解析 暂时先保证运行 残影功能暂时用不上 + Ro.readn('c'); + Ro.readn('i'); + Ro.readn('i'); + Ro.readn('i'); + Ro.Get256(); + Ro.Get256(); + Ro.Get256(); + Ro.Get256(); + Ro.readn('s'); + break; + default: + break; + } + } + + //读取每一个Img + for (local index = 0; index< Frame_Max; index++) { + //帧结构体对象 + local FrameObject = { + AttackBox = [], + DamageBox = [], + Flag = {}, + }; + + //碰撞框项目数量 + local Ani_Box_Item_Count = Ro.readn('s'); + for (local _i = 0; _i< Ani_Box_Item_Count; _i++) { + local Box_Type = Ro.readn('s'); + local D_Box_b = []; + for (local _k = 0; _k< 6; _k++) { + D_Box_b.append(Ro.readn('i')); + } + if (Box_Type == 15) { + FrameObject.AttackBox.append(D_Box_b); + } else { + FrameObject.DamageBox.append(D_Box_b); + } + // //0是攻击框 1是受击框 + // FrameObject.Box.rawset(15 - Box_Type, D_Box_b); + } + + //调用的第几个Img + local Index_Buf = Ro.GetShort(); + //如果等于-1说明是img路径为空 + if (Index_Buf != 65535) { + FrameObject.Img_Path <- AniObject.Img_List[Index_Buf].tolower(); + //Img中的PNG下标 + FrameObject.Img_Index <- Ro.readn('s'); + } else { + FrameObject.Img_Path <- ""; + FrameObject.Img_Index <- 0; + } + + //坐标 + FrameObject.Pos <- { + x = Ro.readn('i'), + y = Ro.readn('i'), + }; + + //Img中的项目数量 + local Img_Flag_Count = Ro.readn('s'); + for (local _o = 0; _o< Img_Flag_Count; _o++) { + local Img_Flag_Type = Ro.readn('s'); + local Key; + local Value; + switch (Img_Flag_Type) { + case 0: + case 1: + case 10: + Key = Rindro_Script.Get_Ani_Flag(Img_Flag_Type); + Value = Ro.readn('c'); + FrameObject.Flag.rawset(Key, Value); + break; + case 3: + Key = "COORD"; + Value = Ro.readn('s'); + FrameObject.Flag.rawset(Key, Value); + break; + case 17: + Key = "PRELOAD"; + Value = 1; + FrameObject.Flag.rawset(Key, Value); + break; + case 7: + Key = "IMAGE_RATE"; + Value = { + x = Ro.GetFloat(), + y = Ro.GetFloat() + }; + FrameObject.Flag.rawset(Key, Value); + break; + case 8: + Key = "IMAGE_ROTATE"; + Value = Ro.GetFloat(); + FrameObject.Flag.rawset(Key, Value); + break; + case 9: + Key = "RGBA"; + Value = [ + Ro.Get256(), + Ro.Get256(), + Ro.Get256(), + Ro.Get256(), + ]; + FrameObject.Flag.rawset(Key, Value); + break; + case 11: + local Effect_Type = Ro.readn('s'); + Key = "GRAPHIC_EFFECT_" + Rindro_Script.Get_Ani_Effect_Type(Effect_Type); + switch (Effect_Type) { + case 5: + Value = [Ro.Get256(), Ro.Get256(), Ro.Get256()]; + break; + case 6: + Value = [Ro.GetShort(), Ro.GetShort()]; + break; + } + FrameObject.Flag.rawset(Key, Value); + break; + case 12: + Value = Ro.readn('i'); + FrameObject.Delay <- Value; + break; + case 13: + Key = "DAMAGE_TYPE"; + Value = Rindro_Script.Get_Ani_Damage_Type(Ro.readn('s')); + FrameObject.Flag.rawset(Key, Value); + break; + case 16: + local SoundTempSize = Ro.readn('i'); + Key = "PLAY_SOUND"; + Value = Ro.GetString(SoundTempSize); + FrameObject.Flag.rawset(Key, Value); + break; + case 23: + Key = "SET_FLAG"; + Value = Ro.readn('i'); + FrameObject.Flag.rawset(Key, Value); + break; + case 24: + Key = "FLIP_TYPE"; + Value = Rindro_Script.Get_Ani_Flip_Type(Ro.readn('s')); + FrameObject.Flag.rawset(Key, Value); + break; + case 25: + Key = "LOOP_START"; + FrameObject.Flag.rawset(Key, 1); + break; + case 26: + Key = "LOOP_END"; + Value = Ro.readn('i'); + FrameObject.Flag.rawset(Key, Value); + break; + case 27: + Key = "CLIP"; + Value = [ + Ro.GetShort(), + Ro.GetShort(), + Ro.GetShort(), + Ro.GetShort(), + ]; + FrameObject.Flag.rawset(Key, Value); + break; + default: + break; + } + } + + //每一帧都是一个结构体 存入数组中 + AniObject.Frame.append(FrameObject); + } + return AniObject; + } + + //获取文件并处理 + function GetFileData(Path, Func) { + local N_Buffer = R_Utils.GetScriptFileReader(Path); + if (N_Buffer) { + local IO = Sq_Point2Blob(L_sq_P2I(N_Buffer.Buffer.C_Object), N_Buffer.Size); + IO = BlobEx(IO.readblob(IO.len())); + return Rindro_Script.ResolvingData(IO, Func, Path); + } else { + print(Path + "找不到文件!"); + return null; + } + } + + function ResolvingData(IO, Func, Path) { + local DataTable = {}; + DataTable.filepath <- Path; + local DataArr = []; + local Length = IO.len(); + if (Length >= 7) { + local i = 2; + while (true) { + if (i< Length && Length - i >= 5) { + local str = Rindro_Script.UnpackData(IO, i); + i += 5; + DataArr.push(str); + } else break; + } + Func(DataTable, _PVF_Data_(DataArr)); + return DataTable; + } + return null; + } +} +// Rindro_Script.GetBin(); +Rindro_Script.InitLoad_String(); \ No newline at end of file diff --git a/CSBase/_Z_Data/CharacterInfoData.nut b/CSBase/_Z_Data/CharacterInfoData.nut new file mode 100644 index 0000000..8571a01 --- /dev/null +++ b/CSBase/_Z_Data/CharacterInfoData.nut @@ -0,0 +1,113 @@ +/* +文件名:CharacterInfoData.nut +路径:Base/_Z_Data/CharacterInfoData.nut +创建日期:2024-09-03 11:34 +文件用途:角色信息数据 +*/ + +//读取属性数据 +function Lenheart_Character_GetAttribute(Address) { + //传入读传入不传读自己 + local ObjectAddress = Address; + if (ObjectAddress == null) + ObjectAddress = L_sq_RA(0x1AB7CDC); + if (!ObjectAddress) return; + + local Info = {}; + //当前HP + Info.CurHp <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2BEC); + //总HP + Info.MaxHp <- L_sq_RA(ObjectAddress + 0x36A0); + //当前MP + Info.CurMp <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2BF8); + //总MP + Info.MaxMp <- L_sq_RA(ObjectAddress + 0x36A4); + + //力量 + Info.Strength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2364); + //智力 + Info.Intellect <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2394); + //体力 + Info.Vitality <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x237C); + //精神 + Info.Spirit <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x23AC); + //物理攻击 (没读武器精通) + Info.PhysicalAttack <- (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E54) * (Info.Strength.tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1EB4); + //魔法攻击 + Info.MagicalAttack <- (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E84) * (Info.Intellect.tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1ED8); + //独立攻击力 //TODO 需要加上成长独立攻击力 需要服务端发送给我 + Info.IndependentAttack <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x22C8) + MemoryTool.DecodeMemoryData(ObjectAddress + 0x22F8); + + //物理防御 + Info.PhysicalDefend <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x273C); + //魔法防御 + Info.MagicalDefend <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x276C); + //物理暴击 + Info.PhysicalCrit <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1F14); + //魔法暴击 + Info.MagicalCrit <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1F20); + + //攻击速度 + Info.AttackSpeed <- (MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x2688) - 1.0) * 100.0; + //释放速度 + Info.ReleaseSpeed <- (MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x26A0) - 1.0) * 100.0; + //移动速度 + Info.MoveSpeed <- (MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x2670) - 1.0) * 100.0; + + //抗魔值 + local Kbuf = 0; + for (local i = 1; i< 13; ++i) { + local EquOffset = Rindro_GetEquAddr(i); + local AbAddress = L_sq_RA(ObjectAddress + EquOffset); + if (AbAddress) { + Kbuf += MemoryTool.DecodeMemoryData(AbAddress + 0xAD4); + } + } + Info.AntiMagic <- Kbuf; + + + //命中率 + Info.HitRate <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1F50); + //闪避率 + Info.DodgeRate <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1C50); + //HP回复量 + Info.HPRecovery <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1D64) * 1.6; + //MP回复量 + Info.MPRecovery <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1D7C) * 7.2; + //僵直度 + Info.StunRate <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1DF4); + //硬直 + Info.StunResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1DDC); + + //火属性强化 + Info.FireStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B54); + //冰属性强化 + Info.IceStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B60); + //光属性强化 + Info.LightStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B78); + //暗属性强化 + Info.DarkStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B6C); + //火属性抗性 + Info.FireResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1AF4); + //冰属性抗性 + Info.IceResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B00); + //光属性抗性 + Info.LightResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B18); + //暗属性抗性 + Info.DarkResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B0C); + + //名望值 + Info.Fame <- 0; + //最终伤害 + Info.FinalDamage <- 0; + + return Info; +} + +// function Rindro_GetCharacterInfoCallBack(Chunk) { +// local Jso = Json.Decode(Chunk); +// Jso.op <- 20069011; +// Jso.Info <- Lenheart_Character_GetAttribute(null); +// Rindro_BaseToolClass.SendPackEx(Jso); +// } +// Pack_Control.rawset(20069010, Rindro_GetCharacterInfoCallBack); \ No newline at end of file diff --git a/FileConfig.json b/FileConfig.json index 3af7036..953185b 100644 --- a/FileConfig.json +++ b/FileConfig.json @@ -25,6 +25,33 @@ "Base/UI/Lenheart_Character_Info_Class.nut", "Base/Interface.nut" ], + + "CSBaseScript": [ + "CSBase/_ENUM/_ENUM_.nut", + "CSBase/_Tool/Json_Class.nut", + "CSBase/_Tool/Packet_Class.nut", + "CSBase/_Tool/BaseTool_Class.nut", + "CSBase/_Tool/MemoryClass.nut", + "CSBase/_Tool/Hacker_Class.nut", + "CSBase/_Tool/Hacker_RegApi.nut", + "CSBase/_Tool/Script_Class.nut", + "CSBase/_Tool/Image_Class.nut", + "CSBase/_Tool/Animation_Class.nut", + "CSBase/CallBack/PackControl.nut", + "CSBase/CallBack/DrawMain.nut", + "CSBase/CallBack/DrawHudMain.nut", + "CSBase/CallBack/PushDamage.nut", + "CSBase/CallBack/GetDamageRate.nut", + "CSBase/_Z_Data/CharacterInfoData.nut", + "CSBase/UI/Lenheart_Cursor_Class.nut", + "CSBase/UI/OldWindowsMap.nut", + "CSBase/UI/Lenheart_UI_Class.nut", + "CSBase/UI/Lenheart_Ani_Class.nut", + "CSBase/UI/Lenheart_Each_Class.nut", + "CSBase/UI/Lenheart_Event_Class.nut", + "CSBase/UI/Lenheart_Character_Info_Class.nut", + "CSBase/Interface.nut" + ], "ProjectScript": { "累计奖励": { "price": 10, diff --git a/Project/HudUi/HudUi.nut b/Project/HudUi/HudUi.nut index 8e27c08..181f5f4 100644 --- a/Project/HudUi/HudUi.nut +++ b/Project/HudUi/HudUi.nut @@ -42,7 +42,14 @@ class HudUiC extends LenheartNewUI_Windows { //修补内存 function FixMemory() { - + printf("宽屏UI已加载!"); + printf("宽屏UI已加载!"); + printf("宽屏UI已加载!"); + printf("宽屏UI已加载!"); + printf("宽屏UI已加载!"); + printf("宽屏UI已加载!"); + printf("宽屏UI已加载!"); + L_sq_WAB(0x400E10, 9); L_sq_WAB(0x400E11, 4); L_sq_WAB(0x400E12, 7); @@ -53,6 +60,7 @@ class HudUiC extends LenheartNewUI_Windows { L_sq_WAB(0x400E17, 7); L_sq_WAB(0x400E18, 0); + return; // 干掉nut初始化基础技能栏坐标 L_sq_WAB(0x4B3239, 0xEB); @@ -192,7 +200,7 @@ class HudUiC extends LenheartNewUI_Windows { LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); FixMemory(); - + return; local BallFrameArr = []; for (local i = 0; i< 120; i++) { local T = { @@ -628,6 +636,7 @@ class HudUiC extends LenheartNewUI_Windows { function TopShow(obj) { + return; //血蓝球悬停逻辑 BallRectLogic(obj); //经验条悬停逻辑 @@ -636,12 +645,14 @@ class HudUiC extends LenheartNewUI_Windows { } function BottomShow(obj) { + return; DrawMain(obj); LenheartNewUI_Windows.Show(obj); } //动态窗口设置逻辑 function Active_Windows_SyncPos() { + return; //任务快捷导航窗口 { local WindowAddress = L_sq_GetWindowById(1); @@ -651,6 +662,7 @@ class HudUiC extends LenheartNewUI_Windows { //逻辑入口 function Proc(obj) { + return; LenheartNewUI_Windows.SyncPos(X, Y); Active_Windows_SyncPos(); } diff --git a/Project/NpcTransaction/NpcTransaction.nut b/Project/NpcTransaction/NpcTransaction.nut index 13c847d..e368c76 100644 --- a/Project/NpcTransaction/NpcTransaction.nut +++ b/Project/NpcTransaction/NpcTransaction.nut @@ -12,8 +12,9 @@ class NpcTransactionC extends LenheartNewUI_Windows { // NoWindow = true; //是否可见 - // Visible = false; + Visible = false; + NPCPath = null; EquList = null; NPCList = null; Dialog = null; @@ -41,8 +42,15 @@ class NpcTransactionC extends LenheartNewUI_Windows { CurNpcId = -1; + NPCAvatar = null; + //当前交易NPC头像信息 + CurNpcAvatar = null; + + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; + NPCAvatar = {}; //注册控件 RegisterWidget(); @@ -81,7 +89,7 @@ class NpcTransactionC extends LenheartNewUI_Windows { if (Jso.rawin("glod")) { TransactionGlod = Jso.glod; } - if(Jso.rawin("equ")){ + if (Jso.rawin("equ")) { TransactionEqu = Jso.equ; } }.bindenv(this)); @@ -115,7 +123,7 @@ class NpcTransactionC extends LenheartNewUI_Windows { CloseWindow(); }.bindenv(this); ConfirmButton.SetCallBackFunc(function(Btn) { - if (mode >= 1 && mode < 3) { + if (mode >= 1 && mode< 3) { Btn.Visible = true; } else { Btn.Visible = false; @@ -146,9 +154,11 @@ class NpcTransactionC extends LenheartNewUI_Windows { L_sq_DrawCode("Lv." + PlayerLevel.tostring(), X + 46, Y + 185, sq_RGBA(179, 169, 135, 255), 0, 1); L_sq_DrawCode(PlayerName, X + 46, Y + 196, sq_RGBA(179, 169, 135, 255), 0, 1); - L_sq_DrawImg("map/npc/npcface02.img", 5, X + 20, Y + 44); - L_sq_DrawCode("Lv.99", X + 46, Y + 41, sq_RGBA(179, 169, 135, 255), 0, 1); - L_sq_DrawCode(NpcName, X + 46, Y + 53, sq_RGBA(179, 169, 135, 255), 0, 1); + if (CurNpcAvatar) { + L_sq_DrawImg(CurNpcAvatar.Path, CurNpcAvatar.Index, X + 20, Y + 44); + L_sq_DrawCode(CurNpcAvatar.Name, X + 46, Y + 47, sq_RGBA(179, 169, 135, 255), 0, 1); + } + //置换装备 @@ -162,7 +172,7 @@ class NpcTransactionC extends LenheartNewUI_Windows { } //交易装备 - if(TransactionEqu){ + if (TransactionEqu) { DrawItemBase(X + 122, Y + 98, TransactionEqu, 1); } @@ -248,7 +258,7 @@ class NpcTransactionC extends LenheartNewUI_Windows { } Dialog.append(T); } - }else if (Fragment == "[value]") { + } else if (Fragment == "[value]") { while (true) { local Fbuf = Data.Get(); if (Fbuf == "[/value]") { @@ -260,6 +270,15 @@ class NpcTransactionC extends LenheartNewUI_Windows { } } }); + + NPCPath = {}; + Rindro_Script.GetFileData("npc/npc.lst", function(DataTable, Data) { + while (!Data.Eof()) { + local Id = Data.Get(); + local Path = "npc/" + Data.Get().tolower(); + NPCPath.rawset(Id, Path); + } + }); } function RegNpc() { @@ -311,8 +330,33 @@ class NpcTransactionC extends LenheartNewUI_Windows { } } + function GetNpcAvatar(Id) { + if (NPCAvatar.rawin(Id)) return NPCAvatar[Id]; + + //获取NPC路径 + local Path = NPCPath.rawget(CurNpcId); + local Info = Rindro_Script.GetFileData(Path, function(DataTable, Data) { + while (!Data.Eof()) { + local Fragment = Data.Get(); + if (Fragment == "[popup face]") { + DataTable.ImgPath <- Data.Get().tolower(); + DataTable.Index <- Data.Get(); + } else if (Fragment == "[name]") { + DataTable.Name <- Sq_ConvertWideChar(Data.Get(), "big5"); + } + } + }); + + NPCAvatar.rawset(Id, { + Path = Info.ImgPath, + Index = Info.Index, + Name = Info.Name + }); + return NPCAvatar[Id]; + } + function InitWindow() { - //TODO 读NPC头像 读NPC名字 + CurNpcAvatar = GetNpcAvatar(CurNpcId); Visible = true; } } diff --git a/user/116.205.165.25/1_atgunner_1.c b/user/116.205.165.25/1_atgunner_1.c new file mode 100644 index 0000000..894f10d --- /dev/null +++ b/user/116.205.165.25/1_atgunner_1.c @@ -0,0 +1,3396 @@ + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +function createOnlyDrawObject_ATGunner_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createSkillPassive_ATGunner_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + +function setHitonSubweapon_bykk(obj) +{ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("gunner/effect/animation/hitonsubweaponat.ani"), 0, 0);//4 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HITONSUBWEAPON, -1, 2, 1.0) + 100; + local hitDelayRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HITONSUBWEAPON, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo); + rateDamager = rateDamager * (100.0 + hitDelayRate.tofloat()) / 100.0; + // print("rateDamager = "+rateDamager); + sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager); +} + +function ProcPassiveSkill_ATGunner_Blaster(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_BYKK_SUBWEAPONMASTERY: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_subweaponmastery.nut", true); + } + break; + case SKILL_BYKK_APG_63: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_apg_63.nut", true); + } + break; + } +} + +function onStart_appendage_at_subweaponmastery(appendage) +{ + if(!appendage) return; + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponType = obj.getWeaponSubType(); + if(weaponType == -1) return; + if(weaponType == 3){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY); + local physicalEquAttack = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 2, skillLevel); + // print(magicalEquAttack); + local change_appendage = appendage.sq_getChangeStatus("subweaponmastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("subweaponmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (physicalEquAttack * 0.1).tofloat()); + } + } + //if(sq_GetCurrentModuleType() == 3){ + // setSkillBonusRate_AtBlaster_bykk(obj); + //} +} + +function onStart_appendage_at_apg_63(appendage) +{ + if(!appendage) return; + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_APG_63); + local physicalEquAttack = sq_GetLevelData(obj, SKILL_BYKK_APG_63, 1, skillLevel); + local criticaldRate = sq_GetLevelData(obj, SKILL_BYKK_APG_63, 0, skillLevel); + // print(magicalEquAttack); + local change_appendage = appendage.sq_getChangeStatus("apg_63"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("apg_63",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (physicalEquAttack * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticaldRate * 0.1).tofloat()); + } +} + +function useSkill_before_ATGunner_Blaster(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) +{ + local bChangedMp = false; + // print("oldSkillMpRate = "+oldSkillMpRate); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY); + // print("skillLevel = "+skillLevel); + if(skillLevel > 0 && obj.getWeaponSubType() == 3){ + if(skillIndex != SKILL_BYKK_ANCIENTTRIGGER && skillIndex != SKILL_BYKK_OPERATIONRAZE){ + local mpComsumeRate = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 0, skillLevel); + local newMpRate = (100.0 - mpComsumeRate.tofloat()) / 100.0; + // print("newMpRate = "+newMpRate); + obj.setSkillMpRate(skillIndex, newMpRate); + bChangedMp = true; + } + } + return true; +} + +function startSkillCoolTime_atgunner_2blaster_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + print("currentCoolTime11 = "+currentCoolTime); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY); + if(skillLevel > 0){ + local coolTimeRate = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 4, skillLevel); + local newCoolTime = currentCoolTime * (100 - coolTimeRate) / 100; + print("test = "+newCoolTime); + return newCoolTime; + } + else return currentCoolTime; +} + +function procSkill_ATGunner_2blaster_bykk(obj) +{ + if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 5) > 0) obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWER, false); + if(sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 7) > 0){ + obj.setSkillCommandEnable(SKILL_BYKK_STINGEREX, false); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_stingerex.nut")){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 4); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 10, 1.0) + 100; + local proc = sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 7); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_stingerex.nut", true); + AddAppendage.getVar("custom").setInt(0, proc); + AddAppendage.getVar("custom").setInt(1, totalDamage); + AddAppendage.getVar("custom").setInt(2, hitMax); + AddAppendage.getVar("custom").setInt(3, sizeRate); + } + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_stingerex.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atgunner/2_blaster_bykk/ap_stingerex.nut"); + } + local attackObj = obj.getVar("AncientTrigger_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + local state = colObj.getState(); + switch(state){ + case 0: + case 1: + case 3: + case 4: + case 6: + if(colObj.getVar().getBool(state) == false){ + colObj.getVar().setBool(state, true); + local pAni = colObj.getCurrentAnimation(); + if(pAni) pAni.setSpeedRate(200.0); + } + break; + case 2: + if(obj.getVar("AncientTrigger_bool").getBool(2) == false){ + obj.getVar("AncientTrigger_bool").setBool(2, true); + local pAni = colObj.getCurrentAnimation(); + if(pAni) pAni.setSpeedRate(200.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,240,1,10,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,8,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,240,1,10,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,9,0,0,0,0,0,0,0,0); + } + break; + case 5: + if(obj.getVar("AncientTrigger_bool").getBool(0) == false){ + local pAni = colObj.getCurrentAnimation(); + if(pAni) pAni.setSpeedRate(200.0); + sq_ClearAttackBox(pAni); + obj.getVar("AncientTrigger_bool").setBool(0, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANCIENTTRIGGER, -1, 6, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_ANCIENTTRIGGER, 1); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ANCIENTTRIGGER, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,400,1,65,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,1,totalDamage,hitMax,lifeTime,0,0,0,0,0); + sq_flashScreen(obj,300,lifeTime - 300,100,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + break; + case 7: + if(obj.getVar("AncientTrigger_bool").getBool(1) == false){ + obj.getVar("AncientTrigger_bool").setBool(1, true); + local pAni = colObj.getCurrentAnimation(); + if(pAni) pAni.setSpeedRate(200.0); + local size = obj.getVar("AncientTrigger_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local attackObj = obj.getVar("AncientTrigger_obj").get_obj_vector(i); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.setValid(false); + } + } + } + } + break; + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > 0){ + if(!loadSlot.isCooling() && loadnumber + 1 <= 3 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 6)) loadSlot.increaseLoadCount(1); + local state = obj.getState(); + if(state > 12 || state == 0){ + obj.setSkillCommandEnable(SKILL_BYKK_STINGER,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_STINGER); + if(b_useskill != -1){ + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/lancer/stingerfm92mk2lancer_00.ani", 0, -1, 85); + obj.sq_PlaySound("FG_LANCER"); + obj.sq_PlaySound("STINGER_SHOT"); + local createMax = sq_GetIntData(obj, SKILL_BYKK_STINGER, 4); + local bonusRate = 1.0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) bonusRate = 0.6; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 0, bonusRate) + 100; + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 3, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,-1,130,obj.getDirection(),2,SKILL_BYKK_STINGER,4,totalDamage,sizeRate,createMax,0,0,0,0,0); + if(loadSlot.getEndCoolTime() != 6000 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 10)){obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER); return;} + loadSlot.decreaseLoadCount(1); + loadSlot.setStartCool(); + } + } + } + else{ + if(!loadSlot.isCooling()){ + loadSlot.increaseLoadCount(1); + loadSlot.setStartCool(); + } + } + } + else{ + local loadnumber = 3 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 6); + local coolTime = 6000 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 10); + print("coolTime = "+coolTime); + obj.sq_AddSkillLoad(SKILL_BYKK_STINGER, 184, loadnumber, coolTime); + } + } + else{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER); + } + + local isLaserLoad = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3); + if(isLaserLoad > 0){ + local loadSlot2 = obj.sq_GetSkillLoad(SKILL_BYKK_LASERRIFLE); + if(loadSlot2){ + obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE, false); + local loadnumber = loadSlot2.getRemainLoadNumber(); + if(loadnumber > 0){ + if(!loadSlot2.isCooling()){ + local loadMax = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3); + local addLoadNumber = loadMax - loadnumber; + loadSlot2.increaseLoadCount(addLoadNumber); + } + local state = obj.getState(); + if(state > 12 || state == 0){ + obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LASERRIFLE); + if(b_useskill != -1){ + obj.getVar("laserCharge_bool").setBool(0, false); + obj.getVar("laserCharge_bool").setBool(1, false); + obj.getVar("laserCharge_bool").setBool(2, false); + obj.getVar("laserCharge_custom").setInt(10, 0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LASERRIFLE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LASERRIFLE, STATE_PRIORITY_IGNORE_FORCE, true); + loadSlot2.decreaseLoadCount(1); + loadSlot2.setStartCool(); + } + } + } + else{ + if(!loadSlot2.isCooling()){ + local loadMax = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3); + loadSlot2.increaseLoadCount(loadMax); + loadSlot2.setStartCool(); + } + } + } + else{ + local loadMax = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3); + local coolTime = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 4); + print("laser cool time = " + coolTime); + obj.sq_AddSkillLoad(SKILL_BYKK_LASERRIFLE, 171, loadMax, coolTime); + } + } + else{ + local loadSlot2 = obj.sq_GetSkillLoad(SKILL_BYKK_LASERRIFLE); + if(loadSlot2) obj.sq_RemoveSkillLoad(SKILL_BYKK_LASERRIFLE); + } + //FSC7 + if(FSC7_STONE == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_FSC_7) > 0){ + local loadSlot3 = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7); + if(loadSlot3){ + obj.setSkillCommandEnable(SKILL_BYKK_FSC_7, false); + local loadnumber = loadSlot3.getRemainLoadNumber(); + if(loadnumber > 0){ + if(!loadSlot3.isCooling()){ + local loadMax = 2; + if(loadnumber < 2){ + loadSlot3.increaseLoadCount(1); + loadSlot3.setStartCool(); + } + } + local state = obj.getState(); + if(state == STATE_BYKK_FSC_7) return; + if(state > 12 || state == 0){ + obj.setSkillCommandEnable(SKILL_BYKK_FSC_7,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FSC_7); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_FSC_7, STATE_PRIORITY_IGNORE_FORCE, true); + loadSlot3.decreaseLoadCount(1); + loadSlot3.setStartCool(); + } + } + } + else{ + if(!loadSlot3.isCooling()){ + loadSlot3.increaseLoadCount(1); + loadSlot3.setStartCool(); + } + } + } + else{ + local loadMax = 2; + local coolTime = 15000; + print("fsc7 cool time = " + coolTime); + obj.sq_AddSkillLoad(SKILL_BYKK_FSC_7, 137, loadMax, coolTime); + } + } + else{ + local loadSlot3 = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7); + if(loadSlot3) obj.sq_RemoveSkillLoad(SKILL_BYKK_FSC_7); + } + //FM31-125 + if(FM31_STONE == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_FM31) > 0){ + local loadSlot4 = obj.sq_GetSkillLoad(SKILL_BYKK_FM31); + if(loadSlot4){ + obj.setSkillCommandEnable(SKILL_BYKK_FM31, false); + local loadnumber = loadSlot4.getRemainLoadNumber(); + if(loadnumber > 0){ + if(!loadSlot4.isCooling()){ + local loadMax = 4; + if(loadnumber < 4){ + loadSlot4.increaseLoadCount(1); + loadSlot4.setStartCool(); + } + } + local state = obj.getState(); + if(state == STATE_BYKK_FM31) return; + if(state > 12 || state == 0){ + obj.setSkillCommandEnable(SKILL_BYKK_FM31,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FM31); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FM31, STATE_PRIORITY_IGNORE_FORCE, true); + loadSlot4.decreaseLoadCount(1); + loadSlot4.setStartCool(); + } + } + } + else{ + if(!loadSlot4.isCooling()){ + loadSlot4.increaseLoadCount(1); + loadSlot4.setStartCool(); + } + } + } + else{ + local loadMax = 4; + local coolTime = 2500; + print("FM31 cool time = " + coolTime); + obj.sq_AddSkillLoad(SKILL_BYKK_FM31, 137, loadMax, coolTime); + } + } + else{ + local loadSlot4 = obj.sq_GetSkillLoad(SKILL_BYKK_FM31); + if(loadSlot4) obj.sq_RemoveSkillLoad(SKILL_BYKK_FM31); + } +} + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +//M-3喷火器 +function checkExecutableSkill_FlameThrower(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMETHROWER); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_FLAMETHROWER); + local timer = obj.getVar("flamethrower").get_ct_vector(0); + if(!timer){ + obj.getVar("flamethrower").clear_ct_vector(); + obj.getVar("flamethrower").push_ct_vector(); + timer = obj.getVar("flamethrower").get_ct_vector(0); + } + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlameThrower(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlameThrower(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(185); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/atfrontrapid1a.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("FG_FGUN"); + break; + case 1: + obj.sq_SetCurrentAnimation(186); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/atweapon_glow.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/atfrontrapid2a.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/body_glow_woman.ani"), 0, 0); + break; + case 10: + obj.sq_SetCurrentAnimation(149); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("FG_FGUN"); + break; + case 11: + obj.sq_SetCurrentAnimation(148); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atajreinforceparts/flamethrower/weapon_glow_3.ani"), -20, 15); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0); + break; + case 12: + obj.sq_SetCurrentAnimation(147); + break; + } +} + +function onEndCurrentAni_FlameThrower(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWER, -1, 4, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 2, skillLevel); + local hitDelayRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 3, skillLevel); + local moveRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 3, skillLevel); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWER, 3); + local sub = 0, speed = 150 / moveRate * 1000; + + if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWER, 4) > 0){ + local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 1, skillLevel); + local hitMax = timeMax / hitTime; + totalDamage = totalDamage * hitMax; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,140,0,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWER,2,totalDamage,sizeRate,0,0,0,0,0,0); + obj.setTimeEvent(2, 50, 1, false); + obj.sq_PlaySound("FG_FGUN"); + return; + } + if(subState == 10){ + sub = 1; + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) speed = speed / sq_GetIntData(obj, SKILL_BYKK_PANDORA_01, 0) * 100; + } + obj.setTimeEvent(1, speed, -1, false); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,140,0,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWER,1,totalDamage,hitTime,hitDelayRate,sub,sizeRate,0,0,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true); + break; + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlameThrower(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 11: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + if(subState >= 10){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true); + return; + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + } + else{ + local timer = obj.getVar("flamethrower").get_ct_vector(0); + if(timer){ + local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 1, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER)); + local currentT = timer.Get(); + if(currentT >= timeMax){ + if(subState >= 10){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true); + return; + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + } + } + } + break; + } +} + +function onKeyFrameFlag_FlameThrower(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_FlameThrower(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj), baseSpeed = 2; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos - baseSpeed); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos + baseSpeed); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed); + return; + } + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_FlameThrower(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_FLAMETHROWER){ + local attackObj = obj.getVar("flamethrower_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 22) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } +} + + +//加农炮 +function checkExecutableSkill_CannonBall(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CANNONBALL); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_CANNONBALL); + obj.getVar("cannonball_bool").setBool(0, true); + obj.getVar("cannonball_bool").setBool(1, true); + obj.getVar("cannonball_eff").clear_obj_vector(); + obj.sq_IntVectClear(); + if( sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CANNONBALL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_CannonBall(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_CannonBall(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(101); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball1.ani"), 185, -105); + // obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball2.ani"), 185, -105); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball1.ani", 185, 0, 105); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball2.ani", 185, 0, 105); + obj.getVar("cannonball_eff").push_obj_vector(pooledObj); + obj.getVar("cannonball_eff").push_obj_vector(pooledObj2); + break; + case 10: + obj.sq_SetCurrentAnimation(102); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball1.ani"), 170, -45); + // obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball2.ani"), 170, -45); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball1.ani", 170, 0, 45); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball2.ani", 170, 0, 45); + obj.getVar("cannonball_eff").push_obj_vector(pooledObj); + obj.getVar("cannonball_eff").push_obj_vector(pooledObj2); + break; + } + obj.sq_PlaySound("FG_CANNONBALL_GET"); + obj.sq_PlaySound("CANNONBALL_READY"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_CannonBall(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_CannonBall(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local stateTime = obj.sq_GetStateTimer(); + if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_CANNONBALL, 0)){ + switch(subState){ + case 0: + if(obj.getVar("cannonball_bool").getBool(0)){ + obj.getVar("cannonball_bool").setBool(0, false); + // obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball3.ani"), 185, -105); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball3.ani", 185, 0, 105); + obj.getVar("cannonball_eff").push_obj_vector(pooledObj); + } + break; + case 10: + if(obj.getVar("cannonball_bool").getBool(0)){ + obj.getVar("cannonball_bool").setBool(0, false); + // obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball3.ani"), 170, -45); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball3.ani", 170, 0, 45); + obj.getVar("cannonball_eff").push_obj_vector(pooledObj); + } + break; + } + if(obj.getVar("cannonball_bool").getBool(1)) obj.getVar("cannonball_bool").setBool(1, false); + } + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey || stateTime >= sq_GetIntData(obj, SKILL_BYKK_CANNONBALL, 1)){ + local currentAni = obj.getCurrentAnimation(); + if(sq_GetCurrentFrameIndex(obj) <= 9){ + local size = obj.getVar("cannonball_eff").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effect = obj.getVar("cannonball_eff").get_obj_vector(i); + if(effect) effect.setValid(false); + } + obj.sq_PlaySound("FG_CANNONBALL_FIRE"); + currentAni.setCurrentFrameWithChildLayer(10); + } + } +} + +function onKeyFrameFlag_CannonBall(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local size = obj.getVar("cannonball_eff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local effect = obj.getVar("cannonball_eff").get_obj_vector(i); + if(effect) effect.setValid(false); + } + } + local subState = obj.getSkillSubState(); + local sub = 0, xpos = 185, zpos = 105, sub2 = 0; + if(subState == 10) {sub = 1; xpos = 170; zpos = 45;} + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CANNONBALL, -1, 0, 1.0) + 100; + if(obj.getVar("cannonball_bool").getBool(1) == false){ + sub2 = 1; + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CANNONBALL, -1, 1, 1.0) + 100; + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,xpos,-1,zpos,obj.getDirection(),2,SKILL_BYKK_CANNONBALL,1,totalDamage,sub,sub2,0,0,0,0,0); + obj.sq_PlaySound("CANNONBALL_SHOT"); + break; + } + return true; +} + +function onTimeEvent_CannonBall(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_CannonBall(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_CANNONBALL){ + local size = obj.getVar("cannonball_eff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local effect = obj.getVar("cannonball_eff").get_obj_vector(i); + if(effect) effect.setValid(false); + } + } + } +} + + +//反坦克炮 +function checkExecutableSkill_SteyrHeavyRifle(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STEYRHEAVYRIFLE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_STEYRHEAVYRIFLE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SteyrHeavyRifle(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SteyrHeavyRifle(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(191); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/90lvhcannon/atfrontonce1a.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/atfrontonce1a.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(190); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/90lvhcannon/atfrontonce2a.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/atfrontonce2a.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_PlaySound("R_FG_STEYR_PANDORA"); + else obj.sq_PlaySound("FG_STEYR"); + obj.sq_PlaySound("STEYR_SHOT");//STEYR_EXP + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STEYRHEAVYRIFLE, -1, 3, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STEYRHEAVYRIFLE, -1, 4, 1.0) + 100; + local expCount = sq_GetIntData(obj, SKILL_BYKK_STEYRHEAVYRIFLE, 6); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STEYRHEAVYRIFLE, -1, 5, 1.0) + 100; + local sub = 0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) sub = 1; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,65,obj.getDirection(),2,SKILL_BYKK_STEYRHEAVYRIFLE,1,totalDamage,totalDamage2,expCount,sizeRate,sub,0,0,0); + + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1){ + obj.setTimeEvent(3, 500, 1, true); + } + break; + } +} + +function onEndCurrentAni_SteyrHeavyRifle(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STEYRHEAVYRIFLE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1) break; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SteyrHeavyRifle(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SteyrHeavyRifle(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_SteyrHeavyRifle(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + else{ + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.setTimeEvent(2, 20, 20, true); + } + break; + case 2: + local v = sq_GetAccel(0, -150, timeEventCount, 20, true); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= 20){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 3: + local aniPath = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_01.ani"; + local aniPath2 = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_02.ani"; + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,-100,100); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj) + 1,0,ENUM_DRAWLAYER_NORMAL,-100,100); + local speed = 250.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + obj.setTimeEvent(4, 200, 1, false); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_SteyrHeavyRifle(obj, new_state) +{ + if(!obj) return; +} + + +//激光炮 +function checkExecutableSkill_LaserRifle(obj) +{ + if (!obj) return false; + // return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LASERRIFLE); + if (isUse){ + obj.getVar("laserCharge_bool").setBool(0, false); + obj.getVar("laserCharge_bool").setBool(1, false); + obj.getVar("laserCharge_bool").setBool(2, false); + obj.getVar("laserCharge_custom").setInt(10, 0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LASERRIFLE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LASERRIFLE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_LaserRifle(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_LaserRifle(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(191); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfrontrapid1a.ani"), 0, 0); + obj.sq_PlaySound("R_FG_LSHOT"); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + break; + case 1: + if(obj.getVar("laserCharge_bool").getBool(1)){ + obj.sq_SetCurrentAnimation(186); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfrontonce2a.ani"), 0, 0); + } + else{ + obj.sq_SetCurrentAnimation(190); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atuprapid2b.ani"), 0, 0); + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1){ + obj.setTimeEvent(3, 500, 1, true); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_LaserRifle(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.getVar("laserCharge_bool").setBool(2, true); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atcharge_part.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atchargingeffect.ani"), 0, 0); + + if(sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 7) > 0) obj.setTimeEvent(10, 2, -1, false); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1) break; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_LaserRifle(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("laserCharge_bool").getBool(2)){ + local bDownKey = obj.isDownSkillLastKey(); + if(bDownKey){ + if(obj.getVar("laserCharge_bool").getBool(0) == false){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE); + if(skillLevel > 0){ + local stateTime = obj.sq_GetStateTimer(); + local maxTime = sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0, skillLevel); + if(stateTime >= maxTime){ + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge1.ani", 0, 0, -10); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge2.ani", 0, 1, -9); + obj.getVar("laserCharge_bool").setBool(0, true); + obj.getVar("laserCharge_bool").setBool(1, true); + obj.sq_AddStateLayerAnimation(10010,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atchargefulleffect.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10011,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfullcharge_change.ani"), 0, 0); + obj.setTimeEvent(1, 300, 1, false); + obj.sq_PlaySound("STEYR_HEAVY_RIFLE"); + } + } + else obj.getVar("laserCharge_bool").setBool(0, true); + } + } + else{ + obj.stopTimeEvent(10); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE); + if(skillLevel > 0){ + local maxTime = sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0, skillLevel); + if(maxTime <= 50){ + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge1.ani", 0, 0, -10); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge2.ani", 0, 1, -9); + obj.getVar("laserCharge_bool").setBool(1, true); + obj.sq_AddStateLayerAnimation(10010,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atchargefulleffect.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10011,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfullcharge_change.ani"), 0, 0); + } + } + obj.getVar("laserCharge_bool").setBool(2, false); + obj.setTimeEvent(2, 500, 1, false); + obj.sq_PlaySound("FG_LSHOT_SHOT"); + obj.sq_PlaySound("LASER_HIT_02"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASERRIFLE, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 2); + local sub = 1; + if(obj.getVar("laserCharge_bool").getBool(1)){ + totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE))) / 1000; + sizeRate = sizeRate * (1000 + sq_GetIntData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0)) / 1000; + sub = 2; + } + obj.getVar("laserCharge_custom").setInt(10, sizeRate); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,135,0,68,obj.getDirection(),2,SKILL_BYKK_LASERRIFLE,1,totalDamage,sizeRate,0,0,0,0,0,0); + + switch(sub){ + case 1: + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserfire.ani"; + local aniPath2 = "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/lasertile.ani"; + local offsetX = 285; + local xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX), yPos = sq_GetYPos(obj), zPos = 75; + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,100,sizeRate); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,600,sizeRate); + break; + case 2: + local aniPath = ["passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlaserfire1.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlaserfire2.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlaserfire3.ani"]; + local tiaozheng = 0; + local offsetX = 275; + local xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX), yPos = sq_GetYPos(obj), zPos = 75; + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath[i],true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,100,sizeRate); + } + offsetX = offsetX - 7; + xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX); + local aniPath2 = ["passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlasertile1.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlasertile2.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlasertile3.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2[i],true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,600,sizeRate); + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){ + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserriflelightning.ani",true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,100,-sizeRate); + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserriflelightning.ani",true,obj.getDirection(),xPos,yPos + 1,zPos,ENUM_DRAWLAYER_NORMAL,300,sizeRate); + } + break; + } + } + } + break; + } +} + +function onKeyFrameFlag_LaserRifle(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_LaserRifle(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_AddStateLayerAnimation(10012,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfullcharge_charge.ani"), 0, 0); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_LASERRIFLE, STATE_PRIORITY_AUTO, true); + break; + case 3: + local aniPath = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_01.ani"; + local aniPath2 = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_02.ani"; + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,-100,100); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj) + 1,0,ENUM_DRAWLAYER_NORMAL,-100,100); + local speed = 250.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + if(obj.getVar("laserCharge_bool").getBool(1)) obj.setTimeEvent(4, 300, 1, false); + else obj.setTimeEvent(4, 80, 1, false); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + break; + } +} + +function onEndState_LaserRifle(obj, new_state) +{ + if(!obj) return; +} + +function onCreateObject_LaserRifle(obj, createObject) +{ + if(!obj) return; +} + + +//聚焦喷火器 +function checkExecutableSkill_FlameThrowerBoost(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMETHROWERBOOST); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_FLAMETHROWERBOOST); + local timer = obj.getVar("flamethrowerboost").get_ct_vector(0); + if(!timer){ + obj.getVar("flamethrowerboost").clear_ct_vector(); + obj.getVar("flamethrowerboost").push_ct_vector(); + timer = obj.getVar("flamethrowerboost").get_ct_vector(0); + } + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlameThrowerBoost(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlameThrowerBoost(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(185); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/atfrontrapid1a.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + obj.sq_PlaySound("FG_FIRE"); + break; + case 1: + obj.sq_SetCurrentAnimation(186); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/atfrontrapid2a.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/atweapon_glow.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/body_glow_woman.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 10: + obj.sq_SetCurrentAnimation(152); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("FG_FIRE"); + break; + case 11: + obj.sq_SetCurrentAnimation(151); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atajreinforceparts/flamethrowerboost/atweapon_glow_3.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 12: + obj.sq_SetCurrentAnimation(150); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_FlameThrowerBoost(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWERBOOST, -1, 4, 1.0) + 100; + print(totalDamage); + if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 5) > 0) totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWER, -1, 4, 1.0) + 100; + print(totalDamage); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 2, skillLevel); + local moveRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 3, skillLevel); + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 5, skillLevel); + local sub = 0, speed = 150 / moveRate * 1000; + + if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 4) > 0){ + local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 1, skillLevel); + local hitMax = timeMax / hitTime; + totalDamage = totalDamage * hitMax; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,140,0,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWERBOOST,2,totalDamage,sizeRate,0,0,0,0,0,0); + obj.setTimeEvent(2, 50, 1, false); + obj.sq_PlaySound("FG_FIRE"); + return; + } + + if(subState == 10){ + sub = 1; + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) speed = speed / sq_GetIntData(obj, SKILL_BYKK_PANDORA_01, 0) * 100; + } + obj.setTimeEvent(1, speed, -1, false); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,155,-1,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWERBOOST,1,totalDamage,hitTime,sub,sizeRate,0,0,0,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true); + break; + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlameThrowerBoost(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 11: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + if(subState >= 10){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true); + return; + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + } + else{ + local timer = obj.getVar("flamethrowerboost").get_ct_vector(0); + if(timer){ + local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 1, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST)); + local currentT = timer.Get(); + if(currentT >= timeMax){ + if(subState >= 10){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true); + return; + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + } + } + } + break; + } +} + +function onKeyFrameFlag_FlameThrowerBoost(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_FlameThrowerBoost(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj), baseSpeed = 2; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos - baseSpeed); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos + baseSpeed); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed); + return; + } + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_FlameThrowerBoost(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_FLAMETHROWERBOOST){ + local attackObj = obj.getVar("flamethrowerboost_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 22) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } +} + + +//潜能爆发 +function checkExecutableSkill_SubWeaponStuckDown(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUBWEAPONSTUCKDOWN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SUBWEAPONSTUCKDOWN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SubWeaponStuckDown(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SubWeaponStuckDown(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("FG_MVISION"); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local startTime = animation.getDelaySum(false); + local speedRate = startTime.tofloat() / castTime.tofloat(); + sq_StartDrawCastGauge(obj, castTime, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut", true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, 0, skillLevel); + local hitRate = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, 1, skillLevel); + if(buffTime != 0) AddAppendage.sq_SetValidTime(Time); + AddAppendage.setBuffIconImage(36);//sprite_common_commoneffect + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_SUBWEAPONSTUCKDOWN, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + + local change_appendage = AddAppendage.sq_getChangeStatus("at_subweaponstuckdown"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("at_subweaponstuckdown", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (hitRate * -1).tofloat()); + } + break; + } +} + +function onEndCurrentAni_SubWeaponStuckDown(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SUBWEAPONSTUCKDOWN, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SubWeaponStuckDown(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SubWeaponStuckDown(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_SubWeaponStuckDown(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SubWeaponStuckDown(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SUBWEAPONSTUCKDOWN){ + sq_EndDrawCastGauge(obj); + } +} + +function onStartDungeon_Blaster_bykk(obj) +{ + setSkillBonusRate_AtBlaster_bykk(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT) > 0){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atgunner/2_blaster_bykk/ap_apg_63.nut"); + if(addAppendage){ + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERHEAT, sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + } + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FSC_7); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FM31); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FM31); + obj.getVar("isReset").setInt(0, 1); +} + +function reset_atBlaster_bykk(obj) +{ + if(obj.getVar("isReset").getInt(0) == 1) return; + setSkillBonusRate_AtBlaster_bykk(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT) > 0){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atgunner/2_blaster_bykk/ap_apg_63.nut"); + if(addAppendage){ + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERHEAT, sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + } + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FSC_7); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FM31); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FM31); +} + +function onStart_appendage_at_subweaponstuckdown(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) return; + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + setSkillBonusRate_AtBlaster_bykk(obj); +} + +function onEnd_appendage_at_subweaponstuckdown(appendage) +{ + if(!appendage) return; + // local parentObj = appendage.getParent(); + // if(!parentObj || parentObj.getState() == STATE_DIE) return; + // local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + // setSkillBonusRate_AtBlaster_bykk(obj); +} + +function setSkillBonusRate_AtBlaster_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ALPHASUPPORT, 5, sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_OVERHEAT, 2, sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT)) * 10) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_PANDORA_01, 0, sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01))) / 1000; + print("bonusRate4 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0 && obj.getWeaponSubType() == 3) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 3, sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY))) / 1000; + print("bonusRate5 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +//FM-31榴弹发射器 +FM31_STONE <- 0 + +function checkExecutableSkill_FM31(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FM31); + if (isUse){ + obj.startSkillCoolTime(SKILL_BYKK_FM31, sq_GetSkillLevel(obj, SKILL_BYKK_FM31), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FM31, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FM31(obj) +{ + if (!obj) return false; + if(FM31_STONE == 1) return false; + return true; +} + +function onSetState_FM31(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(185); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/fm31/atfrontrapid1a.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 3400 / currentAni.getDelaySum(0, 0); + currentAni.setSpeedRate(speedRate.tofloat() * 1.5); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + obj.sq_PlaySound("FG_SSHOT"); + obj.sq_PlaySound("FM31_READY"); + break; + case 1: + obj.sq_SetCurrentAnimation(186); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/fm31/atfrontrapid2a.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + break; + } +} + +function onEndCurrentAni_FM31(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_FM31, STATE_PRIORITY_AUTO, true); + break; + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FM31); + local createMax = sq_GetLevelData(obj, SKILL_BYKK_FM31, 0, skillLevel); + if(FM31_STONE == 1) createMax = 1; + obj.getVar("FM31").setInt(10, createMax); + local delay = sq_GetIntData(obj, SKILL_BYKK_FM31, 2) / 3; + if(FM31_STONE == 1) delay = 175; + obj.setTimeEvent(1, delay, createMax, true); + if(FM31_STONE == 1) break; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1){ + if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, 120.0); + else sq_SetVelocity(obj, 0, -120.0); + } + break; + } +} + +function onProcCon_FM31(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FM31(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_FM31(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_PlaySound("FM31_SHOT"); + local bonusRate = 1.0; + if(FM31_STONE == 1) bonusRate = 1.27; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FM31, -1, 1, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FM31, 0); + if(FM31_STONE == 1) sizeRate = sizeRate * 120 / 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,-1,65,obj.getDirection(),2,SKILL_BYKK_FM31,1,totalDamage,sizeRate,0,0,0,0,0,0); + if(timeEventCount >= obj.getVar("FM31").getInt(10)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_FM31(obj, new_state) +{ + if(!obj) return; +} + + +//FM-92 mk2榴弹 +function checkExecutableSkill_Stinger(obj) +{ + if (!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){ + if(obj.getState() == STATE_STAND){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_DASH, STATE_PRIORITY_IGNORE_FORCE, true); + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STINGER); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STINGER); + obj.getVar("stinger_att").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_STINGER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Stinger(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Stinger(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(183); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce1a.ani"), 0, 0); + obj.sq_PlaySound("FG_LANCER"); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(184); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce2a.ani"), 0, 0); + obj.sq_PlaySound("STINGER_SHOT"); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot1.ani", 0, 0, 0); + obj.setTimeEvent(1, 50, 1, false); + break; + } +} + +function onEndCurrentAni_Stinger(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STINGER, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Stinger(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local minTime = sq_GetIntData(obj, SKILL_BYKK_STINGER, 2); + local stateTime = obj.sq_GetStateTimer(); + local bDownKey = obj.isDownSkillLastKey(); + if(bDownKey){ + if(stateTime > minTime){ + local attackObj = obj.getVar("stinger_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(!colObj.isExistTimeEvent(1) && colObj.getState() == 20){ + local maxTime = colObj.getVar("custom").getInt(13); + local minTime = colObj.getVar("custom").getInt(14); + colObj.setTimeEvent(1, maxTime - minTime, 1, false); + } + } + } + } + else{ + local attackObj = obj.getVar("stinger_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + } + } + break; + } +} + +function onKeyFrameFlag_Stinger(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_Stinger(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2dodge.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2normal.ani", 0, 0, 0); + + local createMax = sq_GetIntData(obj, SKILL_BYKK_STINGER, 4); + local bonusRate = 1.0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) bonusRate = 0.6; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 0, bonusRate) + 100; + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 3, 1.0) + 100; + local minTime = sq_GetIntData(obj, SKILL_BYKK_STINGER, 2); + local maxTime = sq_GetIntData(obj, SKILL_BYKK_STINGER, 3); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,95,-1,135,obj.getDirection(),2,SKILL_BYKK_STINGER,1,totalDamage,sizeRate,createMax,maxTime,minTime,0,0,0); + break; + } +} + +function onEndState_Stinger(obj, new_state) +{ + if(!obj) return; +} + + +//量子爆弹 +function checkExecutableSkill_UraniumBomb(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_URANIUMBOMB); + if (isUse){ + local subState = 0; + if(sq_GetIntData(obj, SKILL_BYKK_URANIUMBOMB, 3) > 0 || false) subState = 10;//护石 + else obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_URANIUMBOMB); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); + obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_UraniumBomb(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_UraniumBomb(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(193); + obj.sq_PlaySound("R_FG_BIGBOMB"); + break; + case 1: + obj.sq_SetCurrentAnimation(194); + obj.sq_RemoveAimPointMark(); + obj.removeAllTimeEvent(); + break; + case 10: + obj.sq_SetCurrentAnimation(193); + obj.sq_PlaySound("R_FG_BIGBOMB"); + break; + case 11: + obj.sq_SetCurrentAnimation(194); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-100,0,0,obj.getDirection(),2,SKILL_BYKK_URANIUMBOMB,3,0,0,0,0,0,0,0,0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_UraniumBomb(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + local offsetX = 130; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = 800; + local vY = 300; + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + obj.setTimeEvent(1, 1500, 1, false); + break; + case 1: + case 11: + if(subState == 1 && sq_GetIntData(obj, SKILL_BYKK_URANIUMBOMB, 7) > 0){ + if(sq_getRandom(1, 100) <= 70){ + obj.setTimeEvent(2, 300, 1, false); + break; + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_UraniumBomb(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local bDownKey = obj.isDownSkillLastKey(); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + if(!bDownKey && obj.sq_GetStateTimer() >= delaySum + 100){ + local aimPosX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false); + local aimPosY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false); + obj.getVar("UraniumBombSave").setInt(0, aimPosX); + obj.getVar("UraniumBombSave").setInt(1, aimPosY); + local offsetX = -350; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = 350; + local aniPath = "passiveobject/actionobject/monster/cartelcommand/animation/gunneraimpointmark2.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),aimPosX,aimPosY,0,ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 7, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100; + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_URANIUMBOMB); + local prob = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 3, skillLevel); + local damage = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 10; + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(SKILL_BYKK_URANIUMBOMB); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(totalDamage2); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(damage); + sq_BinaryWriteDword(level); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX + offsetX, aimPosY, 500); + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_UraniumBomb(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_UraniumBomb(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local offsetX = -350; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = 350; + local aimPosX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false); + local aimPosY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false); + obj.getVar("UraniumBombSave").setInt(0, aimPosX); + obj.getVar("UraniumBombSave").setInt(1, aimPosY); + local aniPath = "passiveobject/actionobject/monster/cartelcommand/animation/gunneraimpointmark2.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),aimPosX,aimPosY,0,ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 7, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100; + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_URANIUMBOMB); + local prob = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 3, skillLevel); + local damage = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 10; + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(SKILL_BYKK_URANIUMBOMB); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(totalDamage2); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(damage); + sq_BinaryWriteDword(level); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX + offsetX, aimPosY, 500); + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_AUTO, true); + break; + case 2: + local offsetX = -350; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = 350; + local aimPosX = obj.getVar("UraniumBombSave").getInt(0); + local aimPosY = obj.getVar("UraniumBombSave").getInt(1); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 7, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100; + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_URANIUMBOMB); + local prob = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 3, skillLevel); + local damage = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 10; + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(SKILL_BYKK_URANIUMBOMB); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(totalDamage2); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(damage); + sq_BinaryWriteDword(level); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX + offsetX, aimPosY, 500); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_UraniumBomb(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_URANIUMBOMB){ + sq_EndDrawCastGauge(obj); + obj.sq_RemoveAimPointMark(); + } +} + + +//X-2太阳神光炮 +function checkExecutableSkill_Solarsystem(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SOLARSYSTEM); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_SOLARSYSTEM); + obj.getVar("solarsystem_bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Solarsystem(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Solarsystem(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(180); + obj.sq_PlaySound("R_FG_SOLASYSTEM_CAST"); + obj.sq_PlaySound("SOLASYSTEM_READY"); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + break; + case 1: + obj.sq_SetCurrentAnimation(171); + break; + case 2: + obj.sq_SetCurrentAnimation(175); + obj.sq_PlaySound("SOLASYSTEM_SHOT"); + sq_flashScreen(obj, 0, 400, 100, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //[OFFSET]`shoot` 150 0 63 + //[OFFSET]`recoil start` 0 0 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 1, 1.0); + local damage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 0, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,150,0,63,obj.getDirection(),2,SKILL_BYKK_SOLARSYSTEM,1,totalDamage,damage,0,0,0,0,0,0); + break; + case 3: + obj.sq_SetCurrentAnimation(172); + obj.sq_PlaySound("SOLASYSTEM_LSHOT_TRANS"); + sq_SetMyShake(obj, 1, 80); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Solarsystem(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local sub = 1; + if(obj.getVar("solarsystem_bool").getBool(0)) sub = 3; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Solarsystem(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_BYKK_SOLARSYSTEM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LASERRIFLE).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LASERRIFLE); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_LASERRIFLE, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLE), -1); + obj.getVar("solarsystem_bool").setBool(0, true); + return; + } + } + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_SOLARSYSTEM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LASERRIFLE).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LASERRIFLE); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_LASERRIFLE, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_AUTO, true); + return; + } + } + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_AUTO, true); + return; + } + break; + } +} + +function onKeyFrameFlag_Solarsystem(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 301: + obj.sq_PlaySound("R_FG_SOLASYSTEM_FIN"); + sq_SetMyShake(obj, 3, 200); + break; + case 402: + obj.sq_PlaySound("R_FG_SOLASYSTEM_LSHOT"); + break; + case 406: + obj.sq_PlaySound("SOLASYSTEM_LSHOT_BURST"); + sq_flashScreen(obj, 0, 200, 200, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 350); + //[OFFSET] `shoot` -20 0 -1 + //[OFFSET] `recoil start` 0 0 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 1, 0.25); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 1, 1.0); + // local totalDamage2 = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASERRIFLE, -1, 1, 0.2) + 100) * (100 + sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 1, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE))) / 100; + print("totalDamage2 = "+totalDamage2); + local damage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 0, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-20,0,-1,obj.getDirection(),2,SKILL_BYKK_SOLARSYSTEM,3,totalDamage,totalDamage2,damage,0,0,0,0,0); + break; + case 407: + obj.sq_PlaySound("R_FG_SOLASYSTEM_FIN"); + break; + } + return true; +} + +function onTimeEvent_Solarsystem(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Solarsystem(obj, new_state) +{ + if(!obj) return; +} + + +//远古粒子炮 +function checkExecutableSkill_AncientTrigger(obj) +{ + if (!obj) return false; + obj.getVar("AncientTrigger_bool").setBool(0, false); + obj.getVar("AncientTrigger_bool").setBool(1, false); + obj.getVar("AncientTrigger_bool").setBool(2, false); + obj.getVar("AncientTrigger_obj").clear_obj_vector(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ANCIENTTRIGGER) >= 9) sq_SendMessage(obj, 0, 1, 0); +} + +function checkCommandEnable_AncientTrigger(obj) +{ + if (!obj) return false; + return true; +} + +function onAfterSetState_AncientTrigger(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_ANCIENTTRIGGER, 7, sq_GetSkillLevel(obj, SKILL_BYKK_ANCIENTTRIGGER)) + 100; + if(speedRate > 100){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + } +} + +function onEndCurrentAni_AncientTrigger(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_AncientTrigger(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(100); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + } +} + +function onKeyFrameFlag_AncientTrigger(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_AncientTrigger(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_AncientTrigger(obj, new_state) +{ + if(!obj) return; + if(new_state != 44) sq_SendMessage(obj, 0, 0, 0); +} + +function onCreateObject_AncientTrigger(obj, createObject) +{ + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + local id = colObj.getCollisionObjectIndex(); + // print(id); + if(id == 22270){ + obj.getVar("AncientTrigger_att").clear_obj_vector(); + obj.getVar("AncientTrigger_att").push_obj_vector(colObj); + } + // if(id == 22300){ + // obj.getVar("AncientTrigger_att").clear_obj_vector(); + // obj.getVar("AncientTrigger_att").push_obj_vector(colObj); + // } + } +} + + +//等离子发射器 +function checkExecutableSkill_Plasmaboost(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PLASMABOOST); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_PLASMABOOST); + obj.getVar("plasmaboost_att").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Plasmaboost(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Plasmaboost(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(165); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + break; + case 1://LOOP + obj.sq_SetCurrentAnimation(164); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0); + break; + case 2://LOOP_TALISMAN + obj.sq_SetCurrentAnimation(162); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0); + obj.setTimeEvent(1, 500, 1, false); + break; + case 3: + obj.sq_SetCurrentAnimation(163); + local attackObj = obj.getVar("plasmaboost_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Plasmaboost(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local sub = 1; + if(sq_GetIntData(obj, SKILL_BYKK_PLASMABOOST, 2) > 0) sub = 2;//护石 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Plasmaboost(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local bDownKey = obj.isDownSkillLastKey(); + local stateTime = obj.sq_GetStateTimer(); + local maxTime = sq_GetLevelData(obj, SKILL_BYKK_PLASMABOOST, 1, sq_GetSkillLevel(obj, SKILL_BYKK_PLASMABOOST)); + if(!bDownKey || stateTime >= maxTime){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_Plasmaboost(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("FG_HIGH_SLIDING"); + obj.sq_PlaySound("SUBWEAPON_DRAW"); + obj.sq_PlaySound("PLASMA_SHOT"); + break; + case 4: + //[OFFSET] `Create Plasma` 92 0 68 + //[OFFSET] `create Dust` -100 0 0 + //[OFFSET] `create Shoot Effect` 140 0 68 + if(sq_GetIntData(obj, SKILL_BYKK_PLASMABOOST, 2) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/plasmaboost/atgunner/plasmaboost_talisman/plasmabooster_talismansonicboom_force_att_circle_3.ani", 148, 0, 68);//护石 + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/plasmaboost/atgunner/plasmaboost_talisman/plasmabooster_talismandust_01.ani", -100, 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 0, 1.0) + 100; + local hitTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 2, 1.0) + 100; + local holdTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 4, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,92,0,68,obj.getDirection(),2,SKILL_BYKK_PLASMABOOST,1,totalDamage,hitTime,holdTime,0,0,0,0,0); + + local moveRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 3, 1.0) + 100; + local speed = (8.0 / moveRate.tofloat() * 1000.0).tointeger(); + obj.setTimeEvent(2, speed, -1, false); + break; + } + return true; +} + +function onTimeEvent_Plasmaboost(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_AUTO, true); + break; + case 2: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + break; + } +} + +function onEndState_Plasmaboost(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_PLASMABOOST){ + local attackObj = obj.getVar("plasmaboost_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } +} + + +//FSC-7 +FSC7_STONE <- 1 + +function checkExecutableSkill_Fsc_7(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FSC_7); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FSC_7, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Fsc_7(obj) +{ + if (!obj) return false; + if(FSC7_STONE == 1) return false; + return true; +} + +function onSetState_Fsc_7(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(153); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + break; + case 1: + obj.sq_SetCurrentAnimation(154); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Fsc_7(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Fsc_7(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Fsc_7(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("FG_MROSE_02"); + obj.sq_PlaySound("MSC_READY"); + break; + case 108: + obj.sq_PlaySound("MSC_SHOT"); + sq_SetMyShake(obj, 5, 150); + //[OFFSET] `Create Bullet` 139 0 84 + local bonusRate = 1.0; + if(FSC7_STONE == 1) bonusRate = 0.64; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FSC_7, -1, 0, bonusRate); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FSC_7, -1, 1, bonusRate); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_FSC_7, 1); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FSC_7, -1, 2, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,139,0,84,obj.getDirection(),2,SKILL_BYKK_FSC_7,1,totalDamage,totalDamage2,hitMax,sizeRate,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Fsc_7(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Fsc_7(obj, new_state) +{ + if(!obj) return; +} + + +//FM-92 mk2 SW榴弹 +function checkExecutableSkill_StingerEx(obj) +{ + if (!obj) return false; + if(sq_GetLevelData(obj, SKILL_BYKK_STINGEREX, 11, sq_GetSkillLevel(obj, SKILL_BYKK_STINGEREX)) < 1) return false;//护石 + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STINGEREX); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_STINGEREX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_StingerEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_StingerEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(181); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce1a.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + break; + case 1: + obj.sq_SetCurrentAnimation(182); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce2a.ani"), 0, 0); + obj.sq_PlaySound("STINGER_SHOT"); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot1.ani", 0, 0, 0); + obj.setTimeEvent(1, 50, 1, false); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_StingerEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STINGEREX, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_StingerEx(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_StingerEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_StingerEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2dodge.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2normal.ani", 0, 0, 0); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 4); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 10, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,95,-1,135,obj.getDirection(),2,SKILL_BYKK_STINGEREX,1,totalDamage,hitMax,sizeRate,0,0,0,0,0); + break; + } +} + +function onEndState_StingerEx(obj, new_state) +{ + if(!obj) return; +} + + +//PT-15原始型压缩炮 +function checkExecutableSkill_Pt_15(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PT_15); + if (isUse){ + obj.getVar("PT15_SUB").setInt(10, 1); + local sub = 0; + if(sq_GetIntData(obj, SKILL_BYKK_PT_15, 10) > 0) sub = 4; //护石 + obj.getVar("PT15_BOOL").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(STATE_BYKK_PT_15, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Pt_15(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Pt_15(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(170); + break; + case 1://normalshot + obj.sq_SetCurrentAnimation(169); + break; + case 2://jumpshot + obj.sq_SetCurrentAnimation(168); + break; + case 3://backshot + obj.sq_SetCurrentAnimation(166); + break; + case 4://equip_body + obj.sq_SetCurrentAnimation(167); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Pt_15(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local sub = obj.getVar("PT15_SUB").getInt(10); + if(sub == 2){ + obj.getVar("PT15_MOVE").setInt(10, sq_GetXPos(obj)); + obj.setTimeEvent(1, 5, 40, true); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(STATE_BYKK_PT_15, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Pt_15(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetIntData(obj, SKILL_BYKK_PT_15, 10) > 0) break; //护石 + if(obj.getVar("PT15_BOOL").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("PT15_BOOL").setBool(0, false); + obj.getVar("PT15_SUB").setInt(10, 2); + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection()== ENUM_DIRECTION_LEFT)){ + obj.getVar("PT15_BOOL").setBool(0, false); + obj.getVar("PT15_SUB").setInt(10, 3); + } + } + break; + } +} + +function onKeyFrameFlag_Pt_15(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + obj.sq_PlaySound("FG_PROTOTYPE"); + obj.sq_PlaySound("PROTOTYPE_RELOAD"); + break; + case 1114: + obj.sq_PlaySound("PROTOTYPE_AIR_02"); + sq_flashScreen(obj,0,40,0,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 240); + //[OFFSET] `NormalShotPowered` 135 1 90 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 3, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 8) + sq_GetIntData(obj, SKILL_BYKK_PT_15, 9); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,135,1,90,obj.getDirection(),2,SKILL_BYKK_PT_15,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1116: + //[OFFSET] `WindExp` 604 0 91 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 5, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 8) + sq_GetIntData(obj, SKILL_BYKK_PT_15, 9); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,604,0,91,obj.getDirection(),2,SKILL_BYKK_PT_15,2,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1205: + //[OFFSET] `JumpShot` 86 0 -3 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 5, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 9); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,86,0,-3 - sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_PT_15,3,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1307: + obj.sq_PlaySound("PROTOTYPE_AIR_01"); + sq_SetMyShake(obj, 6, 240); + break; + case 1308: + //[OFFSET] `NormalShot` 56 0 91 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 9); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,56,0,91,obj.getDirection(),2,SKILL_BYKK_PT_15,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1310: + //[OFFSET] `BackShot` 78 0 80 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 8) + sq_GetIntData(obj, SKILL_BYKK_PT_15, 9); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-78,0,80,sq_GetOppositeDirection(obj.getDirection()),2,SKILL_BYKK_PT_15,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1400: + obj.sq_PlaySound("FG_PROTOTYPE"); + //[OFFSET] `CreateEquipedObject` 0 0 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 3, 1.0) + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 5, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 9); + print("sizeRate = "+sizeRate); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_PT_15,4,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Pt_15(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vx = sq_GetAccel(0, 100, timeEventCount, 40, true); + local vz = sq_GetAccel(0, 200, timeEventCount, 40, true); + local dstX = sq_GetDistancePos(obj.getVar("PT15_MOVE").getInt(10), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_Pt_15(obj, new_state) +{ + if(!obj) return; +} + + +//火力全开 +function checkExecutableSkill_Operationraze(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OPERATIONRAZE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_OPERATIONRAZE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Operationraze(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Operationraze(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(155); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/start/startbackoperation_02.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/start/startfront1_02.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/start/startfront2_01.ani", 0, 0, 0); + sq_CreateParticle("character/gunner/effect/particle/2_blaster/operationrazestart.ptl", obj, 0, 0, 0, true, 30, 0, 2); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/startbottom_01.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.sq_SetXScrollStart(400, delay); + + break; + case 1: + obj.sq_SetCurrentAnimation(156); + break; + case 2: + obj.sq_SetCurrentAnimation(157); + break; + case 3: + obj.sq_SetCurrentAnimation(158); + obj.setTimeEvent(1, 1200, 1, false); + obj.setTimeEvent(2, 80, -1, false); + obj.setTimeEvent(3, 80, -1, false); + obj.setTimeEvent(4, 500, 2, true); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Operationraze(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_OPERATIONRAZE, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Operationraze(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Operationraze(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + obj.sq_PlaySound("FG_OPERATION_RAZE_01"); + obj.sq_PlaySound("OPERATION_RAZE_CAST"); + break; + case 1002: sq_SetMyShake(obj, 10, 500); break; + case 1://激光 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 1, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,1,totalDamage,0,0,0,0,0,0,0); + break; + case 2001://小激光 + // sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/operation/workoperationlightning_04.ani", 0, 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 1, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,2,totalDamage,0,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Operationraze(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + sq_CreateParticle("character/gunner/effect/particle/2_blaster/operationrazedestroy.ptl", obj, 0, 0, 0, true, 30, 0, 2); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 3, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,0,500,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,6,totalDamage,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,450,0,500,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,6,totalDamage,0,0,0,0,0,0,0); + break; + case 2: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 2, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,88,0,35,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,3,totalDamage,0,0,0,0,0,0,0); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/bullet02.ani", 0, 0, -15); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/bullet02.ani", 0, 0, 5); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/bullet01.ani", 0, 0, 0); + break; + case 4: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 2, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-40,0,90,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,4,totalDamage,0,0,0,0,0,0,0); + break; + } +} + +function onEndState_Operationraze(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_OPERATIONRAZE){ + obj.sq_SetXScrollStop(0); + } +} + + +//UHT-03爆炎喷火器 +function checkExecutableSkill_Phlegethon(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PHLEGETHON); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_PHLEGETHON); + obj.getVar("phlegethon_att").clear_obj_vector(); + obj.getVar("phlegethon_bool").setBool(0, true); + obj.getVar("phlegethon_sub").setInt(10, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Phlegethon(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Phlegethon(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(161); + obj.sq_PlaySound("R_FG_PHLEGETHON_01"); + obj.sq_PlaySound("PHLEGETHON_CAST"); + break; + case 1: + obj.sq_SetCurrentAnimation(160); + if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0); + if(obj.isMyControlObject()) obj.sq_SetXScrollStart(250, 200); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PHLEGETHON, -1, 0, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWER, -1, 4, 1.0) + 100; + local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWERBOOST, -1, 4, 1.0) + 100; + local hitTime = sq_GetIntData(obj, SKILL_BYKK_PHLEGETHON, 1); + local sub = obj.getVar("phlegethon_sub").getInt(10); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),2,SKILL_BYKK_PHLEGETHON,1,totalDamage,totalDamage2,totalDamage3,hitTime,sub,0,0,0); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PHLEGETHON, 0) + 1000; + obj.setTimeEvent(1, lifeTime, 1, false); + if(obj.getVar("phlegethon_bool").getBool(0) == false){ + obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostloopback_00.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-10000,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonloopback_00.ani"), 0, 0); + obj.sq_PlaySound("R_FG_PHLEGETHON_02"); + obj.sq_PlaySound("PHLEGETHON_FIRE_EX"); + } + local moveRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PHLEGETHON, -1, 1, 1.0) + 100; + local speed = (8.0 / moveRate.tofloat() * 1000.0).tointeger(); + obj.setTimeEvent(2, speed, -1, false); + break; + case 2: + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(159); + obj.sq_SetXScrollStop(200); + if(obj.getVar("phlegethon_bool").getBool(0) == false){ + obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostendback_00.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonendback_01.ani"), 0, 0); + obj.sq_PlaySound("PHLEGETHON_FIRE_EX_END"); + } + else obj.sq_PlaySound("PHLEGETHON_FIRE_END"); + //[OFFSET] `create bottom` 350 0 0 + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,350,0,0,obj.getDirection(),2,SKILL_BYKK_PHLEGETHON,2,0,0,0,0,0,0,0,0); + local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 22){ + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Phlegethon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Phlegethon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("phlegethon_bool").getBool(0)){ + if(sq_GetIntData(obj, SKILL_BYKK_PHLEGETHON, 4) > 0){ + obj.getVar("phlegethon_bool").setBool(0, false); + obj.getVar("phlegethon_sub").setInt(10, 3); + break; + } + local skill = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWER); + local skill2 = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWERBOOST); + if(skill && !skill.isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWER,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWER); + if(b_useskill != -1){ + obj.getVar("phlegethon_bool").setBool(0, false); + obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWER, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER), -1); + obj.getVar("phlegethon_sub").setInt(10, 1); + } + } + if(skill2 && !skill2.isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWERBOOST,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWERBOOST); + if(b_useskill != -1){ + obj.getVar("phlegethon_bool").setBool(0, false); + obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWERBOOST, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST), -1); + obj.getVar("phlegethon_sub").setInt(10, 2); + } + } + } + break; + case 1: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_IGNORE_FORCE, true); + } + // if(obj.getVar("phlegethon_bool").getBool(0)){ + // local skill = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWER); + // if(skill && !skill.isInCoolTime()){ + // obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWER,true); + // local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWER); + // if(b_useskill != -1){ + // obj.getVar("phlegethon_bool").setBool(0, false); + // obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWER, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER), -1); + // obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostloopback_00.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(-10000,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonloopback_00.ani"), 0, 0); + // obj.sq_PlaySound("R_FG_PHLEGETHON_02"); + // obj.sq_PlaySound("PHLEGETHON_FIRE_EX"); + // local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0); + // if(attackObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + // colObj.getVar("custom").setInt(13, 1); + // local state = colObj.getState(); + // local totalDamage = colObj.getVar("custom").getInt(10) + colObj.getVar("custom").getInt(11); + // sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 13)); + // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage); + // colObj.addSetStatePacket(state, null, STATE_PRIORITY_AUTO, false, ""); + // local hitTime = colObj.getVar("custom").getInt(14) / 5; + // colObj.stopTimeEvent(1); + // colObj.setTimeEvent(1, hitTime, -1 false); + // print("testt121"); + // } + // } + // } + // skill = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWERBOOST); + // if(skill && !skill.isInCoolTime()){ + // obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWERBOOST,true); + // local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWERBOOST); + // if(b_useskill != -1){ + // obj.getVar("phlegethon_bool").setBool(0, false); + // obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWERBOOST, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST), -1); + // obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostloopback_00.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(-10000,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonloopback_00.ani"), 0, 0); + // obj.sq_PlaySound("R_FG_PHLEGETHON_02"); + // obj.sq_PlaySound("PHLEGETHON_FIRE_EX"); + // local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0); + // if(attackObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + // colObj.getVar("custom").setInt(13, 2); + // local state = colObj.getState(); + // local totalDamage = colObj.getVar("custom").getInt(10) + colObj.getVar("custom").getInt(12); + // sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 13)); + // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage); + // colObj.addSetStatePacket(state, null, STATE_PRIORITY_AUTO, false, ""); + // local hitTime = colObj.getVar("custom").getInt(14) / 5; + // colObj.stopTimeEvent(1); + // colObj.setTimeEvent(1, hitTime, -1 false); + // } + // } + // } + // } + break; + } +} + +function onKeyFrameFlag_Phlegethon(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + // case 200: sq_SetMyShake(obj, 1, 20); + } + return true; +} + +function onTimeEvent_Phlegethon(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_AUTO, true); + break; + case 2: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1); + return; + } + break; + } +} + +function onEndState_Phlegethon(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_PHLEGETHON){ + local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 22){ + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + obj.sq_SetXScrollStop(200); + } +} + +function getScrollBasisPos_Phlegethon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if (obj.isMyControlObject() && subState == 1){ + local destX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 250); + obj.sq_SetCameraScrollPosition(destX, obj.getYPos(), 0); + return true; + } + return false; +} + + +//X-1 +function checkExecutableSkill_Extruder(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(71); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(71, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Extruder(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Extruder(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(145); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyready1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyready2.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj); + // obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowready.ani"), 0, 0); + break; + case 1: + obj.sq_SetCurrentAnimation(146); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyshoot1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyshoot2.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot1.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10004,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot2.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10005,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot3.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10006,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot4.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10007,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot5.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10008,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot6.ani"), 0, 0); + local power = obj.sq_GetPowerWithPassive(71, -1, 1, -1, 1.0); + local sizeRate = sq_GetIntData(obj, 71, 9); + local range = sq_GetIntData(obj, 71, 10); + local subpower = sq_GetIntData(obj, 71, 11); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,120,0,65,obj.getDirection(),2,71,1,power,sizeRate,range,subpower,0,0,0,0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Extruder(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(71, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Extruder(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Extruder(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_Extruder(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Extruder(obj, new_state) +{ + if(!obj) return; +} + diff --git a/user/116.205.165.25/1_atgunner_2.c b/user/116.205.165.25/1_atgunner_2.c new file mode 100644 index 0000000..9645827 --- /dev/null +++ b/user/116.205.165.25/1_atgunner_2.c @@ -0,0 +1,2796 @@ + +//obj + +function setCustomData_po_atgunner_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("job").setInt(0, job); + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_AIRRAID: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local isSilver = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atairraid/atchainenlighten/chainenlighten_attack2_11.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isSilver > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(0, totalDamage); + } + break; + } + break; + case SKILL_BYKK_TWINGUNBLADE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local subWeaponType = receiveData.readDword(); + local aniPath = "passiveobject/character/gunner/animation/twingunblade/bulletjumpattack.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_BYKK_HEADSHOT: + switch(subtype){ + case 1: + case 2: + case 10: + case 11: + case 12: + case 13: + case 14: + case 20: + case 21: + case 22: + case 23: + case 24: + case 30: + case 31: + case 32: + case 33: + case 34: + case 40: + case 41: + case 42: + case 43: + case 44: + local passRate = 30; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_REDUCEREVOLVERDELAY); + if(skillLevel > 0) passRate = passRate + sq_GetLevelData(sqrChr, SKILL_BYKK_REDUCEREVOLVERDELAY, 7, skillLevel); + else if(subtype >= 30 && subtype <= 34) passRate = passRate + sq_GetIntData(sqrChr, SKILL_BYKK_BULLETPENETRATE, 0); + local addSpeedRate = 0; + if(subtype >= 30 && subtype <= 34) addSpeedRate = sq_GetIntData(sqrChr, SKILL_BYKK_BULLETPENETRATE, 2); + local totalDamage = receiveData.readDword(); + local subWeaponType = receiveData.readDword(); + local isDown = receiveData.readDword(); + local isSub = receiveData.readDword(); + local isAir = receiveData.readDword(); + local activestatusSet = receiveData.readDword(); + local statusTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, isDown); + obj.getVar("custom").setInt(1, subWeaponType); + obj.getVar("custom").setInt(2, passRate); + obj.getVar("custom").setInt(3, isSub); + obj.getVar("custom").setInt(5, activestatusSet); + obj.getVar("custom").setInt(6, statusTime); + obj.getVar("custom").setInt(7, isAir); + local aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/bulletpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletmusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletbowgun.ani"]; + if(subtype == 2 || subtype == 13 || subtype == 23 || subtype == 33 || subtype == 43) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silvermusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverbowgun.ani"]; + else if(subtype == 10 || subtype == 20 || subtype == 30 || subtype == 40) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamemusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamebowgun.ani"]; + else if(subtype == 11 || subtype == 21 || subtype == 31 || subtype == 41) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezemusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezebowgun.ani"]; + local attackIndex = [85,74,84,83,78]; + local ptlPath = [["particle/1_ranger/upattackrevolver.ptl","particle/1_ranger/upattackautomatic.ptl", + "particle/1_ranger/upattackmusket.ptl","","particle/1_ranger/upattackbowgun.ptl"], + ["particle/1_ranger/downattackrevolver.ptl","particle/1_ranger/downattackautomatic.ptl", + "particle/1_ranger/downattackmusket.ptl","","particle/1_ranger/downattackbowgun.ptl"]]; + local ani = sq_CreateAnimation("", aniPath[subWeaponType]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subWeaponType])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + switch(subtype){ + case 2: + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(4, totalDamage); + break; + case 10: + case 11: + case 12: + case 13: + case 20: + case 21: + case 22: + case 23: + case 30: + case 31: + case 32: + case 33: + case 40: + case 41: + case 42: + case 43: + if(subtype >= 30 && subtype <= 33){ + local currentAni = obj.getCurrentAnimation(); + local aniPathSet = ["passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/fire/bulletpenetrate_frontbulletfire_00.ani","passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/ice/bulletpenetrate_frontbulletice_01.ani","passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/dark/bulletpenetrate_frontbulletdark_01.ani","passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/light/bulletpenetrate_frontbulletlight_01.ani"]; + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPathSet[subtype - 30]),true); + } + else if(subtype >= 40 && subtype <= 43){ + local currentAni = obj.getCurrentAnimation(); + local aniPathSet = ["character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletfire_00.ani","character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletice_00.ani","character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletdark_00.ani","character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletlight_00.ani"]; + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPathSet[subtype - 40]),true); + obj.getVar("Bool").setBool(0, false); + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(subtype % 10); + // attackInfo.setAttackType(ATTACKTYPE_MAGICAL); + if(subtype % 10 == 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(0, 0, 0, 255); + } + break; + case 34: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/nomal/bulletpenetrate_frontbulletnomal_01.ani"),true); + break; + case 44: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("", "character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletnormal_00.ani"),true); + break; + } + local randomAngle = sq_getRandom(-500,500); + randomAngle = randomAngle.tofloat() / 100.0; + if(isDown > 0) randomAngle = randomAngle - 30.0; + if(isAir > 0) randomAngle = randomAngle - 15.0; + if(subWeaponType != 3){ + if(isDown == 0 && addSpeedRate > 0){ + ptlPath[isDown] = ["particle/1_ranger/long_upattackrevolver.ptl","particle/1_ranger/long_upattackautomatic.ptl", + "particle/1_ranger/long_upattackmusket.ptl","","particle/1_ranger/long_upattackbowgun.ptl"]; + local delay = [500, 400, 550, 0, 450]; + local addRate = sq_GetIntData(sqrChr, SKILL_BYKK_BULLETPENETRATE, 1); + obj.sq_SetMoveParticle(ptlPath[isDown][subWeaponType], 0.0, randomAngle); + obj.setTimeEvent(1, delay[subWeaponType] * (100 + addRate) / 100, 1 false); + } + else obj.sq_SetMoveParticle(ptlPath[isDown][subWeaponType], 0.0, randomAngle); + local speedRate = [800,700,800,0,750]; + if(addSpeedRate > 0) sq_SetSpeedToMoveParticle(obj,0,speedRate[subWeaponType] + addSpeedRate); + } + sq_SetCustomRotate(obj, sq_ToRadian(randomAngle.tofloat())); + break; + case 3: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverbullet.ani"); + obj.setCurrentAnimation(ani); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local subtype = receiveData.readDword(); + local isDown = receiveData.readDword(); + local isAir = receiveData.readDword(); + local isGround = receiveData.readDword(); + local aniPath = [["passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl_fire.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl_ice.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl_light.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl.ani"], + ["passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/fire/explosivebullet_fire_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/ice/explosivebullet_ice_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/light/explosivebullet_light_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_ground_expl3.ani"]]; + local ani = sq_CreateAnimation("", aniPath[isGround][subtype]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 98)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype < 4){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(subtype); + } + if(isDown > 0 || isAir > 0){ + if(isGround < 1) sq_SetCustomRotate(obj, sq_ToRadian(-30.0)); + } + break; + } + break; + case SKILL_BYKK_RANDOMSHOOT: + switch(subtype){ + case 1: + case 2: + local speedRate = receiveData.readDword(); + local subState = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/atrandomshoot/randomshoot_1.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/atrandomshoot/randomshoot_2.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/atrandomshoot/randomshoot_3.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/atrandomshoot/randomshoot_4.ani" + ]; + if(subtype == 2) aniPath = ["character/gunner/effect/animation/1_ranger/atrandomshoot/chainpowderrandomshoot_01_blueeffect1.ani", + "character/gunner/effect/animation/1_ranger/atrandomshoot/chainpowderrandomshoot_02_blueeffect1.ani", + "character/gunner/effect/animation/1_ranger/atrandomshoot/chainpowderrandomshoot_03_blueeffect1.ani", + "character/gunner/effect/animation/1_ranger/atrandomshoot/chainpowderrandomshoot_04_blueeffect1.ani" + ]; + local ani = sq_CreateAnimation("", aniPath[subState]); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + local offsetZ = -sizeRate / 3; + if(sizeRate > 150) offsetZ = -sizeRate / 2; + sq_setCurrentAxisPos(obj, 2, offsetZ); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case 3: + case 4: + sqrChr.getVar("randomShootObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.getVar("custom").setInt(1, 0); + obj.getVar("custom").setInt(2, totalDamage); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atrandomshoot/atrandomshoot.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, hitTime, -1, true); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_CHAINSNATCH: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local isSilver = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atchainsnatch/chainsnatch_enlighten_attack3_14.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isSilver > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(0, totalDamage); + } + break; + } + break; + case SKILL_BYKK_WALKSHOOT: + switch(subtype){ + case 1: + case 10: + local passRate = 30; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_REDUCEREVOLVERDELAY); + if(skillLevel > 0) passRate = passRate + sq_GetLevelData(sqrChr, SKILL_BYKK_REDUCEREVOLVERDELAY, 7, skillLevel); + local totalDamage = receiveData.readDword(); + local subWeaponType = receiveData.readDword(); + local isDown = receiveData.readDword(); + obj.getVar("custom").setInt(0, isDown); + obj.getVar("custom").setInt(1, subWeaponType); + obj.getVar("custom").setInt(2, passRate); + local aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/bulletpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletmusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletbowgun.ani" + ]; + if(subtype == 10) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silvermusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverbowgun.ani"]; + local attackIndex = [85,74,84,83,78]; + local ptlPath = [["particle/1_ranger/upattackrevolver.ptl","particle/1_ranger/upattackautomatic.ptl","particle/1_ranger/upattackmusket.ptl","","particle/1_ranger/upattackbowgun.ptl"], + ["particle/1_ranger/downattackrevolver.ptl","particle/1_ranger/downattackautomatic.ptl","particle/1_ranger/downattackmusket.ptl","","particle/1_ranger/downattackbowgun.ptl"] + ]; + local ani = sq_CreateAnimation("", aniPath[subWeaponType]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subWeaponType])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 10){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(4, totalDamage); + } + local randomAngle = sq_getRandom(-500,500); + randomAngle = randomAngle.tofloat() / 100.0; + if(isDown > 0) randomAngle = randomAngle - 30.0; + if(subWeaponType != 3) obj.sq_SetMoveParticle(ptlPath[isDown][subWeaponType], 0.0, randomAngle); + sq_SetCustomRotate(obj, sq_ToRadian(randomAngle.tofloat())); + break; + case 2: + sq_moveWithParent(sqrChr, obj); + local totalDamage = receiveData.readDword(); + local subWeaponType = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local isSilver = receiveData.readDword(); + obj.getVar("custom").setInt(0, isSilver); + local aniPath = "passiveobject/atgunner_bykk/1_ranger/animation/atchainpowder/walkshoot/walkshootattack.ani"; + if(sub > 0) aniPath = "passiveobject/atgunner_bykk/1_ranger/animation/walkshoot/110lvequipmenteffect/110lvepicweaponaworkshot_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local attackIndex = [85,74,84,83,78]; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subWeaponType])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isSilver > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(4, totalDamage); + } + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + sq_moveWithParent(sqrChr, obj); + sqrChr.getVar("walkShootEffect").push_obj_vector(obj); + obj.setTimeEvent(10, 100, -1, false); + obj.addSetStatePacket(30, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_MULTIHEADSHOT: + switch(subtype){ + case 1: + local subState = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate.tofloat() / 260.0; + local aniPath = "character/gunner/effect/animation/multiheadshot/range.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local pAni = obj.getCurrentAnimation(); + switch(subState){ + case 1: sq_AddfRotateAngle(pAni, sq_ToRadian(-90.0)); break; + case 2: sq_AddfRotateAngle(pAni, sq_ToRadian(90.0)); break; + case 4: sq_AddfRotateAngle(pAni, sq_ToRadian(-180.0)); break; + } + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_DOUBLEGUNHAWK: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local isSaw = receiveData.readDword(); + local phase = receiveData.readDword(); + local count = receiveData.readDword(); + + local shootTime = 400; + local standTime = sq_GetIntData(sqrChr, SKILL_BYKK_DOUBLEGUNHAWK, 13 + phase); + local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_DOUBLEGUNHAWK, 10 + phase); + + obj.getVar("custom").setInt(0, phase); + obj.getVar("custom").setInt(1, count); + obj.getVar("custom").setInt(2, sub); + obj.getVar("custom").setInt(3, shootTime); + obj.getVar("custom").setInt(4, standTime); + obj.getVar("custom").setInt(5, sizeRate); + + local aniPath = ["","passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/spin2-1.ani", "passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/spin2-2.ani", "passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/spin2-3.ani"]; + local sawAniPath = "passiveobject/atgunner_bykk/1_ranger/animation/atchainpowder/doublegunhawk/chainpowderdoublegunhawk_gunhawk_spin_normal.ani"; + local ani = sq_CreateAnimation("", aniPath[phase]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/gun2.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/dodge.ani"),true); + sizeRate = sizeRate.tofloat() / 100.0; + if(isSaw > 0){ + local sawAni = sq_CreateAnimation("",sawAniPath); + local sizeRate_Saw = sizeRate * 0.5; + if(phase == 2) sizeRate_Saw = sizeRate * 0.6; + else if(phase == 3) sizeRate_Saw = sizeRate * 0.8; + sawAni.setImageRateFromOriginal(sizeRate_Saw, sizeRate_Saw); + sawAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate_Saw); + currentAni.addLayerAnimation(1,sawAni,true); + } + if(sizeRate > 100){ + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.setTimeEvent(0, hitTime, -1, false); + obj.setTimeEvent(1, shootTime / 20, 20, true); + obj.setTimeEvent(5, 60, -1, true); + break; + } + break; + case SKILL_BYKK_SUPPRESSINGFIRE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + //print("totalDamageSet = "+totalDamage); + local sizeRate = receiveData.readDword(); + local hitTime_min = receiveData.readDword(); + local hitTime_max = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, hitTime_min); + obj.getVar("custom").setInt(2, hitTime_max); + obj.getVar("custom").setInt(3, sizeRate); + obj.getVar("custom").setInt(4, totalDamage); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atsuppressingfire/atsuppressingfire_loop_body.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackeDamageAct(attackInfo, 0); + obj.setTimeEvent(1, hitTime_min, 1, false); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + local zPos = 150 - sizeRate * 120 / 100; + sq_setCurrentAxisPos(obj, 2, zPos); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atsuppressingfire/atsuppressingfinishfire.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = sqrChr.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(false); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_SUPPRESSINGFIRE,4,totalDamage,sizeRate,delay,0,0,0,0,0); + } + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitTime_min = receiveData.readDword(); + local hitTime_max = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(1, hitTime_min); + obj.getVar("custom").setInt(2, hitTime_max); + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/1_ranger/atsuppressingfire/talisman/atsuppressingfire_blade1.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime_min, 1, false); + obj.sq_SetMaxHitCounterPerObject(hitMax); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + local zPos = 150 - sizeRate * 120 / 100; + sq_setCurrentAxisPos(obj, 2, zPos); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local delay = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/atsuppressingfire_silverbullet.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, delay); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_KILLPOINT: + switch(subtype){ + case 1: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(0, holdTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_BLOODNCHAIN: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atbloodnchain/endhit_30.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 62)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = sqrChr.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_BLOODNCHAIN,2,totalDamage,0,0,0,0,0,0,0); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/atbloodnchain_silverbullet.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_BYKK_RUINATIONAREA: + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + case 5: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = ["","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st2/ruinationareast2front_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st3/ruinationareast3front_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st1/ruinationareast1front_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st2/ruinationareast2front_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st3/ruinationareast3front_00.ani"]; + local backAniPath = ["","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st2/ruinationareast2back_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st3/ruinationareast3back_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st1/ruinationareast1back_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st2/ruinationareast2back_00.ani","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st3/ruinationareast3back_00.ani"]; + local attackIndex = [0, 68, 69, 67, 68, 69]; + local ani = sq_CreateAnimation("", aniPath[subtype]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subtype])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("",backAniPath[subtype]),true); + pAni.setSpeedRate(speedRate.tofloat()); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delay / (hitMax + 1), hitMax, true); + break; + case 6: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/finishshot/ruinationareast4front_09.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = sqrChr.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_RUINATIONAREA,10,totalDamage,speedRate,0,0,0,0,0,0); + } + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 7: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st4/ruinationareast4front_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 70)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/1_ranger/animation/atruinationarea/st4/ruinationareast4back_00.ani"),true); + pAni.setSpeedRate(speedRate.tofloat()); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 4); + obj.setTimeEvent(0, delay / (hitMax + 1), hitMax, true); + break; + case 10: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/ruinationareast_silverbullet.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_FLAMETHROWER: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitDelayRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + obj.getVar("custom").setInt(11, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAttackInfoHitDelayRateDamager(attackInfo, (hitDelayRate * 0.01).tofloat()); + obj.setTimeEvent(1, hitTime, -1, false); + obj.setTimeEvent(2, 10, -1, false); + sqrChr.getVar("flamethrower_att").clear_obj_vector(); + sqrChr.getVar("flamethrower_att").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atflamethrower/compressedflameprojectilefront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/atflamethrower/compressedflameprojectileback_00.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_FLAMETHROWERBOOST: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local holdTime = sq_GetIntData(sqrChr, SKILL_BYKK_FLAMETHROWERBOOST, 6); + obj.getVar("custom").setInt(10, sub); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, holdTime); + if(holdTime > 0) obj.getVar("tar").clear_obj_vector(); + + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, -1, false); + obj.setTimeEvent(2, 10, -1, false); + sqrChr.getVar("flamethrowerboost_att").clear_obj_vector(); + sqrChr.getVar("flamethrowerboost_att").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atflamethrowerboost/compressedstrongprojectilefront_16.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_CANNONBALL: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sub2 = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sub); + obj.getVar("custom").setInt(12, sub2); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/cannonball/normal.ani", attackIndex = 30; + if(sub2 > 0){ + aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/cannonball/fullcharge.ani"; + attackIndex = 29; + obj.getVar().setBool(0, true); + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + switch(sub){ + case 0: obj.sq_SetMoveParticle("particle/2_blaster/cannonball.ptl", 0.0, 0.0); break; + case 1: obj.sq_SetMoveParticle("particle/2_blaster/cannonball.ptl", 0.0, -30.0); break; + } + sq_SetSpeedToMoveParticle(obj,0,600); + obj.setTimeEvent(1, 600, 1, false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/common/animation/noneexplosion.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, 2.0, 2.0, 2.0); + obj.setTimeEvent(11, 200, 2, true); + obj.setTimeEvent(12, 50, 4, true); + obj.setTimeEvent(13, 15, 16, true); + obj.setTimeEvent(14, 100, 2, true); + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + break; + } + break; + case SKILL_BYKK_STEYRHEAVYRIFLE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local expCount = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, expCount); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, sub); + local ani = sq_CreateAnimation("", "passiveobject/character/gunner/animation/subweaponbulletsteyr.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/steyr.ptl", 0.0, 0.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, sizeRate); + obj.getVar("custom").setInt(13, sub); + sizeRate = sizeRate / 100.0; + local aniPath = "passiveobject/common/animation/fireexplosion.ani", attackIndex = 20; + if(sub > 0){aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/pandora/pandorasteyrexplosion.ani"; attackIndex = 59;} + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + if(sub <= 0){ + obj.setTimeEvent(11, 200, 2, true); + obj.setTimeEvent(12, 50, 4, true); + obj.setTimeEvent(13, 15, 16, true); + obj.setTimeEvent(14, 100, 2, true); + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + } + else{ + sq_SetShake(obj, 1, 500); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/pandora/pandorasteyr_01.ani", sq_getRandom(-50, 50), sq_getRandom(-10, 10), 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(1.5 * sizeRate, 1.5 * sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(1.5 * sizeRate); + } + break; + case 3: + break; + } + break; + case 71: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local range = receiveData.readDword(); + local power = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + appendage.sq_SetValidTime(3000); + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("wtornadoAura"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("wtornadoAura",sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(300, 300, range, power); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FM31: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/fm-31bullet/02_bullet_normal1.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/fm-31bullet/03_bullet_dodge.ani"), true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51)); + obj.setTimeEvent(1, 50, -1, false); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/atfm-31.ptl", 0.0, 0.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(11, 200, 1, true); + obj.setTimeEvent(12, 50, 2, true); + obj.setTimeEvent(13, 15, 6, true); + obj.setTimeEvent(14, 100, 1, true); + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + sq_SetMyShake(obj, 2, 100); + break; + } + break; + case SKILL_BYKK_STINGER: + switch(subtype){ + case 1: + sqrChr.getVar("stinger_att").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local createMax = receiveData.readDword(); + local maxTime = receiveData.readDword(); + local minTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, createMax); + obj.getVar("custom").setInt(13, maxTime); + obj.getVar("custom").setInt(14, minTime); + obj.sq_SetMoveParticle("particle/2_blaster/stingerdisjoint.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,2,500); + // obj.setTimeEvent(1, maxTime, 1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local angle = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.sq_SetMoveParticle("particle/2_blaster/stingersub.ptl", angle.tofloat(), angle.tofloat()); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local createMax = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, createMax); + local boss_number = 0; + local nameed_number = 0; + local targetObj; + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + boss_number = boss_number + 1; + targetObj = activeObj; + break; + } + else if(sq_IsNamed(activeObj)){ + nameed_number = nameed_number + 1; + targetObj = activeObj; + break; + } + } + } + if(boss_number <= 0 || nameed_number <= 0){ + targetObj = sq_FindTarget(sqrChr, -600, 1500, 400, 400); + } + if(!targetObj){ + sq_SendDestroyPacketPassiveObject(obj); + return; + } + else{ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.setTimeEvent(10, 100, createMax, false); + } + break; + } + break; + case SKILL_BYKK_URANIUMBOMB: + switch(subtype){ + case 1://totalDamage,totalDamage2,sizeRate,prob,time,damage,level,0); + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, totalDamage2); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, prob); + obj.getVar("custom").setInt(14, time); + obj.getVar("custom").setInt(15, damage); + obj.getVar("custom").setInt(16, level); + + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/attackbox.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 200000); + sq_SetAttackBoundingBoxSizeRate(currentAni, 0.25, 0.25, 1.0); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/missile.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/2_blaster/uraniumbomb.ptl", 0.0, 0.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, prob); + obj.getVar("custom").setInt(14, time); + obj.getVar("custom").setInt(15, damage); + obj.getVar("custom").setInt(16, level); + obj.setTimeEvent(20, 225, 1, false); + break; + case 3: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100; + local sizeRate = (sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100) * 65 / 100; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_URANIUMBOMB); + local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_URANIUMBOMB, 1, skillLevel); + local time = sq_GetLevelData(sqrChr, SKILL_BYKK_URANIUMBOMB, 3, skillLevel); + local damage = sq_GetLevelData(sqrChr, SKILL_BYKK_URANIUMBOMB, 4, skillLevel); + local level = sq_GetSkillLevel(sqrChr, 174) + 10; + local hitMax = sq_GetIntData(sqrChr, SKILL_BYKK_URANIUMBOMB, 7) + 1; + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, prob); + obj.getVar("custom").setInt(14, time); + obj.getVar("custom").setInt(15, damage); + obj.getVar("custom").setInt(16, level); + obj.getVar("custom").setInt(17, hitMax); + + obj.setTimeEvent(10, 100, 1, false); + obj.setTimeEvent(11, 800, 1, false); + break; + case 5: + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(12, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/minibomb/missile.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(0.35, 0.35); + obj.sq_SetMoveParticle("particle/2_blaster/uraniumbomb.ptl", 0.0, 0.0); + break; + } + break; + case SKILL_BYKK_SOLARSYSTEM: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local damage = receiveData.readDword(); + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, damage); + obj.sq_SetMoveParticle("particle/2_blaster/extruder.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,500); + obj.setTimeEvent(1, 500, 1, false); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(500, 500, 400, 800); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local damage = receiveData.readDword(); + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, damage); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atsolasystem/solasystemreinforceshootfront_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN ,100, sq_GetSkillLevel(sqrChr, 174) + 10,1000, damage); + obj.setTimeEvent(10, 50, 1, false); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/atsolasystem/solasystemreinforceshootbottom_00.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_BYKK_ANCIENTTRIGGER: + switch(subtype){ + case 1: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, lifeTime); + + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, 300, 1, false); + break; + case 2: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullextendelectric1.ani"; + switch(sub){ + case 1: aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullextendelectric2.ani"; break; + case 2: aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullextendelectric3.ani"; break; + case 3: aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullextendelectric4.ani"; break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(5.0, 2.0); + break; + case 3: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fulllasertile2.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(sub > 0) currentAni.setImageRateFromOriginal(5.0, -1.0); + else currentAni.setImageRateFromOriginal(5.0, 1.0); + break; + case 4: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local aniPath = "passiveobject/character/gunner/animation/ancienttrigger/fullcircle.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + break; + case 5: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/character/gunner/animation/ancienttrigger/fulllasertile1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(sub > 0) currentAni.setImageRateFromOriginal(5.0, -1.0); + else currentAni.setImageRateFromOriginal(5.0, 1.0); + break; + case 6: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local aniPath = "passiveobject/character/gunner/animation/ancienttrigger/fulldust1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + break; + case 7: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + local aniPath = "passiveobject/character/gunner/animation/ancienttrigger/fullelectric1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(5.0, 3.0); + break; + case 8: + case 9: + sqrChr.getVar("AncientTrigger_obj").push_obj_vector(obj); + if(subtype == 9) sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_PLASMABOOST: + switch(subtype){ + case 1: + sqrChr.getVar("plasmaboost_att").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local holdTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, holdTime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, -1, false); + obj.setTimeEvent(2, 10, -1, false); + obj.getVar("tar").clear_obj_vector(); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FSC_7: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, hitMax); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atfsc7/fscfinish_25.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 9); + obj.setTimeEvent(2, delaySum, 1, false); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_STINGEREX: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/stingerex/atstinger/boostermissile_02.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/stingerex.ptl", 0.0, 0.0); + obj.setTimeEvent(1, 800, 1, false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_PT_15: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/pt15/pt-15_wind_eff_1_powered.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/pt15/pt-15_att_eff3.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/pt15/pt-15_explosion_glow.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/pt15/equipedtype/pt-15talisman_40.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_OPERATIONRAZE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/workoperationattack2_01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 80, -1 ,false); + obj.sq_PlaySound("OPERATION_RAZE_02"); + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/workoperationattack3_01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 240, 3 ,false); + obj.sq_PlaySound("OPERATION_RAZE_03"); + break; + case 3: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/02_bullet_normal1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/03_bullet_dodge.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("OPERATION_RAZE_01"); + obj.sq_SetMoveParticle("particle/2_blaster/atoperationrazeattack5.ptl", 0.0, 0.0); + break; + case 4: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/missile01in_02.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/stingerex.ptl", 0.0, 0.0); + obj.setTimeEvent(2, 1500, 1, false); + obj.setTimeEvent(3, 150, 3, false); + break; + case 5: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 6: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_PHLEGETHON: + switch(subtype){ + case 1: + sqrChr.getVar("phlegethon_att").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local totalDamage3 = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + switch(sub){ + case 1: totalDamage = totalDamage + totalDamage2; break; + case 2: totalDamage = totalDamage + totalDamage3; break; + case 3: totalDamage = totalDamage + totalDamage2 + totalDamage3; break; + } + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, totalDamage2); + obj.getVar("custom").setInt(12, totalDamage3); + obj.getVar("custom").setInt(13, sub); + obj.getVar("custom").setInt(14, hitTime); + //print("totalDamage = "+totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, -1, false); + // obj.setTimeEvent(2, 10, -1, false); + sq_moveWithParent(sqrChr, obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + obj.setTimeEvent(3, 500, 1, false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_LASERRIFLE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserfirealteration.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_HYPERFLARE: + switch(subtype){ + case 0: + case 1: + sqrChr.getVar("hyperFlareObj").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.getVar("custom").setInt(1, hitTime); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackfront_dummy.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 133)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 400, 1, false); + break; + case 3: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.getVar("custom").setInt(1, hitTime); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackfront_dummy.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 134)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(1, delay / (hitTime + 1), hitMax, false); + break; + case 4: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackfront_34.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 10), 1, false); + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_OVERCHARGE: + switch(subtype){ + case 1: + case 2: + case 10: + case 11: + case 12: + case 13: + case 14: + case 20: + case 21: + case 22: + case 23: + case 24: + case 30: + case 31: + case 32: + case 33: + case 34: + case 40: + case 41: + case 42: + case 43: + case 44: + local passRate = 30; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_REDUCEREVOLVERDELAY); + if(skillLevel > 0) passRate = passRate + sq_GetLevelData(sqrChr, SKILL_BYKK_REDUCEREVOLVERDELAY, 7, skillLevel); + else if(subtype >= 30 && subtype <= 34) passRate = passRate + sq_GetIntData(sqrChr, SKILL_BYKK_BULLETPENETRATE, 0); + local addSpeedRate = 0; + if(subtype >= 30 && subtype <= 34) addSpeedRate = sq_GetIntData(sqrChr, SKILL_BYKK_BULLETPENETRATE, 2); + local totalDamage = receiveData.readDword(); + local subWeaponType = receiveData.readDword(); + local isDown = receiveData.readDword(); + local isSub = receiveData.readDword(); + local isAir = receiveData.readDword(); + local activestatusSet = receiveData.readDword(); + local statusTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, isDown); + obj.getVar("custom").setInt(1, subWeaponType); + obj.getVar("custom").setInt(2, passRate); + obj.getVar("custom").setInt(3, isSub); + obj.getVar("custom").setInt(5, activestatusSet); + obj.getVar("custom").setInt(6, statusTime); + obj.getVar("custom").setInt(7, isAir); + local aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/bulletpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletmusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/bulletbowgun.ani"]; + if(subtype == 2 || subtype == 13 || subtype == 23 || subtype == 33 || subtype == 43) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverpistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silvermusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverbowgun.ani"]; + else if(subtype == 10 || subtype == 20 || subtype == 30 || subtype == 40) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamemusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/flamebowgun.ani"]; + else if(subtype == 11 || subtype == 21 || subtype == 31 || subtype == 41) aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezepistol.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezemusket.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/upbullethandcannon.ani", + "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/freezebowgun.ani"]; + local attackIndex = [85,74,84,83,78]; + local ptlPath = [["particle/1_ranger/upattackrevolver.ptl","particle/1_ranger/upattackautomatic.ptl", + "particle/1_ranger/upattackmusket.ptl","","particle/1_ranger/upattackbowgun.ptl"], + ["particle/1_ranger/downattackrevolver.ptl","particle/1_ranger/downattackautomatic.ptl", + "particle/1_ranger/downattackmusket.ptl","","particle/1_ranger/downattackbowgun.ptl"]]; + local ani = sq_CreateAnimation("", aniPath[subWeaponType]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subWeaponType])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + switch(subtype){ + case 2: + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(4, totalDamage); + break; + case 10: + case 11: + case 12: + case 13: + case 20: + case 21: + case 22: + case 23: + case 30: + case 31: + case 32: + case 33: + case 40: + case 41: + case 42: + case 43: + if(subtype >= 30 && subtype <= 33){ + local currentAni = obj.getCurrentAnimation(); + local aniPathSet = ["passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/fire/bulletpenetrate_frontbulletfire_00.ani","passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/ice/bulletpenetrate_frontbulletice_01.ani","passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/dark/bulletpenetrate_frontbulletdark_01.ani","passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/light/bulletpenetrate_frontbulletlight_01.ani"]; + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPathSet[subtype - 30]),true); + } + else if(subtype >= 40 && subtype <= 43){ + local currentAni = obj.getCurrentAnimation(); + local aniPathSet = ["character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletfire_00.ani","character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletice_00.ani","character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletdark_00.ani","character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletlight_00.ani"]; + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPathSet[subtype - 40]),true); + obj.getVar("Bool").setBool(0, false); + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(subtype % 10); + // attackInfo.setAttackType(ATTACKTYPE_MAGICAL); + if(subtype % 10 == 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(0, 0, 0, 255); + } + break; + case 34: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/bulletpenetrate/nomal/bulletpenetrate_frontbulletnomal_01.ani"),true); + break; + case 44: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("", "character/gunner/effect/animation/4_spitfire/bullet/bulletexplosive/bulletexplosive_bulletnormal_00.ani"),true); + break; + } + local randomAngle = sq_getRandom(-500,500); + randomAngle = randomAngle.tofloat() / 100.0; + if(isDown > 0) randomAngle = randomAngle - 30.0; + if(isAir > 0) randomAngle = randomAngle - 15.0; + if(subWeaponType != 3){ + if(isDown == 0 && addSpeedRate > 0){ + ptlPath[isDown] = ["particle/1_ranger/long_upattackrevolver.ptl","particle/1_ranger/long_upattackautomatic.ptl", + "particle/1_ranger/long_upattackmusket.ptl","","particle/1_ranger/long_upattackbowgun.ptl"]; + local delay = [500, 400, 550, 0, 450]; + local addRate = sq_GetIntData(sqrChr, SKILL_BYKK_BULLETPENETRATE, 1); + obj.sq_SetMoveParticle(ptlPath[isDown][subWeaponType], 0.0, randomAngle); + obj.setTimeEvent(1, delay[subWeaponType] * (100 + addRate) / 100, 1 false); + } + else obj.sq_SetMoveParticle(ptlPath[isDown][subWeaponType], 0.0, randomAngle); + local speedRate = [800,700,800,0,750]; + if(addSpeedRate > 0) sq_SetSpeedToMoveParticle(obj,0,speedRate[subWeaponType] + addSpeedRate); + } + sq_SetCustomRotate(obj, sq_ToRadian(randomAngle.tofloat())); + break; + case 3: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/1_ranger/animation/silverbullet/silverbullet.ani"); + obj.setCurrentAnimation(ani); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local subtype = receiveData.readDword(); + local isDown = receiveData.readDword(); + local isAir = receiveData.readDword(); + local isGround = receiveData.readDword(); + local aniPath = [["passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl_fire.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl_ice.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl_light.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_expl.ani"], + ["passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/fire/explosivebullet_fire_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/ice/explosivebullet_ice_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/light/explosivebullet_light_ground_expl3.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/explosivebullet/explosivebullet_ground_expl3.ani"]]; + local ani = sq_CreateAnimation("", aniPath[isGround][subtype]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 98)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype < 4){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(subtype); + } + if(isDown > 0 || isAir > 0){ + if(isGround < 1) sq_SetCustomRotate(obj, sq_ToRadian(-30.0)); + } + break; + } + break; + case SKILL_BYKK_CROSSSHOOT: + switch(subtype){ + case 1: + local elementSelect = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitStunRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isAir = receiveData.readDword(); + local aniPath = [["passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/fireshoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/iceshoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/mushoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/lightshoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/mushoot01.ani"], + ["passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/air_fireshoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/air_iceshoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/air_mushoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/air_lightshoot01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/crossshootrenewal/air_mushoot01.ani"]]; + local ani = sq_CreateAnimation("", aniPath[isAir][elementSelect]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 101)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(elementSelect < 4) attackInfo.setElement(elementSelect); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/crossshoot/bullet1.ani"),true); + if(elementSelect == 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(0, 0, 0, 255); + } + break; + } + break; + case SKILL_BYKK_CHARGEBUSTER: + switch(subtype){ + case 1: + local elementSelect = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local isAir = receiveData.readDword(); + local isDown = receiveData.readDword(); + local aniPath = [["passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/01_foward/02_fire/chargebuster_shot_fire.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/01_foward/03_ice/chargebuster_shot_ice.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/01_foward/01_normal/chargebuster_shot_normal.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/01_foward/04_light/chargebuster_shot_light.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/01_foward/01_normal/chargebuster_shot_normal.ani"], + ["passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/03_flying/02_fire/chargebuster_flying_shot_fire.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/03_flying/03_ice/chargebuster_flying_shot_ice.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/03_flying/01_normal/chargebuster_flying_shot_normal.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/03_flying/04_light/chargebuster_flying_shot_light.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/03_flying/01_normal/chargebuster_flying_shot_normal.ani"]]; + if(isDown > 0) aniPath[0] = ["passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/02_ground/02_fire/chargebuster_ground_shot_fire.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/02_ground/03_ice/chargebuster_ground_shot_ice.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/02_ground/01_normal/chargebuster_ground_shot_normal.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/02_ground/04_light/chargebuster_ground_shot_light.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/bustershoot/02_ground/01_normal/chargebuster_ground_shot_normal.ani"]; + local ani = sq_CreateAnimation("", aniPath[isAir][elementSelect]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 101)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(elementSelect < 4) attackInfo.setElement(elementSelect); + if(elementSelect == 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(0, 0, 0, 255); + } + break; + } + break; + case SKILL_BYKK_NAPALMBOMB: + switch(subtype){ + case 1: + //elementSelect,totalDamage,lifeTime,hitTime,totalDamageGround,sizeRate + local elementSelect = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local totalDamageGround = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, elementSelect); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, totalDamageGround); + obj.getVar("custom").setInt(5, sizeRate); + local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_bullet_fire01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_bullet_ice01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_bullet_normal01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_bullet_light01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_bullet_normal01.ani"]; + local ani = sq_CreateAnimation("", aniPath[elementSelect]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 115)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(elementSelect < 4) attackInfo.setElement(elementSelect); + obj.sq_SetMoveParticle("particle/4_spitfire/downnapalmbomb.ptl", 0.0, 0.0); + if(sq_GetZPos(obj) < 150){ + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 400.0); + else sq_SetVelocity(obj, 0, -400.0); + sq_SetVelocity(obj, 2, -400.0); + } + else{ + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 900.0); + else sq_SetVelocity(obj, 0, -900.0); + sq_SetVelocity(obj, 2, -900.0); + } + break; + case 2: + local elementSelect = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_explosion_fire01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_explosion_ice01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_explosion_normal01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_explosion_light01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_explosion_normal01.ani"]; + local ani = sq_CreateAnimation("", aniPath[elementSelect]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 114)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(elementSelect < 4) attackInfo.setElement(elementSelect); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local elementSelect = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, elementSelect); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_C4: + switch(subtype){ + case 1: + //totalDamage,createMax,lifeTime,speedRate + local totalDamage = receiveData.readDword(); + local targetNum = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, targetNum); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, speedRate); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/c4ex/disk.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 99)); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.getVar("move").setInt(2, sq_GetZPos(obj)); + obj.getVar("move").setInt(3, 0); + obj.setTimeEvent(1, 2, 50, true); + return; + break; + case 2: + //totalDamage,lifeTime,speedRate,group,uniqueId + sqrChr.getVar("C4AtkObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/c4remote/new_c4_bomb.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/c4remote/attacheffect.ani"),true); + sq_moveWithParent(targetObj, obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "appendage/character/ap_common_debuff.nut")) { + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, "appendage/character/ap_common_debuff.nut", true); + AddAppendage.sq_SetValidTime(lifeTime); + local change_appendage = AddAppendage.sq_getChangeStatus("common_debuff"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("common_debuff",targetObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, -speedRate.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -speedRate.tofloat()); + } + } + obj.setTimeEvent(2, lifeTime, 1, false); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/c4remote/exp1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/c4remote/exp2.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 100)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(4, 50, 1, false); + } + break; + } + break; + case SKILL_BYKK_GRENADENONE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + obj.getVar("flytochelli").setBool(0, false); + local size = sqrChr.getVar("chelliObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local chelliObj = sqrChr.getVar("chelliObj").get_obj_vector(i); + if(chelliObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj); + local grenadeSave = colObj.getVar("custom").getInt(7); + local grenadeMax = colObj.getVar("custom").getInt(5); + if(grenadeSave >= grenadeMax && !CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) break; + if(colObj.getVar("subtype").getInt(0) == 2 && colObj.getVar("state").getInt(0) < 22){ + obj.getVar("flytarget").clear_obj_vector(); + obj.getVar("flytarget").push_obj_vector(colObj); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.getVar("move").setInt(2, sq_GetZPos(obj)); + obj.getVar("move").setInt(3, totalDamage); + obj.getVar("flytochelli").setBool(0, true); + } + } + } + } + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate * 100 / 300; + local isEx = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isEx); + obj.getVar("custom").setInt(3, sq_GetZPos(obj)); + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/grenadenone.ani", atkIndex = 99; + if(isEx > 0){ + aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/grenadeweaponthrow_00.ani"; + // ptlSelect = 0; + atkIndex = 116; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("flytochelli").getBool(0) == false) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + else{ + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + } + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + if(obj.getVar("flytochelli").getBool(0) == false) obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + return; + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadenone/atgrenadenonegroundfront_00.ani"; + if(sub > 0) aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadenone/atgrenadenoneairfront_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(sub > 0) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadenone/atgrenadenoneairback_00.ani"),true); + else{ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadenone/atgrenadenonegroundback_00.ani"),true); + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadenone/atgrenadenonegroundbottom_00.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 106)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/grenadefront_02.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/grenadeback_01.ani"),true); + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/grenadebottom_00.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 118)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_GRENADELIGHT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + obj.getVar("flytochelli").setBool(0, false); + local size = sqrChr.getVar("chelliObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local chelliObj = sqrChr.getVar("chelliObj").get_obj_vector(i); + if(chelliObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj); + local grenadeSave = colObj.getVar("custom").getInt(7); + local grenadeMax = colObj.getVar("custom").getInt(5); + if(grenadeSave >= grenadeMax && !CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) break; + if(colObj.getVar("subtype").getInt(0) == 2 && colObj.getVar("state").getInt(0) < 22){ + obj.getVar("flytarget").clear_obj_vector(); + obj.getVar("flytarget").push_obj_vector(colObj); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.getVar("move").setInt(2, sq_GetZPos(obj)); + obj.getVar("move").setInt(3, totalDamage); + obj.getVar("flytochelli").setBool(0, true); + } + } + } + } + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate * 100 / 300; + local isEx = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/grenadelight.ani", atkIndex = 99; + if(isEx > 0){ + aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashweaponthrow_00.ani"; + // ptlSelect = 0; + totalDamage = totalDamage / 10; + atkIndex = 116; + } + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isEx); + obj.getVar("custom").setInt(3, sq_GetZPos(obj)); + obj.getVar("custom").setInt(4, prob); + obj.getVar("custom").setInt(5, time); + obj.getVar("custom").setInt(6, level); + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("flytochelli").getBool(0) == false) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + else{ + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + } + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + if(obj.getVar("flytochelli").getBool(0) == false) obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + return; + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadelight/atgrenadelightgroundfront_00.ani"; + if(sub > 0) aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadelight/atgrenadelightairfront_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(sub == 0){ + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadelight/atgrenadelightgroundbottom_00.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 105)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING,prob,level,time); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(4, prob); + obj.getVar("custom").setInt(5, time); + obj.getVar("custom").setInt(6, level); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_GRENADEWATER: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + obj.getVar("flytochelli").setBool(0, false); + local size = sqrChr.getVar("chelliObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local chelliObj = sqrChr.getVar("chelliObj").get_obj_vector(i); + if(chelliObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj); + local grenadeSave = colObj.getVar("custom").getInt(7); + local grenadeMax = colObj.getVar("custom").getInt(5); + if(grenadeSave >= grenadeMax && !CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) break; + if(colObj.getVar("subtype").getInt(0) == 2 && colObj.getVar("state").getInt(0) < 22){ + obj.getVar("flytarget").clear_obj_vector(); + obj.getVar("flytarget").push_obj_vector(colObj); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.getVar("move").setInt(2, sq_GetZPos(obj)); + obj.getVar("move").setInt(3, totalDamage); + obj.getVar("flytochelli").setBool(0, true); + } + } + } + } + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate * 100 / 300; + local isEx = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + // print("ptlSelect = "+ptlSelect); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/grenadewater.ani", atkIndex = 99; + if(isEx > 0){ + aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/frozenweaponthrow_00.ani"; + // ptlSelect = 0; + totalDamage = totalDamage / 10; + atkIndex = 116; + } + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isEx); + obj.getVar("custom").setInt(3, sq_GetZPos(obj)); + obj.getVar("custom").setInt(4, prob); + obj.getVar("custom").setInt(5, time); + obj.getVar("custom").setInt(6, level); + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("flytochelli").getBool(0) == false) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + else{ + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + } + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + if(obj.getVar("flytochelli").getBool(0) == false) obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + return; + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadeice/atgrenadeicebombgroundfront_00.ani"; + if(sub > 0) aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadeice/atgrenadeicebombairfront_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(sub == 0){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadeice/atgrenadeicebombgroundback_00.ani"),true); + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/4_spitfire/animation/atgrenadeice/atgrenadeicebombgroundbottom_00.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE,prob,level,time); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(4, prob); + obj.getVar("custom").setInt(5, time); + obj.getVar("custom").setInt(6, level); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_M18CLAYMORE: + switch(subtype){ + case 1: + case 3: + //totalDamage,hitMax,lifeTime,sizeRate,prob,time + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local flagIndex = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, hitMax); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, sizeRate); + obj.getVar("custom").setInt(4, prob); + obj.getVar("custom").setInt(5, time); + obj.getVar("custom").setInt(6, flagIndex); + obj.getVar("custom").setInt(7, ptlSelect); + if(subtype == 3){ + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + if(sq_GetZPos(obj) > 0) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/m18claymore_expl_dusta.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 110)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN,prob,120,time,0); + obj.setTimeEvent(2, 560 / (hitMax + 1), hitMax - 1, false); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/lv95atn-02x/boom_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN,prob,120,time,0); + obj.setTimeEvent(2, 400 / (hitMax + 1), hitMax - 1, false); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_LOCKONSUPPORT: + switch(subtype){ + case 1://totalDamage,sizeRate,hitMax,ptlSelect,prob,time + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, hitMax); + obj.getVar("custom").setInt(3, prob); + obj.getVar("custom").setInt(4, time); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/lockonsupport_grenade_lockonrolling01.ani"); + obj.setCurrentAnimation(ani); + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + return; + break; + case 2: + //totalDamage,sizeRate,hitMax,prob,time + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, hitMax); + obj.getVar("custom").setInt(3, prob); + obj.getVar("custom").setInt(4, time); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + if(sq_getRandom(1, 100) > 50) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/lockonsupport_hit0"+sq_getRandom(1,5).tostring()+"_eff01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 108)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN,prob,120,time,0); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + break; + case 4: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj.getVar("biaoji").get_obj_vector_size() > 0){ + activeObj.getVar("biaoji").push_obj_vector(obj); + } + else{ + activeObj.getVar("biaoji").clear_obj_vector(); + activeObj.getVar("biaoji").push_obj_vector(obj); + } + sq_moveWithParent(activeObj, obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_GRAVITYGRENADE: + switch(subtype){ + case 1: + //totalDamage,totalDamageExp,lifeTime,hitTime,ptlSelect,sizeRate + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/grenadegravity_grenade_normal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/grenadegravity_grenade_dodge.ani"),true); + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + return; + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamageExp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/03_finish/grenadegravity_finish_front.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 104)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamageExp); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_OPENFIRE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, hitMax); + obj.setTimeEvent(1, 400, 1, false); + break; + case 2: + case 3: + case 4: + local aniPath = ["character/gunner/effect/animation/4_spitfire/atopenfire/grenadenone.ani","character/gunner/effect/animation/4_spitfire/atopenfire/grenadelight.ani","character/gunner/effect/animation/4_spitfire/atopenfire/grenadewater.ani"]; + local ani = sq_CreateAnimation("", aniPath[subtype - 2]); + obj.setCurrentAnimation(ani); + local randomNum = sq_getRandom(-80,80); + local randomTime = sq_getRandom(500,800); + obj.getVar("custom").setInt(0, randomTime); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadejump.ptl", randomNum.tofloat(), randomNum.tofloat() * 0.4); + break; + } + break; + case SKILL_BYKK_PHOTOBILIZER: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, hitMax); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atphotobilizer/atphotobilizerbullet_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadejump.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,600); + break; + case 2: + local size = sqrChr.getVar("pBilizerObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = sqrChr.getVar("pBilizerObj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.setTimeEvent(5, 1000, 1, true); + } + } + } + sqrChr.getVar("pBilizerObj").clear_obj_vector(); + sqrChr.getVar("pBilizerObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, hitMax); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 1, 10000); + //obj.setTimeEvent(1, 550, 1, false); + break; + case 3: + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/4_spitfire/atphotobilizer/explosion/atphotobilizerexplosionfront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/gunner/effect/animation/4_spitfire/atphotobilizer/explosion/atphotobilizerexplosionback_05.ani"),true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/4_spitfire/atphotobilizer/explosion/atphotobilizerexplosionbottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("PHOTOBILIZER_EXP"); + sq_SetMyShake(obj, 3, 100); + break; + case 4: + local xPos = receiveData.readDword(); + local yPos = receiveData.readDword(); + local tarxPos = receiveData.readDword(); + local taryPos = receiveData.readDword(); + tarxPos = tarxPos + sq_getRandom(-75,75); + taryPos = taryPos + sq_getRandom(-20,20); + obj.getVar("custom").setInt(0, xPos); + obj.getVar("custom").setInt(1, yPos); + obj.getVar("custom").setInt(5, tarxPos); + obj.getVar("custom").setInt(6, taryPos); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atphotobilizer/photogranade_00.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("custom").setInt(2, sq_GetXPos(obj)); + obj.getVar("custom").setInt(3, sq_GetYPos(obj)); + obj.getVar("custom").setInt(4, sq_GetZPos(obj)); + obj.setTimeEvent(3, 5, 40, true); + break; + } + break; + case SKILL_BYKK_CHELLI: + switch(subtype){ + case 1: + sqrChr.getVar("chelliObj").push_obj_vector(obj); + //totalDamage_phase1,hitMax_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,grenadeMax,grenadeAddRate + local totalDamage_phase1 = receiveData.readDword(); + local hitMax_phase1 = receiveData.readDword(); + local totalDamage_phase2 = receiveData.readDword(); + local hitMax_phase2 = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local grenadeMax = receiveData.readDword(); + local grenadeAddRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_phase1); + obj.getVar("custom").setInt(1, hitMax_phase1); + obj.getVar("custom").setInt(2, totalDamage_phase2); + obj.getVar("custom").setInt(3, hitMax_phase2); + obj.getVar("custom").setInt(4, totalDamageExp); + obj.getVar("custom").setInt(5, grenadeMax); + obj.getVar("custom").setInt(6, grenadeAddRate); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/bullet/atchellibullet_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 121)); + if(sq_GetZPos(obj) == 75) sq_SetCustomRotate(obj, sq_ToRadian(-35.0)); + else sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadejump.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,600); + return; + break; + case 2: + sqrChr.getVar("chelliObj").push_obj_vector(obj); + local targetObj = sqrChr.getVar("chelliTarget").get_obj_vector(0); + if(targetObj){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + sq_moveWithParent(targetObj, obj); + } + local totalDamage_phase1 = receiveData.readDword(); + local hitMax_phase1 = receiveData.readDword(); + local totalDamage_phase2 = receiveData.readDword(); + local hitMax_phase2 = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local grenadeMax = receiveData.readDword(); + local grenadeAddRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_phase1); + obj.getVar("custom").setInt(1, hitMax_phase1); + obj.getVar("custom").setInt(2, totalDamage_phase2); + obj.getVar("custom").setInt(3, hitMax_phase2); + obj.getVar("custom").setInt(4, totalDamageExp); + obj.getVar("custom").setInt(5, grenadeMax); + obj.getVar("custom").setInt(6, grenadeAddRate); + obj.getVar("custom").setInt(7, 0); + obj.getVar("custom").setInt(8, 0); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local size = sqrChr.getVar("chelliObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local chelliObj = sqrChr.getVar("chelliObj").get_obj_vector(i); + if(chelliObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj); + if(colObj.getVar("subtype").getInt(0) == 2){ + sq_moveWithParent(colObj, obj); + } + } + } + } + sqrChr.getVar("chelliObj").push_obj_vector(obj); + local hitMax_phase1 = receiveData.readDword(); + local hitMax_phase2 = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax_phase1); + obj.getVar("custom").setInt(1, hitMax_phase2); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionnonefront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionnoneback_00.ani"),true); + break; + case 5: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionlightfront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionlightback_00.ani"),true); + break; + case 6: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionicefront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosioniceback_00.ani"),true); + break; + case 7: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionfirefront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionfireback_00.ani"),true); + break; + } + break; + case SKILL_BYKK_STANDBYREADY: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/overheatweaponthrow_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadejump.ptl", 0.0, 0.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/overheatfront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1001,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/overheatback_00.ani"),true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/overheatbottom_01.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 120)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_BYKK_EMPSTORM: + sqrChr.getVar("empStromObj").push_obj_vector(obj); + obj.setDirection(ENUM_DIRECTION_RIGHT); + switch(subtype){ + case 1://主体下部 + local totalDamage_drop = receiveData.readDword(); + local totalDamage_phase1 = receiveData.readDword(); + local totalDamage_phase2 = receiveData.readDword(); + local hitMax_phase2 = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_drop); + obj.getVar("custom").setInt(1, totalDamage_phase1); + obj.getVar("custom").setInt(2, totalDamage_phase2); + obj.getVar("custom").setInt(3, hitMax_phase2); + obj.getVar("custom").setInt(4, totalDamageExp); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_bottom2.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadedown.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,0); + break; + case 2://主体底部 + local totalDamage = receiveData.readDword(); + local totalDamage_phase1 = receiveData.readDword(); + local totalDamage_phase2 = receiveData.readDword(); + local hitMax_phase2 = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage_phase1); + obj.getVar("custom").setInt(2, totalDamage_phase2); + obj.getVar("custom").setInt(3, hitMax_phase2); + print("totalDamage_phase1 = "+totalDamage_phase1); + print("totalDamage_phase2 = "+totalDamage_phase2); + print("hitMax_phase2 = "+hitMax_phase2); + print("totalDamageExp = "+totalDamageExp); + obj.getVar("custom").setInt(4, totalDamageExp); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_sub.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_sub_dodge.ani"),true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(20, 1300, 1, false); + break; + case 3://主体顶部 + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_up.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadedown.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,0); + break; + case 4://主体背部 + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_bottom1.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/4_spitfire/grenadedown.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,0); + break; + case 5://小黑洞 + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/core_dodge_1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/core_dodge_2.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/core_normal_1.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/red_spark.ani"),true); + break; + case 6://石头 + local currentAni = obj.getCurrentAnimation(); + for(local i = 1; i < 11; i++){ + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/stone"+i.tostring()+".ani"),true); + currentAni.addLayerAnimation(1002,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/stone"+i.tostring()+"dodge.ani"),true); + } + break; + case 7://黑洞边缘 + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/pillar_dodge.ani"); + obj.setCurrentAnimation(ani); + break; + case 8: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge1.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 131)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge2.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_motionblur_dodge.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge_particle1.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge_particle2.ani"),true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_normal1.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_normal2.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_normal3.ani", 0, 1, 0); + obj.setTimeEvent(30,200, 3, false); + sq_SetShake(obj, 8, 100); + sq_flashScreen(obj,80,100,240,45, sq_RGB(205,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("BOMB_04"); + break; + case 9: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_first_exp.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 129)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + + } + break; + case SKILL_BYKK_DDAY: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local ptlSelect = receiveData.readDword(); + // print("totalDamage = "+totalDamage); + // print("hitMax = "+hitMax); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, hitMax); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/flare/handgrenadea_normal.ani"); + obj.setCurrentAnimation(ani); + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/ddayattackbox.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 102)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(6, 55 * hitMax, 1, false); + obj.setTimeEvent(7, 55 ,hitMax, true); + break; + case 3: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bombbard/ddayatka_eff_a.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bombbard/ddayatkafloor_floordodge_a.ani", 0, 0, 0); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 4: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/dangerclose/dangershell.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(22, 500, 1, false); + break; + case 5: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 6: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bullet/botbullet1.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/4_spitfire/ddaygunbullet.ptl", 0.0, 0.0); + break; + case 7: + case 8: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 9: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bullet/handgrenadec_normal.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/4_spitfire/ddaygrenade.ptl", 0.0, 0.0); + break; + } + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetAddWeaponDamage(attackInfo, true); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local skill = sq_GetSkill(sqrChr, 69); + if(skill.isSealFunction()){ + sq_setAttackInfoType(obj,ATTACKTYPE_MAGICAL); + obj.getVar("atkType").setInt(0, 1); + } + else{ + sq_setAttackInfoType(obj,ATTACKTYPE_PHYSICAL); + obj.getVar("atkType").setInt(0, 0); + } + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} diff --git a/user/116.205.165.25/1_atgunner_3.c b/user/116.205.165.25/1_atgunner_3.c new file mode 100644 index 0000000..5f2bf1f --- /dev/null +++ b/user/116.205.165.25/1_atgunner_3.c @@ -0,0 +1,2971 @@ + +function setState_po_atgunner_bykk(obj, state, datas) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0, state); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_WALKSHOOT: + switch(subtype){ + case 3: + local aniPath0 = "character/gunner/effect/animation/1_ranger/walkshoot/"; + local aniPath = ["atbodyreadystay.ani","atbodyreadyfront.ani","atbodyreadyback.ani","atbodyrightstay.ani","atbodyrightfront.ani","atbodyrightback.ani","atbodyleftstay.ani","atbodyleftfront.ani","atbodyleftback.ani"]; + local aniPath30 = "passiveobject/atgunner_bykk/dummy.ani"; + if(state < 30){ + local ani = sq_CreateAnimation("", aniPath0 + aniPath[state - 20]); + obj.setCurrentAnimation(ani); + if(state != 20 && state != 23 && state != 26){ + local frameIndex = obj.getVar("custom").getInt(0); + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(frameIndex); + } + local speedRate = obj.getVar("custom").getFloat(10); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + } + else{ + local ani = sq_CreateAnimation("", aniPath30); + obj.setCurrentAnimation(ani); + } + break; + } + break; + case SKILL_BYKK_KILLPOINT: + switch(subtype){ + case 1: + switch(state){ + case 20://旋转 + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/1_ranger/atkillpoint/anionly_killpoint_spinchain.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + local targetObj = obj.getVar("tar").get_obj_vector(0); + local speed = 50; + if(targetObj) speed = 50 * sq_Abs(sq_GetXPos(obj) - sq_GetXPos(targetObj)) / 400; + // if(speed <= 1) speed = 1; + //print("speed = "+speed); + obj.getVar("move").setInt(2, speed); + obj.setTimeEvent(1, 2, speed, true); + break; + case 21://击中 + sq_setCurrentAxisPos(obj, 2, 0); + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/1_ranger/atkillpoint/killpointchaina_chain.ani"); + obj.setCurrentAnimation(ani); + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!sq_IsFixture(targetObj)){ + local currentAni = obj.getCurrentAnimation(); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(2, currentAni.getDelaySum(false) / 30, 30, true); + } + break; + case 22://定身 + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/1_ranger/atkillpoint/killpointchainb_chain.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3, 100, -1, false); + break; + case 23://消失 + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/1_ranger/atkillpoint/killpointchainc_chain.ani"); + obj.setCurrentAnimation(ani); + break; + case 24://未命中,消失 + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/1_ranger/atkillpoint/killpointchainmiss_chain.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_FLAMETHROWER: + switch(subtype){ + case 1: + local aniPath = ["character/gunner/effect/animation/2_blaster/subweapon/flamethrower/atfire_start.ani","character/gunner/effect/animation/2_blaster/subweapon/flamethrower/atfire_loop.ani","character/gunner/effect/animation/2_blaster/subweapon/flamethrower/atfire_end.ani"]; + if(obj.getVar("custom").getInt(10) > 0) aniPath = ["character/gunner/effect/animation/2_blaster/atajreinforceparts/flamethrower/fire_start.ani","character/gunner/effect/animation/2_blaster/atajreinforceparts/flamethrower/fire_loop.ani","character/gunner/effect/animation/2_blaster/atajreinforceparts/flamethrower/fire_end.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + if(state == 22) obj.removeAllTimeEvent(); + local sizeRate = obj.getVar("custom").getInt(11); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_FLAMETHROWERBOOST: + switch(subtype){ + case 1: + local aniPath = ["character/gunner/effect/animation/2_blaster/subweapon/flamethrowerboost/atfire_start.ani","character/gunner/effect/animation/2_blaster/subweapon/flamethrowerboost/atfire_loop.ani","character/gunner/effect/animation/2_blaster/subweapon/flamethrowerboost/atfire_end.ani"]; + if(obj.getVar("custom").getInt(10) > 0) aniPath = ["character/gunner/effect/animation/2_blaster/atajreinforceparts/flamethrowerboost/fire_start.ani","character/gunner/effect/animation/2_blaster/atajreinforceparts/flamethrowerboost/fire_loop.ani","character/gunner/effect/animation/2_blaster/atajreinforceparts/flamethrowerboost/fire_end.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + if(state == 22) obj.removeAllTimeEvent(); + local sizeRate = obj.getVar("custom").getInt(11); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case 71: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/extruder/ball1.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/ball2.ani"),true); + pAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/ball3.ani"),true); + pAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/ball4.ani"),true); + pAni.addLayerAnimation(4,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/ball5.ani"),true); + pAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/fullcharge1.ani"),true); + pAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/fullcharge2.ani"),true); + pAni.addLayerAnimation(7,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/newfullcharge01.ani"),true); + pAni.addLayerAnimation(8,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/extruder/newfullcharge02.ani"),true); + obj.getVar("custom").setInt(12, sq_GetXPos(obj)); + obj.setTimeEvent(1, 6, 100, true); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/extruder/ajextruder/ajextruderboom_09.ani"); + obj.setCurrentAnimation(ani); + sq_SetShake(obj, 5, 300); + sq_flashScreen(obj,80,100,80,150, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), totalDamage); + local sizeRate = obj.getVar("custom").getInt(11); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_BYKK_STINGER: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/stinger/atmainnormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/stinger/maindodge.ani"), true); + break; + case 21: + obj.sq_RemoveMoveParticle(); + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/stinger/atmaindisjoint.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/stinger/atmaindisjointeffect.ani"), true); + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + local createMax = obj.getVar("custom").getInt(12); + for(local i = 0; i < createMax; i++){ + local angle = 360 / createMax * i; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_STINGER,2,totalDamage,sizeRate,i,angle,0,0,0,0); + } + obj.setTimeEvent(0, 200, 1, false); + sq_CreateParticle("passiveobject/atgunner_bykk/particle/2_blaster/stingerdisjoint.ptl", obj, 0, 0, 0, true, 30, 0, 2); + break; + } + break; + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/character/gunner/animation/stinger/atsubnormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/gunner/animation/stinger/subdodge.ani"), true); + break; + case 21: + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("", "passiveobject/character/gunner/animation/stinger/atexpdodge.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/character/gunner/animation/stinger/atexpnormal.ani"), true); + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.sq_PlaySound("FM31_HIT"); + break; + } + break; + case 3: + switch(state){ + case 20: + local sub = obj.getVar("custom").getInt(12); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/lancer/stingerfm92mk2lancermissile"+sub.tostring()+"_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, 300, 1, false); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/lancer/stingerfm92mk2lancerex_00.ani"); + obj.setCurrentAnimation(ani); + createOnlyDrawObject_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/2_blaster/animation/lancer/stingerfm92mk2lancerexbottom_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetShake(obj, 1, 50); + obj.sq_PlaySound("FM31_HIT"); + break; + } + break; + } + break; + case SKILL_BYKK_URANIUMBOMB: + switch(subtype){ + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/mechadropappear.ani"); + obj.setCurrentAnimation(ani); + if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -1200.0); + else sq_SetVelocity(obj, 0, 1200.0); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/mechadropmove.ani"); + obj.setCurrentAnimation(ani); + createSkillPassive_ATGunner_bykk(obj,sqrChr,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_URANIUMBOMB,4,0,0,0,0,0,0,0,0); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/mechadropdisappear.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_SOLARSYSTEM: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atsolasystem/solasystemenergeball_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atsolasystem/solasystemenergeballex_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(11); + local damage = obj.getVar("custom").getInt(12); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN ,100, sq_GetSkillLevel(sqrChr, 174) + 10,1000, damage); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/atsolasystem/solasystemenergeballexbottom_00.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + sq_SetShake(obj, 10, 300); + break; + } + break; + } + break; + case SKILL_BYKK_ANCIENTTRIGGER: + switch(subtype){ + case 8: + case 9: + switch(state){ + case 20: + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/start_in_atgate_in.ani"; + if(subtype == 9) aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/start_out_atgate_out.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/loop_in_atgate_in.ani"; + if(subtype == 9) aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/loop_out_atgate_out.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(0.9, 0.9); + break; + } + break; + case SKILL_BYKK_PLASMABOOST: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/plasmaboost/plasmaboostlaserloop_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/plasmaboost/plasmaboostlaserend_00.ani"); + obj.setCurrentAnimation(ani); + local time = obj.getVar("custom").getInt(10); + //print("ttime = "+time); + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atgunner/2_blaster_bykk/ap_plasmaboost.nut"); + if(addAppendage) addAppendage.sq_SetValidTime(time); + } + } + } + break; + } + break; + } + break; + case SKILL_BYKK_FSC_7: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atfsc7/fscbullet_00.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atfsc7/fsca_00.ani", 0, 0, 0); + obj.sq_SetMoveParticle("particle/2_blaster/extruder.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj, 0, 1000); + obj.setTimeEvent(1, 1000, 1, false); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atfsc7/fscdisappearbullet_03.ani"); + obj.setCurrentAnimation(ani); + obj.sq_RemoveMoveParticle(); + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(12); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_FSC_7,2,totalDamage,hitMax,sizeRate,0,0,0,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_STINGEREX: + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/stingerex/atstinger/boostermissilereturn_02.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/stinger.ptl", 0.0, 0.0); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + // sq_SetSpeedToMoveParticle(obj,0,200); + break; + case 21: + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/stingerex/atstinger/explosion_08.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(12); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage * hitMax); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/stingerex/atstinger/groundcrack_00.ani"; + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate) + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 6, 120); + break; + } + break; + } + break; + case SKILL_BYKK_OPERATIONRAZE: + switch(subtype){ + case 5: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/missile02_01.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/stingerexp.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,sq_getRandom(200, 250)); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/orboom01_01.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("FM31_HIT"); + sq_SetShake(obj, 5, 100); + break; + } + break; + case 6: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/missile01out_02.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/2_blaster/subweapon/stingerexp.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj, 0, 0); + sq_SetCustomRotate(obj, sq_ToRadian(180.0)); + break; + case 21: + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/orboom02_15.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("FM31_HIT"); + sq_SetShake(obj, 10, 300); + break; + } + break; + } + break; + case SKILL_BYKK_PHLEGETHON: + switch(subtype){ + case 1: + local aniPath = ["passiveobject/atgunner_bykk/2_blaster/animation/phlegethon/phlegethonstartfront_00.ani","passiveobject/atgunner_bykk/2_blaster/animation/phlegethon/phlegethonloopfront_00.ani","passiveobject/atgunner_bykk/2_blaster/animation/phlegethon/phlegethonendfront_03.ani"]; + if(obj.getVar("custom").getInt(13) > 0) aniPath = ["passiveobject/atgunner_bykk/2_blaster/animation/phlegethon/booststartfront_00.ani","passiveobject/atgunner_bykk/2_blaster/animation/phlegethon/boostloopfront_00.ani","passiveobject/atgunner_bykk/2_blaster/animation/phlegethon/boostendfront_01.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + switch(state){ + case 20: obj.sq_PlaySound("PHLEGETHON_FIRE"); break; + case 21: + obj.stopSound(2333); + obj.sq_PlaySound("PHLEGETHON_FIRE_LOOP", 2333); + break; + case 22: + obj.sq_PlaySound("PHLEGETHON_FIRE_LOOP_END"); + obj.removeAllTimeEvent(); + break; + } + break; + case 2: + local aniPath = ["character/gunner/effect/animation/2_blaster/atphlegethon/flamebottomloop_00.ani","character/gunner/effect/animation/2_blaster/atphlegethon/flamebottomend_00.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_HYPERFLARE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackfront_00.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("HYPERFLARE_SUMMON"); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackfront_30.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackfront_34.ani"),true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackbottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackfront_00.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackbottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(3, currentAni.getDelaySum(0, 15), 1, false); + break; + } + break; + case 0: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackback_33.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare1attackback_00.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackback_35.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_NAPALMBOMB: + switch(subtype){ + case 3: + local aniPath = [["passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floora_fire01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floora_ice01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floora_normal01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floora_light01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floora_normal01.ani"], + ["passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorb_fire01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorb_ice01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorb_normal02.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorb_light01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorb_normal02.ani"], + ["passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorc_fire01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorc_ice01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorc_normal01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorc_light01.ani", + "passiveobject/atgunner_bykk/4_spitfire/animation/napalmbombrenewal/napalm_floorc_normal01.ani"]]; + local elementSelect = obj.getVar("custom").getInt(0); + local ani = sq_CreateAnimation("", aniPath[state - 20][elementSelect]); + obj.setCurrentAnimation(ani); + local sizeRate = obj.getVar("custom").getInt(4); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + if(state == 20){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 98)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(elementSelect < 4) attackInfo.setElement(elementSelect); + } + else if(state == 21){ + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, hitTime, -1, true); + } + break; + } + break; + case SKILL_BYKK_GRENADELIGHT: + switch(subtype){ + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashfrontstart_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 117)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING,obj.getVar("custom").getInt(4),obj.getVar("custom").getInt(5),obj.getVar("custom").getInt(6)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + obj.setTimeEvent(2, 180, -1, false); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashfrontloop_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 1500, 1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashfrontend_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashbottomstart_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashbottomloop_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 1500, 1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/flashbottomend_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_GRENADEWATER: + switch(subtype){ + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/frozenstart_01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 119)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE,obj.getVar("custom").getInt(4),obj.getVar("custom").getInt(5),obj.getVar("custom").getInt(6)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + obj.setTimeEvent(2, 160, -1, false); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/frozenloop_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 1000, 1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atstandby-ready/frozenend_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_M18CLAYMORE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/m18claymore_start_claymore.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/m18claymore_loop_claymore.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), 1, false); + obj.setTimeEvent(4, 100, -1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/m18claymore_ready_claymore.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + local hitMax = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(3); + local prob = obj.getVar("custom").getInt(4); + local time = obj.getVar("custom").getInt(5); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_M18CLAYMORE,2,totalDamage,hitMax,sizeRate,prob,time,0,0,0); + break; + case 23: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/atm18claymore_airstart_claymore.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("move").setInt(0, sq_GetZPos(obj)); + obj.setTimeEvent(3, 2, 40, true); + break; + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/lv95atn-02x/claymorethrow_00.ani"); + obj.setCurrentAnimation(ani); + local flagIndex = obj.getVar("custom").getInt(6); + local ptlSelect = obj.getVar("custom").getInt(7); + if(flagIndex == 202) ptlSelect = 3; + local ptlPath = ["particle/4_spitfire/grenadecenter.ptl","particle/4_spitfire/grenadeup.ptl","particle/4_spitfire/grenadedown.ptl","particle/4_spitfire/grenadejump.ptl"]; + obj.sq_SetMoveParticle(ptlPath[ptlSelect], 0.0, 0.0); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/lv95atn-02x/claymoresearchloop.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), 1, false); + obj.setTimeEvent(5, 100, -1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/m18claymore/lv95atn-02x/claymoreshoot_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_LOCKONSUPPORT: + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/bombbard/lockonsupport_floor_loop_bombbard.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/lockonsupport_readya_grenadb01.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 109)); + obj.getVar("tar").clear_obj_vector(); + obj.sq_SetMaxHitCounterPerObject(1); + obj.setTimeEvent(1, 500, 3, false); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/bombbard/lockonsupport_floor_end_bombbard.ani"); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/target/lockonsupport_targetmarka_start_eff01.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/target/lockonsupport_targetmarka_loop_eff01.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/target/lockonsupport_targetmarka_end_eff01.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_GRAVITYGRENADE: + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/01_start/grenadegravity_start_background.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/01_start/grenadegravity_start_front.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/01_start/grenadegravity_start_background01.ani",0,-1,0); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadegravity/02_loop/grenadegravity_loop_background.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 103)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + //print("life = "+obj.getVar("custom").getInt(2)); + //print("hit = "+obj.getVar("custom").getInt(3)); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), 1, false); + obj.setTimeEvent(2, obj.getVar("custom").getInt(3), -1, true); + + if(sqrChr && sqrChr.getState() != STATE_DIE){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "appendage/character/ap_common_suck.nut")) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, 165 * obj.getVar("custom").getInt(4) / 100, 100); + } + } + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/bombbard/lockonsupport_floor_end_bombbard.ani"); + obj.setCurrentAnimation(ani); + local totalDamageExp = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(4); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,3,totalDamageExp,sizeRate,0,0,0,0,0,0); + if(!sqrChr) break; + CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + break; + } + local sizeRate = obj.getVar("custom").getInt(4); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/target/lockonsupport_targetmarka_start_eff01.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/target/lockonsupport_targetmarka_loop_eff01.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/target/lockonsupport_targetmarka_end_eff01.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_CHELLI: + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/start/atchelliboomstartbottom_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 127)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 300, obj.getVar("custom").getInt(1) + 1, true); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,3,obj.getVar("custom").getInt(1),obj.getVar("custom").getInt(3),0,0,0,0,0,0); + + // if(sqrChr && sqrChr.getState() != STATE_DIE){ + // if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "appendage/character/ap_common_suck2.nut")) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck2.nut"); + // local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck2.nut", false); + // if(appendage){ + // CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + // local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + // if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + // if(auraAppendage) auraAppendage.setAttractionInfo(300, 300, 280, 100); + // } + // } + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/loop/atchellibottomloopbottom_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/loopend/atchellibottomloopendbottom_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 126)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2, 100, obj.getVar("custom").getInt(3) + 1, true); + break; + case 23: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/end/atchelliexplosionnonebottom_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamageExp = obj.getVar("custom").getInt(4); + local grenadeSave = obj.getVar("custom").getInt(7); + local grenadeDamageSave = obj.getVar("custom").getInt(8); + // print("totalDamageExp = "+totalDamageExp); + // print("grenadeSave = "+grenadeSave); + // print("grenadeDamageSave = "+grenadeDamageSave); + if(grenadeSave > 0) totalDamageExp = totalDamageExp + grenadeDamageSave; + // print("totalDamageExp2 = "+totalDamageExp); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 122)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamageExp); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + if(obj.getVar("grenadeNone").getBool(0)) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,4,0,0,0,0,0,0,0,0); + else if(obj.getVar("grenadeLight").getBool(0)) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,5,0,0,0,0,0,0,0,0); + else if(obj.getVar("grenadeWater").getBool(0)) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,6,0,0,0,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,7,0,0,0,0,0,0,0,0); + // if(!sqrChr) return; + // CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck2.nut"); + return; + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/start/atchelliboomstartfront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/start/atchelliboomstartback_00.ani"),true); + obj.setTimeEvent(3, 300, obj.getVar("custom").getInt(0) + 1, true); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/loop/atchellibottomloopfront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/loop/atchellibottomloopback_00.ani"),true); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/loopend/atchellibottomloopendfront_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/atchelli/loopend/atchellibottomloopendback_00.ani"),true); + obj.setTimeEvent(4, 100, obj.getVar("custom").getInt(1) + 1, true); + break; + } + break; + } + break; + case SKILL_BYKK_DDAY: + switch(subtype){ + case 5: + local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/thrower01on_01.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/thrower02moveshot_02.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/thrower03shot_02.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/thrower04dashloop_02.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/thrower05off_01.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + switch(state){ + case 20: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/ddayportal_eff_a.ani", 0, 0, 0); + break; + case 22: + obj.stopTimeEvent(32); + obj.setTimeEvent(32, 80, 3, true); + break; + case 21: + obj.setTimeEvent(32, 200, -1, true); + case 23: + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.setTimeEvent(31, 15, 40, true); + break; + case 24: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/ddayportal_eff_a.ani", 50, 0, 0); + sq_SetCurrentDirection(pooledObj, sq_GetOppositeDirection(sq_GetDirection(pooledObj))); + break; + } + break; + case 7: + case 8: + local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/dasha01on_add_body_a_dod.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/dasha02loop_add_body_a_nor.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/dasha03off_add_body_a_dod.ani"]; + if(subtype == 8) aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/dashb01on_add_body_b_dod.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/dashb02loop_add_body_b_nor.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/dashb03off_add_body_b_dod.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + switch(state){ + case 20: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/ddayportal_eff_a.ani", 0, 0, 0); + break; + case 21: + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.setTimeEvent(41, 12, 100, true); + obj.setTimeEvent(42, sq_getRandom(300, 400), -1, false); + break; + case 22: + obj.stopTimeEvent(42); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bot/ddayportal_eff_a.ani", 50, 0, 0); + sq_SetCurrentDirection(pooledObj, sq_GetOppositeDirection(sq_GetDirection(pooledObj))); + break; + } + break; + } + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onEndCurrentAni_po_atgunner_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_AIRRAID: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_HEADSHOT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_TWINGUNBLADE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_RANDOMSHOOT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_CHAINSNATCH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_WALKSHOOT: + if(subtype <= 2) sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_MULTIHEADSHOT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_SUPPRESSINGFIRE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_KILLPOINT: + switch(subtype){ + case 1: + switch(state){ + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: + case 24: + if(sqrChr.getVar("KillPoint_Bool").getBool(0)) sqrChr.getVar("KillPoint_Bool").setBool(0, false); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_BLOODNCHAIN: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_RUINATIONAREA: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_FLAMETHROWER: + case SKILL_BYKK_FLAMETHROWERBOOST: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_CANNONBALL: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_STEYRHEAVYRIFLE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_LASERRIFLE: sq_SendDestroyPacketPassiveObject(obj); break; + case 71: + sq_SendDestroyPacketPassiveObject(obj); + CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + break; + case SKILL_BYKK_FM31: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_STINGER: + switch(subtype){ + case 1: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_URANIUMBOMB: + switch(subtype){ + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_SOLARSYSTEM: + switch(subtype){ + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_ANCIENTTRIGGER: + switch(subtype){ + case 8: + case 9: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + } + break; + case SKILL_BYKK_PLASMABOOST: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_FSC_7: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_STINGEREX: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_PT_15: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_OPERATIONRAZE: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + case 6: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_PHLEGETHON: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_HYPERFLARE: + switch(subtype){ + case 0: + case 1: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_OVERCHARGE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_CROSSSHOOT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_CHARGEBUSTER: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_NAPALMBOMB: + switch(subtype){ + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_C4: + switch(subtype){ + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_GRENADENONE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_GRENADELIGHT: + switch(subtype){ + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + case 4: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_GRENADEWATER: + switch(subtype){ + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_M18CLAYMORE: + switch(subtype){ + case 1: + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + case 23: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_LOCKONSUPPORT: + switch(subtype){ + case 2: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_GRAVITYGRENADE: + switch(subtype){ + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_OPENFIRE: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_PHOTOBILIZER: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_CHELLI: + switch(subtype){ + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 4: + case 5: + case 6: + case 7: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_EMPSTORM: + switch(subtype){ + case 8: + sq_SendDestroyPacketPassiveObject(obj); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local size = sqrChr.getVar("empStromObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local empStromObj = sqrChr.getVar("empStromObj").get_obj_vector(i); + if(empStromObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(empStromObj); + colObj.setTimeEvent(31, 1000, 1, true); + } + } + } + } + break; + case 9: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_DDAY: + switch(subtype){ + case 3: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 7: + case 8: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + + } + break; + } +} + +function onTimeEvent_po_atgunner_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_HEADSHOT: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_RANDOMSHOOT: + switch(timeEventIndex){ + case 0: + //print("count = "+obj.getVar("custom").getInt(1)); + if(obj.getVar("custom").getInt(1) >= obj.getVar("custom").getInt(0)){ + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + sqrChr.sq_IntVectClear(); + sqrChr.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + else obj.getVar("custom").setInt(1, obj.getVar("custom").getInt(1) + 1); + if(subtype == 3){ + local loadSlot = sqrChr.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("custom").setInt(3, totalDamage); + obj.resetHitObjectList(); + } + else{ + obj.getVar("custom").setInt(3, 0); + local totalDamage = obj.getVar("custom").getInt(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + } + else if(subtype == 4) obj.resetHitObjectList(); + break; + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_WALKSHOOT: + switch(timeEventIndex){ + case 10: + if(sqrChr.getState() != STATE_BYKK_WALKSHOOT) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_DOUBLEGUNHAWK: + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local vx = sq_GetAccel(0, 200, timeEventCount, 20, true); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + local moveY = 10; + if(obj.getVar("custom").getInt(0) == 2) moveY = 15; + else if(obj.getVar("custom").getInt(0) == 3) moveY = 25; + if(obj.getVar("custom").getInt(1) > 0) moveY = -moveY; + local moveYset = 0; + if(obj.getVar("custom").getInt(2) == 1) moveYset = -50; + else if(obj.getVar("custom").getInt(2) == 2) moveYset = 50; + obj.getVar("move").setInt(3, -moveY - moveYset); + local vy = sq_GetAccel(0, moveY + moveYset, timeEventCount, 20, true); + sq_setCurrentAxisPos(obj, 1, obj.getVar("move").getInt(1) + vy); + + if(timeEventCount >= 20){ + obj.setTimeEvent(2, obj.getVar("custom").getInt(4), 1, false); + } + break; + case 2: + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + local dis = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(sqrChr)); + local speed = 20 * 300 / dis; + obj.setTimeEvent(3, obj.getVar("custom").getInt(3) / speed, 20, true); + break; + case 3: + local vx = sq_GetAccel(obj.getVar("move").getInt(0), sq_GetXPos(sqrChr), timeEventCount, 20, false); + local vy = sq_GetAccel(obj.getVar("move").getInt(1), sq_GetYPos(sqrChr), timeEventCount, 20, false); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + if(timeEventCount >= 20){ + local sqrState = sqrChr.getState(); + if(obj.getVar("custom").getInt(0) <= 2){ + if(sqrState == 0 || sqrState == 8 || sqrState == 14 || sqrState == 3){ + if(obj.getVar("custom").getInt(1) == 0){ + sqrChr.getVar("DoubleGunhawk_Phase").setInt(0, obj.getVar("custom").getInt(0) + 1); + sq_AddDrawOnlyAniFromParent(sqrChr, "character/gunner/effect/animation/doublegunhawk/catch.ani", 0, 0, -20); + } + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(1); + sqrChr.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + } + local xPos = sq_GetXPos(obj); + local dis = sq_Abs(xPos - obj.getVar("move").getInt(0)); + obj.getVar("move").setInt(2, sq_GetDistancePos(xPos, sq_GetOppositeDirection(sq_GetDirection(obj)), dis)); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + local speed = 20 * 300 / dis; + obj.setTimeEvent(4, obj.getVar("custom").getInt(3) / speed, 20, true); + } + break; + case 4: + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), obj.getVar("move").getInt(2), timeEventCount, 20); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), obj.getVar("move").getInt(1) + obj.getVar("move").getInt(3), timeEventCount, 20); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + if(timeEventCount >= 20) sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: + local aniPath = ["passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/fire1.ani", "passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/fire2.ani", "passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/fire3.ani", "passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/fire4.ani"]; + local sizeRate = 100; + local phase = obj.getVar("custom").getInt(0); + if(phase == 2) sizeRate = 200; + else if(phase == 3) sizeRate = 300; + local sub = timeEventCount % 4; + local pooledObj = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath[sub],true,sq_getRandom(0, 1),sq_GetXPos(obj) + sq_getRandom(-20, 20),sq_GetYPos(obj) + sq_getRandom(0, 10),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL, sizeRate, sizeRate / 2); + // local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[sub], sq_getRandom(-20, 20), sq_getRandom(0, 10), 0); + sq_moveWithParent(obj, pooledObj); + if(phase == 3 && timeEventCount % 3 == 0){ + if(obj.isExistTimeEvent(4)) break; + local aniPath = "passiveobject/atgunner_bykk/1_ranger/animation/doublegunhawk/dodge.ani"; + local pooledObj = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,sq_getRandom(0, 1),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL, 100, 100); + sq_moveWithParent(obj, pooledObj); + } + break; + } + break; + case SKILL_BYKK_SUPPRESSINGFIRE: + switch(timeEventIndex){ + case 1: + local subState = sqrChr.getSkillSubState(); + if(subState != 1 || sqrChr.getState() != STATE_BYKK_SUPPRESSINGFIRE){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + local hitTime_min = obj.getVar("custom").getInt(1); + local hitTime_max = obj.getVar("custom").getInt(2); + if(sqrChr.getRapidInputFrequency() > 0){ + obj.setTimeEvent(1, hitTime_max, 1, false); + } + else obj.setTimeEvent(1, hitTime_min, 1, false); + local loadSlot = sqrChr.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 87)); + // print("totalDamageSet2 = "+obj.getVar("custom").getInt(4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(4)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + // sq_SetCurrentAttackeDamageAct(attackInfo, 0); + // sq_SetCurrentAttacknBackForce(attackInfo, 1); + sq_SetCurrentAttacknUpForce(attackInfo, 5); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + local sizeRate = obj.getVar("custom").getInt(3); + local delay = hitTime_min; + if(sqrChr.getRapidInputFrequency() > 0) delay = hitTime_max; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_SUPPRESSINGFIRE,4,totalDamage,sizeRate,delay,0,0,0,0,0); + } + else{ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 87)); + //print("totalDamageSet2 = "+obj.getVar("custom").getInt(4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(4)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknUpForce(attackInfo, 5); + } + break; + } + break; + case SKILL_BYKK_KILLPOINT: + switch(timeEventIndex){ + case 1: + local timeEventMax = obj.getVar("move").getInt(2); + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(targetObj), timeEventCount, timeEventMax); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(targetObj), timeEventCount, timeEventMax); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + } + else{ + if(state == 20 && timeEventCount >= 50) obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + local vx = sq_GetUniformVelocity(0, 125, timeEventCount, 30); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(targetObj, 0, dstX); + } + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_killpoint.nut")){ + if(state != 23){ + obj.stopTimeEvent(3); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_RUINATIONAREA: + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_FLAMETHROWER: + case SKILL_BYKK_FLAMETHROWERBOOST: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + obj.removeAllTimeEvent(); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr), obj.getDirection(), 140)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(sqrChr)); + break; + } + break; + case SKILL_BYKK_CANNONBALL: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 11: + case 12: + case 13: + case 14: + local sizeRate = 200 / 100; + sizeRate = sizeRate.tofloat(); + switch(timeEventIndex){ + case 11: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/noneexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 12: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/noneexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 13: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/noneexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 14: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/noneexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_BYKK_STEYRHEAVYRIFLE: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(12); + local sub = obj.getVar("custom").getInt(13); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_STEYRHEAVYRIFLE,2,totalDamage,sizeRate,sub,0,0,0,0,0); + break; + case 11: + case 12: + case 13: + case 14: + local sizeRate = obj.getVar("custom").getInt(10) / 100.0; + // sizeRate = sizeRate.tofloat(); + switch(timeEventIndex){ + case 11: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 12: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 13: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 14: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case 71: + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 265, timeEventCount, 100, true); + local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(12), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= 100) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FM31: + switch(timeEventIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/fm-31bullet/smoke.ani", 0, 0, 0); + break; + case 11: + case 12: + case 13: + case 14: + local sizeRate = obj.getVar("custom").getInt(11).tofloat() / 100.0; + //print("sizeRate = "+sizeRate); + switch(timeEventIndex){ + case 11: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 12: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 13: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setSpeedRate(150.0); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 14: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_BYKK_STINGER: + switch(timeEventIndex){ + case 0: sq_SendDestroyPacketPassiveObject(obj); break; + case 1: + if(state != 21) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 10: + local sub = timeEventCount % 6; + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + createSkillPassive_ATGunner_bykk(obj,targetObj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_STINGER,3,totalDamage,sizeRate,sub,0,0,0,0,0); + } + else sq_SendDestroyPacketPassiveObject(obj); + if(timeEventCount >= obj.getVar("custom").getInt(12)) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_URANIUMBOMB: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + local sizeRate = obj.getVar("custom").getInt(12); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/floor_dodge.ani"; + local aniPath2 = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/floor_normal.ani"; + local aniPath3 = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/cloud_dodge.ani"; + local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM,sizeRate / 2,sizeRate / 2); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),xPos,yPos,-1,ENUM_DRAWLAYER_BOTTOM,sizeRate / 2,sizeRate / 2); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath3,true,obj.getDirection(),xPos,yPos+1,0,ENUM_DRAWLAYER_BOTTOM,sizeRate / 2,sizeRate / 2); + break; + case 10: + local hitMax = obj.getVar("custom").getInt(17); + local delay = hitMax>=8?75:120; + obj.setTimeEvent(12, delay, hitMax, false); + break; + case 11: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/attackbox.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 200000); + sq_SetAttackBoundingBoxSizeRate(currentAni, 2.0, 3.0, 2.0); + local totalDamage = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local prob = obj.getVar("custom").getInt(13); + local time = obj.getVar("custom").getInt(14); + local damage = obj.getVar("custom").getInt(15); + local level = obj.getVar("custom").getInt(16); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING ,prob, level,time, damage); + local hitMax = obj.getVar("custom").getInt(17); + obj.sq_SetMaxHitCounterPerObject(hitMax); + local delay = hitMax>=8?50:100; + obj.setTimeEvent(13, delay, 20, false); + obj.setTimeEvent(1, delay * 20, 1, false); + break; + case 12: + local sizeRate = obj.getVar("custom").getInt(12); + local xPos = [0,80,100,120,130,150,170,180,200,220,230,250,270,290,300,310,320,330,340,350], yPos = [0,-50,0,50,-45,0,45,-55,0,55,-45,0,45,-10]; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,xPos[timeEventCount] - sq_getRandom(150, 250),sq_getRandom(-65,65),550,obj.getDirection(),2,SKILL_BYKK_URANIUMBOMB,5,sizeRate,0,0,0,0,0,0,0); + break; + case 13: + obj.resetHitObjectList(); + break; + case 20: + local totalDamage = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(12); + local prob = obj.getVar("custom").getInt(13); + local time = obj.getVar("custom").getInt(14); + local damage = obj.getVar("custom").getInt(15); + local level = obj.getVar("custom").getInt(16); + + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/attackbox.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 1400); + obj.setTimeEvent(2, 200, 1, false); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING ,prob, level,time, damage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 200.0; + //print("sizeRate = "+sizeRate); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_SOLARSYSTEM: + switch(timeEventIndex){ + case 1: + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + if(sqrChr && sqrChr.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + break; + case 10: + local totalDamage = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(11, 50, 4, false); + break; + case 11: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_ANCIENTTRIGGER: + switch(timeEventIndex){ + case 0: + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + local lifeTime = obj.getVar("custom").getInt(12) - 300; + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/plasmaboost/plasmaboostlaserloop_00.ani"); + //local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/hitmain2fullcharge.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni,-800,-64,0,2052,131,190); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullmuzzle1.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullmuzzle2.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/atgunner_bykk/2_blaster/animation/ancienttrigger/fullspark.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, lifeTime / hitMax, hitMax, false); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,2,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,2,1,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,3,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,3,1,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,4,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,5,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,5,1,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,5,2,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,5,3,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-20,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,7,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,20,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,7,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,sqrChr,PASSIVEOBJ_BYKK_ATGUNNER,100,-20,-sq_GetZPos(sqrChr),obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,6,0,0,0,0,0,0,0,0); + break; + case 1: + obj.resetHitObjectList(); + sq_SetShake(obj, 5, 100); + break; + } + break; + case SKILL_BYKK_PLASMABOOST: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + obj.removeAllTimeEvent(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr), obj.getDirection(), 92)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(sqrChr)); + break; + } + break; + case SKILL_BYKK_FSC_7: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(10, 29); + local hitMax = obj.getVar("custom").getInt(11); + obj.setTimeEvent(3, delaySum / hitMax / 2, hitMax - 1, false); + sq_SetMyShake(obj, 3, delaySum); + break; + case 3: obj.resetHitObjectList();print(timeEventCount); break; + case 4: + obj.removeAllTimeEvent(); + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_STINGEREX: + switch(timeEventIndex){ + case 1: + local boss_number = 0; + local nameed_number = 0; + local targetObj; + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + boss_number = boss_number + 1; + targetObj = activeObj; + break; + } + else if(sq_IsNamed(activeObj)){ + nameed_number = nameed_number + 1; + targetObj = activeObj; + break; + } + } + } + if(boss_number <= 0 || nameed_number <= 0){ + targetObj = sq_FindTarget(sqrChr, -600, 2000, 400, 400); + } + if(!targetObj){ + sq_SendDestroyPacketPassiveObject(obj); + return; + } else { + sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/atgunner_bykk/2_blaster/animation/stingerex/targetingmark.ani", 0, 0, 0); + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(12); + createSkillPassive_ATGunner_bykk(sqrChr,targetObj,PASSIVEOBJ_BYKK_ATGUNNER,-550,0,500,obj.getDirection(),2,SKILL_BYKK_STINGEREX,2,totalDamage,hitMax,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + return; + } + break; + } + break; + case SKILL_BYKK_PT_15: + switch(timeEventIndex){ + case 1: + break; + } + break; + case SKILL_BYKK_OPERATIONRAZE: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/missilefire_02.ani", 0, 0, 0); + obj.setTimeEvent(4, 20, 4, true); + break; + case 4: + local totalDamage = obj.getVar("custom").getInt(10); + local ypos = [0,-15,-5,5,15]; + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/missileshootout_01.ani", 0, ypos[timeEventCount], 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,ypos[timeEventCount] + sq_getRandom(-10,10),0,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,5,totalDamage,0,0,0,0,0,0,0); + break; + } + break; + case SKILL_BYKK_PHLEGETHON: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + obj.removeAllTimeEvent(); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(sqrChr)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(sqrChr)); + break; + case 3: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_HYPERFLARE: + switch(subtype){ + case 0: + case 1: + switch(timeEventIndex){ + case 1: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(2, 10, 8, true); + break; + case 2: + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), sq_GetDirection(obj), timeEventCount * 2); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackback_00.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackback_34.ani", 0, -1, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,4,0,0,0,0,0,0,0,0); + break; + } + break; + case 2: + switch(timeEventIndex){ + case 1: + local hitMax = obj.getVar("custom").getInt(0); + local hitTime = obj.getVar("custom").getInt(1); + obj.setTimeEvent(2, hitTime, hitMax, false); + break; + case 2: + obj.resetHitObjectList(); + local hitMax = obj.getVar("custom").getInt(0); + if(timeEventCount >= hitMax) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case 4: + switch(timeEventIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/3_mechanic/animation/athyperflare/hyperflare2attackbottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_OVERCHARGE: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_NAPALMBOMB: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_C4: + switch(timeEventIndex){ + case 1: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local targetNum = obj.getVar("custom").getInt(1); + local targetObj = sqrChr.getVar("C4Tar").get_obj_vector(targetNum); + if(targetObj && targetObj.getState() != STATE_DIE){ + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(targetObj), timeEventCount, 50); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(targetObj), timeEventCount, 50); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(2), sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2, timeEventCount, 50); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 50){ + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(2); + local speedRate = obj.getVar("custom").getInt(3); + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,sq_GetDirection(obj),4,SKILL_BYKK_C4,2,totalDamage,lifeTime,speedRate,group,uniqueId,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + local totalDamage = obj.getVar("custom").getInt(0); + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_C4,3,totalDamage,group,uniqueId,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + if(CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "appendage/character/ap_common_debuff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "appendage/character/ap_common_debuff.nut"); + } + break; + } + break; + case SKILL_BYKK_GRENADELIGHT: + case SKILL_BYKK_GRENADEWATER: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_M18CLAYMORE: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");print("test"); break; + case 2: obj.resetHitObjectList(); break; + case 3: + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(0), 0, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 4: + case 5: + local sizeRate = obj.getVar("custom").getInt(3); + local set01 = -35, set02 = 318, set03 = 50, set04 = 200; + if(timeEventIndex == 5){set01 = -175; set02 = 350; set03 = 65; set04 = 200;} + if(sizeRate > 100){ + set01 = set01 * sizeRate / 100; + set02 = set02 * sizeRate / 100; + set03 = set03 * sizeRate / 100; + set04 = set04 * sizeRate / 100; + } + local targetObj = obj.sq_FindFirstTarget(set01, set02, set03, set04); + if(targetObj){ + obj.stopTimeEvent(timeEventIndex); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_LOCKONSUPPORT: + switch(timeEventIndex){ + case 1: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + obj.stopTimeEvent(1); + local sizeRate = obj.getVar("custom").getInt(1); + createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/lockonsupport_readyb_floor_eff02_other.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + obj.setTimeEvent(2, 300, obj.getVar("custom").getInt(2), true); + } + else if(timeEventCount >= 3) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + local totalDamage = obj.getVar("custom").getInt(0); + local prob = obj.getVar("custom").getInt(3); + local time = obj.getVar("custom").getInt(4); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + local group = sq_GetGroup(targetObj);//组 + local uniqueId = sq_GetUniqueId(targetObj);//唯一ID + createSkillPassive_ATGunner_bykk(obj,targetObj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2,sq_GetDirection(obj),4,skillIndex,3,totalDamage,prob,time,group,uniqueId,0,0,0); + if(timeEventCount >= obj.getVar("custom").getInt(2)){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local size = activeObj.getVar("biaoji").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = activeObj.getVar("biaoji").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + } + } + } + sq_SetMyShake(obj, 2, 60); + if(timeEventCount >= obj.getVar("custom").getInt(2)) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_GRAVITYGRENADE: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");print("test"); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_OPENFIRE: + switch(timeEventIndex){ + case 1: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomm1_c03.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + //passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomm2_f03.ani + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomm2_f03.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomb1_a01.ani", 0, 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomb2_f01.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomf1_a02.ani", 0, 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atopenfire/atopenfireboomf2_f02.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local hitMax = obj.getVar("custom").getInt(1); + obj.setTimeEvent(2, delay / (hitMax * 2), hitMax - 1, false); + sq_SetMyShake(obj, 2, delay); + break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_PHOTOBILIZER: + switch(timeEventIndex){ + case 1: + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atphotobilizer/atphotobilizerexplosionattackbox.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 95)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local hitMax = obj.getVar("custom").getInt(1); + obj.setTimeEvent(2, delay / (hitMax * 2), hitMax - 1, false); + break; + case 2: + obj.resetHitObjectList(); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,sq_getRandom(-100,100),sq_getRandom(-25,25),0,sq_GetDirection(obj),4,skillIndex,3,0,0,0,0,0,0,0,0); + if(timeEventCount % 2 == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,sq_getRandom(-150,150),sq_getRandom(-25,25),0,sq_GetDirection(obj),4,skillIndex,3,0,0,0,0,0,0,0,0); + break; + case 3: + local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(2), obj.getVar("custom").getInt(0), timeEventCount, 40); + local vy = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(1), timeEventCount, 40); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + local alpha = sq_GetUniformVelocity(100, 255, timeEventCount, 40); + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(255, 255, 255, alpha); + if(timeEventCount >= 40){ + obj.getVar("custom").setInt(2, sq_GetXPos(obj)); + obj.getVar("custom").setInt(3, sq_GetYPos(obj)); + obj.setTimeEvent(4, sq_getRandom(5,10), 40, true); + } + break; + case 4: + local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(2), obj.getVar("custom").getInt(5), timeEventCount, 40); + local vy = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(6), timeEventCount, 40); + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(4), 0, timeEventCount, 40); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 40){ + local aObj = sqrChr.getVar("pBilizerObj").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.setTimeEvent(1, 1000, 1, true); + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_CHELLI: + switch(timeEventIndex){ + case 1: + if(timeEventCount >= obj.getVar("custom").getInt(1)) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else obj.resetHitObjectList(); + break; + case 2: + if(state == 23) break; + if(timeEventCount >= obj.getVar("custom").getInt(3)) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else obj.resetHitObjectList(); + break; + case 3: if(timeEventCount >= obj.getVar("custom").getInt(0)) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 4: if(timeEventCount >= obj.getVar("custom").getInt(1)) sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_EMPSTORM: + switch(timeEventIndex){ + case 1: + // sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_circle_inner.ani", 0, 0, 61 + 20); + break; + case 2://震动波 + local zPos = 20; + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_nova1.ani", 0, -1, 59 + zPos); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_nova3.ani", 0, -1, 59 + zPos); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_nova2.ani", 0, 1, 61 + zPos); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_nova4.ani", 0, 1, 61 + zPos); + obj.setTimeEvent(1, 200, 1, false); + sq_SetShake(obj, 10, 300); + sq_flashScreen(obj,80,300,240,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3://闪电 + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_glow.ani", 0, 1, -sq_GetZPos(obj) + 70); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_spark.ani", 0, 2, -sq_GetZPos(obj) + 70); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_thunder"+sq_getRandom(1,3).tostring()+".ani", 0, 1, 70); + sq_SetCustomRotate(pooledObj, sq_ToRadian(sq_getRandom(270,360).tofloat())); + local pooledObj1 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_thunder"+sq_getRandom(1,3).tostring()+".ani", 0, 1, 70); + sq_SetCustomRotate(pooledObj1, sq_ToRadian(sq_getRandom(45,120).tofloat())); + obj.sq_PlaySound("R_EMPSTORM_ELEC"); + break; + case 10: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge_light.ani", 0, 1, 30); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_up.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/emp_bomb_spark.ani"),true); + obj.setTimeEvent(11, 500, 1, false); + obj.sq_PlaySound("EMPSTORM_READY"); + break; + case 11: + obj.setTimeEvent(12, 4, 50, true); + obj.sq_PlaySound("EMPSTORM_OPEN"); + break; + case 12: + local vz = sq_GetUniformVelocity(1, 65, timeEventCount, 50); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 50){ + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,-2,30,sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,5,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,-2,-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,7,0,0,0,0,0,0,0,0); + obj.sq_PlaySound("EMPSTORM_LOOP", 1233); + } + break; + case 20: + local totalDamage = obj.getVar("custom").getInt(1); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,9,totalDamage,0,0,0,0,0,0,0); + obj.setTimeEvent(21, 500, 1, false); + break; + case 21: + local totalDamage = obj.getVar("custom").getInt(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 130)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetAddWeaponDamage(attackInfo, true); + sq_setAttackInfoType(obj, obj.getVar("atkType").getInt(0)); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } + local hitMax = obj.getVar("custom").getInt(3); + sq_SetShake(obj, 2, 100 * hitMax); + obj.setTimeEvent(22, 100, hitMax, true); + break; + case 22: + local offset = [[150,20],[135,45],[108, 50],[95, 65],[-155, 20],[-140, 45],[-110, 50],[-100, 70]]; + local randomNum = sq_getRandom(1,8); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/elec_dodge"+randomNum.tostring()+".ani", 0, 3, 73); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/elec_floor_dodge.ani", offset[randomNum - 1][0], offset[randomNum - 1][1], 0); + randomNum = sq_getRandom(1,8); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/elec_dodge"+randomNum.tostring()+".ani", 0, 3, 73); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/elec_floor_dodge.ani", offset[randomNum - 1][0], offset[randomNum - 1][1], 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/red_shock.ani", offset[randomNum - 1][0], offset[randomNum - 1][1], 0); + sq_flashScreen(obj,0,0,60,80, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.resetHitObjectList(); + local time = sq_GetObjectTime(obj); + obj.sq_PlaySound("R_EMPSTORM_ELEC"); + if(timeEventCount >= obj.getVar("custom").getInt(3)){ + //sq_SendDestroyPacketPassiveObject(obj); + // print("test"); + obj.setTimeEvent(23, 300, 1, false); + } + break; + case 23: + local totalDamageExp = obj.getVar("custom").getInt(4); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,2,-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,8,totalDamageExp,0,0,0,0,0,0,0); + local size = sqrChr.getVar("empTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("empTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut")) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut"); + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 30: + local randomNum = sq_getRandom(1, 4); + for(local i = 0; i < randomNum; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_big_spark_dodge.ani", 0, 2, 50); + local pooledObj1 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_small_spark_dodge.ani", 0, 2, 50); + sq_SetCustomRotate(pooledObj, sq_ToRadian(sq_getRandom(0,360).tofloat())); + sq_SetCustomRotate(pooledObj1, sq_ToRadian(sq_getRandom(0,360).tofloat())); + } + if(timeEventCount == 1){ + for(local i = 1; i < 7; i++){ + local num = 1; + if(i > 1 && i < 6) num = 2; + sq_CreateParticle("passiveobject/atgunner_bykk/particle/4_spitfire/empstormexp"+i.tostring()+".ptl", obj, sq_getRandom(-50, 50), 0, 50 + sq_getRandom(-20, 30), true, 50, 0, num); + } + } + break; + case 31: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_DDAY: + switch(timeEventIndex){ + case 1://创建各种时钟 + obj.setTimeEvent(2, 300, 1, false);//轰炸机 + obj.setTimeEvent(3, 600, 1, false);//射手队 + obj.setTimeEvent(4, 1200, 1, false);//丢雷队 + obj.setTimeEvent(5, 800, 1, false);//攻击框 + break; + case 2: obj.setTimeEvent(21, 150, 12, true); break; + case 21: + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,sq_getRandom(-180, 180),sq_getRandom(-80, 80),0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,3,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,sq_getRandom(-180, 180),sq_getRandom(-80, 80),800,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,4,0,0,0,0,0,0,0,0); + if(timeEventCount > 11) obj.sq_PlaySound("R_D_DAY_SHELL"); + break; + case 22: + obj.sq_SetMoveParticle("particle/4_spitfire/ddaymissile.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,50); + break; + case 3: + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-300,-45,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,5,1,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-300,-15,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,5,2,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-300,15,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,5,3,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-300,45,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,5,4,0,0,0,0,0,0,0); + break; + case 31: + local vx = sq_GetUniformVelocity(0, 250, timeEventCount, 40); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + if(state == 21){ + local moveY = 30; + if(obj.getVar("custom").getInt(0) == 2 || obj.getVar("custom").getInt(0) == 4) moveY = -moveY; + if(timeEventCount <= 20){ + local vy = sq_GetUniformVelocity(0, moveY, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 1, obj.getVar("move").getInt(1) + vy); + } + else if(timeEventCount <= 40){ + local vy = sq_GetUniformVelocity(0, moveY, timeEventCount - 20, 20); + sq_setCurrentAxisPos(obj, 1, obj.getVar("move").getInt(1) + vy); + } + } + if(timeEventCount >= 40){ + if(state == 21) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 23) obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 32: + local offset = [[70, 88],[60, 106]]; + local num = obj.getVar().getInt(0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offset[num][0], 0, offset[num][1],sq_GetDirection(obj),4,SKILL_BYKK_DDAY,6,0,0,0,0,0,0,0,0); + if(num == 0) obj.getVar().setInt(0, 1); + else obj.getVar().setInt(0, 0); + obj.sq_PlaySound("R_D_DAY_BULLET"); + break; + case 4: + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-325,-45,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,7,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-350,-15,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,8,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-375,-60,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,8,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-375,60,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,8,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-350,15,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,8,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-325,45,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,7,0,0,0,0,0,0,0,0); + break; + case 41: + local vx = sq_GetUniformVelocity(0, 600, timeEventCount, 100); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= 100){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 42: + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-30,0,80,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,9,0,0,0,0,0,0,0,0); + break; + case 5: + local totalDamage = obj.getVar("custom").getInt(0); + local hitMax = obj.getVar("custom").getInt(1); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,2,totalDamage,hitMax,0,0,0,0,0,0); + obj.setTimeEvent(6, 50 * hitMax, 1, false); + break; + case 6: sq_SendDestroyPacketPassiveObject(obj); break; + case 7: obj.resetHitObjectList(obj); break; + } + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onAttack_po_atgunner_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_AIRRAID: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(0); + if(totalDamage > 0){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atairraid/atchainenlighten/hiteffect_08.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + } + break; + } + break; + case SKILL_BYKK_HEADSHOT: + if(subtype == 4) break; + if(subtype >= 40 && subtype <= 44){ + if(obj.getVar("Bool").getBool(0) == false) obj.getVar("Bool").setBool(0, true); + else break; + local totalDamage = obj.getVar("custom").getInt(5); + local isDown = obj.getVar("custom").getInt(0); + local isAir = obj.getVar("custom").getInt(7);//sq_GetCenterZPos(boundingBox) - 100 + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,sq_getRandom(0,80),0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,4,totalDamage,subtype - 40,isDown,isAir,0,0,0,0); + } + else if(subtype >= 30 && subtype <= 34){ + local statusTime = obj.getVar("custom").getInt(6); + if(statusTime > 0) sq_sendSetActiveStatusPacket(damager, obj, obj.getVar("custom").getInt(5), 100.0, 100, false, statusTime); + } + if(sq_getRandom(1, 100) >= obj.getVar("custom").getInt(2) && obj.getVar("custom").getInt(1) != 3){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(subtype == 2){ + local totalDamage = obj.getVar("custom").getInt(4); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + if(obj.getVar("custom").getInt(3) > 0) break; + local aniPath = "character/gunner/effect/animation/headshotmonsterdown.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(obj.getDirection()),sq_GetXPos(damager),sq_GetYPos(damager),sq_GetCenterZPos(boundingBox),ENUM_DRAWLAYER_NORMAL); + } + break; + case SKILL_BYKK_CHAINSNATCH: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(0); + if(totalDamage > 0){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + } + break; + case SKILL_BYKK_RANDOMSHOOT: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(3); + if(totalDamage > 0){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + } + break; + case SKILL_BYKK_WALKSHOOT: + switch(subtype){ + case 1: + case 10: + if(sq_getRandom(1, 100) >= obj.getVar("custom").getInt(2) && obj.getVar("custom").getInt(1) != 3){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(subtype == 10){ + local totalDamage = obj.getVar("custom").getInt(4); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + } + break; + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("custom").getInt(0) > 0){ + local totalDamage = obj.getVar("custom").getInt(4); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + } + break; + } + break; + case SKILL_BYKK_KILLPOINT: + switch(subtype){ + case 1: + switch(state){ + case 20: + if(sqrChr.getVar("KillPoint_Bool").getBool(0) == false) sqrChr.getVar("KillPoint_Bool").setBool(0, true); + local apdPath = "character/atgunner/1_ranger_bykk/ap_killpoint.nut"; + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(isSameObject(damager, targetObj)){ + sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atkillpoint/killpointatkeff_b.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(damager) + 1); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + local holdTime = obj.getVar("custom").getInt(0); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + AddAppendage.sq_SetValidTime(holdTime); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_BYKK_CHAINDEVIDER: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodattc05.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_FLAMETHROWERBOOST: + switch(subtype){ + case 1: + local holdTime = obj.getVar("custom").getInt(12); + if(holdTime > 0){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("tar").is_obj_vector(damager)){ + obj.getVar("tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "appendage/character/ap_common_hold.nut", true); + AddAppendage.sq_SetValidTime(holdTime); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + } + break; + case SKILL_BYKK_CANNONBALL: + if(obj.getVar("custom").getInt(12) > 0){ + obj.sq_RemoveMoveParticle(); + local totalDamage = obj.getVar("custom").getInt(10); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_CANNONBALL,2,totalDamage,0,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case SKILL_BYKK_STEYRHEAVYRIFLE: + if(subtype == 2) break; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + obj.sq_RemoveMoveParticle(); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 60)); + sq_moveWithParent(damager, obj); + local ani = sq_CreateAnimation("", "passiveobject/character/gunner/animation/subweaponbulletsteyrhit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local expCount = obj.getVar("custom").getInt(11); + local delay = delaySum / expCount; + if(delay > 200) delay = 200; + obj.setTimeEvent(1, delay, expCount, true); + break; + case SKILL_BYKK_FM31: + switch(subtype){ + case 1: + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_FM31,2,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_PLASMABOOST: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(!obj.getVar("tar").is_obj_vector(damager)) obj.getVar("tar").push_obj_vector(damager); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atgunner/2_blaster_bykk/ap_plasmaboost.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_plasmaboost.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_DeleteEffectFront(); + AddAppendage.sq_AddEffectBack("character/gunner/effect/animation/plasmaboost/monster/hit_loop.ani"); + } + break; + case SKILL_BYKK_FSC_7: + switch(subtype){ + case 1: + switch(state){ + case 20: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(!obj.isExistTimeEvent(4)) obj.setTimeEvent(4, 50, 1, false); + break; + } + break; + } + break; + case SKILL_BYKK_OPERATIONRAZE: + switch(subtype){ + case 3: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_OVERCHARGE: + if(subtype == 4) break; + if(subtype >= 40 && subtype <= 44){ + if(obj.getVar("Bool").getBool(0) == false) obj.getVar("Bool").setBool(0, true); + else break; + local totalDamage = obj.getVar("custom").getInt(5); + local isDown = obj.getVar("custom").getInt(0); + local isAir = obj.getVar("custom").getInt(7);//sq_GetCenterZPos(boundingBox) - 100 + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,sq_getRandom(0,80),0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,4,totalDamage,subtype - 40,isDown,isAir,0,0,0,0); + } + else if(subtype >= 30 && subtype <= 34){ + local statusTime = obj.getVar("custom").getInt(6); + if(statusTime > 0) sq_sendSetActiveStatusPacket(damager, obj, obj.getVar("custom").getInt(5), 100.0, 100, false, statusTime); + } + if(sq_getRandom(1, 100) >= obj.getVar("custom").getInt(2) && obj.getVar("custom").getInt(1) != 3){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(subtype == 2){ + local totalDamage = obj.getVar("custom").getInt(4); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + if(obj.getVar("custom").getInt(3) > 0) break; + local aniPath = "character/gunner/effect/animation/headshotmonsterdown.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(obj.getDirection()),sq_GetXPos(damager),sq_GetYPos(damager),sq_GetCenterZPos(boundingBox),ENUM_DRAWLAYER_NORMAL); + } + break; + case SKILL_BYKK_GRENADENONE: + case SKILL_BYKK_GRENADELIGHT: + case SKILL_BYKK_GRENADEWATER: + switch(subtype){ + case 1: + local isEx = obj.getVar("custom").getInt(2); + if(isEx > 0) break; + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local sub = 0; + if(sq_GetZPos(obj) > 0){sub = 1;} + local prob = obj.getVar("custom").getInt(4); + local time = obj.getVar("custom").getInt(5); + local level = obj.getVar("custom").getInt(6); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,sizeRate,sub,prob,time,level,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_LOCKONSUPPORT: + switch(subtype){ + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("tar").is_obj_vector(damager)){ + obj.getVar("tar").push_obj_vector(damager); + local group = sq_GetGroup(damager);//组 + local uniqueId = sq_GetUniqueId(damager);//唯一ID + createSkillPassive_ATGunner_bykk(obj,damager,PASSIVEOBJ_BYKK_ATGUNNER,0,0,sq_GetZPos(damager) + sq_GetObjectHeight(damager) / 2,sq_GetDirection(obj),4,skillIndex,4,group,uniqueId,0,0,0,0,0,0); + } + } + break; + } + break; + case SKILL_BYKK_CHELLI: + switch(subtype){ + case 1: + if(obj.getVar().getBool(0) == false && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + obj.getVar().setBool(0, true); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + sqrChr.getVar("chelliTarget").push_obj_vector(damager); + local totalDamage_phase1 = obj.getVar("custom").getInt(0); + local hitMax_phase1 = obj.getVar("custom").getInt(1); + local totalDamage_phase2 = obj.getVar("custom").getInt(2); + local hitMax_phase2 = obj.getVar("custom").getInt(3); + local totalDamageExp = obj.getVar("custom").getInt(4); + local grenadeMax = obj.getVar("custom").getInt(5); + local grenadeAddRate = obj.getVar("custom").getInt(6); + createSkillPassive_ATGunner_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),4,skillIndex,2,totalDamage_phase1,hitMax_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,grenadeMax,grenadeAddRate,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: + // print("state = "+state); + if(obj.getVar().getBool(0) == false && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr.getVar("chelliTarget").is_obj_vector(damager)){ + sqrChr.getVar("chelliTarget").push_obj_vector(damager); + sq_moveWithParent(damager, obj); + obj.getVar().setBool(0, true); + } + } + break; + } + break; + case SKILL_BYKK_EMPSTORM: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local size = sqrChr.getVar("empTar").get_obj_vector_size(); + if(size < 1) sqrChr.getVar("empTar").clear_obj_vector(); + if(!sqrChr.getVar("empTar").is_obj_vector(damager)) sqrChr.getVar("empTar").push_obj_vector(damager); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + } + break; + } +} + +function onKeyFrameFlag_po_atgunner_bykk(obj, flagIndex) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_WALKSHOOT: + switch(flagIndex){ + case 101: sq_SetMyShake(obj, 2, 20); break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_M18CLAYMORE: + local totalDamage = obj.getVar("custom").getInt(0); + local hitMax = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(3); + local prob = obj.getVar("custom").getInt(4); + local time = obj.getVar("custom").getInt(5); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_M18CLAYMORE,4,totalDamage,hitMax,sizeRate,prob,time,0,0,0); + break; + case SKILL_BYKK_DDAY: + switch(flagIndex){ + case 5001: + local offset = [[70, 88],[60, 106]]; + local num = obj.getVar().getInt(0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offset[num][0], 0, offset[num][1],sq_GetDirection(obj),4,SKILL_BYKK_DDAY,6,0,0,0,0,0,0,0,0); + if(num == 0) obj.getVar().setInt(0, 1); + else obj.getVar().setInt(0, 0); + break; + } + break; + } + break; + } + return true; +} diff --git a/user/116.205.165.25/1_atgunner_4.c b/user/116.205.165.25/1_atgunner_4.c new file mode 100644 index 0000000..6c10969 --- /dev/null +++ b/user/116.205.165.25/1_atgunner_4.c @@ -0,0 +1,3523 @@ + +function procAppend_po_atgunner_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_HEADSHOT: + switch(subtype){ + case 40: + case 41: + case 42: + case 43: + case 44: + if(sq_GetZPos(obj) <= 5 && obj.getVar("Bool").getBool(0) == false){ + obj.getVar("Bool").setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(5); + local isDown = obj.getVar("custom").getInt(0); + local isAir = obj.getVar("custom").getInt(7); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,4,totalDamage,subtype - 40,isDown,isAir,1,0,0,0); + } + break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_CANNONBALL: + switch(subtype){ + case 1: + if(obj.getVar("custom").getInt(11) > 0){ + if(sq_GetZPos(obj) <= 10){ + obj.sq_RemoveMoveParticle(); + if(obj.getVar("custom").getInt(12) > 0){ + local totalDamage = obj.getVar("custom").getInt(10); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_CANNONBALL,2,totalDamage,0,0,0,0,0,0,0); + } + sq_SendDestroyPacketPassiveObject(obj); + } + } + break; + } + break; + case SKILL_BYKK_FM31: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 30 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_FM31,2,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_STINGER: + switch(subtype){ + case 2: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_BYKK_URANIUMBOMB: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.setTimeEvent(1, 200, 1, false); + local totalDamage = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(12); + local prob = obj.getVar("custom").getInt(13); + local time = obj.getVar("custom").getInt(14); + local damage = obj.getVar("custom").getInt(15); + local level = obj.getVar("custom").getInt(16); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_URANIUMBOMB,2,totalDamage,sizeRate,prob,time,damage,level,0,0); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/middle_exp.ani"; + local pooledObj = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate / 2,sizeRate / 2); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + sq_SetShake(obj, 10, 300); + obj.sq_PlaySound("BOMB_06"); + obj.sq_RemoveMoveParticle(); + } + break; + case 5: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.setTimeEvent(1, 100, 1, false); + obj.setTimeEvent(2, 200, 1, true); + local sizeRate = obj.getVar("custom").getInt(12); + local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/middle_exp.ani"; + local pooledObj = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate / 2,sizeRate / 2); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + sq_SetShake(obj, 3, 200); + obj.sq_PlaySound("BOMB_06"); + obj.sq_RemoveMoveParticle(); + } + break; + } + break; + case SKILL_BYKK_STINGEREX: + switch(subtype){ + case 2: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0){ + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_BYKK_OPERATIONRAZE: + switch(subtype){ + case 5: + case 6: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0){ + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_OVERCHARGE: + switch(subtype){ + case 40: + case 41: + case 42: + case 43: + case 44: + if(sq_GetZPos(obj) <= 5 && obj.getVar("Bool").getBool(0) == false){ + obj.getVar("Bool").setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(5); + local isDown = obj.getVar("custom").getInt(0); + local isAir = obj.getVar("custom").getInt(7); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,4,totalDamage,subtype - 40,isDown,isAir,1,0,0,0); + } + break; + } + break; + case SKILL_BYKK_NAPALMBOMB: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local elementSelect = obj.getVar("custom").getInt(0); + local totalDamage = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + local totalDamageGround = obj.getVar("custom").getInt(4); + local sizeRate = obj.getVar("custom").getInt(5); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,2,elementSelect,totalDamage,sizeRate,0,0,0,0,0); + if(lifeTime > 0){ + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,3,elementSelect,totalDamageGround,lifeTime,hitTime,sizeRate,0,0,0); + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_GRENADENONE: + case SKILL_BYKK_GRENADELIGHT: + case SKILL_BYKK_GRENADEWATER: + switch(subtype){ + case 1: + local time = sq_GetObjectTime(obj); + if(obj.getVar().getBool(1) == false){ + local angle = sq_GetUniformVelocity(0, 1800, time, 500); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + if(obj.getVar("flytochelli").getBool(0)){ + local chelliObj = obj.getVar("flytarget").get_obj_vector(0); + if(chelliObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj); + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(colObj), time, 400); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(colObj), time, 400); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(2), sq_GetZPos(colObj), time, 400); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(time >= 400 && obj.getVar().getBool(2) == false){ + obj.getVar().setBool(2, true); + local totalDamage = obj.getVar("move").getInt(3); + local grenadeAddRate = colObj.getVar("custom").getInt(6); + local grenadeSave = colObj.getVar("custom").getInt(7); + local grenadeDamageSave = colObj.getVar("custom").getInt(8); + //print("before :"+ grenadeDamageSave+",totaldamage = "+totalDamage); + totalDamage = (totalDamage + 100) * (100 + grenadeAddRate) / 100; + colObj.getVar("custom").setInt(7, grenadeSave + 1); + colObj.getVar("custom").setInt(8, grenadeDamageSave + totalDamage); + //print("after :"+ colObj.getVar("custom").getInt(8)); + switch(skillIndex){ + case SKILL_BYKK_GRENADENONE: + if(colObj.getVar("grenadeNone").getBool(0) == false) colObj.getVar("grenadeNone").setBool(0, true); + if(colObj.getVar("grenadeLight").getBool(0) == true) colObj.getVar("grenadeLight").setBool(0, false); + if(colObj.getVar("grenadeWater").getBool(0) == true) colObj.getVar("grenadeWater").setBool(0, false); + break; + case SKILL_BYKK_GRENADELIGHT: + if(colObj.getVar("grenadeNone").getBool(0) == true) colObj.getVar("grenadeNone").setBool(0, false); + if(colObj.getVar("grenadeLight").getBool(0) == false) colObj.getVar("grenadeLight").setBool(0, true); + if(colObj.getVar("grenadeWater").getBool(0) == true) colObj.getVar("grenadeWater").setBool(0, false); + break; + case SKILL_BYKK_GRENADEWATER: + if(colObj.getVar("grenadeNone").getBool(0) == true) colObj.getVar("grenadeNone").setBool(0, false); + if(colObj.getVar("grenadeLight").getBool(0) == true) colObj.getVar("grenadeLight").setBool(0, false); + if(colObj.getVar("grenadeWater").getBool(0) == false) colObj.getVar("grenadeWater").setBool(0, true); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + } + } + return; + } + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + obj.sq_RemoveMoveParticle(); + local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/grenadenonerolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadelightrolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadewaterrolling.ani"]; + local ani = sq_CreateAnimation("", aniPath[skillIndex - 56]); + obj.setCurrentAnimation(ani); + local speed = obj.getVar("custom").getInt(3) / 2; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + else sq_SetVelocity(obj, 0, -speed.tofloat()); + } + if(time <= 400) break; + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local isEx = obj.getVar("custom").getInt(2); + local prob = obj.getVar("custom").getInt(4); + local time = obj.getVar("custom").getInt(5); + local level = obj.getVar("custom").getInt(6); + local exSelect = 2; + if(isEx > 0) exSelect = 3; + else{ + switch(skillIndex){ + case SKILL_BYKK_GRENADENONE: obj.sq_PlaySound("GRENADENONE_BOMB_01"); break; + case SKILL_BYKK_GRENADELIGHT: obj.sq_PlaySound("GRENADELIGHT_LIGHT_BOMB_01"); break; + case SKILL_BYKK_GRENADEWATER: obj.sq_PlaySound("GRENADELIGHT_ICE_BOMB_01"); break; + } + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,exSelect,totalDamage,sizeRate,0,prob,time,level,0,0); + if(skillIndex == SKILL_BYKK_GRENADELIGHT && isEx > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,4,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_M18CLAYMORE: + switch(subtype){ + case 3: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 21: + if(sqrChr && sqrChr.getState() != STATE_DIE){ + sqrChr.setSkillCommandEnable(SKILL_BYKK_M18CLAYMORE, true); + if(sqrChr.sq_IsEnterSkill(SKILL_BYKK_M18CLAYMORE) != -1){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + } + break; + } + break; + case SKILL_BYKK_LOCKONSUPPORT: + switch(subtype){ + case 1: + local time = sq_GetObjectTime(obj); + if(obj.getVar().getBool(1) == false){ + local angle = sq_GetUniformVelocity(0, 1800, time, 500); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + obj.sq_RemoveMoveParticle(); + local speed = 75; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + else sq_SetVelocity(obj, 0, -speed.tofloat()); + } + if(time <= 400) break; + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local hitMax = obj.getVar("custom").getInt(2); + local prob = obj.getVar("custom").getInt(3); + local time = obj.getVar("custom").getInt(4); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,sizeRate,hitMax,prob,time,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/lockonsupport_readyb_eff01.ani", 0, 0, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 4: + local time = sq_GetObjectTime(obj); + if(time >= 3000) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_GRAVITYGRENADE: + switch(subtype){ + case 1: + local time = sq_GetObjectTime(obj); + if(obj.getVar().getBool(1) == false){ + local angle = sq_GetUniformVelocity(0, 1800, time, 500); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + obj.sq_RemoveMoveParticle(); + local speed = 75; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + else sq_SetVelocity(obj, 0, -speed.tofloat()); + } + if(time <= 400) break; + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local totalDamageExp = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(4); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,totalDamageExp,lifeTime,hitTime,sizeRate,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_OPENFIRE: + switch(subtype){ + case 2: + case 3: + case 4: + local time = sq_GetObjectTime(obj); + if(obj.getVar().getBool(1) == false){ + local angle = sq_GetUniformVelocity(0, 1800, time, obj.getVar("custom").getInt(0)); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + obj.sq_RemoveMoveParticle(); + local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/grenadenonerolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadelightrolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadewaterrolling.ani"]; + local ani = sq_CreateAnimation("", aniPath[subtype - 2]); + obj.setCurrentAnimation(ani); + local speed = sq_getRandom(60, 120); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + else sq_SetVelocity(obj, 0, -speed.tofloat()); + } + if(time <= obj.getVar("custom").getInt(0)) break; + if(obj.getVar().getBool(0) == false){ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_PHOTOBILIZER: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atphotobilizer/atphotobilizershoteffectbottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.getVar("custom").getInt(0); + local hitMax = obj.getVar("custom").getInt(1); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,hitMax,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_CHELLI: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + local totalDamage_phase1 = obj.getVar("custom").getInt(0); + local hitMax_phase1 = obj.getVar("custom").getInt(1); + local totalDamage_phase2 = obj.getVar("custom").getInt(2); + local hitMax_phase2 = obj.getVar("custom").getInt(3); + local totalDamageExp = obj.getVar("custom").getInt(4); + local grenadeMax = obj.getVar("custom").getInt(5); + local grenadeAddRate = obj.getVar("custom").getInt(6); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage_phase1,hitMax_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,grenadeMax,grenadeAddRate,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_STANDBYREADY: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,0,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_EMPSTORM: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_PlaySound("EMPSTORM_START"); + obj.sq_RemoveMoveParticle(); + sq_setCurrentAxisPos(obj, 2, 0); + for(local i = 1; i < 5; i++){ + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/appearsmoke"+i.tostring()+".ani", 0, 0, 0); + } + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge_light.ani", 0 , 2, 50); + local group = sq_GetGroup(obj); + local uniqueId = sq_GetUniqueId(obj); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,1,sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,6,0,0,0,0,0,0,0,0);//石头 + local totalDamage = obj.getVar("custom").getInt(0); + local totalDamage_phase1 = obj.getVar("custom").getInt(1); + local totalDamage_phase2 = obj.getVar("custom").getInt(2); + local hitMax_phase2 = obj.getVar("custom").getInt(3); + local totalDamageExp = obj.getVar("custom").getInt(4); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,2,totalDamage,totalDamage_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,0,0,0);//底部 + sq_SetShake(obj, 15, 200); + } + local time = sq_GetObjectTime(obj); + if(time >= 5800){ + if(obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + local size = sqrChr.getVar("empTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("empTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut")) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut"); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: + local time = sq_GetObjectTime(obj); + if(time >= 4500){ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 4: + case 6: + local time = sq_GetObjectTime(obj); + if(time >= 5500) sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: + case 7: + local time = sq_GetObjectTime(obj); + // if(subtype == 2) print("time = "+time); + if(time >= 3300) sq_SendDestroyPacketPassiveObject(obj); + break; + case 3://顶部 + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + sq_setCurrentAxisPos(obj, 2, 1); + obj.setTimeEvent(10, 1000, 1, false); + obj.setTimeEvent(2, 300, 1, false);//创建闪光 + obj.setTimeEvent(3, 300, 4, false);//创建闪电 + } + local time = sq_GetObjectTime(obj); + // print("time = "+time); + if(time >= 5800) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_DDAY: + switch(subtype){ + case 1: + local time = sq_GetObjectTime(obj); + if(obj.getVar().getBool(1) == false){ + local angle = sq_GetUniformVelocity(0, 1800, time, 500); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/flare/ddayready_hg_normal.ani"); + obj.sq_PlaySound("D_DAY_READY"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 300, 1, false); + } + break; + case 4: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bombbard/ddaymissileatk_01.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bombbard/ddaymissileatkfloor_dangergroundnormal.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + break; + case 9: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bullet/ddayhandgrenade_normal.ani", 0, 0, 30); + obj.stopSound(2345); + obj.sq_PlaySound("GRENADENONE_BOMB_02", 2345); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + } + break; + } +} + +function onAttackParent_appendage_at_stingerex(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local timer = appendage.getVar().get_ct_vector(0); + if(!timer){ + appendage.getVar().clear_ct_vector(); + appendage.getVar().push_ct_vector(); + timer = appendage.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + local currentT = timer.Get(); + if(currentT <= 500) return; + timer.Reset(); + timer.Start(10000,0); + local proc = appendage.getVar("custom").getInt(0); + print("proc = "+proc); + if(sq_getRandom(1,100) <= proc){ + local totalDamage = appendage.getVar("custom").getInt(1); + local hitMax = appendage.getVar("custom").getInt(2); + local sizeRate = appendage.getVar("custom").getInt(3); + createSkillPassive_ATGunner_bykk(obj,damager,PASSIVEOBJ_BYKK_ATGUNNER,-650,0,500,obj.getDirection(),2,SKILL_BYKK_STINGEREX,2,totalDamage,hitMax,sizeRate,0,0,0,0,0); + } +} + +//////////////////////////////////女枪手通用 + +function onAfterSetState_ATGunner_Stand(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 4){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadMax = sq_GetIntData(obj, SKILL_BYKK_NITROMOTOR, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) loadMax = loadMax + 1; + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadMax == loadNumber) return; + loadSlot.increaseLoadCount(loadMax - loadNumber); + } + } +} + +function onProcCon_ATGunner_Stand(obj) +{ + if(!obj) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE); + if(skillLevel < 1) return; + local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 5, skillLevel); + local timer = obj.getVar("twingunBlade_stand").get_ct_vector(0); + if(!timer){ + obj.getVar("twingunBlade_stand").clear_ct_vector(); + obj.getVar("twingunBlade_stand").push_ct_vector(); + timer = obj.getVar("twingunBlade_stand").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("twingunBlade_stand").setBool(0, false); + } + local currentT = timer.Get();//得到时间 + if(currentT >= coolTime || obj.getVar("twingunBlade_stand").getBool(0) == false){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.getVar("twingunBlade_stand").setBool(1, true); + } + } +} + +function getDashAni_ATGunner(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAni(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE) > 0){ + ani = sq_GetCustomAni(obj, 67); + return ani; + } + return ani; +} + +function onAfterSetState_ATGunner_Dash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/dash.ani"), 0, 0); + } + break; + } +} + +function onProcCon_ATGunner_Dash(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE); + if(skillLevel < 1) return; + local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 5, skillLevel); + local timer = obj.getVar("twingunBlade_stand").get_ct_vector(0); + if(!timer){ + obj.getVar("twingunBlade_stand").clear_ct_vector(); + obj.getVar("twingunBlade_stand").push_ct_vector(); + timer = obj.getVar("twingunBlade_stand").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("twingunBlade_stand").setBool(0, false); + } + local currentT = timer.Get();//得到时间 + if(currentT >= coolTime || obj.getVar("twingunBlade_stand").getBool(0) == false){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.getVar("twingunBlade_stand").setBool(1, true); + } + } + break; + } +} + +function onProcCon_ATGunner_DashAttack(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE); + if(skillLevel < 1) return; + local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 6, skillLevel); + local timer = obj.getVar("twingunBlade_dash").get_ct_vector(0); + if(!timer){ + obj.getVar("twingunBlade_dash").clear_ct_vector(); + obj.getVar("twingunBlade_dash").push_ct_vector(); + timer = obj.getVar("twingunBlade_dash").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("twingunBlade_dash").setBool(0, false); + } + local currentT = timer.Get();//得到时间 + if(currentT >= coolTime || obj.getVar("twingunBlade_dash").getBool(0) == false){ + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.getVar("twingunBlade_dash").setBool(0, true); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onAfterSetState_ATGunner_Jump(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(obj.getVar("twingunBlade_jumpmove").getBool(0)){ + obj.getVar("twingunBlade_jumpmove").setBool(0, false); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 200.0); + else sq_SetVelocity(obj, 0, -200.0); + } + break; + case 4: + // local isNitroMotor = obj.sq_GetVectorData(datas, 3); + // switch(isNitroMotor){ + // case 1: + // obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP); + // obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0); + // break; + // } + break; + } +} + +function onProcCon_ATGunner_Jump(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(obj.getVar("twingunBlade_stand").getBool(1) == true){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.getVar("twingunBlade_stand").setBool(0, true); + obj.getVar("twingunBlade_stand").setBool(1, false); + local timer = obj.getVar("twingunBlade_stand").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(30); + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true); + return; + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAIDEX) > 0 && !sq_GetSkill(obj, SKILL_BYKK_AIRRAIDEX).isInCoolTime()){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.startSkillCoolTime(SKILL_BYKK_AIRRAIDEX, sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAIDEX), -1); + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){ + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE); + if(skillLevel < 1) return; + local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 4, skillLevel); + local timer = obj.getVar("twingunBlade_jump").get_ct_vector(0); + if(!timer){ + obj.getVar("twingunBlade_jump").clear_ct_vector(); + obj.getVar("twingunBlade_jump").push_ct_vector(); + timer = obj.getVar("twingunBlade_jump").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("twingunBlade_jump").setBool(0, false); + } + local currentT = timer.Get();//得到时间 + if(currentT >= coolTime || obj.getVar("twingunBlade_jump").getBool(0) == false){ + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.getVar("twingunBlade_jump").setBool(0, true); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(20); + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true); + return; + } + } + break; + case 4: + nitroMotor_bykk(obj); + break; + } +} + +function onEndState_ATGunner_Jump(obj, new_state) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + obj.getVar("twingunBlade_jump").setBool(0, false); + break; + case 4: + if(sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 18) > 0){ + if(new_state == STATE_STAND){ + local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT]; + for(local i = 0; i < 3; i++){ + if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){ + local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + local loadMax = sq_GetIntData(obj, skillIndex[i], 0); + if(loadNumber < loadMax){ + loadSlot.increaseLoadCount(loadMax - loadNumber); + // print("test"+i+" : "+loadSlot.getRemainLoadNumber()); + } + } + } + } + } + } + break; + } +} + +function onAfterSetState_ATGunner_Attack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + if(sq_GetVectorData(datas, 2) == 11) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT) > 0){ + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atnormaldown.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atnormalup.ani"), 0, 0); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("isDown_fast").setBool(0, true); + else obj.getVar("isDown_fast").setBool(0, false); + break; + case 1: + obj.getVar("AttackCount").setInt(0, 0); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atfinishdown.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atfinishup.ani"), 0, 0); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("isDown_fast").setBool(0, true); + else obj.getVar("isDown_fast").setBool(0, false); + break; + } + + local currentAni = obj.getCurrentAnimation(); + local speedRate = 10000.0 / currentAni.getDelaySum(0, 0); + speedRate = speedRate * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_FASTSHOOT, 0, sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT))) / 1000.0; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY); + if(skillLevel > 0) speedRate = speedRate * (100.0 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 6, skillLevel)) / 100.0; + currentAni.setSpeedRate(speedRate); + obj.getVar("fastShoot").setFloat(0, speedRate); + } + break; + } +} + +function onEndCurrentAni_ATGunner_Attack(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_ATGunner_Attack(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + if(obj.getVar("Attack_Bool").getBool(0) == false){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);//设置其他按键 + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("Attack_Bool").setBool(0, true); + } + } + break; + } +} + +function onKeyFrameFlag_ATGunner_Attack(obj, flagIndex) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + switch(flagIndex){ + case 101: + case 1001: + case 201: + case 2001: + obj.getVar("AttackCount").setInt(0, obj.getVar("AttackCount").getInt(0) + 1); + case 301: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 7500.0 / currentAni.getDelaySum(0, 0); + if(flagIndex != 301) speedRate = 5000.0 / currentAni.getDelaySum(0, 0); + local speedRateSet = obj.getVar("fastShoot").getFloat(0); + if(flagIndex != 301){ + if(speedRate <= speedRateSet) currentAni.setSpeedRate(speedRateSet); + } + else{ + if(speedRate <= speedRateSet){ + speedRate = speedRateSet * (100 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 6, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY))).tofloat() / 100.0; + //print("speedRateA = "+speedRate); + currentAni.setSpeedRate(speedRateSet); + } + else{ + speedRate = speedRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 6, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY))).tofloat() / 100.0; + currentAni.setSpeedRate(speedRateSet); + } + } + + if(flagIndex == 301) break; + local offsetX = 125, offsetZ = 105; + local isDown = 0; + if(flagIndex == 101 || flagIndex == 201){ + isDown = 1;offsetX = 100; offsetZ = 65; + } + + local weaponSubType = obj.getWeaponSubType(); + local totalDamage = 100 + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) / 10; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT); + if(skillLevel > 0){ + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_FASTSHOOT, 1, skillLevel); + totalDamage = totalDamage * (1000 + bonusRate) / 1000; + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); + local elementSelect = addAppendage.getVar("element").getInt(0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 12, 1.0); + local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 0, 1.0) + 100; + local activestatusSet = 9, statusTime = 0; + if(sq_getRandom(1, 100) > prob){ + statusTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 1, 1.0) + 100; + switch(elementSelect){ + case 1: activestatusSet = 1; break; + case 2: activestatusSet = 5; break; + case 3: activestatusSet = 6; break; + case 4: activestatusSet = 3; break; + } + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,20+elementSelect,totalDamage,weaponSubType,isDown,1,0,activestatusSet,statusTime,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)){ + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETEXPLOSIVE, -1, 0, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,40+elementSelect,totalDamage,weaponSubType,isDown,1,0,totalDamageExp,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETPENETRATE, -1, 0, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,30+elementSelect,totalDamage,weaponSubType,isDown,1,0,0,0,0); + } + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,10+elementSelect,totalDamage,weaponSubType,isDown,1,0,0,0,0); + break; + } + local setskillIndex = SKILL_BYKK_HEADSHOT; + if(growType == 4) setskillIndex = SKILL_BYKK_OVERCHARGE; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > 0){ + loadSlot.decreaseLoadCount(1); + obj.sq_PlaySound("R_SILVER_SHOT"); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),growType,setskillIndex,2,totalDamage,weaponSubType,isDown,1,0,0,0,0); + } + } + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),growType,setskillIndex,1,totalDamage,weaponSubType,isDown,1,0,0,0,0); + break; + case 401: + local hitMax = 3; + if(sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY) > 0) hitMax = hitMax + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 11, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY)); + // print("hitMax = "+hitMax); + local hitCount = obj.getVar("AttackCount").getInt(0); + // print("hitCount = "+hitCount); + if(hitCount >= 3 && hitCount < hitMax){ + if(obj.getVar("Attack_Bool").getBool(0)){ + obj.getVar("Attack_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(8, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + break; + case 202: + case 2002: + local speedRateSet = obj.getVar("fastShoot").getFloat(0); + local delay = (100000.0 / speedRateSet).tointeger(); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONEXPERT); + if(skillLevel > 0) delay = delay * (100 - sq_GetIntData(obj, SKILL_BYKK_WEAPONEXPERT, 0)) / 100; + obj.setTimeEvent(1, delay, 1, false); + break; + } + break; + } + return true; +} + +function onTimeEvent_ATGunner_Attack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEndState_ATGunner_Attack(obj, new_state) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + local attackIndex = obj.getAttackIndex(); + if(new_state != 8){ + obj.getVar("AttackCount").setInt(0, 0); + } + break; + } +} + +function onCreateObject_ATGunner_Attack(obj, createObject) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + local passiveObjId = colObj.getCollisionObjectIndex(); + // print("passiveObjId = "+passiveObjId); + if(passiveObjId >= 22001 && passiveObjId <= 22015){ + colObj.setValid(false); + } + } + break; + } +} + +function onKeyFrameFlag_ATGunner_JumpAttack(obj, flagIndex) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + switch(flagIndex){ + case 101: + local totalDamage = 100 + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) / 10; + local weaponSubType = obj.getWeaponSubType(); + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); + local elementSelect = addAppendage.getVar("element").getInt(0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 12, 1.0); + local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 0, 1.0) + 100; + local activestatusSet = 9, statusTime = 0; + if(sq_getRandom(1, 100) > prob){ + statusTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 1, 1.0) + 100; + switch(elementSelect){ + case 1: activestatusSet = 1; break; + case 2: activestatusSet = 5; break; + case 3: activestatusSet = 6; break; + case 4: activestatusSet = 3; break; + } + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,20+elementSelect,totalDamage,weaponSubType,1,1,1,activestatusSet,statusTime,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)){ + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETEXPLOSIVE, -1, 0, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,40+elementSelect,totalDamage,weaponSubType,1,1,1,totalDamageExp,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETPENETRATE, -1, 0, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,30+elementSelect,totalDamage,weaponSubType,1,1,1,0,0,0); + } + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,10+elementSelect,totalDamage,weaponSubType,1,1,1,0,0,0); + break; + } + + local setskillIndex = SKILL_BYKK_HEADSHOT; + if(growType == 4) setskillIndex = SKILL_BYKK_OVERCHARGE; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > 0){ + loadSlot.decreaseLoadCount(1); + obj.sq_PlaySound("R_SILVER_SHOT"); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),growType,setskillIndex,2,totalDamage,weaponSubType,1,1,1,0,0,0); + } + } + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),growType,setskillIndex,1,totalDamage,weaponSubType,1,1,1,0,0,0); + break; + } + break; + } + return true; +} + +function onProcCon_ATGunner_JumpAttack(obj) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 4: + nitroMotor_bykk(obj); + break; + } +} + +function onEndState_ATGunner_JumpAttack(obj, new_state) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 1) return; +} + +function onCreateObject_ATGunner_JumpAttack(obj, createObject) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + case 4: + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + local passiveObjId = colObj.getCollisionObjectIndex(); + // print("passiveObjId = "+passiveObjId); + if(passiveObjId >= 22001 && passiveObjId <= 22015){ + colObj.setValid(false); + } + } + break; + } +} + +//////////////////////////////////女漫游被动 +function ProcPassiveSkill_ATGunner_Ranger(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_BYKK_FASTSHOOT: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atfastshoot.nut", true); + } + break; + case SKILL_BYKK_REDUCEREVOLVERDELAY: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atreducerevolverdelayfastshoot.nut", true); + } + break; + case SKILL_BYKK_VEILEDCUT: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atvriledcut.nut", true); + local prob = sq_GetLevelData(obj, skill_index, 0, skill_level); + local level = sq_GetSkillLevel(obj, 174) + 10; + local time = sq_GetLevelData(obj, skill_index, 2, skill_level); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE); + if(skillLevel > 0) time = time + sq_GetLevelData(obj, SKILL_BYKK_SAWBLADE, 1, skillLevel); + // print("Set:prob = "+prob+", level = "+level+", time = "+time); + appendage.getVar("custom").setInt(0, prob); + appendage.getVar("custom").setInt(1, level); + appendage.getVar("custom").setInt(2, time); + } + break; + } +} + +function onStart_appendage_ATFastShoot(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_FASTSHOOT, 2, skillLevel); + // print("attackSpeed = "+attackSpeed); + local change_appendage = appendage.sq_getChangeStatus("ATFastShoot"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("ATFastShoot",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 1.0).tofloat()); + } +} + +function onStart_appendage_ATReducerevolverdelayfastshoot(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType != 0) return; + local loadMax = sq_GetLevelData(obj, 30, 0, sq_GetSkillLevel(obj, 30)); + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > loadMax) obj.sq_RemoveSkillLoad(30); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 9, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 10, skillLevel); + local attackRate = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 4, skillLevel); + local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 8, skillLevel); + // print("attackRate22 = "+attackRate); + local change_appendage = appendage.sq_getChangeStatus("ATReducerevolverdelayfastshoot"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("ATReducerevolverdelayfastshoot",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 1.0).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed * 1.0).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 1.0).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + } +} + +function onAttackParent_appendage_ATVeiledcut(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local prob = appendage.getVar("custom").getInt(0); + local level = appendage.getVar("custom").getInt(1); + local time = appendage.getVar("custom").getInt(2); + // print("prob = "+prob+", level = "+level+", time = "+time); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, (prob * 0.1).tofloat(), level, false, time); + } +} + +function onStart_appendage_at_revolvercriticaldamageup(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP); + local criticalHitRate = sq_GetLevelData(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, 1, skillLevel); + // print("attackRate22 = "+attackRate); + local change_appendage = appendage.sq_getChangeStatus("at_revolvercriticaldamageup"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_revolvercriticaldamageup",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, criticalHitRate.tofloat() * 0.1 / 0.667); + } +} + +function onStart_appendage_ATStylish(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 5, skillLevel); + // print("attackRate22 = "+attackRate); + local change_appendage = appendage.sq_getChangeStatus("at_revolvercriticaldamageup"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_revolvercriticaldamageup",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 1.0).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (attackSpeed * 1.0).tofloat()); + } + setSkillBonusRate_AtRanger_bykk(obj); +} + +function onEnd_appendage_ATStylish(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + setSkillBonusRate_AtRanger_bykk(obj); +} + +function onAttackParent_appendage_at_revolvercriticaldamageup(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/revolvercriticaldamageup.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + } +} + +//////////////////////////////////女漫游 + +function onStartMap_ATGunner_Ranger_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT); + if(loadSlot){ + if(loadSlot.isCooling()){ + if(obj.getState() != STATE_BYKK_WALKSHOOT){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } +} + +function procSkill_ATGunner_1ranger_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT); + if(loadSlot){ + if(!loadSlot.isCooling() || loadSlot.getRemainLoadNumber() <= 0){ + obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT); + if(!sq_GetSkill(obj, SKILL_BYKK_WALKSHOOT).isInCoolTime()) obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1); + if(obj.getState() == STATE_BYKK_WALKSHOOT){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + } + } + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() <= 0) obj.sq_RemoveSkillLoad(30); + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STYLISH); + if(loadSlot){ + if(!loadSlot.isCooling()){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH); + local loadMax = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 2, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) loadMax = loadMax + sq_GetIntData(obj, SKILL_BYKK_CHAINENLIGHTEN, 17); + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber < loadMax) loadSlot.increaseLoadCount(1); + } + } + else{ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH); + local loadMax = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 2, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) loadMax = loadMax + sq_GetIntData(obj, SKILL_BYKK_CHAINENLIGHTEN, 17); + local coolTime = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 3, skillLevel); + obj.sq_AddSkillLoad(SKILL_BYKK_STYLISH, 83, loadMax, coolTime); + } + if(obj.getState() == 20) proc_atStylish_bykk(obj); +} + +function proc_atStylish_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STYLISH); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > 0){ + local state = obj.getState(); + for(local i = 0; i < ATSTYLISH_SKILL_LIST.len(); i++){ + if(state != ATSTYLISH_STATE_LIST[i] && !sq_GetSkill(obj, ATSTYLISH_SKILL_LIST[i]).isInCoolTime()){ + obj.setSkillCommandEnable(ATSTYLISH_SKILL_LIST[i], true); + local b_useskill = obj.sq_IsEnterSkill(ATSTYLISH_SKILL_LIST[i]); + if(b_useskill != -1){ + loadSlot.decreaseLoadCount(1); + if(!loadSlot.isCooling()) loadSlot.setStartCool(); + setStylishAppendage(obj); + obj.startSkillCoolTime(ATSTYLISH_SKILL_LIST[i], sq_GetSkillLevel(obj, ATSTYLISH_SKILL_LIST[i]), -1); + if(state == STATE_BYKK_WALKSHOOT){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT); + if(!sq_GetSkill(obj, SKILL_BYKK_WALKSHOOT).isInCoolTime()) obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1); + } + switch(ATSTYLISH_SKILL_LIST[i]){ + case SKILL_BYKK_WINDMILL: + obj.getVar("windmill_count").setInt(0, 0); + obj.getVar("windmill_Bool").setBool(0, false); + break; + case SKILL_BYKK_HEADSHOT: + case SKILL_BYKK_TURNINGSHOOT: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("headShot_Bool").setBool(0, true); + else obj.getVar("headShot_Bool").setBool(0, false); + break; + case SKILL_BYKK_CHAINSNATCH: + obj.getVar("ChainSnatchTar").clear_obj_vector(); + obj.getVar("ChainSnatchBool").setBool(0, false); + obj.getVar("ChainSnatchBool").setBool(1, false); + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_IGNORE_FORCE, true); + return; + break; + case SKILL_BYKK_RANDOMSHOOT: + obj.getVar("randomShootBool").setBool(0, true); + obj.getVar("randomShootBool").setBool(1, true); + obj.getVar("randomShootObj").clear_obj_vector(); + break; + case SKILL_BYKK_WALKSHOOT: + obj.getVar("walkShootWeaponType").setInt(0, obj.getWeaponSubType()); + obj.getVar("WalkShootBool").setBool(3, true); + obj.getVar("walkShootEffect").clear_obj_vector(); + break; + case SKILL_BYKK_MULTIHEADSHOT: + obj.getVar("MultiHeadShotSet").setInt(0, 2); + obj.getVar("MultiHeadShotCount").setInt(0, 0); + break; + case SKILL_BYKK_DOUBLEGUNHAWK: + obj.getVar("DoubleGunhawk_Phase").setInt(0, 1); + break; + case SKILL_BYKK_AIRRAIDEX: + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){ + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true); + return; + break; + case SKILL_BYKK_SUPPRESSINGFIRE: + obj.getVar("SuppressingFireTar").clear_obj_vector(); + break; + case SKILL_BYKK_KILLPOINT: + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 13) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true); + return; + break; + case SKILL_BYKK_CHAINDEVIDER: + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_CHAINDEVIDER, 3) > 0){ + obj.getVar("ChainDeviderTar").clear_obj_vector(); + obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_IGNORE_FORCE, true); + return; + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ATSTYLISH_STATE_LIST[i], STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } + } + } +} + +function onStartDungeon_ATRanger_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STYLISH); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STYLISH); + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot) obj.sq_RemoveSkillLoad(30); + setSkillBonusRate_AtRanger_bykk(obj); +} + +function reset_atRanger_bykk(obj) +{ + setSkillBonusRate_AtRanger_bykk(obj); +} + +function setStylishAppendage(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atgunner/1_ranger_bykk/passiveskill/ap_atstylish.nut"); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atstylish.nut", true); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 6, skillLevel); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STYLISH, skillLevel); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); +} + +function setSkillBonusRate_AtRanger_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/1_ranger_bykk/passiveskill/ap_atstylish.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 4, sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH))) / 1000; + print("bonusRate0 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_VEILEDCUT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_VEILEDCUT, 6, sq_GetSkillLevel(obj, SKILL_BYKK_VEILEDCUT))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SAWBLADE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAINENLIGHTEN, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN))) / 1000; + print("bonusRate3 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + + +//银弹 +function checkExecutableSkill_SilverBullet(obj) +{ + if (!obj) return false; + if(sq_getGrowType(obj) != 1) return false; + local isUse = obj.sq_IsUseSkill(30); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SilverBullet(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SilverBullet(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_PlaySound("FG_SSHOT"); + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + local castTime = sq_GetCastTime(obj, 30, sq_GetSkillLevel(obj, 30)); + sq_StartDrawCastGauge(obj, castTime, true); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = delaySum.tofloat() * 100.0 / castTime.tofloat(); + currentAni.setSpeedRate(speedRate); + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, 30); + local countMax = sq_GetLevelData(obj, 30, 0, skillLevel); + local loadSlot = obj.sq_GetSkillLoad(30); + if(!loadSlot) obj.sq_AddSkillLoad(30, 42, countMax, 0); + else{ + local loadnumber = loadSlot.getRemainLoadNumber(); + print("loadnumber = "+loadnumber); + if(loadnumber < countMax) loadSlot.increaseLoadCount(countMax - loadnumber); + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/character/ap_common_suck.nut", true); + AddAppendage.sq_SetValidTime(1000); + AddAppendage.setBuffIconImage(15); + break; + } +} + +function onEndCurrentAni_SilverBullet(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(143, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SilverBullet(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SilverBullet(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_SilverBullet(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SilverBullet(obj, new_state) +{ + if(!obj) return; + if(new_state != 143){ + sq_EndDrawCastGauge(obj); + } +} + + +//上旋踢 +function checkExecutableSkill_Windmill(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WINDMILL); + if (isUse){ + obj.getVar("windmill_count").setInt(0, 0); + obj.getVar("windmill_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Windmill(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Windmill(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_WINDMILLROLL); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/windmilldodgeat.ani"), 0, 0); + local aniPath = "character/gunner/effect/animation/1_ranger/windmilldust1.ani"; + if(subState == 1){ + aniPath = "character/gunner/effect/animation/1_ranger/windmilldust2.ani"; + local aniPath2 = "character/gunner/effect/animation/1_ranger/windmilldust3.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + } + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + sq_moveWithParent(obj, pooledObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WINDMILL); + local addSpeedRate = sq_GetLevelData(obj, SKILL_BYKK_WINDMILL, 2, skillLevel); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_WINDMILL, 3, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_WINDMILL)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speedRate = 1.0 + addSpeedRate.tofloat() / 100.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_WINDMILLSTAND); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 3: + obj.sq_SetCurrentAnimation(86); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault1.ani"), 0, 0); + break; + case 4: + obj.sq_SetCurrentAnimation(87); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault3.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault4.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WINDMILL, -1, 3, 1.2) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADESUMERSAULT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(1, delay / 10, 5, true); + break; + case 10://枪刃冲击character/gunner/atanimation/twingunbladedashattackknife.ani72 + obj.sq_SetCurrentAnimation(72); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/dashattackknife1.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/attwingunblade/dashattackknife2.ani", 0, 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 1, 1.0) + 200; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("twingunblade_move").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(2, delay / 20, 20, true); + break; + case 20://银光飞刃character/gunner/atanimation/twingunbladejumpattackknife.ani73 + obj.sq_SetCurrentAnimation(73); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 2, 1.0) + 200; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 1000000 / currentAni.getDelaySum(0, 0); + local speed = 800.0 * speedRate.tofloat() / 100.0; + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed); + local aniPath = ["character/gunner/effect/animation/attwingunblade/jumpattackknife1.ani", "character/gunner/effect/animation/attwingunblade/jumpattackknife3.ani"]; + local direction = obj.getDirection(), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj), zPos = sq_GetZPos(obj); + obj.getVar("twingunblade_effect").clear_obj_vector(); + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[0],false,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(obj, pooledObj); + obj.getVar("twingunblade_effect").push_obj_vector(pooledObj); + pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[1],true,direction,xPos,yPos + 1,zPos,ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(obj, pooledObj); + obj.getVar("twingunblade_effect").push_obj_vector(pooledObj); + break; + case 30://飞旋射击character/gunner/atanimation/twingunbladedashattackgun.ani84 + obj.sq_SetCurrentAnimation(84); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/dashattackgun.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 600.0); + else sq_SetVelocity(obj, 0, -600.0); + sq_SetVelocity(obj, 2, 300.0); + break; + } +} + +function onEndCurrentAni_Windmill(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WINDMILL); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_WINDMILL, 1, skillLevel); + obj.sq_IntVectClear(); + if(obj.getVar("windmill_count").getInt(0) + 1 >= hitMax) obj.sq_IntVectPush(2); + else{ + obj.getVar("windmill_count").setInt(0, obj.getVar("windmill_count").getInt(0) + 1); + if(subState == 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + } + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 10: + case 20: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true); + break; + case 4: + case 30: + if(subState == 30) obj.getVar("twingunBlade_jumpmove").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Windmill(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + if(obj.getVar("windmill_Bool").getBool(0) && !sq_GetSkill(obj, SKILL_BYKK_AIRRAID).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_AIRRAID,true); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAID); + if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.startSkillCoolTime(SKILL_BYKK_AIRRAID, sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAID), -1); + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAID, STATE_PRIORITY_AUTO, true); + break; + } + } + if(!sq_GetSkill(obj, SKILL_BYKK_AIRRAIDEX).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_AIRRAIDEX,true); + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAIDEX); + if(b_useskill != -1 || sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.startSkillCoolTime(SKILL_BYKK_AIRRAIDEX, sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAIDEX), -1); + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){ + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + if(!sq_GetSkill(obj, SKILL_BYKK_FASTKNEE).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_FASTKNEE,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FASTKNEE); + if(b_useskill != -1){ + setStylishAppendage(obj); + obj.startSkillCoolTime(SKILL_BYKK_FASTKNEE, sq_GetSkillLevel(obj, SKILL_BYKK_FASTKNEE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FASTKNEE, STATE_PRIORITY_AUTO, true); + break; + } + } + case 10: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE); + if(skillLevel > 0){ + local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 7, skillLevel); + local timer = obj.getVar("twingunBlade_windmill").get_ct_vector(0); + if(!timer){ + obj.getVar("twingunBlade_windmill").clear_ct_vector(); + obj.getVar("twingunBlade_windmill").push_ct_vector(); + timer = obj.getVar("twingunBlade_windmill").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("twingunBlade_windmill").setBool(0, false); + } + local currentT = timer.Get();//得到时间 + if(currentT >= coolTime || obj.getVar("twingunBlade_windmill").getBool(0) == false){ + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.getVar("twingunBlade_windmill").setBool(0, true); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true); + } + } + } + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj); +} + +function onProc_Windmill(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 3: + case 4: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH); + if(skillLevel > 0){ + local speed_X = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 0, skillLevel); + local speed_Y = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 1, skillLevel); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + sq_SetVelocity(obj, 0, speed_X.tofloat() * -1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat() * -1); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat()); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + sq_SetVelocity(obj, 0, speed_X.tofloat()); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat() * -1); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat()); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat() * -1); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat()); + } + break; + case 20: + if(sq_GetCurrentFrameIndex(obj) == 0){ + if(sq_GetZPos(obj) <= 0){ + sq_SetVelocity(obj, 0, 0.0); + sq_SetVelocity(obj, 2, 0.0); + local pooledObj = obj.getVar("twingunblade_effect").get_obj_vector(0); + if(pooledObj){ + pooledObj.setValid(false); + } + local pooledObj2 = obj.getVar("twingunblade_effect").get_obj_vector(1); + if(pooledObj2){ + local pAni = pooledObj2.getCurrentAnimation(); + pAni.setCurrentFrameWithChildLayer(1); + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(1); + } + } + break; + } +} + +function onKeyFrameFlag_Windmill(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 501: + case 502: + case 504: + obj.sq_PlaySound("R_TWINGUN_GUN"); + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-10,obj.getDirection(),1,SKILL_BYKK_TWINGUNBLADE,1,totalDamage,0,0,0,0,0,0,0); + local angle = -60.0, offsetX = { + [501] = [30, 70], + [502] = [-10,15], + [504] = [10,30]}; + if(flagIndex == 502) angle = -90.0; + else if(flagIndex == 504) angle = -120.0; + for(local i = 0; i < 2; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/gunner/animation/twingunblade/gunshoot.ani", offsetX[flagIndex][i], 0, 0); + sq_SetCustomRotate(pooledObj, sq_ToRadian(angle)); + } + break; + } + return true; +} + +function onTimeEvent_Windmill(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local vz = sq_GetUniformVelocity(0, 100, timeEventCount, 5); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 2: + local vx = sq_GetUniformVelocity(0, 300, timeEventCount, 20); + local dstX = sq_GetDistancePos(obj.getVar("twingunblade_move").getInt(0), obj.getDirection(), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_Windmill(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Windmill(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAID) < 1) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("windmill_Bool").getBool(0) == false) obj.getVar("windmill_Bool").setBool(0, true); + } + break; + } +} + + +//爆头一击 +function checkExecutableSkill_HeadShot(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HEADSHOT); + if (isUse){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("headShot_Bool").setBool(0, true); + else obj.getVar("headShot_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HeadShot(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HeadShot(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2); + obj.sq_PlaySound("R_FG_HSHOT"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + if(obj.getVar("headShot_Bool").getBool(0)) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTDOWN); + else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTUP); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_RELOAD); + local weaponSubType = obj.getWeaponSubType(); + switch(weaponSubType){ + case 0://左轮 + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/reducerevolverreload_at.ani", 0, 0, 0); + break; + case 1://自动 + break; + case 2://步枪 + break; + case 3://手炮 + break; + case 4://手弩 + break; + } + + local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 5, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY)).tofloat() / 100.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + break; + } +} + +function onEndCurrentAni_HeadShot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_HeadShot(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_HeadShot(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(2); + break; + case 101: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true); + break; + case 102: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 1) * 50 / 50; + obj.setTimeEvent(1, delay, 1, false); + break; + case 103: + sq_SetMyShake(obj, 3, 120); + if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotdown.ani", 100, 0, 75); + else sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotup.ani", 125, 0, 100); + local effcetAniPath0 = "character/gunner/effect/animation/1_ranger/"; + local effectAniPath = [["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"], + ["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"], + ["shooteffect/upmusket.ani", "shooteffect/downmusket.ani"], + ["shooteffect/uphandcannon.ani", "shooteffect/downhandcannon.ani"], + ["shooteffect/upbowgun.ani", "shooteffect/downbowgun.ani"] + ]; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + effectAniPath = [["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"], + ["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"], + ["silverbullet/upmusket.ani", "silverbullet/downmusket.ani"], + ["silverbullet/uphandcannon.ani", "silverbullet/downhandcannon.ani"], + ["silverbullet/upbowgun.ani", "silverbullet/downbowgun.ani"]]; + loadSlot.decreaseLoadCount(1); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEADSHOT, -1, 0, 1.0) + 100; + print("totalDamage_headshot = "+totalDamage); + local weaponSubType = obj.getWeaponSubType(); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0) obj.sq_PlaySound("R_SILVER_SHOT"); + else{ + switch(weaponSubType){ + case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮 + case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动 + case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪 + case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮 + case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩 + } + } + if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][1], 100, 0, 75); + else sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 125, 0, 100); + if(obj.getVar("headShot_Bool").getBool(0)){ + if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,1,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,1,0,0,0,0,0); + } + else { + if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,0,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,0,0,0,0,0,0); + } + sq_SetMyShake(obj, 3, 100); + break; + case 104: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true); + break; + } + return true; +} + +function onTimeEvent_HeadShot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(1); + break; + } +} + +function onEndState_HeadShot(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_HEADSHOT) obj.getVar("headShot_Bool").setBool(0, false); +} + + +//回头一击 +function checkExecutableSkill_TurningShoot(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TURNINGSHOOT); + if (isUse){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("headShot_Bool").setBool(0, true); + else obj.getVar("headShot_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_TurningShoot(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_TurningShoot(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2); + obj.sq_PlaySound("R_FG_HSHOT"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + if(obj.getVar("headShot_Bool").getBool(0)) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTDOWN); + else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTUP); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_RELOAD); + local weaponSubType = obj.getWeaponSubType(); + switch(weaponSubType){ + case 0://左轮 + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/reducerevolverreload_at.ani", 0, 0, 0); + break; + case 1://自动 + break; + case 2://步枪 + break; + case 3://手炮 + break; + case 4://手弩 + break; + } + local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 5, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY)).tofloat() / 100.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + break; + } +} + +function onEndCurrentAni_TurningShoot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_TurningShoot(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_TurningShoot(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(3); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/turningshootbody.ani", 0, 0, 0); + local aniPath = "character/gunner/effect/animation/turningshoot.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(obj.getDirection()),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -5),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + obj.setTimeEvent(2, currentAni.getDelaySum(3, 3), 1, false); + break; + case 101: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true); + break; + case 102: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 1) * 50 / 50; + obj.setTimeEvent(1, delay, 1, false); + break; + case 103: + sq_SetMyShake(obj, 3, 120); + if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotdown.ani", 100, 0, 75); + else sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotup.ani", 125, 0, 100); + local effcetAniPath0 = "character/gunner/effect/animation/1_ranger/"; + local effectAniPath = [["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"], + ["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"], + ["shooteffect/upmusket.ani", "shooteffect/downmusket.ani"], + ["shooteffect/uphandcannon.ani", "shooteffect/downhandcannon.ani"], + ["shooteffect/upbowgun.ani", "shooteffect/downbowgun.ani"] + ]; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + effectAniPath = [["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"], + ["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"], + ["silverbullet/upmusket.ani", "silverbullet/downmusket.ani"], + ["silverbullet/uphandcannon.ani", "silverbullet/downhandcannon.ani"], + ["silverbullet/upbowgun.ani", "silverbullet/downbowgun.ani"]]; + loadSlot.decreaseLoadCount(1); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEADSHOT, -1, 0, 1.0) + 100; + totalDamage = totalDamage * (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TURNINGSHOOT, -1, 0, 1.0) + 100) / 100; + print("totalDamage_turningshot = "+totalDamage); + local weaponSubType = obj.getWeaponSubType(); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0) obj.sq_PlaySound("R_SILVER_SHOT"); + else{ + switch(weaponSubType){ + case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮 + case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动 + case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪 + case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮 + case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩 + } + } + if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][1], 100, 0, 75); + else sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 125, 0, 100); + if(obj.getVar("headShot_Bool").getBool(0)){ + if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,1,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,1,0,0,0,0,0); + } + else { + if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,0,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,0,0,0,0,0,0); + } + sq_SetMyShake(obj, 3, 100); + break; + case 104: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true); + break; + } + return true; +} + +function onTimeEvent_TurningShoot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(1); + break; + case 2: + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + break; + } +} + +function onEndState_TurningShoot(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_TURNINGSHOOT) obj.getVar("headShot_Bool").setBool(0, false); +} + + +//刺踢 +function checkExecutableSkill_FastKnee(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FASTKNEE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FASTKNEE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FastKnee(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FastKnee(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(14); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/atfastknee.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FASTKNEE, -1, 6, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + local backForce = 50; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FASTKNEE); + local backForceRate = sq_GetLevelData(obj, SKILL_BYKK_FASTKNEE, 5, skillLevel).tofloat() * 1.11; + // print("backForceRate = "+backForceRate); + backForce = backForce * backForceRate / 100.0; + sq_SetCurrentAttacknBackForce(attackInfo, backForce.tointeger()); + local prob = sq_GetLevelData(obj, SKILL_BYKK_FASTKNEE, 2, skillLevel) / 10; + local time = sq_GetLevelData(obj, SKILL_BYKK_FASTKNEE, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time); + break; + } + local addRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FASTKNEE, -1, 1, 1.0) + 100; + local speedRate = 1.0 + addRate.tofloat() / 100.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); +} + +function onEndCurrentAni_FastKnee(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FastKnee(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_FastKnee(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FastKnee(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FastKnee(obj, new_state) +{ + if(!obj) return; +} + + +//烟尘弹 +function checkExecutableSkill_ATDustShoot(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(0); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ATDustShoot(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ATDustShoot(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(120); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_ATDustShoot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ATDustShoot(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_ATDustShoot(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_ATDustShoot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ATDustShoot(obj, new_state) +{ + if(!obj) return; +} + + +//锁链截击 +function checkExecutableSkill_ChainSnatch(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAINSNATCH); + if (isUse){ + obj.getVar("ChainSnatchTar").clear_obj_vector(); + obj.getVar("ChainSnatchBool").setBool(0, false); + obj.getVar("ChainSnatchBool").setBool(1, false); + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ChainSnatch(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ChainSnatch(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ABODY); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHSPIN)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local delay = sq_GetIntData(obj, SKILL_BYKK_CHAINSNATCH, 0); + obj.setTimeEvent(0, delay, 1, false); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_BBODY); + obj.stopTimeEvent(1); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_CBODY); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHTHROW)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_DBODY); + break; + case 4: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_EBODY); + sq_SetMyShake(obj, 2, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 2, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHPULL)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 10: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK1_BODY_00); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHSPIN)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 11: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK2_BODY_00); + sq_SetMyShake(obj, 2, 100); + break; + case 12: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK3_BODY_00); + break; + case 13: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK2_BODY_FAIL); + break; + } + local speedRate = 1.0; + if(subState >= 10) speedRate = 1.2; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_CHAINSNATCH, 1) * delaySum / 60; + obj.setTimeEvent(1, hitTime, -1, false); + local appendage = sq_AttractToMe(obj, 150, 150, 300); + obj.getVar("ChainSnatch").setAppendage(0,appendage); + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local appendage = obj.getVar("ChainSnatch").getAppendage(0); + if(appendage) appendage.setValid(false); + local size = obj.getVar("ChainSnatchTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ChainSnatchTar").get_obj_vector(i); + if(targetObj && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ATRANGER_CHAINSNATCH); + sq_MoveToAppendageForce(targetObj, obj, obj, 300, 0, targetObj.getZPos(), delaySum, true, addAppendage); + } + } + } + break; + case 4: + case 11: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false) / 2; + local size = obj.getVar("ChainSnatchTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ChainSnatchTar").get_obj_vector(i); + if(targetObj && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ATRANGER_CHAINSNATCH); + sq_MoveToAppendageForce(targetObj, obj, obj, 150, 0, targetObj.getZPos(), delaySum, true, addAppendage); + } + } + } + break; + } +} + +function onEndCurrentAni_ChainSnatch(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 2: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 3: + case 4: + case 12: + case 13: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + if(obj.getVar("ChainSnatchBool").getBool(0)){ + obj.sq_IntVectPush(11); + } + else obj.sq_IntVectPush(13); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ChainSnatch(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.setSkillCommandEnable(SKILL_BYKK_CHAINSNATCH, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CHAINSNATCH); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true); + break; + } + break; + case 2: + case 3: + if(obj.getVar("ChainSnatchBool").getBool(1)){ + obj.setSkillCommandEnable(SKILL_BYKK_CHAINSNATCH, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CHAINSNATCH); + if(b_useskill != -1){ + obj.getVar("ChainSnatchBool").setBool(1, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true); + break; + } + } + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_ChainSnatch(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 201: sq_SetMyShake(obj, 1, 100); break; + case 203: obj.getVar("ChainSnatchBool").setBool(1, true);print("test"); break; + case 1001: sq_SetMyShake(obj, 1, 100); break; + case 1033: + local isSilver = 0; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + isSilver = 1; + obj.sq_PlaySound("R_SILVER_SHOT"); + } + local bonusRate = sq_GetIntData(obj, SKILL_BYKK_CHAINENLIGHTEN, 7) / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 0, bonusRate) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_CHAINSNATCH,1,totalDamage,isSilver,0,0,0,0,0,0); + break; + case 1037: + if(obj.isMyControlObject()) sq_flashScreen(obj,20,20,10,25, sq_RGB(255,128,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 120); + break; + } + return true; +} + +function onTimeEvent_ChainSnatch(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local subState = obj.getSkillSubState(); + if(subState != 0) break; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: obj.resetHitObjectList(); break; + } +} + +function onEndState_ChainSnatch(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_CHAINSNATCH){ + local appendage = obj.getVar("ChainSnatch").getAppendage(0); + if(appendage) appendage.setValid(false); + local size = obj.getVar("ChainSnatchTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ChainSnatchTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_ATRANGER_CHAINSNATCH); + } + } + } +} + +function onAttack_ChainSnatch(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("ChainSnatchTar").is_obj_vector(damager)){ + obj.getVar("ChainSnatchTar").push_obj_vector(damager) + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATRANGER_CHAINSNATCH)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_ATRANGER_CHAINSNATCH, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + case 10: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("ChainSnatchBool").getBool(0) == false) obj.getVar("ChainSnatchBool").setBool(0, true); + if(!obj.getVar("ChainSnatchTar").is_obj_vector(damager)){ + obj.getVar("ChainSnatchTar").push_obj_vector(damager) + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATRANGER_CHAINSNATCH)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_ATRANGER_CHAINSNATCH, true); + sq_HoldAndDelayDie(damager, obj, false, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + } +} + + +//枪舞 +function checkExecutableSkill_RandomShoot(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMSHOOT); + if (isUse){ + obj.getVar("randomShootBool").setBool(0, true); + obj.getVar("randomShootBool").setBool(1, true); + obj.getVar("randomShootObj").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_RandomShoot(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_RandomShoot(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_1); break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_2); break; + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_3); break; + case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_4); break; + } + obj.sq_PlaySound("R_CHAIN_POWDER_RANDOMSHOT"); + obj.sq_PlaySound("G_WREVOLVERB"); + local speedRate = 1.5; + if(obj.getRapidInputFrequency() >= 1) speedRate = 2.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 15000 / currentAni.getDelaySum(0, 0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_RANDOMSHOOT, 8); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,1,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,1,speedRate,subState,sizeRate,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,1,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,2,speedRate,subState,sizeRate,0,0,0,0,0); + local aniPath = "character/gunner/effect/animation/1_ranger/shooteffect/atrandomshootfire.ani"; + local direction = obj.getDirection(), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + switch(subState){ + case 0: + local offset_x = sq_GetDistancePos(xPos, direction, 66) + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,91,ENUM_DRAWLAYER_NORMAL); + offset_x = sq_GetDistancePos(xPos, direction, 57) + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,101,ENUM_DRAWLAYER_NORMAL); + break; + case 1: + local offset_x = sq_GetDistancePos(xPos, direction, 76) + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,86,ENUM_DRAWLAYER_NORMAL); + offset_x = sq_GetDistancePos(xPos, direction, -76) + pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),offset_x,yPos,86,ENUM_DRAWLAYER_NORMAL); + break; + case 2: + local offset_x = sq_GetDistancePos(xPos, direction, 28) + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,75,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-45.0)); + offset_x = sq_GetDistancePos(xPos, direction, -40) + pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),offset_x,yPos,104,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(45.0)); + break; + case 3: + local offset_x = sq_GetDistancePos(xPos, direction, -28) + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,75,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-135.0)); + offset_x = sq_GetDistancePos(xPos, direction, 47) + pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),offset_x,yPos,100,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(135.0)); + break; + } + if(obj.getVar("randomShootBool").getBool(0)){ + obj.getVar("randomShootBool").setBool(0, false); + obj.sq_PlaySound("R_FG_RANDOMSHOT"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 3, 1.0) + 100; + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 1, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,3,totalDamage,hitMax,200,sizeRate,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,4,totalDamage2,hitMax,200,sizeRate,0,0,0,0); + } +} + +function onEndCurrentAni_RandomShoot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + for(local i = 0; i < 5; i++){ + local randomState = sq_getRandom(0, 3); + if(randomState != subState){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(randomState); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMSHOOT, STATE_PRIORITY_AUTO, true); + break; + } + } + break; + } +} + +function onProcCon_RandomShoot(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onProc_RandomShoot(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + if(obj.getRapidInputFrequency() >= 1 && obj.getVar("randomShootBool").getBool(1)){ + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 2, 1.0) + 100; + local size = obj.getVar("randomShootObj").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local speed = currentAni.getDelaySum(0, 0) * 200 / 200 ; + // print("speed = "+speed); + for(local i = 0; i < size; i++){ + local attackObj = obj.getVar("randomShootObj").get_obj_vector(i); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getVar("custom").getInt(0) != hitMax){ + colObj.stopTimeEvent(0); + colObj.setTimeEvent(0, speed, -1, false); + colObj.getVar("custom").setInt(0, hitMax); + } + } + } + obj.getVar("randomShootBool").setBool(1, false); + } + } + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } +} + +function onKeyFrameFlag_RandomShoot(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_RandomShoot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_RandomShoot(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_RANDOMSHOOT){ + local size = obj.getVar("randomShootObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local attackObj = obj.getVar("randomShootObj").get_obj_vector(i); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.setTimeEvent(1, 1000, 1, true); + } + } + } + } +} + + +//移动射击 +function checkExecutableSkill_WalkShoot(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WALKSHOOT); + if (isUse){ + obj.getVar("walkShootWeaponType").setInt(0, obj.getWeaponSubType()); + obj.getVar("WalkShootBool").setBool(3, true); + obj.getVar("walkShootEffect").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_WalkShoot(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_WalkShoot(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTREADYSTAY); break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTREADYFRONT); break; + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTREADYBACK); break; + case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTRIGHTSTAY); break; + case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTRIGHTFRONT); break; + case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTRIGHTBACK); break; + case 6: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTLEFTSTAY); break; + case 7: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTLEFTFRONT); break; + case 8: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTLEFTBACK); break; + } + local sawAni = ["effect/animation/attwingunblade/attackgunreadystay.ani", "effect/animation/attwingunblade/attackgunreadyfront.ani", "effect/animation/attwingunblade/attackgunreadyback.ani", "effect/animation/attwingunblade/attackgunrightstay.ani", "effect/animation/attwingunblade/attackgunrightfront.ani", "effect/animation/attwingunblade/attackgunrightback.ani", "effect/animation/attwingunblade/attackgunleftstay.ani", "effect/animation/attwingunblade/attackgunleftfront.ani", "effect/animation/attwingunblade/attackgunleftback.ani"]; + if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(sawAni[subState]), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0 && obj.getVar("WalkShootBool").getBool(3)){ + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,3,0,0,0,0,0,0,0,0); + obj.getVar("WalkShootBool").setBool(3, false); + local currentAni = obj.getCurrentAnimation(); + local weaponSubType = obj.getWeaponSubType(); + local baseSpeed = 120; + if(weaponSubType == 1 || weaponSubType == 4) baseSpeed = 100; + else if(weaponSubType == 2) baseSpeed = 180; + else if(weaponSubType == 3) baseSpeed = 300; + local speed = currentAni.getDelaySum(0, 0) * baseSpeed / 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOTEX); + if(skillLevel > 0) speed = speed * 100 / (100 + 10 * skillLevel); + obj.getVar("WalkShoot_T").clear_ct_vector(); + obj.getVar("WalkShoot_T").push_ct_vector(); + local timer = obj.getVar("WalkShoot_T").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("walkShootSet").setInt(0, speed); + obj.getVar("walkShootSet").setInt(1, 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 2, skillLevel); + local loadCount = sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 3 + obj.getWeaponSubType(), skillLevel); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT); + obj.sq_AddSkillLoad(SKILL_BYKK_WALKSHOOT, 22, loadCount, lifeTime); + loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT); + loadSlot.setStartCool(); + } +} + +function onEndCurrentAni_WalkShoot(obj) +{ + if(!obj) return; +} + +function onProcCon_WalkShoot(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onProc_WalkShoot(obj) +{ + if(!obj) return; + local direction = obj.getDirection(); + local subState = obj.getSkillSubState(); + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.getVar("walkShootWeaponType").getInt(0) != obj.getWeaponSubType()){ + obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1); + obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); + obj.sq_IntVectClear(); + if(direction = ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(6); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true); + } + switch(subState){ + case 0: + case 3: + case 6: + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true); + break; + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 2); + obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true); + break; + } + break; + case 1: + case 2: + case 4: + case 5: + case 7: + case 8: + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT)){ + local speed = 300.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, -speed); + else sq_SetVelocity(obj, 0, speed); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + sq_SetVelocity(obj, 1, -speed); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + sq_SetVelocity(obj, 1, speed); + } + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT)){ + local speed = 300.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + sq_SetVelocity(obj, 1, -speed); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + sq_SetVelocity(obj, 1, speed); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + sq_SetVelocity(obj, 1, -speed); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0; + sq_SetVelocity(obj, 1, speed); + } + else{ + obj.sq_StopMove(); + obj.sq_IntVectClear(); + if(subState == 2 || subState == 5 || subState == 8) obj.sq_IntVectPush(subState - 2); + else obj.sq_IntVectPush(subState - 1); + obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true); + break; + } + break; + } + local timer = obj.getVar("WalkShoot_T").get_ct_vector(0); + if(timer){ + local currentT = timer.Get();//得到时间 + if(currentT >= obj.getVar("walkShootSet").getInt(0)){ + obj.setSkillCommandEnable(SKILL_BYKK_WALKSHOOT,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_WALKSHOOT); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + timer.Reset(); + timer.Start(10000,0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WALKSHOOT, -1, 0, 1.0) + 100; + local weaponSubType = obj.getVar("walkShootWeaponType").getInt(0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOTEX) > 0 && weaponSubType <= 1){ + local offsetX = 50; + switch(weaponSubType){ + case 0: offsetX = 50; break; + case 1: offsetX = 40; break; + case 2: offsetX = 70; break; + case 3: offsetX = 50; break; + } + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_WALKSHOOT, 15); + if(sizeRate <= 100) sizeRate = 100; + local isSilver = 0; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + isSilver = 1; + obj.sq_PlaySound("R_SILVER_SHOT"); + } + if(obj.getVar("walkShootSet").getInt(1) % 2 == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,2,totalDamage,weaponSubType,sizeRate,0,isSilver,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX - 5,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,2,totalDamage,weaponSubType,sizeRate,0,isSilver,0,0,0); + } + else{ + local subType = 1; + local effcetAniPath0 = "character/gunner/effect/animation/1_ranger/"; + local effectAniPath = [["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"], + ["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"], + ["shooteffect/upmusket.ani", "shooteffect/downmusket.ani"], + ["shooteffect/uphandcannon.ani", "shooteffect/downhandcannon.ani"], + ["shooteffect/upbowgun.ani", "shooteffect/downbowgun.ani"] + ]; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + effectAniPath = [["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"], + ["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"], + ["silverbullet/upmusket.ani", "silverbullet/downmusket.ani"], + ["silverbullet/uphandcannon.ani", "silverbullet/downhandcannon.ani"], + ["silverbullet/upbowgun.ani", "silverbullet/downbowgun.ani"]]; + loadSlot.decreaseLoadCount(1); + subType = 10; + obj.sq_PlaySound("R_SILVER_SHOT"); + } + else{ + switch(weaponSubType){ + case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮 + case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动 + case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪 + case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮 + case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩 + } + } + switch(weaponSubType){ + case 0: + if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){ + sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 53, 0, 90); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,63,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + else{ + sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 50, 0, 110); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,60,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + break; + case 1: + if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){ + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/walkshoot/shoot1.ani", 38, 0, 90); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,48,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + else{ + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/walkshoot/shoot2.ani", 35, 0, 110); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + break; + case 2: + if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){ + sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 52, 0, 90); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/musketdust/musketdustsmall1.ani", 20, 1, 90); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/musketdust/musketdustlarge.ani", -30, -1, 100); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,52,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + else{ + sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 52, 0, 110); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/musketdust/musketdustsmall1.ani", 20, 0, 100); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,52,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + break; + case 3: + if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){ + sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 55, 0, 95); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,55,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + else{ + sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 55, 0, 115); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,55,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + } + break; + case 4: + if(obj.getVar("walkShootSet").getInt(1) % 2 == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,71,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,65,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0); + break; + } + } + obj.getVar("walkShootSet").setInt(1, obj.getVar("walkShootSet").getInt(1) + 1); + } + } + local effectObj = obj.getVar("walkShootEffect").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local subState = obj.getSkillSubState(); + local state = colObj.getState(); + local frameIndex = sq_GetCurrentFrameIndex(obj); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 12000.0 / currentAni.getDelaySum(0, 0).tofloat(); + if(subState == 0 || subState == 3 || subState == 6) speedRate = 10000.0 / currentAni.getDelaySum(0, 0).tofloat(); + colObj.getVar("custom").setInt(0, frameIndex); + colObj.getVar("custom").setFloat(10, speedRate); + sq_SetCurrentDirection(colObj, direction); + colObj.addSetStatePacket(20 + subState, null, STATE_PRIORITY_AUTO, false, ""); + } + } + else{ + local effectObj = obj.getVar("walkShootEffect").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + sq_SetCurrentDirection(colObj, direction); + if(colObj.getState() != 30) colObj.addSetStatePacket(30, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } +} + +function onKeyFrameFlag_WalkShoot(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_WalkShoot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_WalkShoot(obj, new_state) +{ + if(!obj) return; + if(new_state >= 1 && new_state <= 9){ + obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT); + if(!sq_GetSkill(obj, SKILL_BYKK_WALKSHOOT).isInCoolTime()) obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1); + } +} + + +//音速劫击 +function checkExecutableSkill_AirRaid(obj) +{ + if (!obj) return false; + return false; +} + +function checkCommandEnable_AirRaid(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_AirRaid(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + case 1: + if(subState == 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_AIRRAID); + else obj.sq_SetCurrentAnimation(ATANI_BYKK_SONIC_CHAINENLIGHTEN_ATTACK1_BODY); + if(subState == 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atairraid.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atairraid/atchainenlighten/chainenlighten_attack1_01.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/1_ranger/atairraiddust.ani", -5, 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAID, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_AIRRAID)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + print("delay = "+delay); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_AIRRAID, 0); + obj.getVar("airRaid_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("airRaid_move").setInt(1, sq_GetZPos(obj)); + if(subState == 0) obj.setTimeEvent(1, delay / 40, 35, true); + else obj.setTimeEvent(2, delay / 40, 35, true); + obj.setTimeEvent(0, delay / (hitMax + 1), hitMax, true); + obj.sq_PlaySound("FG_AIRRAID"); + if(subState == 1){ + obj.sq_PlaySound("FG_SONIC_SPIKE"); + obj.sq_PlaySound("RG_FG_AIR_RAID_ENLIGHTEN_01"); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_SONIC_CHAINENLIGHTEN_ATTACK2_BODY); + obj.sq_PlaySound("RG_FG_AIR_RAID_ENLIGHTEN_02"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2); + break; + } +} + +function onEndCurrentAni_AirRaid(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + case 1: + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_AirRaid(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_AirRaid(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + local aniPath = "character/gunner/effect/animation/1_ranger/atairraid/atchainenlighten/chainenlighten_dust_front1_10.ani"; + local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, -5), yPos = sq_GetYPos(obj); + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); + break; + case 101: obj.sq_PlaySound("R_FG_AIR_RAID_ENLIGHTEN"); break; + case 102: + local isSilver = 0; + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + isSilver = 1; + obj.sq_PlaySound("R_SILVER_SHOT"); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN); + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAINENLIGHTEN, 1, skillLevel) * 1000 / (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAINENLIGHTEN, 0, skillLevel)); + bonusRate = bonusRate.tofloat() / 1000.0; + // print("AirRaid-bonusRate = "+bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAID, -1, 2, bonusRate) + 100; + // print("AirRaid-totalDamage = "+totalDamage); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_AIRRAID,1,totalDamage,isSilver,0,0,0,0,0,0); + break; + case 103: + if(obj.isMyControlObject()) sq_flashScreen(obj,20,70,120,60,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 104: sq_SetMyShake(obj, 6, 120); break; + case 105: + local aniPath = "character/gunner/effect/animation/1_ranger/atairraid/atchainenlighten/chainenlighten_dust_front2_01.ani"; + local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 370), yPos = sq_GetYPos(obj) - 25; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); + break; + } + return true; +} + +function onTimeEvent_AirRaid(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local vx = sq_GetAccel(0, 300, timeEventCount, 35, true); + local vz = sq_GetAccel(0, 100, timeEventCount, 35, true); + local dstX = sq_GetDistancePos(obj.getVar("airRaid_move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaid_move").getInt(1) + vz); + break; + case 2: + local vx = sq_GetAccel(0, 300, timeEventCount, 35, true); + local dstX = sq_GetDistancePos(obj.getVar("airRaid_move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= 35){ + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAID, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_AirRaid(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_AIRRAID){ + sq_SimpleMoveToNearMovablePos(obj, 300); + } +} + + +//死亡左轮 +function checkExecutableSkill_RevolverCriticalDamageUp(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REVOLVERCRITICALDAMAGEUP); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_REVOLVERCRITICALDAMAGEUP, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_RevolverCriticalDamageUp(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_RevolverCriticalDamageUp(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_PlaySound("R_FG_DB_REVOLVER"); + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, sq_GetSkillLevel(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP)); + sq_StartDrawCastGauge(obj, castTime, true); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = delaySum.tofloat() * 100.0 / castTime.tofloat(); + currentAni.setSpeedRate(speedRate); + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, 0, skillLevel); + local apdPath = "character/atgunner/1_ranger_bykk/ap_revolvercriticaldamageup.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, false, apdPath, true); + if(lifeTime > 0) AddAppendage.sq_SetValidTime(lifeTime); + AddAppendage.setBuffIconImage(35); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + AddAppendage.sq_DeleteEffectFront(); + AddAppendage.sq_AddEffectFront("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up1.ani"); + AddAppendage.sq_AddEffectFront("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up2.ani"); + break; + } +} + +function onEndCurrentAni_RevolverCriticalDamageUp(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_REVOLVERCRITICALDAMAGEUP, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_RevolverCriticalDamageUp(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_RevolverCriticalDamageUp(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_RevolverCriticalDamageUp(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_RevolverCriticalDamageUp(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_REVOLVERCRITICALDAMAGEUP){ + sq_EndDrawCastGauge(obj); + } +} diff --git a/user/116.205.165.25/1_atgunner_5.c b/user/116.205.165.25/1_atgunner_5.c new file mode 100644 index 0000000..efa9b75 --- /dev/null +++ b/user/116.205.165.25/1_atgunner_5.c @@ -0,0 +1,3756 @@ + +//多重爆头 +function checkExecutableSkill_MultiHeadShot(obj) +{ + if (!obj) return false; + if(obj.getWeaponSubType() == 3) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MULTIHEADSHOT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_MultiHeadShot(obj) +{ + if (!obj) return false; + if(obj.getWeaponSubType() == 3) return false; + return true; +} + +function onSetState_MultiHeadShot_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTREADY); + obj.sq_PlaySound("FG_MULTIHEAD_READY"); + obj.getVar("MultiHeadShotSet").setInt(0, 2); + obj.getVar("MultiHeadShotCount").setInt(0, 0); + break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT1); break;//左 + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT2); break;//右 + case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT3); break;//上 + case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT4); break;//下 + case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTFINISH);obj.sq_PlaySound("FG_MULTIHEAD_FIN"); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 2.0, 2.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_MULTIHEADSHOTEXKICK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + // local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo); + local rateDamager = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 2, 1.0) + 100).tofloat() / 100.0; + sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager); + sq_SetCurrentAttacknUpForce(attackInfo, 10); + local aniPath = "character/gunner/effect/animation/multiheadshot/shoot.ani"; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 1); + local direction = sq_GetDirection(obj), yPos = sq_GetYPos(obj); + switch(subState){ + case 1: + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, -80); + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,90,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(180.0)); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); + break;//左 + case 2: + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 75); + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,100,ENUM_DRAWLAYER_NORMAL); + offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 80); + pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,80,ENUM_DRAWLAYER_NORMAL); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); + break;//右 + case 3: + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, -50); + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,125,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(155.0)); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); + break;//上 + case 4: + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 42); + local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,48,ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-45.0)); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); + break;//下 + } +} + +function onEndCurrentAni_MultiHeadShot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local sub = obj.getVar("MultiHeadShotSet").getInt(0); + obj.sq_PlaySound("R_FG_MULTIHEAD"); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 3: + case 4: + obj.getVar("MultiHeadShotCount").setInt(0, obj.getVar("MultiHeadShotCount").getInt(0) + 1); + local sub = obj.getVar("MultiHeadShotSet").getInt(0); + local count = obj.getVar("MultiHeadShotCount").getInt(0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 4); + obj.sq_IntVectClear(); + if(count >= hitMax) obj.sq_IntVectPush(5); + else obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_AUTO, true); + break; + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_MultiHeadShot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 3: + case 4: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + case 0: + local direction = sq_GetDirection(obj); + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT)){ + obj.getVar("MultiHeadShotSet").setInt(0, 2); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("MultiHeadShotSet").setInt(0, 3); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("MultiHeadShotSet").setInt(0, 4); + } + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT)){ + obj.getVar("MultiHeadShotSet").setInt(0, 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("MultiHeadShotSet").setInt(0, 3); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("MultiHeadShotSet").setInt(0, 4); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("MultiHeadShotSet").setInt(0, 3); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("MultiHeadShotSet").setInt(0, 4); + } + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_MultiHeadShot(obj, flagIndex) +{ + if(!obj) return false; + // print("flagIndex = "+flagIndex); + sq_SetMyShake(obj, 2, 120); + local attackInfo = sq_GetCurrentAttackInfo(obj); + local weaponSubType = obj.getWeaponSubType(); + local loadSlot = obj.sq_GetSkillLoad(30); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local totalDamage = obj.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; + obj.getVar("MultiHeadShot").setInt(0, totalDamage); + obj.sq_PlaySound("R_SILVER_SHOT"); + } + else{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_MULTIHEADSHOTEXKICK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + switch(weaponSubType){ + case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮 + case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动 + case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪 + case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮 + case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩 + } + obj.getVar("MultiHeadShot").setInt(0, 0); + } + local range = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 1) / 2; + local subState = obj.getSkillSubState(); + local direction = sq_GetDirection(obj); + local minDegree = 0, maxDegree = 0; + switch(flagIndex){ + case 102: minDegree = 135; maxDegree = -135; break; + case 202: minDegree = 45; maxDegree = -45; break; + case 302: minDegree = -45; maxDegree = -135; break; + case 402: minDegree = 45; maxDegree = 135; break; + } + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local disX = sq_GetXPos(activeObj) - sq_GetXPos(obj); + local disY = sq_GetYPos(activeObj) - sq_GetYPos(obj); + switch(subState){//1左2右3上4下 + case 1: + if(((direction == ENUM_DIRECTION_RIGHT && disX < 0) || (direction == ENUM_DIRECTION_LEFT && disX > 0)) && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disY) <= sq_Abs(disX) / 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("disX = "+disX+",disY = "+disY+",test1"); + break; + case 2: + if(((direction == ENUM_DIRECTION_RIGHT && disX > 0) || (direction == ENUM_DIRECTION_LEFT && disX < 0)) && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disY) <= sq_Abs(disX) / 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("disX = "+disX+",disY = "+disY+",test2"); + break; + case 3: + if(disY < 0 && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disX) <= sq_Abs(disY) * 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("test3"); + break; + case 4: + if(disY > 0 && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disX) <= sq_Abs(disY) * 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("test4"); + break; + } + local isSilver = obj.getVar("MultiHeadShot").getInt(0); + if(isSilver > 0){ + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,isSilver,group,uniqueId,0,0,0,0,0); + } + } + } + return true; +} + +function onTimeEvent_MultiHeadShot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_MultiHeadShot(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_MultiHeadShot(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 3: + case 4: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local aniPath = "character/gunner/effect/animation/headshotmonsterdown.ani"; + createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(damager),sq_GetYPos(damager),sq_GetCenterZPos(boundingBox),ENUM_DRAWLAYER_NORMAL); + } + break; + } +} + + +//双鹰回旋 +function checkExecutableSkill_DoubleGunhawk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DOUBLEGUNHAWK); + if (isUse){ + obj.getVar("DoubleGunhawk_Phase").setInt(0, 1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DoubleGunhawk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DoubleGunhawk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ATANI_BYKK_DOUBLEGUNHAWKTHROW); + switch(obj.getVar("DoubleGunhawk_Phase").getInt(0)){ + case 1: obj.sq_PlaySound("FG_DGUNHAWK_FIRST"); break; + case 2: obj.sq_PlaySound("FG_DGUNHAWK_SEC"); break; + case 3: obj.sq_PlaySound("FG_DGUNHAWK_THIRD"); break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0){ + switch(obj.getVar("DoubleGunhawk_Phase").getInt(0)){ + case 1: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0); + break; + case 2: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk2.ani"), 0, 0); + break; + case 3: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk3.ani"), 0, 0); + break; + } + } + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/doublegunhawk/throw.ani", 0, 0, -35); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_DOUBLEGUNHAWKCATCH); + obj.getVar("DoubleGunhawk_Bool").setBool(0, true); + if(obj.isMyControlObject()) sq_flashScreen(obj,80,30,50,205, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + obj.setTimeEvent(1, 80, 1, false); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_DoubleGunhawk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DoubleGunhawk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(obj.getVar("DoubleGunhawk_Bool").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("DoubleGunhawk_Bool").setBool(0, false); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + } + } + obj.setSkillCommandEnable(SKILL_BYKK_DOUBLEGUNHAWK, true); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DOUBLEGUNHAWK); + if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_DoubleGunhawk(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("GUNHAWK_SHOT"); + obj.sq_PlaySound("GUNHAWK_GUN"); + local phase = obj.getVar("DoubleGunhawk_Phase").getInt(0); + local isSaw = 0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0){ + isSaw = 1; + switch(phase){ + case 1: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_01");obj.sq_PlaySound("GUNHAWK_12"); break; + case 2: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_02");obj.sq_PlaySound("GUNHAWK_12"); break; + case 3: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_03");obj.sq_PlaySound("GUNHAWK_3"); break; + } + } + local sub = 0; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 1; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 0, 1.0) + 100; + if(phase == 1){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 1, 1.0) + 100;} + else if(phase == 2){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 2, 1.0) + 100;} + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 4, 1.0) + 100; + + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,70,10,105,sq_GetDirection(obj),1,SKILL_BYKK_DOUBLEGUNHAWK,1,totalDamage,sizeRate,sub,isSaw,phase,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,70,-10,85,sq_GetDirection(obj),1,SKILL_BYKK_DOUBLEGUNHAWK,1,totalDamage,sizeRate,sub,isSaw,phase,1,0,0); + break; + } + return true; +} + +function onTimeEvent_DoubleGunhawk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(2, 10, 10, true); + sq_SetMyShake(obj, 10, 100); + break; + case 2: + local v = sq_GetAccel(0, 10, timeEventCount, 10, true); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), -v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_DoubleGunhawk(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_DOUBLEGUNHAWK){ + sq_SimpleMoveToNearMovablePos(obj,200); + } +} + + +//血腥狂欢 +function checkExecutableSkill_BloodyCarnival(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLOODYCARNIVAL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BloodyCarnival(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BloodyCarnival(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(91); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishstart1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishstart2.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL); + local minCount = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 3, skillLevel); + local maxCount = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 4, skillLevel); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 5, skillLevel); + obj.getVar("BloodyCarnival").setInt(0, minCount); + obj.getVar("BloodyCarnival").setInt(1, maxCount); + obj.getVar("BloodyCarnival").setInt(2, hitMax); + obj.getVar("BloodyCarnival").setInt(3, 0); + obj.getVar("BloodyCarnival").setInt(4, sq_GetXPos(obj)); + obj.getVar("BloodyCarnival_Bool").setBool(0, true); + obj.getVar("BloodyCarnival_Bool").setBool(1, false); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) sq_SendMessage(obj, 0, 1, 0); + break; + case 1: + obj.sq_SetCurrentAnimation(92); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid3.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid4.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid5.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect1.ani"), 100, -150); + obj.sq_AddStateLayerAnimation(7,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect2.ani"), 100, -150); + obj.sq_AddStateLayerAnimation(8,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect3.ani"), 100, -150); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 3) bonusRate = bonusRate + 0.1; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) bonusRate = bonusRate + 0.1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODYCARNIVAL, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADEFINISHRAPID)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delay / (obj.getVar("BloodyCarnival").getInt(2) + 1), obj.getVar("BloodyCarnival").getInt(2), true); + sq_SetMyShake(obj, 1, delay); + break; + case 2: + obj.sq_SetCurrentAnimation(93); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal3.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal4.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal5.ani"), 0, 0); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 6, 20); + sq_SetFrameDelayTime(currentAni, 7, 20); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_flashScreen(obj,20,150,120,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local bonusRate = 1.0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 6) bonusRate = bonusRate + 0.1; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) bonusRate = bonusRate + 0.1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODYCARNIVAL, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADEFINISHFINAL)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + obj.setTimeEvent(1, delay, 1, false); + obj.stopSound(2000); + obj.stopSound(2001); + obj.sq_PlaySound("FG_TWINGUN_SWORD_FIN"); + break; + } +} + +function onEndCurrentAni_BloodyCarnival(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_PlaySound("R_FG_TWINGUN_SWORD", 2000); + obj.sq_PlaySound("TWINGUN_SWORD", 2001); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(obj.getRapidInputFrequency() > 0){ + if(obj.getVar("BloodyCarnival").getInt(3) + 1 >= obj.getVar("BloodyCarnival").getInt(2)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); + break; + } + else{ + obj.getVar("BloodyCarnival").setInt(3, obj.getVar("BloodyCarnival").getInt(3) + 1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); + break; + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); + break; + } + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BloodyCarnival(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(obj.getVar("BloodyCarnival_Bool").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + obj.getVar("BloodyCarnival_Bool").setBool(0, false); + obj.getVar("BloodyCarnival_Bool").setBool(1, true); + } + } + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_BloodyCarnival(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 301: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 2); + obj.getVar("BloodyCarnival").setInt(4, sq_GetXPos(obj)); + obj.setTimeEvent(1, delay / 10, 10, true); + break; + } + return true; +} + +function onTimeEvent_BloodyCarnival(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + sq_SetMyShake(obj, 10, 300); + local aniPath = "character/gunner/effect/animation/attwingunblade/finishfinaleffect.ani"; + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,130,130); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,-130,130); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,130,-130); + createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,-130,-130); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 3); + obj.setTimeEvent(2, delay / 10, 10, true); + break; + case 2: + local MoveX = 50; + if(obj.getVar("BloodyCarnival_Bool").getBool(1)) MoveX = 150; + local v = sq_GetAccel(0, MoveX, timeEventCount, 10, true); + local dstX = sq_GetDistancePos(obj.getVar("BloodyCarnival").getInt(4), obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_BloodyCarnival(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BLOODYCARNIVAL){ + sq_SendMessage(obj, 0, 0, 0); + } +} + + +//鲜血劫击 +function checkExecutableSkill_AirRaidEx(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AIRRAIDEX); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){ + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_AirRaidEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_AirRaidEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEUP); break;//225 100 + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEDOWN); break; + case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEBACKSTEP_TALISMAN);obj.sq_PlaySound("R_FG_SONIC_SPIKE"); break; + case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEDOWN_TALISMAN); break; + case 12: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKELANDING_TALISMAN); break; + } + local speed = 1.0; + if(subState >= 10) speed = 1.5; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + switch(subState){ + case 0: + obj.getVar("AirRaidEx_Bool").setBool(0, false); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(1, delay / 50, 35, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_AIRRAIDEX)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 7); + obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(2, delay / 50, 35, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 12, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_ATAIRRAID)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 10: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(3, delay / 20, 20, true); + obj.sq_SetXScroll(0, delay, 0, 0); + break; + case 11: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(4, delay / 35, 35, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 2, 2.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_ATAIRRAID)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_AirRaidEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("AirRaidEx_Bool").getBool(0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_AUTO, true); + break; + } + sq_SimpleMoveToNearMovablePos(obj, 225); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + case 10: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 12: + sq_SimpleMoveToNearMovablePos(obj, 225); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_AirRaidEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("AirRaidEx_Bool").getBool(0)) break; + obj.setSkillCommandEnable(SKILL_BYKK_AIRRAIDEX, true); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAIDEX); + if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.getVar("AirRaidEx_Bool").setBool(0, true); + } + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_AirRaidEx(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_AirRaidEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vx = sq_GetAccel(0, 225, timeEventCount, 35, true); + local vz = sq_GetAccel(0, 100, timeEventCount, 35, true); + local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaidEx_move").getInt(1) + vz); + break; + case 2: + local vz = sq_GetAccel(obj.getVar("airRaidEx_move").getInt(1), 0, timeEventCount, 35, false); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + local vx = sq_GetUniformVelocity(0, -75, timeEventCount, 15); + local vz = sq_GetUniformVelocity(0, 100, timeEventCount, 15); + local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaidEx_move").getInt(1) + vz); + break; + case 4: + local vx = sq_GetUniformVelocity(0, 75 + 100, timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("airRaidEx_move").getInt(1), 0, timeEventCount, 30); + local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_AirRaidEx(obj, new_state) +{ + if(!obj) return; +} + + +//压制射击 +function checkExecutableSkill_SuppressingFire(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUPPRESSINGFIRE); + if (isUse){ + obj.getVar("SuppressingFireTar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SuppressingFire(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SuppressingFire(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_START_BODY);obj.sq_PlaySound("R_FG_SPGUN"); break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_LOOP_BODY); break; + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_FINISH_BODY); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("SuppressingFireSet").setInt(0, speedRate); + } + else if(subState == 1){ + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7); + local hitTime_min = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 2) * 100 / obj.getVar("SuppressingFireSet").getInt(0); + local hitTime_max = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 3) * 100 / obj.getVar("SuppressingFireSet").getInt(0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUPPRESSINGFIRE, -1, 0, 1.0) + 100; + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local istalisman = 0; + if(sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 14) > 0){ + istalisman = 1; + local damage = totalDamage * 37 / 100; + local hitMax = 10; + sizeRate = sizeRate * 130 / 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,3,totalDamage,sizeRate,hitTime_min,hitTime_max,speedRate,hitMax,0,0); + local appendage = sq_AttractToMe(obj, 250, 350 * speedRate / 100, 100); + obj.getVar("SuppressingFire").setAppendage(0,appendage); + } + print("totalDamage = "+totalDamage); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,1,totalDamage,sizeRate,hitTime_min,hitTime_max,speedRate,0,0,0); + } + else if(subState == 2){ + local speedRate = obj.getVar("SuppressingFireSet").getInt(0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7); + local aniPath = ["character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/front/suppressingfire_finish_front.ani", "character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/back/suppressingfire_finish_back.ani", "character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/dust/suppressingfire_finish_dust01.ani"]; + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj) + 1, zPos = -30; + if(sizeRate > 100) zPos = 100 - sizeRate * 120 / 100; + local pooledObj1 = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath[0],true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + local pooledObj2 = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[1],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); + local pooledObj3 = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[2],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); + local pooledObj = [pooledObj1,pooledObj2,pooledObj3]; + for(local i = 0; i < 3; i++){ + local pAni = pooledObj[i].getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + } +} + +function onEndCurrentAni_SuppressingFire(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SuppressingFire(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 1) * 100 / obj.getVar("SuppressingFireSet").getInt(0); + if(stateTime >= lifeTime){ + print("stateTime = "+stateTime+",,lifeTime = "+lifeTime); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_AUTO, true); + } + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + + obj.setSkillCommandEnable(SKILL_BYKK_SUPPRESSINGFIRE, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_SUPPRESSINGFIRE); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1) obj.addRapidInput(); + break; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_SuppressingFire(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_SetMyShake(obj, 5, 200); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUPPRESSINGFIRE, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7); + if(sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 14) > 0){ + sizeRate = sizeRate * 130 / 100; + totalDamage = totalDamage * 130 / 100; + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,2,totalDamage,sizeRate,0,0,0,0,0,0); + } + return true; +} + +function onTimeEvent_SuppressingFire(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SuppressingFire(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SUPPRESSINGFIRE){ + local appendage = obj.getVar("SuppressingFire").getAppendage(0); + if(appendage) appendage.setValid(false); + } +} + + + +//死亡锁链 +function checkExecutableSkill_KillPoint(obj) +{ + if (!obj) return false; + if(obj.getVar("KillPoint_Bool").getBool(0)){ + obj.getVar("KillPoint_Bool").setBool(0, false); + obj.sq_IntVectClear(); + if(obj.getWeaponSubType() == 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_KILLPOINT); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 13) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_KillPoint(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_KillPoint(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTREADY_BODY); + obj.getVar("KillPoint_Bool").setBool(0, false); + obj.sq_PlaySound("FG_KILL_POINT_01"); + obj.sq_PlaySound("KILL_POINT_BLADE_THROW"); + break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTFINISHE_BODY);obj.sq_PlaySound("FG_KILL_POINT_03"); break; + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTFINISHD_BODY);obj.sq_PlaySound("FG_KILL_POINT_03"); break; + case 10: + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANREADY_REVOLER_BODY); + else obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANREADY_NON_REVOLER_BODY); + break; + case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANFINISH_BODY); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0 || subState == 10){ + obj.getVar("KillPointTar_boss").clear_obj_vector(); + obj.getVar("KillPointTar_named").clear_obj_vector(); + obj.getVar("KillPointTar_normal").clear_obj_vector(); + obj.getVar("KillPointTar").clear_obj_vector(); + obj.getVar("KillPointTar_Shoot").clear_obj_vector(); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 14); + local rangeX = 400 * sizeRate / 100, rangeY = 150 * sizeRate / 100; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && IsFrontOf(obj,object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + obj.getVar("KillPointTar_boss").push_obj_vector(activeObj); + continue; + } + else if(sq_IsNamed(activeObj)){ + obj.getVar("KillPointTar_named").push_obj_vector(activeObj); + continue; + } + else{ + obj.getVar("KillPointTar_normal").push_obj_vector(activeObj); + continue; + } + } + } + local bossSize = obj.getVar("KillPointTar_boss").get_obj_vector_size(); + local namedSize = obj.getVar("KillPointTar_named").get_obj_vector_size(); + local normalSize = obj.getVar("KillPointTar_normal").get_obj_vector_size(); + if(bossSize > 0){ + for(local i = 0; i < bossSize; i++){ + local targetObj = obj.getVar("KillPointTar_boss").get_obj_vector(i); + if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj); + } + } + if(namedSize > 0){ + for(local i = 0; i < namedSize; i++){ + local targetObj = obj.getVar("KillPointTar_named").get_obj_vector(i); + if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj); + } + } + if(normalSize > 0){ + for(local i = 0; i < normalSize; i++){ + local targetObj = obj.getVar("KillPointTar_normal").get_obj_vector(i); + if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj); + } + } + } + else{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 7, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subState < 10) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atkillpoint/finish/killpointfinishd_bullet_c.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atkillpoint/talisman/killpointtalismanfinish_bullet_c.ani"), 0, 0); + } +} + +function onEndCurrentAni_KillPoint(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_AUTO, true); + break; + case 0: + case 1: + case 2: + case 11: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_KillPoint(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_KillPoint(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 106: + case 1011: + //`throw chain` 49 0 83 + local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); + local holdTime = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 2); + local direction = sq_GetDirection(obj); + local size = obj.getVar("KillPointTar").get_obj_vector_size(); + if(size < createMax) createMax = size; + for(local i = 0; i < createMax; i++){ + local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + obj.getVar("KillPointTar_Shoot").push_obj_vector(activeObj); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,49,0,83,direction,1,SKILL_BYKK_KILLPOINT,1,group,uniqueId,holdTime,0,0,0,0,0); + } + } + break; + case 205: + case 2000: + //`attack` + local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); + local size = obj.getVar("KillPointTar").get_obj_vector_size(); + if(size < createMax) createMax = size; + for(local i = 0; i < createMax; i++){ + local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + sq_AddDrawOnlyAniFromParent(targetObj, "character/gunner/effect/animation/1_ranger/atkillpoint/hiteffect/hiteffect_1.ani", 0, 0, sq_GetObjectHeight(targetObj) / 2); + } + } + break; + case 224: + //`finish Last Attack` + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 8, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISHLASTSHOT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //`release Finish hold` + local apdPath = "character/atgunner/1_ranger_bykk/ap_killpoint.nut"; + local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); + local size = obj.getVar("KillPointTar").get_obj_vector_size(); + if(size < createMax) createMax = size; + for(local i = 0; i < createMax; i++){ + local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, apdPath); + } + } + break; + case 1000: + obj.sq_PlaySound("FG_KILL_POINT_02"); + obj.sq_PlaySound("KILL_POINT_BULLET"); + break; + case 1005: + obj.sq_PlaySound("FG_KILL_POINT_01"); + obj.sq_PlaySound("KILL_POINT_BLADE_THROW"); + break; + case 2021: + //`finish Last Attack` + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 8, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISHLASTSHOT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //`release Finish hold` + local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); + local size = obj.getVar("KillPointTar").get_obj_vector_size(); + if(size < createMax) createMax = size; + for(local i = 0; i < createMax; i++){ + local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + break; + } + return true; +} + +function onTimeEvent_KillPoint(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_KillPoint(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_KILLPOINT){ + if(obj.getSkillSubState() >= 10) obj.getVar("KillPoint_Bool").setBool(0, false); + } +} + + +//锁链切割 +function checkExecutableSkill_ChainDevider(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAINDEVIDER); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_CHAINDEVIDER, 3) > 0){ + obj.getVar("ChainDeviderTar").clear_obj_vector(); + obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ChainDevider(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ChainDevider(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local attackIndex = 0; + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER01_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER1; break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER02_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER2; break; + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER03_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER3; break; + case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER01_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN1; break; + case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER02_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN2; break; + case 12: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER03_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN3; break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonus = subState; + if(subState >= 10) bonus = subState - 10; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINDEVIDER, -1, bonus, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onEndCurrentAni_ChainDevider(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 10: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ChainDevider(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_ChainDevider(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("CHAINDEVIDER_03"); + obj.sq_PlaySound("FG_TWINGUN_SWORD_03"); + sq_flashScreen(obj,0,0,400,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 100); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(2, 8); + obj.setTimeEvent(1, delay / 10, 10, true); + break; + } + return true; +} + +function onTimeEvent_ChainDevider(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local size = obj.getVar("ChainDeviderTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ChainDeviderTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local baseY = sq_GetYPos(obj), tarY = sq_GetYPos(targetObj); + if(baseY < tarY) sq_setCurrentAxisPos(targetObj, 1, tarY - sq_Abs(baseY - tarY) / 10 - 1); + else sq_setCurrentAxisPos(targetObj, 1, tarY + sq_Abs(baseY - tarY) / 10 + 1); + } + } + } + break; + } +} + +function onEndState_ChainDevider(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_ChainDevider(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState >= 10){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("ChainDeviderTar").is_obj_vector(damager)) obj.getVar("ChainDeviderTar").push_obj_vector(damager); + } + } +} + +//血舞祭 +function checkExecutableSkill_BloodnChain(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLOODNCHAIN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLOODNCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BloodnChain(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BloodnChain(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODNCHAIN_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_BLOODNCHAINHOLDATTACK)); + obj.getVar("BloodnChainTar").clear_obj_vector(); + local currentAni = obj.getCurrentAnimation(); + obj.sq_SetXScrollStart(400, currentAni.getDelaySum(0,5)); + break; + } +} + +function onEndCurrentAni_BloodnChain(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BloodnChain(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_BloodnChain(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 103: sq_SetMyShake(obj, 2, 100); break; + case 105: sq_SetMyShake(obj, 7, 200); break; + case 114: + obj.sq_PlaySound("FG_BLOODCHAIN_02"); + obj.sq_PlaySound("BLOODCHAIN_DASH_01"); + break; + case 116: + sq_flashScreen(obj,50,100,150,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 300); + break; + case 118: + sq_SetMyShake(obj, 2, 100); + //`hold pos pass` 150 0 0 + break; + case 119: + //`hold gather pos pass` 265 -20 0 + local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(19, 20); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); + if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 265, -20, targetObj.getZPos(), delay, true, addAppendage); + } + } + } + break; + case 123: sq_SetMyShake(obj, 10, 200); break; + case 124: + //`hold pos pull` 355 -20 0 + local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(24, 24); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); + if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 355, -20, targetObj.getZPos(), delay, true, addAppendage); + } + } + } + break; + case 126: + local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); + if(size > 0){ + local direction = sq_GetDirection(obj); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && sq_IsFixture(targetObj)){ + sq_SetCurrentDirection(targetObj, direction); + } + } + } + break; + case 127: + sq_flashScreen(obj,50,100,50,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 150); + break; + case 130: + sq_SetMyShake(obj, 5, 50); + //`turn pos pull` 150 -10 0 + local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); + if(size > 0){ + local direction = sq_GetDirection(obj); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(30, 31); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(direction)); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); + if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 150, -10, targetObj.getZPos(), delay, true, addAppendage); + } + } + } + break; + case 133: sq_flashScreen(obj,500,500,1000,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 136: + sq_flashScreen(obj,50,50,150,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 500); + obj.sq_SetXScrollStop(500); + //`finish` 106 0 91 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODNCHAIN, -1, 1, 1.0) + 100; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,106,0,91,sq_GetDirection(obj),1,SKILL_BYKK_BLOODNCHAIN,1,totalDamage,0,0,0,0,0,0,0); + + local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); + } + } + break; + } + return true; +} + +function onTimeEvent_BloodnChain(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BloodnChain(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BLOODNCHAIN){ + local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); + } + } + obj.sq_SetXScrollStop(0); + } +} + +function onAttack_BloodnChain(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local apdPath = "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("BloodnChainTar").is_obj_vector(damager)){ + obj.getVar("BloodnChainTar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + if(sq_GetCurrentFrameIndex(obj) >= 36) sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodfinishhitattach_1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + else sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodhitattach_1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + } +} + + +//毁灭风暴 +function checkExecutableSkill_RuinationArea(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RUINATIONAREA); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_RUINATIONAREA, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_RuinationArea(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_RuinationArea(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST2_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_02"); break; + case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST3_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_03"); break; + case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST1_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_01"); break; + case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST2_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_02"); break; + case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST3_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_03"); break; + case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST4_BODY); break; + } + local speed = 1.0; + if(obj.getRapidInputFrequency() > 0) speed = 1.2; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + + local currentAni = obj.getCurrentAnimation(); + switch(subState){ + case 0: + obj.sq_PlaySound("R_FG_RUINATION_AREA_01"); + if(obj.isMyControlObject()) sq_flashScreen(obj,40,0,40,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 1, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.03) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 6); + local speedRate = 3400 / currentAni.getDelaySum(0, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,1,totalDamage,hitMax,speedRate,0,0,0,0,0); + break; + case 1: + if(obj.isMyControlObject()) sq_flashScreen(obj,50,0,50,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 4, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.06) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 8); + local speedRate = 2700 / currentAni.getDelaySum(0, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,2,totalDamage,hitMax,speedRate,0,0,0,0,0); + break; + case 2: + if(obj.isMyControlObject()) sq_flashScreen(obj,60,0,60,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.09) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 4); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,3,totalDamage,hitMax,speedRate,0,0,0,0,0); + break; + case 3: + if(obj.isMyControlObject()) sq_flashScreen(obj,40,0,40,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 1, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.12) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 6); + local speedRate = 3400 / currentAni.getDelaySum(0, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,4,totalDamage,hitMax,speedRate,0,0,0,0,0); + break; + case 4: + if(obj.isMyControlObject()) sq_flashScreen(obj,50,0,50,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 4, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.15) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 8); + local speedRate = 2700 / currentAni.getDelaySum(0, 0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,5,totalDamage,hitMax,speedRate,0,0,0,0,0); + break; + case 5: + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + local delay1 = 30000 / speedRate, delay2 = 50000 / speedRate, delay3 = 40000 / speedRate; + obj.sq_PlaySound("R_FG_RUINATION_AREA_02"); + obj.sq_PlaySound("RUINATION_AREA_EXP"); + sq_flashScreen(obj,0,delay1,delay2,255, sq_RGB(139,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 15, delay3); + local totalDamage_Exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 1, 1.0) + 100; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 2, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 10); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,6,totalDamage_Exp,speedRate,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,7,totalDamage,hitMax,speedRate,0,0,0,0,0); + break; + } +} + +function onEndCurrentAni_RuinationArea(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_RUINATIONAREA, STATE_PRIORITY_AUTO, true); + break; + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_RuinationArea(obj) +{ + if(!obj) return; + obj.setSkillCommandEnable(SKILL_BYKK_RUINATIONAREA,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_RUINATIONAREA); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); +} + +function onKeyFrameFlag_RuinationArea(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_RuinationArea(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_RuinationArea(obj, new_state) +{ + if(!obj) return; +} + + + + +///////////////////////////////////////////////////////////////4spitfire + +function isApplyConversionSkillPassiveObject_ATGunner(passiveObjectIndex) +{ + if(passiveObjectIndex == 24396){ + return true; + } + return false; +} + + +function proc_appendage_common_debuff(appendage) +{ + if(!appendage) return; +} + +function onStartDungeon_4SpitFire_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADENONE); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADEWATER); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADELIGHT); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_NITROMOTOR); + + for(local i = 0; i < 3; i++){ + local timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); + if(!timer){ + obj.getVar("grenade"+i.tostring()).clear_ct_vector(); + obj.getVar("grenade"+i.tostring()).push_ct_vector(); + timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){ + obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADENONE, 0); + obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADELIGHT, 0); + obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADEWATER, 0); + obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADENONE, false); + obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADELIGHT, false); + obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADEWATER, false); + } + } + setSkillBonusRate_At4SpitFire_bykk(obj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(100); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_USER, true); +} + +function reset_atSpitFire_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADENONE); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADEWATER); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADELIGHT); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_NITROMOTOR); + + for(local i = 0; i < 3; i++){ + local timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); + if(!timer){ + obj.getVar("grenade"+i.tostring()).clear_ct_vector(); + obj.getVar("grenade"+i.tostring()).push_ct_vector(); + timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + else{ + timer.Reset(); + timer.Start(10000,0); + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){ + obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADENONE, 0); + obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADELIGHT, 0); + obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADEWATER, 0); + obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADENONE, false); + obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADELIGHT, false); + obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADEWATER, false); + } + } + setSkillBonusRate_At4SpitFire_bykk(obj); +} + +function ProcPassiveSkill_ATGunner_SpitFire(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_BYKK_NITROMOTOR: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ATSPITFIRE_NITROMOTOR, true); + } + break; + } +} + +function procSkill_ATGunner_4SpitFire_bykk(obj)//2 4 +{ + if(!obj) return; + if(!sq_IsMyControlObject(obj)) return; + local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT]; + local iconIndex = [0,2,4]; + local coolTime = [1000, 2000, 1200]; + local adjust = sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 16); + local airCoolTime = 500 * (100 - adjust) / 100; + for(local i = 0; i < 3; i++){ + if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){ + local timer = obj.getVar("grenade"+(i).tostring()).get_ct_vector(0); + local currentT = timer.Get(); + // if(i == 0) print("currentT = "+currentT); + local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]); + if(loadSlot){ + obj.setSkillCommandEnable(skillIndex[i], false); + local loadNumber = loadSlot.getRemainLoadNumber(); + if(!loadSlot.isCooling()){ + local loadMax = sq_GetIntData(obj, skillIndex[i], 0); + if(loadNumber < loadMax){ + loadSlot.increaseLoadCount(1); + if(loadNumber + 1 != loadMax) loadSlot.setStartCool(); + } + } + if(loadNumber > 0){ + local sqrState = obj.getState(); + if(sqrState == 0 || sqrState == 8 || sqrState == 14 || sqrState == 6 || sqrState == 7 || sqrState == STATE_BYKK_GRENADELIGHT || sqrState == STATE_BYKK_STANDBYREADY){ + local loadSlotNit = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlotNit && loadSlotNit.getRemainLoadNumber() == 0) return; + if((sq_GetZPos(obj) < 1 && currentT >= 3000) || (sq_GetZPos(obj) > 0 && currentT >= airCoolTime)){ + obj.setSkillCommandEnable(skillIndex[i],true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(skillIndex[i]); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + if(loadNumber > 1) loadSlot.decreaseLoadCount(1); + if(loadNumber == 3) loadSlot.setStartCool(); + } + else{ + loadSlot.decreaseLoadCount(1); + if(loadNumber == 3) loadSlot.setStartCool(); + timer.Reset(); + timer.Start(10000,0); + } + } + } + } + } + } + else{ + local loadMax = sq_GetIntData(obj, skillIndex[i], 0); + obj.sq_AddSkillLoad(skillIndex[i], iconIndex[i], loadMax, coolTime[i]); + //print("skillIndex = "+skillIndex[i]); + } + } + } + + ////////单兵推进器 icon = 80 + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(!loadSlot){ + local loadMax = sq_GetIntData(obj, SKILL_BYKK_NITROMOTOR, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) loadMax = loadMax + 1; + obj.sq_AddSkillLoad(SKILL_BYKK_NITROMOTOR, 80, loadMax, 0); + } + } + + local state = obj.getState(); + local stateLst = [STATE_SIT, STATE_DAMAGE, STATE_DOWN, STATE_HOLD];//STATE_SIT_FOREVER + for(local i = 0; i < stateLst.len(); i++){ + if(state == stateLst[i]){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectPush(1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) loadSlot.decreaseLoadCount(1); + return; + } + } + } + } +} + +function drawCustomUI_ATGunner_4SpitFire(obj) +{ + if(!obj || sq_isPVPMode()) return; + if(!obj.sq_IsMyControlObject()) return; + + if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADENONE)){ + local sq_var = obj.getVar(); + local uiAni = sq_var.GetAnimationMap("grenadeNoneUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); + sq_AnimationProc(uiAni); + sq_drawCurrentFrame(uiAni, 78, 477, false); + } + if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADELIGHT)){ + local sq_var = obj.getVar(); + local uiAni = sq_var.GetAnimationMap("grenadeLightUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); + sq_AnimationProc(uiAni); + local offsetX = 78; + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135; + sq_drawCurrentFrame(uiAni, offsetX, 477, false); + } + if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADEWATER)){ + local sq_var = obj.getVar(); + local uiAni = sq_var.GetAnimationMap("grenadeWaterUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); + sq_AnimationProc(uiAni); + local offsetX = 78; + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135; + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADELIGHT) > 0) offsetX = 194; + sq_drawCurrentFrame(uiAni, offsetX, 477, false); + } + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + local sq_var = obj.getVar(); + local uiAni = sq_var.GetAnimationMap("standbyreadyUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); + sq_AnimationProc(uiAni); + local offsetX = 78; + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135; + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADELIGHT) > 0) offsetX = 194; + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADEWATER) > 0) offsetX = 252; + sq_drawCurrentFrame(uiAni, offsetX, 477, false); + } +} + +function determineNitromotor_bykk(obj, state)//判断单兵推进器滞空 +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut") && ((state == SKILL_BYKK_GRENADENONE || state == SKILL_BYKK_GRENADELIGHT || state == SKILL_BYKK_GRENADEWATER) && sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 17) < 1)) loadSlot.decreaseLoadCount(1); + obj.getVar("determineNitromotor").setBool(0, true); + if(state == STATE_BYKK_OPENFIRE) return true; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) { + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_00.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_02.ani"), 0, 0); + } + else obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0); + return true; + } + else return false; + } + else return false; +} + +function nitroMotor_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectPush(1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) loadSlot.decreaseLoadCount(1); + return; + } + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) return; + sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true); + if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true); + return; + } + } +} + +//超负荷装填 +function checkExecutableSkill_OverCharge(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OVERCHARGE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_OVERCHARGE); + obj.sq_IntVectPush(sq_GetCastTime(obj, SKILL_BYKK_OVERCHARGE, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE))); + obj.sq_IntVectPush(500); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(4); + obj.sq_IntVectPush(4); + obj.sq_IntVectPush(1000); + obj.sq_IntVectPush(1000); + obj.sq_IntVectPush(-1); + obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true); + return true; + } + return false; +} + +function checkCommandEnable_OverCharge(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_OverCharge(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("OVERCHARGE_READY"); + obj.sq_PlaySound("FG_DB_REVOLVER_02"); + local elementSelect = obj.sq_GetVectorData(datas, 1);//0fire 1water 2dark 3light + // print("elementSelect = "+elementSelect); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ATSPITFIRE_OVERCHARGE, true); + AddAppendage.setBuffIconImage(116); + AddAppendage.getVar("element").setInt(0, elementSelect); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERCHARGE, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + break; + } +} + +function onEndCurrentAni_OverCharge(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_OverCharge(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_OverCharge(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_OverCharge(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_OverCharge(obj, new_state) +{ + if(!obj) return; +} + +function onProcCon_atgunner_throw(obj) +{ + if(!obj) return; + local skillIndex = obj.getThrowIndex(); + local substate = obj.getSkillSubState(); + obj.setSkillSubState(substate) + if(skillIndex == SKILL_BYKK_OVERCHARGE){ + switch(substate){ + case 0: + sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true);//设置其他按键 + if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_OVERCHARGE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } + } +} + +function onAfterSetState_OverChargeThrow(obj, state, datas, isResetTimer) +{ + if(!obj.isMyControlObject()) return; + local skillIndex = obj.getThrowIndex(); + if(skillIndex == SKILL_BYKK_OVERCHARGE){ + local throwState = obj.getThrowState(); + switch(throwState){ + case 0: + obj.setIsCustomSelectSkill(true); + break; + case 1: + local element = obj.getThrowElement(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(element); + obj.sq_AddSetStatePacket(STATE_BYKK_OVERCHARGE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } +} + + +//特性弹 +function checkExecutableSkill_BulletSpecific(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETSPECIFIC); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_BULLETSPECIFIC); + obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BulletSpecific(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; + return true; +} + +function onSetState_BulletSpecific(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(0); + break; + } +} + +function onEndCurrentAni_BulletSpecific(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BulletSpecific(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BulletSpecific(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_BulletSpecific(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BulletSpecific(obj, new_state) +{ + if(!obj) return; +} + + +//爆裂弹 +function checkExecutableSkill_BulletExplosive(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETEXPLOSIVE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_BULLETEXPLOSIVE); + obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BulletExplosive(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; + return true; +} + +function onSetState_BulletExplosive(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(0); + break; + } +} + +function onEndCurrentAni_BulletExplosive(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BulletExplosive(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BulletExplosive(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_BulletExplosive(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BulletExplosive(obj, new_state) +{ + if(!obj) return; +} + + + +//贯穿弹 +function checkExecutableSkill_BulletPenetrate(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETPENETRATE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_BULLETPENETRATE); + obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BulletPenetrate(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; + return true; +} + +function onSetState_BulletPenetrate(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + local skillIndex = obj.sq_GetVectorData(datas, 1); + obj.getVar("bulletSet").setInt(0, skillIndex); + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local castTime = sq_GetCastTime(obj, skillIndex, skill_level); + sq_StartDrawCastGauge(obj, castTime, true); + local currentAni = obj.getCurrentAnimation(); + if(castTime > 180) castTime = castTime - 180; + sq_SetFrameDelayTime(currentAni, 2, castTime); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + local skillIndex = obj.sq_GetVectorData(datas, 1); + local apdPath = APDPATH_ATSPITFIRE_BULLETPENETRATE; + if(skillIndex == SKILL_BYKK_BULLETEXPLOSIVE) apdPath = APDPATH_ATSPITFIRE_BULLETEXPLOSIVE; + else if(skillIndex == SKILL_BYKK_BULLETSPECIFIC) apdPath = APDPATH_ATSPITFIRE_BULLETSPECIFIC; + local buffIcon = 118; + if(skillIndex == SKILL_BYKK_BULLETEXPLOSIVE) buffIcon = 119; + else if(skillIndex == SKILL_BYKK_BULLETSPECIFIC) buffIcon = 117; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + AddAppendage.setBuffIconImage(buffIcon); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, sq_GetSkillLevel(obj, skillIndex)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + switch(skillIndex){ + case SKILL_BYKK_BULLETEXPLOSIVE: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC); + break; + case SKILL_BYKK_BULLETPENETRATE: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC); + break; + case SKILL_BYKK_BULLETSPECIFIC: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE); + break; + } + break; + } +} + +function onEndCurrentAni_BulletPenetrate(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(obj.getVar("bulletSet").getInt(0)); + obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BulletPenetrate(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BulletPenetrate(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_BulletPenetrate(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BulletPenetrate(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BULLETPENETRATE){ + sq_EndDrawCastGauge(obj); + } +} + + +//交叉射击 +function checkExecutableSkill_CrossShoot(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSSHOOT); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_CrossShoot(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_CrossShoot(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CROSSSHOOT); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/atbody.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gun.ani"), 0, 25); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunbreak.ani"), 0, 25); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/shoot.ani"), 0, 25); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CROSSSHOOTAIR); + obj.sq_PlaySound("R_FG_CROSSM"); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/atbodyair.ani"), -50, -50); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunair.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunbreakair.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/shootair.ani"), 0, 0); + break; + } +} + +function onEndCurrentAni_CrossShoot(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_CrossShoot(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_CrossShoot(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSSHOOT, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_CROSSSHOOT, 3); + local hitStunRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSSHOOT, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CROSSSHOOT, 5); + local elementSelect = 4; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); + elementSelect = addAppendage.getVar("element").getInt(0); + } + local isAir = 0, offsetX = 55, offsetY = 0, offsetZ = 85; + if(obj.getSkillSubState() == 1){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 45;} + else{ + switch(elementSelect){ + case 0: obj.sq_PlaySound("CROSS_SHOT_FIRE"); break; + case 1: obj.sq_PlaySound("CROSS_SHOT_ICE"); break; + case 2: obj.sq_PlaySound("CROSS_SHOT"); break; + case 3: obj.sq_PlaySound("CROSS_SHOT_LIGHT"); break; + case 4: obj.sq_PlaySound("CROSS_SHOT"); break; + } + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CROSSSHOOT,1,elementSelect,totalDamage,hitMax,hitStunRate,sizeRate,isAir,0,0); + local aniPath = ["character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_fire.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_ice.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_mu.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_light.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_mu.ani"]; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[elementSelect], 0, 0, 0); + if(elementSelect == 2){ + local pAni = pooledObj.getCurrentAnimation(); + pAni.setRGBA(50, 50, 50, 155); + } + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } + return true; +} + +function onTimeEvent_CrossShoot(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_CrossShoot(obj, new_state) +{ + if(!obj) return; +} + + +//聚合弹 +function checkExecutableSkill_ChargeBuster(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHARGEBUSTER); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHARGEBUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ChargeBuster(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_ChargeBuster(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERCHARGE); + obj.getVar("ChargeBusterBool").setBool(0, true); + obj.getVar("ChargeBusterSet").setInt(0, 0); + obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/1_spin_back_dodge1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/1_spin_back_dodge2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/3_spin_front_dodge1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/3_spin_front_dodge2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge1.ani"), 0, 0); + break; + case 1: + local isDown = obj.getVar("ChargeBusterSet").getInt(0); + if(isDown > 0){ + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTDOWN); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge2_down.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/4_charge_dodge_down.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge_down.ani"), 0, 0); + } + else{ + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOT); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/4_charge_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal_down.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge.ani"), 0, 0); + } + break; + case 10: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTAIR); + obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal_air.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge_air.ani"), 0, 0); + break; + } +} + +function onEndCurrentAni_ChargeBuster(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CHARGEBUSTER, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ChargeBuster(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("ChargeBusterBool").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("ChargeBusterBool").setBool(0, false); + obj.getVar("ChargeBusterSet").setInt(0, 1); + } + } + break; + } +} + +function onKeyFrameFlag_ChargeBuster(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHARGEBUSTER, -1, 0, 1.0); + local elementSelect = 4; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); + elementSelect = addAppendage.getVar("element").getInt(0); + } + local isAir = 0, offsetX = 105, offsetY = 0, offsetZ = 85, isDown = 0; + if(obj.getVar("ChargeBusterSet").getInt(0) > 0){ + offsetX = 115; offsetY = 0; offsetZ = 55;isDown = 1; + } + if(obj.getSkillSubState() == 10){ + isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 35; + } + switch(elementSelect){ + case 0: obj.sq_PlaySound("REVENGE_SHOT_FIRE_CHARGEBUSTER"); break; + case 1: obj.sq_PlaySound("REVENGE_SHOT_ICE_CHARGEBUSTER"); break; + case 2: obj.sq_PlaySound("REVENGE_SHOT_CHARGEBUSTER"); break; + case 3: obj.sq_PlaySound("REVENGE_SHOT_LIGHT_CHARGEBUSTER"); break; + case 4: obj.sq_PlaySound("REVENGE_SHOT_NONE_CHARGEBUSTER"); break; + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CHARGEBUSTER,1,elementSelect,totalDamage,isAir,isDown,0,0,0,0); + obj.sq_PlaySound("KILL_POINT_SHOOT_03"); + break; + } + return true; +} + +function onTimeEvent_ChargeBuster(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ChargeBuster(obj, new_state) +{ + if(!obj) return; +} + + +//凝固汽油弹 +function checkExecutableSkill_NapalmBomb(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NAPALMBOMB); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_NAPALMBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_NapalmBomb(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_NapalmBomb(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTDOWN); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_NAPALMBOMBSHOOTAIR); + break; + } +} + +function onEndCurrentAni_NapalmBomb(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_NapalmBomb(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_NapalmBomb(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + obj.sq_PlaySound("FG_LIGHTSHOT"); + local subState = obj.getSkillSubState(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NAPALMBOMB, -1, 0, 1.0); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 1); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 0); + local totalDamageGround = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NAPALMBOMB, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 2); + if(sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 6) > 0){ + totalDamage = totalDamage * 140 / 100; + sizeRate = sizeRate * 120 / 100; + lifeTime = 0; + } + local elementSelect = 4; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); + elementSelect = addAppendage.getVar("element").getInt(0); + } + local isAir = 0, offsetX = 105, offsetY = 0, offsetZ = 65, isDown = 0; + if(subState == 1){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 35;} + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,1,elementSelect,totalDamage,lifeTime,hitTime,totalDamageGround,sizeRate,0,0); + break; + } + return true; +} + +function onTimeEvent_NapalmBomb(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_NapalmBomb(obj, new_state) +{ + if(!obj) return; +} + + +//C4飞弹 +function checkExecutableSkill_C4(obj) +{ + if (!obj) return false; + local size = obj.getVar("C4AtkObj").get_obj_vector_size(); + if(size > 0 && obj.getVar("C4Bool").getBool(0)){ + obj.getVar("C4Bool").setBool(0, false); + for(local i = 0; i < size; i++){ + local atkObj = obj.getVar("C4AtkObj").get_obj_vector(i); + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + if(colObj.isExistTimeEvent(2)){ + colObj.stopTimeEvent(2); + colObj.setTimeEvent(2, 100, 1, true); + } + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_C4); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_C4, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_C4(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_C4(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_C4REMOTEEXTHROW); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_C4REMOTEEX_AIR); + break; + } +} + +function onEndCurrentAni_C4(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_C4(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_C4(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local range = 600; + obj.getVar("C4AtkObj").clear_obj_vector(); + obj.getVar("C4Tar").clear_obj_vector(); + obj.getVar("C4Tar_Boss").clear_obj_vector(); + obj.getVar("C4Tar_Named").clear_obj_vector(); + obj.getVar("C4Tar_Normal").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(targetObj)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(targetObj)) <= range && IsFrontOf(obj,targetObj)){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(sq_IsBoss(activeObj)) obj.getVar("C4Tar_Boss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("C4Tar_Named").push_obj_vector(activeObj); + else obj.getVar("C4Tar_Normal").push_obj_vector(activeObj); + } + } + local bossNum = obj.getVar("C4Tar_Boss").get_obj_vector_size(); + local namedNum = obj.getVar("C4Tar_Named").get_obj_vector_size(); + local normalNum = obj.getVar("C4Tar_Normal").get_obj_vector_size(); + if(bossNum> 0){ + for(local i = 0; i < bossNum; i++){ + local targetObj = obj.getVar("C4Tar_Boss").get_obj_vector(i); + if(targetObj){ + obj.getVar("C4Tar").push_obj_vector(targetObj); + } + } + } + if(namedNum> 0){ + for(local i = 0; i < namedNum; i++){ + local targetObj = obj.getVar("C4Tar_Named").get_obj_vector(i); + if(targetObj){ + obj.getVar("C4Tar").push_obj_vector(targetObj); + } + } + } + if(normalNum> 0){ + for(local i = 0; i < normalNum; i++){ + local targetObj = obj.getVar("C4Tar_Normal").get_obj_vector(i); + if(targetObj){ + obj.getVar("C4Tar").push_obj_vector(targetObj); + } + } + } + local targetNum = obj.getVar("C4Tar").get_obj_vector_size(); + if(targetNum > 0){ + obj.getVar("C4Bool").setBool(0, true); + local createMax = sq_GetIntData(obj, SKILL_BYKK_C4, 2); + if(targetNum < createMax) createMax = targetNum; + local offsetX = 65, offsetY = 0, offsetZ = 80, subState = obj.getSkillSubState(); + if(subState == 1){offsetX = 30; offsetY = 0; offsetZ = 55;} + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_C4, -1, 3, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_C4); + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_C4, 2, skillLevel); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_C4, 1); + for(local i = 0; i < createMax; i++){ + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_C4,1,totalDamage,i,lifeTime,speedRate,subState,0,0,0); + } + + } + break; + } + return true; +} + +function onTimeEvent_C4(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_C4(obj, new_state) +{ + if(!obj) return; +} + + +//G-14手雷 +function checkExecutableSkill_GrenadeNone(obj) +{ + if (!obj) return false; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); + if(loadSlot) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRENADENONE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_GRENADENONE); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GrenadeNone(obj) +{ + if (!obj) return false; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); + if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false; + return true; +} + +function onSetState_GrenadeNone(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + local grenadeSkillIndex = obj.sq_GetVectorData(datas, 1); + obj.getVar("grenadeSkillIndex").setInt(0, grenadeSkillIndex); + obj.getVar("grenadeSet").setInt(0, 0); + obj.getVar("grenadeBool").setBool(0, true); + if(grenadeSkillIndex == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atmomentarythrow1_lockon01.ani"), 0, 0); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + if(obj.getVar("grenadeSkillIndex").getInt(0) == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atmomentarythrow2_lockon01.ani"), 0, 0); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_GRENADEAIR); + local grenadeSkillIndex = obj.sq_GetVectorData(datas, 1); + determineNitromotor_bykk(obj, grenadeSkillIndex); + obj.getVar("grenadeSkillIndex").setInt(0, grenadeSkillIndex); + if(grenadeSkillIndex == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atgrenadeair_lockon01.ani"), 0, 0); + break; + case 100: + local ani = obj.sq_GetStayAni(); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); + else obj.getVar("element_kk").setInt(0, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); + else obj.getVar("element_kk").setInt(1, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); + else obj.getVar("element_kk").setInt(2, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); + else obj.getVar("element_kk").setInt(3, 0); + obj.setTimeEvent(1, 50, 1, false); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_GrenadeNone(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zpos = sq_GetZPos(obj) + 30; + // if(zpos > 200) zpos = 0; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zpos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GrenadeNone(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(obj.getVar("grenadeBool").getBool(0) == false) break; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("grenadeSet").setInt(0, 2); + obj.getVar("grenadeBool").setBool(0, false); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("grenadeSet").setInt(0, 1); + obj.getVar("grenadeBool").setBool(0, false); + } + break; + } +} + +function onKeyFrameFlag_GrenadeNone(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0://35 0 75 + case 1://35 0 65 + local skillIndex = obj.getVar("grenadeSkillIndex").getInt(0); + print("skillIndex = "+skillIndex); + local bonusRate = 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ + bonusRate = bonusRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_STRAYBULLETMASTERY, 0, sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY))) / 100; + print("bonusRate22 = "+bonusRate); + } + local exLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GRENADEEX); + if(exLevel > 0) bonusRate = bonusRate * (100 + 10*exLevel) / 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) bonusRate = bonusRate * (100 + sq_GetIntData(obj, SKILL_BYKK_N_02X, 10) / 10) / 100; + print("bonusRate = "+bonusRate); + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, bonusRate); + print("totalDamageGrenade = "+totalDamage); + local sizeRate = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100; + if(exLevel > 0) sizeRate = sizeRate * (100 + 5*exLevel) / 100; + print("sizeRate = "+sizeRate); + local prob = 0, time = 0, level = 0; + if(skillIndex == SKILL_BYKK_GRENADELIGHT){ + prob = 100; + level = sq_GetSkillLevel(obj, 174) + 15; + time = sq_GetLevelData(obj, skillIndex, 4, sq_GetSkillLevel(obj, skillIndex)); + } + else if(skillIndex == SKILL_BYKK_GRENADEWATER){ + prob = sq_GetLevelData(obj, skillIndex, 2, sq_GetSkillLevel(obj, skillIndex)) / 10; + level = sq_GetSkillLevel(obj, 174) + 15; + time = sq_GetLevelData(obj, skillIndex, 4, sq_GetSkillLevel(obj, skillIndex)); + } + local isEx = 0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ + local nowSaveNum = obj.getVar("grenadeExSet").getInt(skillIndex); + if(nowSaveNum < 2){ + obj.getVar("grenadeExSet").setInt(skillIndex, nowSaveNum + 1); + if(nowSaveNum + 1 == 2) obj.getVar("grenadeUiBool").setBool(skillIndex, true); + } + else{ + isEx = 1; + sizeRate = 300; + obj.getVar("grenadeExSet").setInt(skillIndex, 0); + obj.getVar("grenadeUiBool").setBool(skillIndex, false); + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_BYKK_N_02X, 9) / 100; + } + } + local ptlSelect = obj.getVar("grenadeSet").getInt(0); + local offsetZ = 75; + if(flagIndex == 1){offsetZ = 65;ptlSelect = 3;} + if(skillIndex == SKILL_BYKK_LOCKONSUPPORT){ + totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, skillIndex, 0); + local sizeRate = sq_GetIntData(obj, skillIndex, 1); + local prob = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 3, 1.0) + 100; + if(ptlSelect == 1) ptlSelect = 0; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,sizeRate,hitMax,ptlSelect,prob,time,0,0); + break; + } + else if(skillIndex == SKILL_BYKK_GRAVITYGRENADE){ + totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 2, 1.0); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 3, 1.0); + local lifeTime = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, 1.0) + 100; + local hitTime = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, skillIndex, 1); + if(ptlSelect == 1) ptlSelect = 0; + //print("lifeTime = "+lifeTime); + //print("hitTime = "+hitTime); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,totalDamageExp,lifeTime,hitTime,ptlSelect,sizeRate,0,0); + break; + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,sizeRate,isEx,ptlSelect,prob,time,level,0); + if(isEx > 0){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + switch(skillIndex){ + case SKILL_BYKK_GRENADENONE: obj.sq_PlaySound("R_FG_SBR_FIRE"); break; + case SKILL_BYKK_GRENADELIGHT: obj.sq_PlaySound("R_FG_SBR_FLASH"); break; + case SKILL_BYKK_GRENADEWATER: obj.sq_PlaySound("R_FG_SBR_ICE"); break; + } + print("test"); + } + } + else obj.sq_PlaySound("FG_GRENADE"); + break; + } + return true; +} + +function onTimeEvent_GrenadeNone(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0 && sq_GetSkillLevel(obj, 33) > 0){ + sq_clearSkillData(); + sq_setLevelData(obj, 33, 0, 999999, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(33); + obj.sq_AddSetStatePacket(17, STATE_PRIORITY_USER, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_GrenadeNone(obj, new_state) +{ + if(!obj) return; +} + + +//M18阔剑地雷 +function checkExecutableSkill_M18Claymore(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_M18CLAYMORE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_M18CLAYMORE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_M18Claymore(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_M18Claymore(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){ + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_GROUND_NO2X_BODY); + obj.getVar("grenadeBool").setBool(0, false); + obj.getVar("grenadeSet").setInt(0, 0); + } + else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_START_BODY); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIR_NO2X_BODY); + else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIRSTART_BODY); + determineNitromotor_bykk(obj, 0); + break; + } + obj.getVar("M18ClayMoreObj").clear_obj_vector(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_M18Claymore(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zpos = sq_GetZPos(obj) + 30; + // if(zpos > 200) zpos = 0; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zpos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_M18Claymore(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("grenadeBool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("grenadeSet").setInt(0, 2); + obj.getVar("grenadeBool").setBool(0, true); + } + } + break; + } +} + +function onKeyFrameFlag_M18Claymore(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + case 201: + case 102: + case 202: + //print("flagIndex = "+flagIndex); + obj.sq_PlaySound("R_NEO_GRENADE_THROW"); + obj.sq_PlaySound("NEO_M18_DROP"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 3); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 7); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 15); + local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 2, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 3, 1.0) + 100; + local ptlSelect = obj.getVar("grenadeSet").getInt(0); + local offsetX = 50, offsetZ = 0, subtype = 1; + if(flagIndex == 201){offsetX = 35; offsetZ = 35;} + if(flagIndex > 200) { + switch(flagIndex){ + case 201: offsetX = 35; offsetZ = 80; break; + case 202: offsetX = 35; offsetZ = 35; break; + } + subtype = 3; + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_M18CLAYMORE,subtype,totalDamage,hitMax,lifeTime,sizeRate,prob,time,flagIndex,ptlSelect); + break; + } + return true; +} + +function onTimeEvent_M18Claymore(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_M18Claymore(obj, new_state) +{ + if(!obj) return; +} + + +//G-35L感电手雷 +function checkExecutableSkill_GrenadeLight(obj) +{ + if (!obj) return false; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); + if(loadSlot) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GrenadeLight(obj) +{ + if (!obj) return false; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); + if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false; + return true; +} + +function onSetState_GrenadeLight(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0); + local zPos = sq_GetZPos(obj); + local speed = 300; + if(zPos > 100) speed = 200; + if(zPos > 120) speed = 130; + if(zPos > 160) speed = 80; + if(zPos > 220) speed = 30; + sq_SetZVelocity(obj,speed,0); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/side_nitromotor_dodge1.ani"), 0, 0); + local zPos = sq_GetZPos(obj); + local speed = 300; + if(zPos > 100) speed = 200; + if(zPos > 120) speed = 130; + if(zPos > 160) speed = 80; + if(zPos > 220) speed = 30; + sq_SetZVelocity(obj,speed,0); + local speed = 400.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORDOWN); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/down_nitromotor_dodge3.ani"), 0, 0); + sq_SetZVelocity(obj,-1500,0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_GrenadeLight(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GrenadeLight(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + local speed = 600.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + } + else{ + local speed = 400.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + } + case 0: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_AUTO, true); + } + break; + case 2: + if(sq_GetZPos(obj) <= 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } + +} + +function onKeyFrameFlag_GrenadeLight(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_GrenadeLight(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_GrenadeLight(obj, new_state) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(new_state == STATE_STAND){ + if(sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 18) > 0){ + if(new_state == STATE_STAND){ + local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT]; + for(local i = 0; i < 3; i++){ + if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){ + local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + local loadMax = sq_GetIntData(obj, skillIndex[i], 0); + if(loadNumber < loadMax){ + loadSlot.increaseLoadCount(loadMax - loadNumber); + // print("test"+i+" : "+loadSlot.getRemainLoadNumber()); + } + } + } + } + } + } + } + break; + } +} + + +//G-18C冰冻手雷 +function checkExecutableSkill_GrenadeWater(obj) +{ + if (!obj) return false; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); + if(loadSlot) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GrenadeWater(obj) +{ + if (!obj) return false; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER); + if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false; + return true; +} + +function onSetState_GrenadeWater(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(0); + break; + } +} + +function onEndCurrentAni_GrenadeWater(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GrenadeWater(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_GrenadeWater(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_GrenadeWater(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_GrenadeWater(obj, new_state) +{ + if(!obj) return; +} + + +//镭射狙击 +function checkExecutableSkill_LockOnSupport(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LOCKONSUPPORT); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_LOCKONSUPPORT); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_LockOnSupport(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_LockOnSupport(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(0); + break; + } +} + +function onEndCurrentAni_LockOnSupport(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_LockOnSupport(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_LockOnSupport(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_LockOnSupport(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_LockOnSupport(obj, new_state) +{ + if(!obj) return; +} + + +//G-61重力手雷 +function checkExecutableSkill_GravityGrenade(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRAVITYGRENADE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_GRAVITYGRENADE); + obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GravityGrenade(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_GravityGrenade(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(0); + break; + } +} + +function onEndCurrentAni_GravityGrenade(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GravityGrenade(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_GravityGrenade(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_GravityGrenade(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_GravityGrenade(obj, new_state) +{ + if(!obj) return; +} + diff --git a/user/116.205.165.25/1_atgunner_6.c b/user/116.205.165.25/1_atgunner_6.c new file mode 100644 index 0000000..2cdfe87 --- /dev/null +++ b/user/116.205.165.25/1_atgunner_6.c @@ -0,0 +1,1254 @@ + + +//超真空弹 : 切利 +function checkExecutableSkill_Chelli(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHELLI); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHELLI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Chelli(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_Chelli(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATCHELLIGROUND_BODY); + obj.sq_PlaySound("R_FG_CHELLI"); + obj.sq_PlaySound("CHELLI_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATCHELLIAIR_BODY); + obj.sq_PlaySound("R_FG_CHELLI"); + obj.sq_PlaySound("CHELLI_02"); + break; + } + local size = obj.getVar("chelliObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local chelliObj = obj.getVar("chelliObj").get_obj_vector(i); + if(chelliObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj); + local subtype = colObj.getVar("subtype").getInt(0); + if(subtype == 2) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else colObj.setTimeEvent(5, 1000, 1, true); + } + } + } + obj.getVar("chelliObj").clear_obj_vector(); + obj.getVar("chelliTarget").clear_obj_vector(); +} + +function onEndCurrentAni_Chelli(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zPos = sq_GetZPos(obj) + 30; + // if(zPos > 200) zPos = 0; + // else zPos = zPos + 50; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zPos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Chelli(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Chelli(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1://45 0 75 + case 2://50 0 65 + local offsetX = 105, offsetY = 0, offsetZ = 75; + if(flagIndex == 2) {offsetX = 45; offsetY = 0; offsetZ = 65;} + local totalDamage_phase1 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHELLI, -1, 1, 1.0); + local hitMax_phase1 = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 12); + local totalDamage_phase2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHELLI, -1, 2, 1.0); + local hitMax_phase2 = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 14); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHELLI, -1, 0, 1.0); + local grenadeMax = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 15); + local grenadeAddRate = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 8); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CHELLI,1,totalDamage_phase1,hitMax_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,grenadeMax,grenadeAddRate,0); + break; + } + return true; +} + +function onTimeEvent_Chelli(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Chelli(obj, new_state) +{ + if(!obj) return; +} + + +//开火 +function checkExecutableSkill_OpenFire(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OPENFIRE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_OPENFIRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_OpenFire(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_OpenFire(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATOPENFIRECASTING_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetZPos(obj) == 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 2); + obj.setTimeEvent(1, delay / 20, 20, true); + } + else{ + determineNitromotor_bykk(obj, STATE_BYKK_OPENFIRE); + } + break; + } +} + +function onEndCurrentAni_OpenFire(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zPos = sq_GetZPos(obj) + 30; + // if(zPos > 200) zPos = 0; + // else zPos = zPos + 50; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zPos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_OpenFire(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_OpenFire(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local createMax = sq_GetIntData(obj, SKILL_BYKK_OPENFIRE, 7); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPENFIRE, -1, 0, 1.0); + for(local i = 0; i < createMax; i++){ + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35 + sq_getRandom(-5,5),0,65 + sq_getRandom(-5,5),sq_GetDirection(obj),4,SKILL_BYKK_OPENFIRE,sq_getRandom(2,4),0,0,0,0,0,0,0,0); + } + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,300,0,-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_OPENFIRE,1,totalDamage,createMax,0,0,0,0,0,0); + break; + case 2: + local createMax = sq_GetIntData(obj, SKILL_BYKK_OPENFIRE, 7); + for(local i = 0; i < createMax; i++){ + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35 + sq_getRandom(-5,5),0,65 + sq_getRandom(-5,5),sq_GetDirection(obj),4,SKILL_BYKK_OPENFIRE,sq_getRandom(2,4),0,0,0,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_OpenFire(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_OpenFire(obj, new_state) +{ + if(!obj) return; +} + + +//光子霰雷发射器 +function checkExecutableSkill_PhotoBilizer(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PHOTOBILIZER); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PHOTOBILIZER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PhotoBilizer(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_PhotoBilizer(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATPHOTOBILIZER_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetZPos(obj) == 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + obj.setTimeEvent(1, delay / 5, 5, true); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/4_spitfire/atphotobilizer/atphotobilizershoteffect_00.ani", 0, 0, 0); + } + else determineNitromotor_bykk(obj, 0); + obj.sq_PlaySound("RG_FG_PHOTOBILIZER_01"); + obj.sq_PlaySound("PHOTOBILIZER_READY"); + break; + } +} + +function onEndCurrentAni_PhotoBilizer(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zPos = sq_GetZPos(obj) + 30; + // if(zPos > 200) zPos = 0; + // else zPos = zPos + 50; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zPos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PhotoBilizer(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PhotoBilizer(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PHOTOBILIZER, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_PHOTOBILIZER, 16); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,65,sq_GetDirection(obj),4,SKILL_BYKK_PHOTOBILIZER,1,totalDamage,hitMax,0,0,0,0,0,0); + local sqrxPos = sq_GetXPos(obj); + local sqryPos = sq_GetYPos(obj); + local tarxPos = sq_GetDistancePos(sqrxPos, sq_GetDirection(obj), 200); + local taryPos = sqryPos; + local createMax = 10; + local baseAngle = 100; + if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) baseAngle = -80; + for(local i = 0; i < createMax; i++){ + local angle = 180 / createMax * i + baseAngle; + local basexPos = (sq_Cos(sq_ToRadian(angle.tofloat())) * 5.0).tointeger(); + local baseyPos = (sq_Sin(sq_ToRadian(angle.tofloat())) * 5.0).tointeger(); + local movexPos = (sq_Cos(sq_ToRadian(angle.tofloat())) * 75.0).tointeger() + sqrxPos; + local moveyPos = (sq_Sin(sq_ToRadian(angle.tofloat())) * 45.0).tointeger() + sqryPos; + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,basexPos,baseyPos,65,sq_GetDirection(obj),4,SKILL_BYKK_PHOTOBILIZER,4,movexPos,moveyPos,tarxPos,taryPos,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_PhotoBilizer(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 5); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_PhotoBilizer(obj, new_state) +{ + if(!obj) return; +} + + +//EMP磁暴 +function checkExecutableSkill_EmpStorm(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EMPSTORM); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0){ + obj.sq_IntVectPush(2); + } + else{ + obj.sq_IntVectPush(0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_EMPSTORM); + } + obj.sq_AddSetStatePacket(STATE_BYKK_EMPSTORM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_EmpStorm(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_EmpStorm(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delay, true); + obj.sq_PlaySound("FG_EMPSTORM"); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + sq_EndDrawCastGauge(obj); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_EMPSTORMAIR); + obj.sq_PlaySound("FG_EMPSTORM"); + break; + } +} + +function onEndCurrentAni_EmpStorm(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local offsetX = 130; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = 800; + local vY = 300; + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + obj.getVar("empStromBool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_EMPSTORM, STATE_PRIORITY_AUTO, true); + break; + case 1: + // obj.sq_IntVectClear(); + // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zPos = sq_GetZPos(obj) + 30; + // if(zPos > 200) zPos = 0; + // else zPos = zPos + 50; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zPos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_EmpStorm(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local bDownKey = obj.isDownSkillLastKey(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + if((!bDownKey || (bDownKey && stateTime >= 600))){ + if(obj.getVar("empStromBool").getBool(0)){ + obj.getVar("empStromBool").setBool(0, false); + obj.getVar("empStromObj").clear_obj_vector(); + local aimPosX = obj.sq_GetAimPosX(posX, posY, false); + local aimPosY = obj.sq_GetAimPosY(posX, posY, false); + + local ani = sq_CreateAnimation("","passiveobject/actionobject/monster/cartelcommand/animation/gunneraimpointmark2.ani"); + local pooledObj = sq_CreatePooledObject(ani,true);//创建绘画对象 参数2:应该是ani结束时true 就销毁反之false不销毁 + sq_SetCurrentDirection(pooledObj, obj.getDirection());//设置方向 + pooledObj.setCurrentPos(aimPosX,aimPosY,0);//设置pos + pooledObj = sq_SetEnumDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);//设置图层 + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);//增加对象 + + local totalDamage_drop = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 3, 1.0); + local totalDamage_phase1 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 0, 1.0); + local totalDamage_phase2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 1, 1.0); + local hitMax_phase2 = sq_GetIntData(obj, SKILL_BYKK_EMPSTORM, 18); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 2, 1.0); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_BYKK_EMPSTORM); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(totalDamage_drop); + sq_BinaryWriteDword(totalDamage_phase1); + sq_BinaryWriteDword(totalDamage_phase2); + sq_BinaryWriteDword(hitMax_phase2); + sq_BinaryWriteDword(totalDamageExp); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX, aimPosY, 300); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_BYKK_EMPSTORM); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX, aimPosY + 1, 300); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_BYKK_EMPSTORM); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX, aimPosY - 3, 300); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onKeyFrameFlag_EmpStorm(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + local totalDamage_drop = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 3, 1.0); + local totalDamage_phase1 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 0, 1.0); + local totalDamage_phase2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 1, 1.0); + local hitMax_phase2 = sq_GetIntData(obj, SKILL_BYKK_EMPSTORM, 18); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 2, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,0,300-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,1,totalDamage_drop,totalDamage_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,1,300-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,3,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,-3,300-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,4,0,0,0,0,0,0,0,0); + break + } + return true; +} + +function onTimeEvent_EmpStorm(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_EmpStorm(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_EMPSTORM){ + obj.sq_RemoveAimPointMark(); + } +} + + +//决战之日 +function checkExecutableSkill_Dday(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DDAY); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DDAY, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Dday(obj) +{ + if (!obj) return false; + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadNumber > 0) return true; + else return false; + } + else return false; + } + else return false; + } + return true; +} + +function onSetState_Dday(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("FG_D_DAY"); + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_GRENADEAIR); + determineNitromotor_bykk(obj, 0); + obj.sq_PlaySound("FG_D_DAY"); + break; + } +} + +function onEndCurrentAni_Dday(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_DDAY, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + return; + } + local zpos = sq_GetZPos(obj) + 30; + // if(zpos > 200) zpos = 0; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(zpos); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Dday(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Dday(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DDAY, -1, 0, 1.0); + local hitMax = 40; + if(flagIndex == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,75,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,1,totalDamage,hitMax,0,0,0,0,0,0); + else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,65,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,1,totalDamage,hitMax,3,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Dday(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Dday(obj, new_state) +{ + if(!obj) return; +} + + +//空袭战略 +function checkExecutableSkill_StandByReady(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STANDBYREADY); + if (isUse){ + obj.getVar("standbyready").setBool(0, true); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_StandByReady(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_StandByReady(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYJUMP_BODY); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/skl95_bykk/atstandby-ready/smokestartfront_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/skl95_bykk/atstandby-ready/smokestartback_00.ani", 0, -2, 0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 1); + obj.setTimeEvent(1, delay / 10, 10, true); + obj.sq_PlaySound("RG_SBR_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYLOOP_BODY); + local apdPath = "character/atgunner/4_spitfire_bykk/ap_standbyready.nut"; + if(obj.getVar("standbyready").getBool(0)){ + obj.getVar("standbyready").setBool(0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_STANDBYREADY, false, apdPath, true); + local time = sq_GetIntData(obj, SKILL_BYKK_STANDBYREADY, 1); + AddAppendage.sq_SetValidTime(time); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STANDBYREADY, sq_GetSkillLevel(obj, SKILL_BYKK_STANDBYREADY)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYEND_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 3: + obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYRELOOP_BODY); + break; + case 4: + obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIR_NO2X_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("RG_SBR_02"); + break; + case 100: + local ani = obj.sq_GetStayAni(); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); + else obj.getVar("element_kk").setInt(0, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); + else obj.getVar("element_kk").setInt(1, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); + else obj.getVar("element_kk").setInt(2, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); + else obj.getVar("element_kk").setInt(3, 0); + obj.setTimeEvent(10, 50, 1, false); + print("getatkelement_success"); + break; + } +} + +function onEndCurrentAni_StandByReady(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_StandByReady(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 3: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + break; + } + obj.setSkillCommandEnable(SKILL_BYKK_STANDBYREADY,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_STANDBYREADY); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + break; + } + nitroMotor_bykk(obj); + break; + } +} + +function onKeyFrameFlag_StandByReady(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + print("flagIndex = "+flagIndex); + if(obj.getSkillSubState() == 2){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STANDBYREADY, -1, 3, 1.0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,55,0,65,sq_GetDirection(obj),4,SKILL_BYKK_STANDBYREADY,1,totalDamage,0,0,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_StandByReady(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vz = sq_GetUniformVelocity(0, 165, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_StandByReady(obj, new_state) +{ + if(!obj) return; +} + +function onEnd_appendage_at_standbyready(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(parentObj && parentObj.getState() != STATE_DIE){ + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local state = obj.getState(); + if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); + } + } +} + + +function onStart_appendage_at_bulletexplosive(appendage) +{ + if(!appendage) return; +} + +function onStart_appendage_at_bulletpenetrate(appendage) +{ + if(!appendage) return; +} + +function onStart_appendage_at_bulletspecific(appendage) +{ + if(!appendage) return; +} + +function onStart_appendage_at_overcharge(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) return; + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local elementSelect = appendage.getVar("element").getInt(0); + if(elementSelect == 4 && sq_GetSkillLevel(obj, 31) > 0){ + local change_appendage = appendage.sq_getChangeStatus("at_overcharge"); + local attackSpeed = sq_GetLevelData(obj, 31, 9, sq_GetSkillLevel(obj, 31)); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_overcharge",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, attackSpeed.tofloat()); + } + } + setSkillBonusRate_At4SpitFire_bykk(obj); +} + +function setSkillBonusRate_At4SpitFire_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_OVERCHARGE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, 31) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, 31, 7, sq_GetSkillLevel(obj, 31))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFPROOF) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_KEYOFPROOF, 0, sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFPROOF)).tofloat()) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_N_02X, 0, sq_GetSkillLevel(obj, SKILL_BYKK_N_02X))) / 1000; + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function onStart_appendage_at_nitromotor(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local bulletreinforceLevel = sq_GetSkillLevel(obj, 31); + // print("bulletreinforceLevel = "+bulletreinforceLevel); + local weaponexpertLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONEXPERT); + // print("weaponexpertLevel = "+weaponexpertLevel); + local weaponreinforceLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONREINFORCE); + // print("weaponreinforceLevel = "+weaponreinforceLevel); + local criticalHitRate = 0, criticalDamageRate = 0, attackSpeed = 0, attackRate = 0; + if(bulletreinforceLevel > 0){ + criticalHitRate = sq_GetIntData(obj, 31, 2); + criticalDamageRate = sq_GetLevelData(obj, 31, 8, bulletreinforceLevel); + // print("set criticalHitRate = "+criticalHitRate); + // print("set criticalDamageRate = "+criticalDamageRate); + } + if(weaponexpertLevel > 0){ + attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_WEAPONEXPERT, 0, weaponexpertLevel); + attackRate = sq_GetLevelData(obj, SKILL_BYKK_WEAPONEXPERT, 1, weaponexpertLevel); + // print("set attackSpeed = "+attackSpeed); + // print("set attackRate = "+attackRate); + } + if(weaponreinforceLevel > 0){ + appendage.getVar("atkBool").setBool(0, true); + local addDamageRate = sq_GetLevelData(obj, SKILL_BYKK_WEAPONREINFORCE, 0, weaponreinforceLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_WEAPONREINFORCE, 1, weaponreinforceLevel); + appendage.getVar("custom").setInt(0, addDamageRate); + appendage.getVar("custom").setInt(1, time); + // print("set addDamageRate = "+addDamageRate); + // print("set time = "+time); + } + else appendage.getVar("atkBool").setBool(0, false); + local change_appendage = appendage.sq_getChangeStatus("at_nitromotor"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_nitromotor",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + if(bulletreinforceLevel > 0){ + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, criticalDamageRate.tofloat() * 0.1 / 0.667); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, criticalDamageRate.tofloat() * 0.1 / 0.667); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalHitRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalHitRate * 0.1).tofloat()); + } + if(weaponexpertLevel > 0){ + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, attackSpeed.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, (attackRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, (attackRate * 0.1).tofloat()); + } + } +} + +function onAttackParent_appendage_at_nitromotor(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(appendage.getVar("atkBool").getBool(0) == false) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local apdPath = "character/atgunner/4_spitfire_bykk/passiveskill/ap_weaponreinforce_debuff.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + AddAppendage.getVar("custom").setInt(0, appendage.getVar("custom").getInt(0)); + local time = appendage.getVar("custom").getInt(1); + print("setApTime = "+time); + AddAppendage.sq_SetValidTime(time); + AddAppendage.getVar("sqr").clear_obj_vector(); + AddAppendage.getVar("sqr").push_obj_vector(obj); + } + } +} + +function getImmuneTypeDamageRate_appendage_weaponreinforce_debuff(appendage, damageRate, attacker) +{ + if(!appendage) return damageRate; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqr").get_obj_vector(0)); + if(!sqrChr || sqrChr.getState() == STATE_DIE) return damageRate; + if(isSameObject(attacker, sqrChr)){ + local adddamageRate = appendage.getVar("custom").getInt(0) / 10; + return damageRate + adddamageRate; + } + if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(attacker); + local passiveIndex = colObj.getCollisionObjectIndex(); + if(passiveIndex == 24396){ + local job = colObj.getVar("job").getInt(0); + if(job == 4){ + local adddamageRate = appendage.getVar("custom").getInt(0) / 10; + return damageRate + adddamageRate; + } + } + } + return damageRate; +} + +function drawAppend_appendage_weaponreinforce_debuff(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local obj = appendage.getParent(); + if (!obj) { + appendage.setValid(false); + return; + } + local var = appendage.getVar(); + local Ani = var.GetAnimationMap("emp_lightning", "character/gunner/effect/animation/empstorm/effect_emp_lightning.ani"); + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y, isFlip); +} + +function onDamageParent_appendage_weaponreinforce_debuff(appendage ,attacker, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqr").get_obj_vector(0)); + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(isSameObject(attacker, sqrChr)){ + sq_AddDrawOnlyAniFromParent(parentObj, "character/gunner/effect/animation/empstorm/effect_emp_lightning_hit.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + } + if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(attacker); + local passiveIndex = colObj.getCollisionObjectIndex(); + if(passiveIndex == 24396){ + local job = colObj.getVar("job").getInt(0); + if(job == 4){ + sq_AddDrawOnlyAniFromParent(parentObj, "character/gunner/effect/animation/empstorm/effect_emp_lightning_hit.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + } + } + } +} + +function startSkillCoolTime_atgunner_4spitfire_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONEXPERT); + if(skillLevel > 0){ + if(skillIndex == 33){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ + return 5000; + } + } + else{ + local coolTimeRate = sq_GetLevelData(obj, SKILL_BYKK_WEAPONEXPERT, 4, skillLevel) / 10; + print("coolTimeRate = "+coolTimeRate); + local newCoolTime = currentCoolTime * (100 - coolTimeRate) / 100; + return newCoolTime; + } + } + else return currentCoolTime; +} + + +//3--------------------------------------------------- + +//超时空光耀加农炮 +function checkExecutableSkill_HyperFlare(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HYPERFLARE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HYPERFLARE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HyperFlare(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HyperFlare(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATANI_BYKK_HYPERFLARE1ATTACK_BODY); + obj.getVar("hyperFlareObj").clear_obj_vector(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HYPERFLARE, -1, 0, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HYPERFLARE, -1, 1, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 0); + local hitMax2 = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 2); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 1); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,-1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,0,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,1,0,0,0,0,0,0,0,0); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,2,totalDamage,hitMax,hitTime,0,0,0,0,0); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("FG_HYPERFLARE_A_1"); + else obj.sq_PlaySound("FG_HYPERFLARE_B_1"); + obj.sq_SetXScrollStart(350, 300); + break; + case 1: + obj.sq_SetCurrentAnimation(ATANI_BYKK_HYPERFLARE2ATTACK_BODY); + break; + } +} + +function onEndCurrentAni_HyperFlare(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_HYPERFLARE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onKeyFrameFlag_HyperFlare(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + sq_SetMyShake(obj, 8, 300); + break; + case 2: + obj.sq_PlaySound("HYPERFLARE_CAST"); + local size = obj.getVar("hyperFlareObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local effectObj = obj.getVar("hyperFlareObj").get_obj_vector(i); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setTimeEvent(1, 1000, 1, true); + } + } + } + break; + case 21: obj.sq_PlaySound("FG_HYPERFLARE_B_2_01"); break; + case 3: + //`secondAttack` 0 -25 0 + obj.sq_PlaySound("FG_HYPERFLARE_A_2"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HYPERFLARE, -1, 1, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 2); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 3); + createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,-25,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,3,totalDamage,hitMax,hitTime,0,0,0,0,0); + break; + case 4: + obj.sq_PlaySound("HYPERFLARE_SHOT"); + sq_SetMyShake(obj, 15, 300); + break; + case 5: + sq_SetMyShake(obj, 2, 150); + break; + } + return true; +} + +function onEndState_HyperFlare(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_HYPERFLARE){ + obj.sq_SetXScrollStop(0); + } +} + + + + + + +print("set all"); \ No newline at end of file diff --git a/user/116.205.165.25/25_priest_1.c b/user/116.205.165.25/25_priest_1.c new file mode 100644 index 0000000..6242ecf --- /dev/null +++ b/user/116.205.165.25/25_priest_1.c @@ -0,0 +1,2946 @@ + + +//荣誉祝福 +function checkExecutableSkill_GloriousBlessNew(obj) +{ + if (!obj) return false; + if(obj.getVar("canUseSkill").getBool(0)) return false; + local isUse = obj.sq_IsUseSkill(260); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(301, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GloriousBlessNew(obj) +{ + if (!obj) return false; + if(obj.getVar("canUseSkill").getBool(0)) return false; + return true; +} + +function onSetState_GloriousBlessNew(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("PR_MOONLIGHT"); + obj.setTimeEvent(1, 500, 1, false); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + local count = 0; + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + if(sq_getJob(sqrChr) == 9 && sq_getGrowType(sqrChr) == 1) count = count + 1; + } + } + print("count = "+count); + if(count > 0){ + obj.getVar("canUseSkill").setBool(0, true); + return; + } + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BLESSOFCOURAGE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ZEALOFFAITHBUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ZEALOFFAITHBUFF); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFVICTORIA)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFVICTORIA); + local skillLevel = sq_GetSkillLevel(obj, 260); + local range = sq_GetIntData(obj, 260, 0); + local buffTime = sq_GetLevelData(obj, 260, 0, skillLevel); + local phAttack = sq_GetLevelData(obj, 260, 4, skillLevel); + local mgAttack = sq_GetLevelData(obj, 260, 5, skillLevel); + local adtAttack = sq_GetLevelData(obj, 260, 3, skillLevel); + local phlAttack = sq_GetLevelData(obj, 260, 1, skillLevel); + local mglAttack = sq_GetLevelData(obj, 260, 2, skillLevel); + local stuckRate = sq_GetLevelData(obj, 260, 6, skillLevel); + local skillbonusRate = sq_GetLevelData(obj, 260, 7, skillLevel); + //if(skillLevel < 20) sq_SetSkillAttackBonus(obj, skillbonusRate.tofloat() / 1000.0); + local now_phDefense = sq_GetPhysicalDefense(); + now_phDefense = now_phDefense * (100 + sq_GetIntData(obj, 169, 3)) / 100; + local now_mgDefense = sq_GetMagicalDefense(); + now_mgDefense = now_mgDefense * (100 + sq_GetIntData(obj, 169, 4)) / 100; + local defenseMax = 0; + if(now_phDefense > now_mgDefense) defenseMax = now_phDefense; + else defenseMax = now_mgDefense; + print("defenseMax = "+defenseMax); + local addRate = defenseMax.tofloat() / sq_GetIntData(obj, 260, 3).tofloat(); + if(addRate > 1){ + phAttack = phAttack.tofloat() * (1.0 + addRate); + mgAttack = mgAttack.tofloat() * (1.0 + addRate); + adtAttack = adtAttack.tofloat() * (1.0 + addRate); + phlAttack = phlAttack.tofloat() * (1.0 + addRate); + mglAttack = mglAttack.tofloat() * (1.0 + addRate); + } + print("addRate = "+addRate); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillLevel); + sq_BinaryWriteDword(buffTime); + sq_BinaryWriteDword(phAttack.tointeger()); + sq_BinaryWriteDword(mgAttack.tointeger()); + sq_BinaryWriteDword(adtAttack.tointeger()); + sq_BinaryWriteDword(phlAttack.tointeger()); + sq_BinaryWriteDword(mglAttack.tointeger()); + sq_BinaryWriteDword(stuckRate); + sq_SendCreatePassiveObjectPacket(obj, 640001, 0, 0, 0, 0, obj.getDirection()); + + break; + } +} + +function onEndCurrentAni_GloriousBlessNew(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(301, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GloriousBlessNew(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_GloriousBlessNew(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_GloriousBlessNew(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_GloriousBlessNew(obj, new_state) +{ + if(!obj) return; +} + + +function onStartDungeon_PrCrusader_bykk(obj) +{ + return; +} + + + +function setCustomData_po_priest_bykk(obj, receiveData) +{ + if(!obj) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + obj.getVar("job").setInt(0, job); + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + print("job = "+job+" , skillIndex = "+skillIndex+" , subtype = "+subtype); + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case 1: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillLevel = receiveData.readDword(); + local buffTime = receiveData.readDword(); + local phAttack = receiveData.readDword(); + local mgAttack = receiveData.readDword(); + local adtAttack = receiveData.readDword(); + local phlAttack = receiveData.readDword(); + local mglAttack = receiveData.readDword(); + local stuckRate = receiveData.readDword(); + // print("skillLevel = "+skillLevel); + // print("buffTime = "+buffTime); + // print("phAttack = "+phAttack); + // print("mgAttack = "+mgAttack); + // print("adtAttack = "+adtAttack); + // print("phlAttack = "+phlAttack); + // print("mglAttack = "+mglAttack); + // print("stuckRate = "+stuckRate); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !sqrChr.isEnemy(object)) { + local sqrChr2 = sq_GetCNRDObjectToSQRCharacter(object); + + local apdPath = "character/priest/1crusader_bykk/ap_gloriousbless.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr2, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr2, APDPATH_BLESSOFCOURAGE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr2, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr2, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr2, sqrChr, -1, false, apdPath, true); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(125); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), 260, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, sqrChr2, sqrChr, true); + + local tiaozheng = 1; + if(isSameObject(sqrChr, sqrChr2) && skillLevel >= 20){ + tiaozheng = 0; + // print("set myself") + } + + local change_appendage = AddAppendage.sq_getChangeStatus("gloriousbless"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("gloriousbless",sqrChr2, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + if(tiaozheng > 0){ + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack).tofloat()); + } + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); + } + } + } + obj.setTimeEvent(1, 100, 1, false); + break; + case SKILL_BYKK_ASTRAFE: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamageExp); + local aniPath = "passiveobject/4_priest_bykk/1crusader_bykk/animation/astrafe/boomfront_15.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetAddWeaponDamage(sq_GetCurrentAttackInfo(obj), true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boombottom_01.ani", 0, 80, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_AGGRESSIVEJUDGEMENT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/4_priest_bykk/2infighter_bykk/animation/aggressivejudgement/afront_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + local aniPath = "passiveobject/4_priest_bykk/2infighter_bykk/animation/aggressivejudgement/aggressivejudgementmultihit.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, hitMax, true); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local range = 400; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "character/priest/2infighter_bykk/ap_aggressivejudgement_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, range, 100); + } + break; + case 3: + local speedRate = receiveData.readDword(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local ani = sq_GetCustomAni(sqrChr, 380); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_CHAKRAOFGOD: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local subtype = receiveData.readDword(); + local isThrow = receiveData.readDword(); + local isShake = receiveData.readDword(); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/hitfire_hit.ani"; + if(subtype > 0) aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/hitlight_hit.ani"; + if(isThrow > 0){ + if(subtype > 0) aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/hit_throwhitlight.ani"; + else aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/hit_throwhit.ani"; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo) return; + if(subtype > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + else attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(isThrow == 0){ + if(isShake <= 0) sq_SetMyShake(obj, 3, 200); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 1.8; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_ENTERINGNIRVANA: + local hitMax = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local subtype2 = receiveData.readDword(); + obj.getVar().setInt(0, hitMax); + obj.getVar().setInt(1, totalDamage); + obj.getVar().setInt(2, sizeRate); + obj.getVar().setInt(3, prob); + obj.getVar().setInt(4, time); + obj.getVar().setInt(5, moveSpeed); + obj.getVar().setInt(6, attackSpeed); + obj.getVar().setInt(7, subtype2); + if(subtype2 > 2) obj.setTimeEvent(3, 300, 1, false); + else obj.setTimeEvent(3, 100, 1, true); + break; + case SKILL_BYKK_VERMILIONBIRDTALISMAN: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local sub = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + // print("sub = "+sub); + // print("totalDamage = "+totalDamage); + // print("lifeTime = "+lifeTime); + // print("hitTime = "+hitTime); + if(sub == 1){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + sqrChr.getVar("VermilionbirdtalismanObj").push_obj_vector(obj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/vermilionbirdtalisman/godofexorcism/godofexorcism_vermilionbirdtalisman_18.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_BAEKHO: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local apdSet = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, totalDamageExp); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, hitMax); + obj.getVar("custom").setInt(5, sizeRate); + obj.getVar("custom").setInt(6, apdSet); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/thunder_hitspark.ani"; + if(sub > 1) aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/thunderfront.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + switch(sub){ + case 1: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/thunder_black.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/thunder_writea.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/thunder_writeb.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/thunder_writec.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + local angle = sq_getRandom(-30,30); + sq_SetCustomRotate(pooledObj, sq_ToRadian(angle.tofloat())); + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/2nd_skill/gunner/animation/supernova/end/explosionend_shockwave04.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + sizeRate = 0.55 * sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + sq_flashScreen(obj,0,0,30,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 100); + obj.sq_PlaySound("R_BEAKHO_LIGHTNING"); + break; + case 2: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/talisman/thunder_nova.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + sizeRate = 0.7 * sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/talisman/lastthunder_floor.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj,0,0,150,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 100); + obj.sq_PlaySound("BEAKHO_EXP_TALISMAN"); + obj.sq_PlaySound("BEAKHO_LIGHTNING_FIN_TALISMAN"); + break; + } + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_THUNDERBOLTTALISMAN: + switch(subtype){ + case 1: + local hitTime = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isTalisman = receiveData.readDword(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_CHAKRAOFGOD); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + obj.getVar("custom").setInt(5, skillLevel); + obj.getVar("custom").setInt(6, isTalisman); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING,prob,level,time); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_HYUNMOO: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + //sizeRate,holdTime,lifeTime,mpRestore,attackSpeed,moveSpeed,changeRate + local sub = receiveData.readDword(); + if(sub == 1){ + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + // sq_moveWithParent(targetObj, obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local sizeRate = receiveData.readDword(); + local mpRestore = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.getVar("custom").setInt(1, mpRestore); + obj.getVar("custom").setInt(2, attackSpeed); + obj.getVar("custom").setInt(3, moveSpeed); + obj.getVar("custom").setInt(4, sizeRate); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoofloor1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + // currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoofloor2.ani"),true); + sizeRate = sizeRate.tofloat() / 315.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + // currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + obj.setTimeEvent(1, 1000, -1, false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + } + else sq_SendDestroyPacketPassiveObject(obj); + return; + } + local sizeRate = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local mpRestore = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local changeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, holdTime); + obj.getVar("custom").setInt(3, lifeTime); + obj.getVar("custom").setInt(4, mpRestore); + obj.getVar("custom").setInt(5, attackSpeed); + obj.getVar("custom").setInt(6, moveSpeed); + obj.getVar("custom").setInt(7, changeRate); + local group = sq_GetGroup(obj); + local uniqueId = sq_GetUniqueId(obj); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643011,0,0,0,sq_GetDirection(obj),1,group, uniqueId, sizeRate,mpRestore,attackSpeed,moveSpeed,0); + sqrChr.getVar("hyunmooObj").push_obj_vector(obj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_SHIKIGAMI: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + sqrChr.getVar("shikigamiObj").push_obj_vector(obj); + if(sqrChr.getVar("shikigamiBool").getBool(0)) sq_SendDestroyPacketPassiveObject(obj); + switch(sub){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sizeRateExp = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, totalDamageExp); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, lifeTime); + obj.getVar("custom").setInt(5, sizeRate); + obj.getVar("custom").setInt(6, sizeRateExp); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square2.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square3.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square4.ani"),true); + currentAni.addLayerAnimation(4,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square5.ani"),true); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square6.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/square7.ani"),true); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, lifeTime); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/hitfront.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setAttackType_2Exorcist(sqrChr, obj); + obj.setTimeEvent(1, hitTime, -1, false); + obj.setTimeEvent(2, 50, -1, true); + obj.setTimeEvent(3, 75, -1, true); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 10); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.sq_PlaySound("SHIKIGAMI_BIRD_ATK"); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, sizeRate); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expbird1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expbird2.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expbird3.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expbird4.ani"),true); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_CreateParticle("passiveobject/4_priest_bykk/3exorcist_bykk/particle/shikigamiexppiece.ptl", obj, -250, 0, 200, true, 30, 0, 1); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expsquare1.ani", -250, 0, 200); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/priest/animation/shikigami/expsquare2.ani", -250, 1, 201); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/priest/animation/shikigami/expsquare2.ani", -250, 1, 201); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(-1.0, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/priest/animation/shikigami/expsquare3.ani", -250, 20, 202); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/priest/animation/shikigami/expsquare3.ani", -250, 20, 202); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(-1.0, 1.0); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exphit.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp1.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp2.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp3.ani"),true); + currentAni.addLayerAnimation(4,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp4.ani"),true); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp5.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp6.ani"),true); + currentAni.addLayerAnimation(7,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp7.ani"),true); + currentAni.addLayerAnimation(8,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp8.ani"),true); + currentAni.addLayerAnimation(9,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp9.ani"),true); + currentAni.addLayerAnimation(10,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp10.ani"),true); + currentAni.addLayerAnimation(11,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp11.ani"),true); + currentAni.addLayerAnimation(12,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/exp12.ani"),true); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expfloor1.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expfloor2.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expfloor3.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/expfloor4.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + sq_SetMyShake(obj, 8, 300); + sq_flashScreen(obj,80,200,240,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 5: + local randomNum = sq_getRandom(1, 100); + local randomNum2 = sq_getRandom(1, 10); + local randomTime = sq_getRandom(50, 400); + obj.getVar("custom").setInt(1, randomNum); + obj.getVar("custom").setInt(2, randomTime); + obj.getVar("custom").setInt(3, sq_GetZPos(obj)); + obj.getVar("custom").setInt(4, randomNum2); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birdb1.ani"; + if(randomNum > 50) aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birdw.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + if(randomNum <= 50){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birdb2.ani"),true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birdappearb1.ani", 0, 0, 30); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-125.0)); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birdappearb2.ani", 0, 1, 31); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-125.0)); + } + else{ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birdappearw.ani", 0, 0, 30); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-125.0)); + } + local speed = 600.0 + sq_getRandom(-100, 300).tofloat(); + if(sq_GetDirection(obj, ENUM_DIRECTION_RIGHT)) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + break; + } + break; + case SKILL_BYKK_DESTROYSPIRITTALISMAN: + switch(subtype){ + case 1: + local sub = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, sizeRate); + switch(sub){ + case 0: + obj.setTimeEvent(1, 10, 40, true); + break; + case 1: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/destroyspirittalisman/fluttering.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + obj.sq_SetMoveParticle("particle/baekho.ptl", 0.0, sq_getRandom(-10, 10).tofloat()); + break; + } + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + print("totalDamage = "+totalDamage); + print("lifeTime = "+lifeTime); + print("hitTime = "+hitTime); + print("sizeRate = "+sizeRate); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, sizeRate); + local count = lifeTime / hitTime; + print("count = "+count); + obj.setTimeEvent(1, hitTime, count, true); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/destroyspirittalisman/explosion_explosion_circle_normal.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_ANTIAIRUPPER: + switch(subtype){ + case 1: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/antiairupperblade.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + obj.sq_PlaySound("AUPPER_SWING_2"); + break; + case 2: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/antiairupperquake.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 300.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.sq_PlaySound("QA_CRASH"); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_BYKK_GROUNDCRASH: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isSuck = receiveData.readDword(); + obj.getVar("custom").setInt(0, isSuck); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/groundcrash/oxcrash.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case SKILL_BYKK_CUTTINGDARKNESS: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/cuttingdarkness/cutting_darkness_dodge.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + print("totalDamage = "+totalDamage); + local sizeRate = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/cuttingdarkness/cutting_darkness_normal.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_THROWWEAPON: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/weapon.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + if(sub > 0){ + local currentAni = obj.getCurrentAnimation(); + switch(sub){ + case 1: currentAni.addLayerAnimation(6,sq_CreateAnimation("","character/priest/effect/animation/3exorcist_bykk/chakraofgod/light/throwweapon_weaponh3.ani"),true); break; + case 2: currentAni.addLayerAnimation(6,sq_CreateAnimation("","character/priest/effect/animation/3exorcist_bykk/chakraofgod/fire/throwweapon_weaponh3.ani"),true); break; + } + } + obj.setTimeEvent(1, 600, 1, false); + obj.sq_SetMoveParticle("particle/particle/throwweapon.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,400); + obj.setTimeEvent(2, hitTime, -1, false); + obj.getVar("custom").setInt(0, sizeRate); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(sub == 1) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + else if(sub == 2) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.sq_PlaySound("WIND_MOVE_LOOP", 1233); + break; + case SKILL_BYKK_REPEATEDSMASH: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local size = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub2.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub3.ani"),true); + currentAni.addLayerAnimation(4,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub4.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN ,prob, level, time); + if(size / 2 > 156) sizeRate = sizeRate * size / 2 / 156; + createOnlyDrawObjectEX_Priest_bykk(obj,"passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub5.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate / 2,sizeRate / 2); + createOnlyDrawObjectEX_Priest_bykk(obj,"passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub6.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate / 2,sizeRate / 2); + createOnlyDrawObjectEX_Priest_bykk(obj,"passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub7.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate / 2,sizeRate / 2); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/repeatedsmashsub8.ani", 0, 0, 0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 5, 300); + sq_flashScreen(obj,0,200,100,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case SKILL_BYKK_ATOMICSMASH: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/atomicsmashfinish.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_DANGEROUSSCALE: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + switch(sub){ + case 1: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/dangerousscaleattackexplosion_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + print("totalDamage = "+totalDamage); + local sizeRate = receiveData.readDword(); + local isTalisman = receiveData.readDword(); + obj.getVar("custom").setInt(1, isTalisman); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj); + createOnlyDrawObjectEX_Priest_bykk(obj,"character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscaleattackstonefront_00.ani",true,direction,x,y + 1,1,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_Priest_bykk(obj,"character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscaleattackstoneback_00.ani",true,direction,x,y - 1,-1,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_Priest_bykk(obj,"character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscaleattackdust_00.ani",true,direction,x,y + 2,2,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_Priest_bykk(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscaleattackbottom_00.ani",true,direction,x,y,0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + if(isTalisman > 0) createOnlyDrawObjectEX_Priest_bykk(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/start_dangerousscalestoneb2.ani",true,direction,x,y + 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetShake(obj, 10, 600); + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_THEBEST7HIT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local atkIndex = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk1body.ani"; + switch(atkIndex){ + case 2: aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk2body_01.ani"; break; + case 3: aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk3body_01.ani"; break; + case 4: aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk4body.ani"; break; + case 5: aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk5body.ani"; break; + case 6: aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk6body.ani"; break; + case 7: aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/normal/atk7body_body.ani"; break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex + 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_eff_e.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_PENTAGON: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, sizeRate); + obj.getVar("custom").setInt(3, lifeTime); + obj.getVar("custom").setInt(4, hitTime); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate * 100 / 348; + obj.getVar("custom").setInt(0, sub); + obj.getVar("custom").setInt(1, sizeRate); + switch(sub){ + case 1: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/castbarrierfront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/castbarrierback_01.ani"),true); + local speedRate = 192000 / 300; + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 2: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/gatherbarrierfront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/gatherbarrierback_01.ani"),true); + currentAni.setSpeedRate(600.0); + break; + case 3: + local lifeTime = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/gatherbarrierfront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/gatherbarrierback_01.ani"),true); + if(lifeTime > 1920){ + local speedRate = 192000 / lifeTime; + currentAni.setSpeedRate(speedRate.tofloat()); + } + local sizeRate = 0.5 * sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + case 4: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/endbarrierfront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/barrier/endbarrierback_01.ani"),true); + local sizeRate = 0.5 * sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + } + break; + case 3: + local sub = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("custom").setInt(0, sub); + local colObj = sq_GetCNRDObjectToCollisionObject(targetObj); + colObj.getVar("effObj").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: + break; + case 5: + break; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + } + break; + case SKILL_BYKK_FOURGODPOWER: + switch(subtype){ + case 1: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/3rdattack_hit_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 12); + obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local isStrong = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, hitMax); + obj.getVar("custom").setInt(4, isStrong); + local lifeTime = hitTime * hitMax; + obj.getVar("custom").setInt(5, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local isStrong = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, hitMax); + obj.getVar("custom").setInt(4, isStrong); + local lifeTime = hitTime * hitMax; + obj.getVar("custom").setInt(5, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/2ndattack_hitbottom_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_BYKK_BLUEDRAGON: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + switch(sub){ + case 1: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/bluedragon_creattotem.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, sizeRate); + obj.getVar("custom").setInt(3, -60); + obj.getVar("custom").setInt(4, speedRate); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + sqrChr.getVar("bluedragonTotem").push_obj_vector(obj); + sq_SetCustomRotate(obj, sq_ToRadian(-60.0)); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_SetMyShake(obj, 8, 300); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/exphit.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 1000.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_SetMyShake(obj, 15, 600); + break; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + break; + case SKILL_BYKK_ADVANCEDDRAGON: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + switch(sub){ + case 1: + //totalDamage,totalDamageExp,range,hitTime,lifeTime,speedRate + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local range = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, totalDamageExp); + obj.getVar("custom").setInt(3, range); + hitTime = hitTime * 100 / speedRate; + lifeTime = lifeTime * 100 / speedRate; + obj.getVar("custom").setInt(4, hitTime); + obj.getVar("custom").setInt(5, lifeTime); + obj.getVar("custom").setInt(6, speedRate); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/startmagiccircle_1.ani"); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + local sizeRate = range.tofloat() / 310.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,0,0,sq_GetDirection(obj),3,totalDamage,totalDamageExp,range,hitTime,lifeTime,speedRate,0); + break; + case 3: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local range = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, range); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, speedRate); + obj.getVar("custom").setInt(4, totalDamageExp); + obj.getVar("custom").setInt(5, hitTime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sizeRate = range.tofloat() / 310.0; + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/finish/finishdragon_11.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/finish/finishdragonhead_6.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/finish/finishdragonbottom_5.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + if(i == 1) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + local delay = 50000 / speedRate; + sq_SetMyShake(obj, 20, delay); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 5: + local sub2 = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(1, sub2); + obj.getVar("custom").setInt(2, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, speedRate); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/attack_smallfrag.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/magiccircle/magiccircle_light1.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DireStream: + local Id = receiveData.readDword(); + obj.getVar("avenger_ID").clear_vector(); + obj.getVar("avenger_ID").push_vector(Id); + local pChrOBJ = obj.getTopCharacter(); + pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ); + + if(Id == AVG_OBJ_Ear_Attack){ + local Pani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(Pani); + + local PhshTime = receiveData.readWord(); + sq_SetPause(obj, PAUSETYPE_OBJECT, PhshTime); + + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_EARTH_QUAKE); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_EARTH_QUAKE, 0, skillLevel); + local attackInfo = sq_GetCustomAttackInfo(obj, 0); + sq_SetCurrentAttackInfo(obj, attackInfo); + + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate); + } + else if(Id == AVG_OBJ_Ear_Explosion){ + local Pani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_EARTH_QUAKE); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_EARTH_QUAKE, 0, skillLevel); + local attackInfo = sq_GetCustomAttackInfo(obj, 1); + sq_SetCurrentAttackInfo(obj, attackInfo); + + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate); + } + else if(Id == AVG_OBJ_SpinCutter_Attack){ + local Pani = obj.getCustomAnimation(2); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_SPINCUTTER); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_SPINCUTTER, 0, skillLevel); + local attackInfo = sq_GetCustomAttackInfo(obj, 2); + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate); + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + obj.getVar("SpinCutter_Attack").clear_vector(); + obj.getVar("SpinCutter_Attack").push_vector(x); + obj.getVar("SpinCutter_Attack").push_vector(y); + obj.getVar("SpinCutter_Attack").push_vector(z); + + obj.setTimeEvent(OBJ_SpinCutter_push_Attack,150,3,false); + } + else if(Id == AVG_OBJ_DireStream_Lase){ + local pChr = obj.getTopCharacter(); + local Pani = obj.getCustomAnimation(3); + local attackInfo = sq_GetCustomAttackInfo(obj, 44); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_DireStream); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_DireStream, 0, skillLevel); + local Type = receiveData.readDword(); + + obj.getVar("DireStream_Lase").clear_vector(); + obj.getVar("DireStream_Lase").push_vector(Type); + + if(Type == 0) + { + Pani = obj.getCustomAnimation(3); + attackInfo = sq_GetCustomAttackInfo(obj, 44); + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_DireStream, 0, skillLevel); + } + else if(Type == 1) + { + Pani = obj.getCustomAnimation(4); + attackInfo = sq_GetCustomAttackInfo(obj, 45); + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_DireStream, 0, skillLevel); + BonusRate = BonusRate + (BonusRate * 0.3); + } + obj.setCurrentAnimation(Pani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 9); + obj.setTimeEvent(10, delay, 1, false); + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate.tointeger()); + } + else if(Id == AVG_OBJ_DireStream_LaseEnd){ + local Type = receiveData.readDword(); + local Pani = obj.getCustomAnimation(5); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_DireStream); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_DireStream, 1, skillLevel); + if(Type == 0) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_DireStream, 1, skillLevel); + } + else if(Type == 1) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_DireStream, 1, skillLevel); + BonusRate = BonusRate + (BonusRate * 0.3); + } + local attackInfo = sq_GetCustomAttackInfo(obj, 6); + + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate.tointeger()); + } + else if(Id == AVG_OBJ_MortalGospel_AttackBox01){ + local Type = receiveData.readDword(); + local Pani = obj.getCustomAnimation(6); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_MortalGospel); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 0, skillLevel); + if(Type == 0) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 0, skillLevel); + } + else if(Type == 1) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 0, skillLevel); + BonusRate = BonusRate + (BonusRate * 0.4); + } + local attackInfo = sq_GetCustomAttackInfo(obj, 7); + + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate.tointeger()); + } + else if(Id == AVG_OBJ_MortalGospel_AttackBox02){ + local Type = receiveData.readDword(); + local Pani = obj.getCustomAnimation(6); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_MortalGospel); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 1, skillLevel); + if(Type == 0) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 1, skillLevel); + } + else if(Type == 1) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 1, skillLevel); + BonusRate = BonusRate + (BonusRate * 0.4); + } + local attackInfo = sq_GetCustomAttackInfo(obj, 8); + + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate.tointeger()); + } + else if(Id == AVG_OBJ_MortalGospel_AttackBox03){ + local Type = receiveData.readDword(); + local Pani = obj.getCustomAnimation(6); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_MortalGospel); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 2, skillLevel); + if(Type == 0) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 2, skillLevel); + } + else if(Type == 1) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 2, skillLevel); + BonusRate = BonusRate + (BonusRate * 0.4); + } + local attackInfo = sq_GetCustomAttackInfo(obj, 9); + + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate.tointeger()); + } + else if(Id == AVG_OBJ_MortalGospel_AttackBox04){ + local Type = receiveData.readDword(); + local Pani = obj.getCustomAnimation(6); + obj.setCurrentAnimation(Pani); + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_MortalGospel); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 3, skillLevel); + if(Type == 0) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 3, skillLevel); + } + else if(Type == 1) + { + BonusRate = pChrOBJ.sq_GetLevelData(SKILL_MortalGospel, 3, skillLevel); + BonusRate = BonusRate + (BonusRate * 0.4); + } + local attackInfo = sq_GetCustomAttackInfo(obj, 10); + + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate.tointeger()); + } + break; + case SKILL_PRIEST_RIGHTEOUSDEVILIZE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitMaxback = receiveData.readDword(); + local disX = receiveData.readDword(); + local time = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMaxback); + obj.getVar("custom").setInt(1, disX); + obj.getVar("custom").setInt(2, sq_GetXPos(obj)); + obj.getVar("custom").setInt(3, sq_GetXPos(obj)); + obj.getVar("custom").setInt(4, totalDamage); + local aniPath = "passiveobject/4_priest_bykk/4avenger/animation/spincutter/righteousdevilize/righteousdevilize_devilspincutter_projectile_spin_loop_base.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 13); + obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); + + local group = sq_GetGroup(obj); + local uniqueId = sq_GetUniqueId(obj); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_PRIEST_RIGHTEOUSDEVILIZE); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(group); + sq_BinaryWriteDword(uniqueId); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 0, 0, 0, sq_GetDirection(obj)); + break; + case 2: + local group = receiveData.readDword();//组 + local uniqueId = receiveData.readDword();//唯一ID + local targetObj = sq_GetObject(obj, group, uniqueId);//得到对象 + if(targetObj) sq_moveWithParent(targetObj, obj); + + local aniPath = "passiveobject/4_priest_bykk/4avenger/animation/spincutter/righteousdevilize/righteousdevilize_devilspincutter_projectile_ground_dodge.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + local totalDamage = receiveData.readDword(); + local createMax = receiveData.readDword(); + local expMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, createMax); + obj.getVar("custom").setInt(2, expMax); + obj.setTimeEvent(2, 10, createMax + 1, true); + break; + case 4: + local totalDamage = receiveData.readDword(); + local expMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, expMax); + local aniPath = "passiveobject/4_priest_bykk/4avenger/animation/earthquakerock/devilearthquake/righteousdevilize/earthquake_projectile_rock.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(4, 200, 1, false); + obj.setTimeEvent(5, 500, 1, false); + break; + case 5: + local totalDamage = receiveData.readDword(); + local expMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, expMax); + local aniPath = "passiveobject/4_priest_bykk/4avenger/animation/earthquakerock/devilearthquake/righteousdevilize/boom_02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(3, delay / expMax, expMax, true); + break; + case 6: + local totalDamage = receiveData.readDword(); + local atkIndex = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + local aniPath = "passiveobject/4_priest_bykk/4avenger/animation/earthquakerock/devilearthquake/righteousdevilize/attackbox.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + } +} + +function setState_po_priest_bykk(obj, state, datas) +{ + if(!obj) return; + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0,state); + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_VERMILIONBIRDTALISMAN: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/vermilionbirdtalisman/vermilionbirdtalismanstart_05.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/vermilionbirdtalisman/vermilionbirdtalismanloop_12.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(3), -1, true); + break; + case 22: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/vermilionbirdtalisman/vermilionbirdtalismanend_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + switch(state){ + case 20: + local aniPath = "character/priest/effect/animation/3exorcist_bykk/godofexorcism/godofexorcism_vermilionbirdtalisman_stay_loop_body.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/priest/effect/animation/3exorcist_bykk/godofexorcism/godofexoricism_vermilionbirdtalisman_end_body.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/vermilionbirdtalisman/godofexorcism/godofexorcism_fire_talisman_loop.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(3); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + obj.setTimeEvent(1, hitTime, -1, false); + break; + case 21: + obj.stopTimeEvent(1); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/vermilionbirdtalisman/godofexorcism/godofexorcism_fire_talisman_end.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(4); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + } + break; + case SKILL_BYKK_BAEKHO: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/baekho_appear.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("BEAKHO_APPEAR"); + obj.sq_PlaySound("BEAKHO_IDOL_APPEAR"); + break; + case 21: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/baekho_loop.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(4), false); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/baekhofloor3.ani", 250, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(5).tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(pooledObj); + break; + case 22: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/baekho/baekho_disappear.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local size = obj.getVar().get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar().get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + obj.sq_PlaySound("BEAKHO_DISAPPEAR"); + obj.sq_PlaySound("BEAKHO_IDOL_DISAPPEAR"); + break; + } + break; + } + break; + case SKILL_BYKK_THUNDERBOLTTALISMAN: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismankiriflynone.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismankiriflydodge.ani"),true); + local speed = 1200.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + break; + case 21: + sq_SetVelocity(obj, 0, 0.0); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman2.ani"),true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismancircle.ani", 0, 0, 60); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanspark.ani", 0, 0, 60); + obj.getVar("bool").setBool(1, true); + local hitTime = obj.getVar("custom").getInt(3), hitMax = -1; + if(obj.getVar("custom").getInt(6) > 0){ + hitTime = 160; + hitMax = 5; + } + obj.setTimeEvent(1, hitTime, hitMax, true); + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + local timer = obj.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + local sizeRate = obj.getVar("custom").getInt(4); + sizeRate = sizeRate.tofloat() / 600.0; + local effsizeRate = sizeRate * 1.5 * 1.07; + obj.getVar("eff").clear_obj_vector(); + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanfloor1.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanfloor2.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanfloor3.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanfloor4.ani"];//"passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanfloor.ani", + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + pAni.setImageRateFromOriginal(effsizeRate, effsizeRate); + obj.getVar("eff").push_obj_vector(pooledObj); + } + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 22: + obj.stopTimeEvent(1); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismankiri1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismankiri2.ani"),true); + break; + } + break; + } + break; + case SKILL_BYKK_HYUNMOO: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 0: + switch(state){ + case 20: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooappear1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooappear2.ani"),true); + obj.sq_PlaySound("HYUN_IN"); + break; + case 21: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoostay1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoostay2.ani"),true); + if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 15, -1, true); + break; + case 22: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoomove1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoomove2.ani"),true); + if(!obj.isExistTimeEvent(11)) obj.setTimeEvent(11, 300, -1, true); + break; + case 23: + if(obj.isExistTimeEvent(10)) obj.stopTimeEvent(10); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooattack1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooattack2.ani"),true); + local delaySum = currentAni.getDelaySum(0, 2); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.resetHitObjectList(); + obj.getVar("atkBool").setBool(0, true); + obj.setTimeEvent(2, 10, 48, true); + obj.sq_PlaySound("HYUN_JUMP"); + break; + case 24: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoohold1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoohold2.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoohold3.ani"),true); + // currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoohold4.ani"),true); + obj.sq_PlaySound("HYUN_LOCK"); + break; + case 25: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooholdend1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooholdend2.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmooholdend3.ani"),true); + obj.stopSound(2333); + obj.sq_PlaySound("HYUN_UNLOCK"); + break; + case 26: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoodisappear1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/hyunmoodisappear2.ani"),true); + obj.sq_PlaySound("HYUN_OUT"); + break; + } + break; + } + break; + case SKILL_BYKK_DANGEROUSSCALE: + switch(state){ + case 20: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/start_dangerousscale_hold_front.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/start_dangerousscale_hold_back.ani", 0, -2, -2); + break; + case 21: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/loop_dangerousscale_hold_front.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/loop_dangerousscale_hold_back.ani", 0, -2, -2); + obj.getVar("eff").clear_obj_vector(); + obj.getVar("eff").push_obj_vector(pooledObj); + break; + case 22: + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/boom_dangerousscale_hold_boomcloud.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local pooledObj = obj.getVar("eff").get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/loop_dangerousscale_hold_front.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/dangerousscale/talisman/loop_dangerousscale_hold_back.ani"),true); + break; + } + break; + case SKILL_BYKK_PENTAGON: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/pentagon/startpentagon_01.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("effObj").clear_obj_vector(); + local group = sq_GetGroup(obj); + local uniqueId = sq_GetUniqueId(obj); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643028,255,-25,0,sq_GetDirection(obj),0,group,uniqueId,0,0,0,0,0); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643028,155,50,0,sq_GetDirection(obj),1,group,uniqueId,0,0,0,0,0); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643028,0,-60,0,sq_GetDirection(obj),2,group,uniqueId,0,0,0,0,0); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643028,-155,50,0,sq_GetDirection(obj),3,group,uniqueId,0,0,0,0,0); + obj.sq_PlaySound("PENTAGON_START"); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/pentagon/notworkpentagon_01.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 300, 1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/pentagon/workpentagon_01.ani"); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643027,0,0,0,sq_GetDirection(obj),3,sizeRate,lifeTime,0,0,0,0,0); + local hitTime = obj.getVar("custom").getInt(4); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + obj.setTimeEvent(2, hitTime, -1, false); + obj.getVar().clear_ct_vector();//清除 + obj.getVar().push_ct_vector();//加入 + local timer = obj.getVar().get_ct_vector(0);//得到 + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + break; + case 23: + obj.stopTimeEvent(2); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/pentagon/endpentagon_03.ani"); + obj.setCurrentAnimation(ani); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643027,0,0,0,sq_GetDirection(obj),4,sizeRate,0,0,0,0,0,0); + obj.setTimeEvent(3, 2000, 1, false); + break; + case 24: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/pentagon/disappearpentagon_07.ani"); + obj.setCurrentAnimation(ani); + break; + } + if(state > 20){ + local size = obj.getVar("effObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local effObj = obj.getVar("effObj").get_obj_vector(i); + if(effObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effObj); + colObj.addSetStatePacket(state, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + local sizeRate = obj.getVar("custom").getInt(2); + if(sizeRate > 300){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 300.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + break; + case 3: + local sub = obj.getVar("custom").getInt(0); + switch(state){ + case 20: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/bluedragon/startbluedragon_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/redphoenix/startphoenix_03.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/turtle/starthyunmu_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/whitetiger/startwhitetiger_02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sub]); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PENTAGON_BARRIER"); + break; + case 21: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/bluedragon/notworkbluedragon_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/redphoenix/notworkphoenix_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/turtle/notworkhyunmu_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/whitetiger/notworkwhitetiger_02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sub]); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/bluedragon/workbluedragon_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/redphoenix/workphoenix_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/turtle/workhyunmu_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/whitetiger/workwhitetiger_02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sub]); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/bluedragon/endbluedragon_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/redphoenix/endphoenix_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/turtle/endhyunmu_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/whitetiger/endwhitetiger_02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sub]); + obj.setCurrentAnimation(ani); + break; + case 24: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/bluedragon/disappearbluedragon_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/redphoenix/disappearphoenix_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/turtle/disappearhyunmu_02.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/pentagonobject/whitetiger/disappearwhitetiger_02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sub]); + obj.setCurrentAnimation(ani); + break; + } + break; + case 4: + break; + case 5: + break; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + } + break; + case SKILL_BYKK_FOURGODPOWER: + switch(subtype){ + case 1: + break; + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/start_front_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/loopbasic_front_00.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/loopstrong_front_00.ani"]; + local isStrong = obj.getVar("custom").getInt(4); + local ani = sq_CreateAnimation("", aniPath[isStrong]); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 17)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local hitTime = obj.getVar("custom").getInt(2); + if(isStrong > 0) hitTime = hitTime / 2; + obj.setTimeEvent(1, hitTime, -1, false); + obj.getVar().clear_ct_vector();//清除 + obj.getVar().push_ct_vector();//加入 + local timer = obj.getVar().get_ct_vector(0);//得到 + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/end_front_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + break; + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/start_front_remote_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/loopbasic_front_remote_00.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/loopstrong_front_remote_00.ani"]; + local isStrong = obj.getVar("custom").getInt(4); + local ani = sq_CreateAnimation("", aniPath[isStrong]); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 17)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local hitTime = obj.getVar("custom").getInt(2); + if(isStrong > 0) hitTime = hitTime / 2; + obj.setTimeEvent(1, hitTime, -1, false); + obj.getVar().clear_ct_vector();//清除 + obj.getVar().push_ct_vector();//加入 + local timer = obj.getVar().get_ct_vector(0);//得到 + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0); + else sq_SetVelocity(obj, 0, -100.0); + break; + case 22: + sq_SetVelocity(obj, 0, 0.0); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/fourgodpower/storm/end_front_remote_00.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + break; + } + break; + case 4: + break; + } + break; + case SKILL_BYKK_ADVANCEDDRAGON: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/startdragon_circle_aura_front.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/workdragon_dragon_normal.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(5), -1, false); + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + local timer = obj.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + break; + case 22: + obj.stopTimeEvent(1); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/enddragon_dragon_normal.ani"); + obj.setCurrentAnimation(ani); + break; + } + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("custom").getInt(3); + local range = obj.getVar("custom").getInt(1); + currentAni.setSpeedRate(speedRate.tofloat()); + local sizeRate = range.tofloat() / 310.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local currentAni = obj.getCurrentAnimation(); + if(state == 22) obj.setTimeEvent(2, currentAni.getDelaySum(false) / 2, 1, false); + break; + case 5: + switch(state){ + case 20: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/startbluedragon_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/startwhitetiger_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/starthyunmu_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/startlphoenix_1.ani"]; + local sub2 = obj.getVar("custom").getInt(1); + local ani = sq_CreateAnimation("", aniPath[sub2 - 1]); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/workbluedragon_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/workwhitetiger_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/workhyunmu_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/workphoenix_1.ani"]; + local sub2 = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + local ani = sq_CreateAnimation("", aniPath[sub2 - 1]); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3, lifeTime, 1, false); + break; + case 22: + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endbluedragon_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endwhitetiger_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endhyunmu_1.ani", + "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endphoenix_1.ani"]; + local sub2 = obj.getVar("custom").getInt(1); + local ani = sq_CreateAnimation("", aniPath[sub2 - 1]); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_BLUEDRAGON: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/totem1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/totem2.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/totem3.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/totem4.ani"),true); + currentAni.addLayerAnimation(4,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/bluedragontotem/totem5.ani"),true); + break; + } + break; + } + break; + } + break; + case 4: + break; + } +} + +function onEndCurrentAni_po_priest_bykk(obj) +{ + if(!obj) return; + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + switch(job){ + case 0: + break; + case 1: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_AGGRESSIVEJUDGEMENT: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_CHAKRAOFGOD: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_ENTERINGNIRVANA: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_VERMILIONBIRDTALISMAN: + switch(subtype){ + case 1: + local state = obj.getVar("state").getInt(0); + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 22) sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_BAEKHO: + switch(subtype){ + case 1: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 22){ + local size = obj.getVar().get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar().get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_THUNDERBOLTTALISMAN: + switch(subtype){ + case 1: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 21) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 22) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_HYUNMOO: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 0: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 25: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(sq_GetXPos(obj) > sq_GetXPos(sqrChr) && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_LEFT); + else if(sq_GetXPos(obj) < sq_GetXPos(sqrChr) && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 26: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_SHIKIGAMI: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + local totalDamage = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(3); + local lifeTime = obj.getVar("custom").getInt(4); + local sizeRate = obj.getVar("custom").getInt(5); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,250,0,-sq_GetZPos(obj),sq_GetDirection(obj),2,totalDamage,hitTime,lifeTime,sizeRate,0,0,0); + break; + case 3: + local totalDamage = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),4,totalDamage,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_DESTROYSPIRITTALISMAN: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("dsTalisman").setBool(0, false); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_ANTIAIRUPPER: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_GROUNDCRASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_CUTTINGDARKNESS: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_THROWWEAPON: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_REPEATEDSMASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_ATOMICSMASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_DANGEROUSSCALE: + local sub = obj.getVar("custom").getInt(0); + if(sub == 0) sq_SendDestroyPacketPassiveObject(obj); + else{ + local state = obj.getVar("state").getInt(0); + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 22) sq_SendDestroyPacketPassiveObject(obj); + } + break; + case SKILL_BYKK_THEBEST7HIT:sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_PENTAGON: + switch(subtype){ + case 1: + local state = obj.getVar("state").getInt(0); + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break;//obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 4: + break; + case 5: + break; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + } + break; + case SKILL_BYKK_FOURGODPOWER: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_BLUEDRAGON: + local sub = obj.getVar("custom").getInt(0); + if(sub == 1){ + if(state != 20) return; + else sq_SendDestroyPacketPassiveObject(obj); + } + if(sub > 1) sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_ADVANCEDDRAGON: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + break; + case 2: + case 4: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + case 5: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DireStream: + local Id = obj.getVar("avenger_ID").get_vector(0); + if(Id == AVG_OBJ_Ear_Attack){ + if(obj.isMyControlObject()){ + sq_SendDestroyPacketPassiveObject(obj); + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_PRIEST_RIGHTEOUSDEVILIZE: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + case 6: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + } +} + +function onTimeEvent_po_priest_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return true; + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + switch(job){ + case 0: + break; + case 1: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_AGGRESSIVEJUDGEMENT: + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(timeEventCount >= obj.getVar("custom").getInt(0)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(sqrChr && sqrChr.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "character/priest/2infighter_bykk/ap_aggressivejudgement_suck.nut"); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_ENTERINGNIRVANA: + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(3, 10); + local hitMax = obj.getVar().getInt(0); + obj.setTimeEvent(2, delaySum / (hitMax + 1), hitMax, true); + break; + case 2: obj.resetHitObjectList(); break; + case 3: + local totalDamage = obj.getVar().getInt(1); + local sizeRate = obj.getVar().getInt(2); + local prob = obj.getVar().getInt(3); + local time = obj.getVar().getInt(4); + local moveSpeed = obj.getVar().getInt(5); + local attackSpeed = obj.getVar().getInt(6); + local subtype2 = obj.getVar().getInt(7); + local ani = sq_CreateAnimation("", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/exp1.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/exp2.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/exp3.ani"),true); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 2), 1, false); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo) return; + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, prob, 100, time, moveSpeed); + if(subtype2 % 3 == 1) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + else if(subtype2 % 3 == 2) attackInfo.setElement(ENUM_ELEMENT_FIRE); + break; + } + break; + case SKILL_BYKK_VERMILIONBIRDTALISMAN: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(timeEventCount * obj.getVar("custom").getInt(3) >= obj.getVar("custom").getInt(2)){ + obj.stopTimeEvent(1); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 2: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + } + break; + case SKILL_BYKK_BAEKHO: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(1), sub = 1, sizeRate = obj.getVar("custom").getInt(5), apdSet = obj.getVar("custom").getInt(6); + if(timeEventCount >= obj.getVar("custom").getInt(4)){ + totalDamage = obj.getVar("custom").getInt(2); + sub = 2; + } + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643008,250,0,0,sq_GetDirection(obj),totalDamage,sub,sizeRate,apdSet,0,0,0,0); + if(timeEventCount >= obj.getVar("custom").getInt(4)){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_BYKK_THUNDERBOLTTALISMAN: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 1: + if(obj.getVar("custom").getInt(6) > 0){ + if(timeEventCount == 5){ + obj.setTimeEvent(3, 130, 1, false); + } + else{ + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt1.ani","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt2.ani","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt3.ani"]; + for(local i = 0; i < 3; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + sq_SetCustomRotate(pooledObj, sq_ToRadian(sq_getRandom(-10,10).tofloat())); + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/talisman/thunder_nova.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + obj.resetHitObjectList(); + sq_SetMyShake(obj, 3, 50); + obj.sq_PlaySound("THUNDER_STRIKE"); + } + return; + } + obj.resetHitObjectList(); + obj.getVar("bool").setBool(1, true); + break; + case 2: + local size = obj.getVar("eff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("eff").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + obj.resetHitObjectList(); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/talisman/lastthunder_lightning01.ani", 0, 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/talisman/thunder_nova.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, 100); + obj.setTimeEvent(2, 150, 1, false); + sq_flashScreen(obj,0,50,150,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("THUNDER_STRIKE"); + break; + } + break; + } + break; + case SKILL_BYKK_HYUNMOO: + switch(timeEventIndex){ + case 1: + local distance = obj.getVar("custom").getInt(4); + local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + local apdPath = "character/priest/3exorcist_bykk/ap_hyunmoobuff.nut"; + local mpRestore = obj.getVar("custom").getInt(1); + local attackSpeed = obj.getVar("custom").getInt(2); + local moveSpeed = obj.getVar("custom").getInt(3); + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_GetDistance(xPos, yPos, object.getXPos(), object.getYPos(), true) <= distance / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + print("test"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + AddAppendage.getVar("custom").setInt(0, distance); + + local change_appendage = AddAppendage.sq_getChangeStatus("hyunmoobuff"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("hyunmoobuff",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED , false, (moveSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_REGEN_RATE , false, (mpRestore).tofloat()); + } + } + + } + } + break; + case 2: + local atkTarget = obj.getVar("atkTarget").get_obj_vector(0); + if(atkTarget && atkTarget.getState() != STATE_DIE){ + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(atkTarget), timeEventCount, 40); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(atkTarget) + 1, timeEventCount, 40); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + } + break; + case 3: obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); break; + case 10://判斷距離 + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)); + local disY = sq_Abs(sq_GetYPos(obj) - (sq_GetYPos(sqrChr) + 10)); + local direction = sqrChr.getDirection(); + if(disX > 10){ + local baseM = 30; + local moveX = disX / baseM + 2; + if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 10){ + local baseM = 30; + local moveY = disY / baseM + 1; + if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disX <= 10 && disY <= 10){ + if(sq_GetXPos(obj) > sq_GetXPos(sqrChr) && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_LEFT); + else if(sq_GetXPos(obj) < sq_GetXPos(sqrChr) && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + // if(obj.getDirection() != direction) obj.setDirection(direction); + obj.stopTimeEvent(10); + obj.setTimeEvent(11,300,-1,false); + local state = obj.getVar("state").getInt(0); + if(state != 21) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 11://移動 + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)); + local disY = sq_Abs(sq_GetYPos(obj) - (sq_GetYPos(sqrChr) + 10)); + if(disX > 10 || disY > 10){ + if(sq_GetXPos(obj) > sq_GetXPos(sqrChr) && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_LEFT); + else if(sq_GetXPos(obj) < sq_GetXPos(sqrChr) && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + obj.stopTimeEvent(11); + obj.setTimeEvent(10,15,-1,false); + local state = obj.getVar("state").getInt(0); + if(state != 22) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_SHIKIGAMI: + switch(timeEventIndex){ + case 1: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(sqrChr.getVar("shikigamiBool").getBool(0)){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + obj.resetHitObjectList(obj); + break;//print("timeEventCount = "+timeEventCount); + case 2: createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,-230,0,200+sq_getRandom(-50,50),sq_GetDirection(obj),5,0,0,0,0,0,0,0); break; + case 3: createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,-230,0,200+sq_getRandom(-50,50),sq_GetDirection(obj),5,0,0,0,0,0,0,0); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_DESTROYSPIRITTALISMAN: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(4); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643013,0,0,0,sq_GetDirection(obj),1,totalDamage,lifeTime,hitTime,sizeRate,0,0,0); + if(timeEventCount >= 40) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643015,0,-1,0,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_THROWWEAPON: + switch(timeEventIndex){ + case 1: + obj.stopSound(1233); + obj.sq_RemoveMoveParticle(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(2)); + break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_PENTAGON: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 1: + local size = 0; + obj.getVar("tar").clear_obj_vector(); + local sizeRate = obj.getVar("custom").getInt(2);//695 + local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj), apdPath = "character/priest/3exorcist_bykk/ap_pentagon_hold.nut"; + local objectManager = obj.getObjectManager(); + for(local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_GetDistance(xPos, yPos, object.getXPos(), object.getYPos(), true) <= sizeRate){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!obj.getVar("tar").is_obj_vector(activeObj)) obj.getVar("tar").push_obj_vector(activeObj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, obj, 0, 0, activeObj.getZPos(), 600, true, AddAppendage); + } + } + } + if(obj.getVar("tar").get_obj_vector_size() > 0){ + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643027,0,0,0,sq_GetDirection(obj),1,sizeRate,0,0,0,0,0,0); + obj.setTimeEvent(4, 300, 1, false); + obj.sq_PlaySound("PENTAGON_BARRIER_GATHER"); + } + else obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: obj.resetHitObjectList(); break; + case 3: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_pentagon_hold.nut"); + } + } + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + setAttackType_2Exorcist(sqrChr, obj); + sq_CreateParticle("passiveobject/4_priest_bykk/3exorcist_bykk/particle/particle/pentagonglassbrockenleft.ptl", obj, -100, 5, 250, true, 30, 0, 8); + sq_CreateParticle("passiveobject/4_priest_bykk/3exorcist_bykk/particle/particle/pentagonglassbrockenright.ptl", obj, 100, 5, 250, true, 30, 0, 8); + obj.sq_PlaySound("PENTAGON_BARRIER_EXP"); + break; + case 4: + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643027,0,0,0,sq_GetDirection(obj),2,sizeRate,0,0,0,0,0,0); + obj.setTimeEvent(5, 250, 1, false); + break; + case 5: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + break; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + } + break; + case SKILL_BYKK_FOURGODPOWER: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_BLUEDRAGON: + switch(timeEventIndex){ + case 1: + local angle = obj.getVar("custom").getInt(3); + local speedRate = obj.getVar("custom").getInt(4); + local speed = 1300 * speedRate / 100; + // sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + obj.sq_SetMoveParticle("particle/bluedragontotemdown.ptl", 0.0, -60.0); + sq_SetSpeedToMoveParticle(obj,0,speed); + sq_SetSpeedToMoveParticle(obj,2,0); + break; + } + break; + case SKILL_BYKK_ADVANCEDDRAGON: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local totalDamage = obj.getVar("custom").getInt(4); + local range = obj.getVar("custom").getInt(1); + local speedRate = obj.getVar("custom").getInt(3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,0,0,sq_GetDirection(obj),4,totalDamage,range,speedRate,0,0,0,0); + break; + case 3: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DireStream: + if(timeEventIndex == 10){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(10, 15); + obj.setTimeEvent(OBJ_SpinCutter_push_Attack, delay / 10, 10, true); + return; + } + local Id = obj.getVar("avenger_ID").get_vector(0); + local pChrOBJ = obj.getTopCharacter(); + pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ); + if(timeEventIndex == OBJ_SpinCutter_push_Attack){ + obj.resetHitObjectList(); + } + if(timeEventIndex == OBJ_SpinCutter_get_Attack){ + obj.resetHitObjectList(); + } + if(timeEventIndex == OBJ_DireStream_Lase_Time){ + obj.resetHitObjectList(); + } + break; + case SKILL_PRIEST_RIGHTEOUSDEVILIZE: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList();print("test:"+timeEventCount); break; + case 2: + local totalDamage = obj.getVar("custom").getInt(0); + local createMax = obj.getVar("custom").getInt(1); + local expMax = obj.getVar("custom").getInt(2); + print("timeEventCount = "+timeEventCount); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_PRIEST_RIGHTEOUSDEVILIZE); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(expMax); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 135 * timeEventCount, -sq_getRandom(20,50), 0, sq_GetDirection(obj)); + if(timeEventCount != 1) sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 135 * timeEventCount, 0, 0, sq_GetDirection(obj)); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 135 * timeEventCount, sq_getRandom(20,50), 0, sq_GetDirection(obj)); + if(timeEventCount >= createMax + 1){ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 3: + local totalDamage = obj.getVar("custom").getInt(0); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_PRIEST_RIGHTEOUSDEVILIZE); + sq_BinaryWriteDword(6); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(48); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 0, 0, 0, sq_GetDirection(obj)); + break; + case 4: + local totalDamage = obj.getVar("custom").getInt(0); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_PRIEST_RIGHTEOUSDEVILIZE); + sq_BinaryWriteDword(6); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(47); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 0, 0, 0, sq_GetDirection(obj)); + break; + case 5: + local totalDamage = obj.getVar("custom").getInt(0); + local expMax = obj.getVar("custom").getInt(1); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(SKILL_PRIEST_RIGHTEOUSDEVILIZE); + sq_BinaryWriteDword(5); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(expMax); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, 0, 0, 0, sq_GetDirection(obj)); + break; + } + break; + } + break; + } +} diff --git a/user/116.205.165.25/25_priest_2.c b/user/116.205.165.25/25_priest_2.c new file mode 100644 index 0000000..dc9a711 --- /dev/null +++ b/user/116.205.165.25/25_priest_2.c @@ -0,0 +1,3591 @@ + +function onKeyFrameFlag_po_priest_bykk(obj, flagIndex) +{ + if(!obj) return true; + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_ASTRAFE: + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetAddWeaponDamage(sq_GetCurrentAttackInfo(obj), true); + break; + } + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_ADVANCEDDRAGON: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + switch(flagIndex){ + case 1: + //`create blue dragon` 201 0 0 + local lifeTime = obj.getVar("custom").getInt(5); + local range = obj.getVar("custom").getInt(3); + local sizeRate = range.tofloat() / 310.0; + local offset = (201 * sizeRate).tointeger(); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,offset,0,0,sq_GetDirection(obj),5,1,lifeTime,0,0,0,0,0); + break; + case 2: + //`create white tiger` -206 0 0 + local lifeTime = obj.getVar("custom").getInt(5); + local range = obj.getVar("custom").getInt(3); + local sizeRate = range.tofloat() / 310.0; + local offset = (-206 * sizeRate).tointeger(); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,offset,0,0,sq_GetDirection(obj),5,2,lifeTime,0,0,0,0,0); + break; + case 3: + //`create hyunmu` 0 60 0 + local lifeTime = obj.getVar("custom").getInt(5); + local range = obj.getVar("custom").getInt(3); + local sizeRate = range.tofloat() / 310.0; + local offset = (60 * sizeRate).tointeger(); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,offset,0,sq_GetDirection(obj),5,3,lifeTime,0,0,0,0,0); + break; + case 4: + //`create phoenix` 0 -60 0 + local lifeTime = obj.getVar("custom").getInt(5); + local range = obj.getVar("custom").getInt(3); + local sizeRate = range.tofloat() / 310.0; + local offset = (-60 * sizeRate).tointeger(); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,offset,0,sq_GetDirection(obj),5,4,lifeTime,0,0,0,0,0); + break; + } + break; + case 2: + switch(flagIndex){ + case 1: + local speedRate = obj.getVar("custom").getInt(1); + local delay = 170000 / speedRate; + sq_SetMyShake(obj, 3, delay); + break; + case 2: + //`create physic flash` 8 0 8 + local flashScreenObj = sq_flashScreen(obj,100,99999,30,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("flashobj").clear_obj_vector();//清除 + obj.getVar("flashobj").push_obj_vector(flashScreenObj);//加入 + break; + case 3: + sq_flashScreen(obj,100,0,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local speedRate = obj.getVar("custom").getInt(1); + local delay = 45000 / speedRate; + sq_SetMyShake(obj, 20, delay); + //`dragon shout sound` 4 0 -4 + obj.sq_PlaySound("ADVANCED_DRAGON_START"); + break; + case 4: + //`swing sound` + obj.sq_PlaySound("ADVANCED_DRAGON_SWISH"); + break; + case 5: + sq_flashScreen(obj,100,100,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local speedRate = obj.getVar("custom").getInt(1); + local delay = 50000 / speedRate; + sq_SetMyShake(obj, 20, delay); + //`create physic attack dust` + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/ground_bottom_attack_end_crack_normal.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 6: + //`destroy axe` -300 0 4 + break; + case 7: + //`physic flash fade out` + local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0);//得到 + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);//转为闪屏类 + if(pflashScreen) pflashScreen.fadeOut();//为真 销毁 + break; + } + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DireStream: + local Id = obj.getVar("avenger_ID").get_vector(0); + local pChrOBJ = obj.getTopCharacter(); + pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ); + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + local isMyControlObject = pChrOBJ.sq_IsMyControlObject(); + if(Id == AVG_OBJ_Ear_Attack){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(AVG_OBJ_Ear_Explosion); + sq_SendCreatePassiveObjectPacketPos(obj, 24349, 0, x, y, z + 25); + } + else if(Id == AVG_OBJ_SpinCutter_Attack){ + local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_SPINCUTTER); + local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_SPINCUTTER, 0, skillLevel); + local attackInfo = sq_GetCustomAttackInfo(obj, 3); + sq_SetCurrentAttackInfo(obj, attackInfo); + attackInfo = sq_GetCurrentAttackInfo(obj); + + sq_SetCurrentAttackBonusRate(attackInfo, BonusRate); + obj.setTimeEvent(OBJ_SpinCutter_get_Attack,80,4,false); + } + else if(Id == AVG_OBJ_DireStream_Lase){ + if(flagIndex == 10){ + local Type = obj.getVar("DireStream_Lase").get_vector(0); + if(pChrOBJ.isMyControlObject()){ + if(Type == 0) + { + //Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/normal/direstream_passivefront.ani", 300, -1, 0, 0, 80, 1, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/normal/direstream_passivefront.ani", 300, -1, 0); + } + else if(Type == 1) + { + //Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/devilgauge/direstream2_passivefront.ani", 300, -1, 0, 0, 80, 1, 1.0) + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/devilgauge/direstream2_passivefront.ani", 300, -1, 0); + } + //Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/direstream_passiveback.ani", 450, -1, 0, 0, 80, 1, 1.0) + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/direstream_passiveback.ani", 450, -1, 0); + } + } + if(flagIndex == 11){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(AVG_OBJ_DireStream_LaseEnd); + sq_SendCreatePassiveObjectPacketPos(obj, 24349, 0, x, y, z); + } + } + break; + case SKILL_PRIEST_RIGHTEOUSDEVILIZE: + switch(subtype){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(14, 21); + local hitMax = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(4)); + obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); + break; + } + break; + } + break; + } + return true; +} + +function onAttack_po_priest_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_THUNDERBOLTTALISMAN: + switch(subtype){ + case 1: + if(obj.getVar("custom").getInt(6) > 0) return; + local skillLevel = obj.getVar("custom").getInt(5); + local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt1.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt2.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt3.ani"]; + if(skillLevel > 0){ + aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/a_thunder_a.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/b_thunder_b.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/c_thunder_c.ani"]; + } + sq_AddDrawOnlyAniFromParent(damager, aniPath[sq_getRandom(0, 2)], 0, 0, sq_GetObjectHeight(damager) / 2); + if(obj.getVar("bool").getBool(1)){ + obj.getVar("bool").setBool(1, false); + sq_SetMyShake(obj, 3, 80); + } + break; + } + break; + case SKILL_BYKK_HYUNMOO: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local sub = obj.getVar("custom").getInt(0); + local atkTarget = obj.getVar("atkTarget").get_obj_vector(0); + if(sub == 0 && obj.getVar("atkBool").getBool(0) && isSameObject(atkTarget, damager)){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(damager)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(damager) + 3); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local apdPath = "character/priest/3exorcist_bykk/ap_hyunmoohold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.getVar("custom").setInt(0, sq_GetXPos(activeObj)); + AddAppendage.getVar("custom").setInt(1, sq_GetYPos(activeObj)); + AddAppendage.getVar("custom").setInt(2, sq_GetZPos(activeObj)); + local holdTime = obj.getVar("custom").getInt(2); + local changeRate = obj.getVar("custom").getInt(7); + if(sq_IsBoss(activeObj) || sq_IsNamed(activeObj) || sq_IsAiCharacter(activeObj) || sq_IsHellMonster(activeObj)){ + holdTime = holdTime * changeRate / 100; + } + print("holdTime = "+holdTime); + AddAppendage.sq_SetValidTime(holdTime); + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + obj.setTimeEvent(3, holdTime, 1, false); + obj.sq_PlaySound("HYUN_LOCK_LOOP", 2333); + } + obj.getVar("atkBool").setBool(0, false); + } + break; + case SKILL_BYKK_DESTROYSPIRITTALISMAN: + switch(subtype){ + case 1: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(activeObj.getVar("dsTalisman").getBool(0) == false){ + activeObj.getVar("dsTalisman").setBool(0, true); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local totalDamage = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(4); + local height = sq_GetObjectHeight(activeObj); + createSkillPassive_Priest_3exorcist_bykk(obj,activeObj,643014,0,1,height / 3,sq_GetDirection(obj),group,uniqueId,totalDamage,lifeTime,hitTime,sizeRate,0,0); + } + break; + } + break; + case SKILL_BYKK_GROUNDCRASH: + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(sq_IsFixture(damager)) return; + if(obj.getVar("custom").getInt(0) > 0){ + local apdPath = "character/priest/3exorcist_bykk/ap_groundcrash_suck.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(300); + sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 200, true, AddAppendage); + } + } + break; + case SKILL_BYKK_THROWWEAPON: + if(isStuck) return; + if(obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + obj.stopTimeEvent(1); + obj.setTimeEvent(1, 300, 1, false); + } + sq_AddDrawOnlyAniFromParent(damager, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/hit.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + break; + case SKILL_BYKK_ATOMICSMASH: + sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/hit2final.ani", -150, 1, 50); + break; + case SKILL_BYKK_DANGEROUSSCALE: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + if(obj.getVar("custom").getInt(1) <= 0) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local aniPath = "appendage/ap_common_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, aniPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, aniPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 600, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(2000); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643023,0,1,0,sq_GetDirection(obj),2,group,uniqueId,0,0,0,0,0); + } + } + break; + } + break; + case SKILL_BYKK_THEBEST7HIT: + switch(subtype){ + case 1: + if(isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/powerstrikeseven_crasha.ani", 0, 1, sq_GetCenterZPos(boundingBox)); + sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/powerstrikeseven_crashb.ani", 0, 1, sq_GetCenterZPos(boundingBox)); + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + if(!sqrChr.getVar("Thebest7hitTar").is_obj_vector(damager)){ + sqrChr.getVar("Thebest7hitTar").push_obj_vector(damager); + local apdPath = "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + } + break; + } + break; + case SKILL_BYKK_ADVANCEDDRAGON: + if(isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 3: + local apdPath = "character/priest/3exorcist_bykk/ap_advanceddragon_hold.nut"; + local lifeTime = obj.getVar("custom").getInt(2) + 200; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(lifeTime); + } + break; + case 2: + sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/hit/hit_hitdodge.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + break; + } + } + break; + } + break; + case 4: + break; + } +} + +function procAppend_po_priest_bykk(obj) +{ + if(!obj) return; + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_BYKK_VERMILIONBIRDTALISMAN: + switch(subtype){ + case 2: + local sub = obj.getVar("custom").getInt(0); + if(sub == 1 && state == 20){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local direction = sq_GetDirection(sqrChr); + local offSetX = sq_GetDistancePos(sq_GetXPos(sqrChr), direction, -50); + local offSetY = sq_GetYPos(sqrChr); + sq_setCurrentAxisPos(obj, 0, offSetX); + sq_setCurrentAxisPos(obj, 1, offSetY); + sq_SetCurrentDirection(obj, direction); + } + else{ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + local time = sq_GetObjectTime(obj); + if(time >= 10000){ + sqrChr.getVar("vermilionbirdtalismanBool").setBool(0, false); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } + else if(sub == 2 && state == 20){ + local time = sq_GetObjectTime(obj); + local lifeTime = obj.getVar("custom").getInt(2); + if(time >= lifeTime){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + } + break; + case SKILL_BYKK_THUNDERBOLTTALISMAN: + switch(subtype){ + case 1: + switch(state){ + case 21: + if(obj.getVar("bool").getBool(0)) return; + if(obj.getVar("custom").getInt(6) > 0) return; + local timer = obj.getVar().get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + if(currentT >= obj.getVar("custom").getInt(2)){ + obj.getVar("bool").setBool(0, true); + print("time = "+obj.getVar("custom").getInt(2)); + local size = obj.getVar("eff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("eff").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + else{ + obj.getVar("bool").setBool(0, true); + local size = obj.getVar("eff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("eff").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 2: + break; + } + break; + case SKILL_BYKK_HYUNMOO: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 0: + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(3) && state == 21 && obj.getVar("disappear").getBool(0) == false){ + obj.getVar("disappear").setBool(0, true); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if((!sqrChr || sqrChr.getState() == STATE_DIE) && obj.getVar("disappear").getBool(0) == false){ + obj.getVar("disappear").setBool(0, true); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 1: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == 26){ + sq_SendDestroyPacketPassiveObject(obj); + } + local offsetX = sq_GetDistancePos(sq_GetXPos(targetObj), sq_GetDirection(obj), 200); + sq_setCurrentAxisPos(obj, 0, offsetX); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) + 125); + break; + } + break; + case SKILL_BYKK_SHIKIGAMI: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(4) + 500 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(6); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,250,0,-sq_GetZPos(obj),sq_GetDirection(obj),3,totalDamage,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(1) - 350){ + if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); + if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3); + } + if(time >= obj.getVar("custom").getInt(1)){ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 5: + local randomNum = obj.getVar("custom").getInt(1); + local randomNum2 = obj.getVar("custom").getInt(4); + local time = sq_GetObjectTime(obj); + if(time <= 300 + randomNum){ + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(3) - 150 + randomNum2 * 5, time, 300 + randomNum); + local angle = sq_GetUniformVelocity(-35 + randomNum2, 0, time, 300); + sq_setCurrentAxisPos(obj, 2, vz); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + else{ + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(3) - 150 + randomNum2 * 5, obj.getVar("custom").getInt(3), time, 300 + randomNum + obj.getVar("custom").getInt(2)); + local angle = sq_GetUniformVelocity(0, 35 + randomNum2, time, 300); + sq_setCurrentAxisPos(obj, 2, vz); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + if(time >= obj.getVar("custom").getInt(2) + 300 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local pooledObj; + if(randomNum > 50){ + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearw.ani", 0, 0, 0); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-20.0, 20.0)); + } + else{ + local angle = sq_ToRadian(-20.0, 20.0); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearb1.ani", 0, 0, 0); + sq_SetCustomRotate(pooledObj, angle); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearb2.ani", 0, 1, 1); + sq_SetCustomRotate(pooledObj, angle); + } + sq_SendDestroyPacketPassiveObject(obj); + } + } + break; + } + break; + case SKILL_BYKK_DESTROYSPIRITTALISMAN: + switch(subtype){ + case 1: + local sub = obj.getVar("custom").getInt(0); + switch(sub){ + case 1: + local time = sq_GetObjectTime(obj); + if(time >= 1500 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(!activeObj || activeObj.getState() == STATE_DIE || activeObj.getHp() <= 0) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_THROWWEAPON: + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(1) && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_SendDestroyPacketPassiveObject(obj); + local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/disappear.ani"; + local direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj), z = sq_GetZPos(obj); + local sizeRate = obj.getVar("custom").getInt(0); + createOnlyDrawObjectEX_Priest_bykk(obj,aniPath,true,direction,x,y,z,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate) + } + break; + case SKILL_BYKK_DANGEROUSSCALE: + if(obj.getVar("custom").getInt(0) == 1) return; + local state = obj.getVar("state").getInt(0); + switch(state){ + case 21: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local aniPath = "appendage/ap_common_hold.nut"; + if(targetObj && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, aniPath)){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_PENTAGON: + switch(subtype){ + case 1: + switch(state){ + case 22: + local timer = obj.getVar().get_ct_vector(0);//得到 + if(timer){ + local currentT = timer.Get();//得到时间 + if(currentT >= obj.getVar("custom").getInt(3) && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + break; + case 2: + local sub = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + switch(sub){ + case 2: + local time = sq_GetObjectTime(obj); + local sizeRate = sq_GetUniformVelocity(100, 50 * sizeRate / 100, time, 250); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + } + break; + case 3: + break; + case 4: + break; + case 5: + break; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + } + break; + case SKILL_BYKK_FOURGODPOWER: + switch(subtype){ + case 1: + break; + case 2: + switch(state){ + case 21: + local timer = obj.getVar().get_ct_vector(0);//得到 + if(timer){ + local currentT = timer.Get();//得到时间 + local isStrong = obj.getVar("custom").getInt(4); + local lifeTime = obj.getVar("custom").getInt(5); + if(isStrong > 0) lifeTime = lifeTime / 2; + if(currentT >= lifeTime && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + break; + case 3: + switch(state){ + case 21: + local timer = obj.getVar().get_ct_vector(0);//得到 + if(timer){ + local currentT = timer.Get();//得到时间 + local isStrong = obj.getVar("custom").getInt(4); + local lifeTime = obj.getVar("custom").getInt(5); + if(isStrong > 0) lifeTime = lifeTime / 2; + if(currentT >= lifeTime && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + break; + case 4: + break; + } + break; + case SKILL_BYKK_BLUEDRAGON: + local sub = obj.getVar("custom").getInt(0); + if(sub == 1){ + switch(state){ + default: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + + local destX_01 = obj.getXPos() - sqrChr.getXPos(); + local destY_01 = obj.getYPos() - sqrChr.getYPos(); + if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - obj.getXPos(); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(100); + sq_BinaryWriteDword(30); + sq_BinaryWriteDword(30); + sq_BinaryWriteDword(30); + sq_BinaryWriteDword(30); + sq_BinaryWriteDword(30); + sq_SendCreatePassiveObjectPacket(sqrChr, 24030, 0, destX_01, destY_01, 0, sq_GetDirection(sqrChr)); + + local totalDamage = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643039,0,0,0,sq_GetDirection(obj),2,totalDamage,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + else if(sq_GetZPos(obj) > 0 && sq_GetObjectTime(obj) >= 3000) sq_SendDestroyPacketPassiveObject(obj); + break; + } + } + break; + case SKILL_BYKK_ADVANCEDDRAGON: + local sub = obj.getVar("custom").getInt(0); + if(sub == 1){ + local time = sq_GetObjectTime(obj); + local lifeTime = obj.getVar("custom").getInt(5); + local speedRate = obj.getVar("custom").getInt(6); + lifeTime = lifeTime + 200000 / speedRate; + if(time >= lifeTime && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local range = obj.getVar("custom").getInt(3); + local sizeRate = range.tofloat() / 310.0; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endmagiccircle_1.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SendDestroyPacketPassiveObject(obj); + } + } + else if(sub == 3){ + switch(state){ + case 21: + local timer = obj.getVar().get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + if(currentT >= obj.getVar("custom").getInt(2)){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + } + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DireStream: + local Id = obj.getVar("avenger_ID").get_vector(0); + local pChrOBJ = obj.getTopCharacter(); + pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ); + local state = pChrOBJ.getState(); + if(Id == AVG_OBJ_SpinCutter_Attack){ + local pAni = obj.getCurrentAnimation(); + local frmIndex = sq_GetAnimationFrameIndex(pAni); + + local t = obj.getVar("SpinCutter_Attack_HitTime").get_ct_vector(0); + if (!t){ + obj.getVar("SpinCutter_Attack_HitTime").clear_ct_vector(); + obj.getVar("SpinCutter_Attack_HitTime").push_ct_vector(); + t = obj.getVar("SpinCutter_Attack_HitTime").get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + return true; + } + local currentT = t.Get(); + local end_frmIndex = 7; + pAni.setSpeedRate(150.0); + if(frmIndex >= 0 && frmIndex <= end_frmIndex){ + local Dis_xpos = obj.getVar("SpinCutter_Attack").get_vector(0); + local End_xpos = sq_GetDistancePos(Dis_xpos, obj.getDirection(), 350); + local xpos = sq_GetUniformVelocity(Dis_xpos, End_xpos, currentT, 300); + obj.setCurrentPos(xpos, obj.getYPos(), obj.getZPos()); + obj.getVar("SpinCutter_Attack").set_vector(1,xpos); + } + if(frmIndex == end_frmIndex + 6){ + obj.getVar("SpinCutter_Attack_HitTime").clear_ct_vector(); + + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 11); + pChrOBJ.addSetStatePacket(STATE_SPINCUTTER, pIntVec, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + if(frmIndex >= end_frmIndex + 7){ + local Dis_xpos = obj.getVar("SpinCutter_Attack").get_vector(1); + local End_xpos = sq_GetDistancePos(Dis_xpos, obj.getDirection(), -350); + local xpos = sq_GetUniformVelocity(Dis_xpos, End_xpos, currentT, 300); + obj.setCurrentPos(xpos, obj.getYPos(), obj.getZPos()); + } + if(state != STATE_SPINCUTTER){ + sq_SendDestroyPacketPassiveObject(obj); + } + } + break; + case SKILL_PRIEST_RIGHTEOUSDEVILIZE: + switch(subtype){ + case 1: + local frameIndex = sq_GetCurrentFrameIndex(obj); + local time = sq_GetObjectTime(obj); + local currentAni = obj.getCurrentAnimation(); + if(frameIndex < 21){ + if(frameIndex > 13){ + local fireT = currentAni.getDelaySum(14, 21); + local currentT = time - currentAni.getDelaySum(0, 13); + local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(2), currentT, fireT); + sq_setCurrentAxisPos(obj, 0, vx); + } + else{ + local fireT = currentAni.getDelaySum(0, 13); + local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(1), time, fireT); + local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(2), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + obj.getVar("custom").setInt(3, dstX); + } + } + break; + } + break; + } + break; + } +} + + + + + + +//驱魔 + +function onAttack_Priest_3exorcist(obj, damager, bounding_box, is_stuck) +{ + if(is_stuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(obj.getVar("vermilionbirdtalismanBool").getBool(0)){ + obj.getVar("vermilionbirdtalismanBool").setBool(0, false); + local size = obj.getVar("VermilionbirdtalismanObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("VermilionbirdtalismanObj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VERMILIONBIRDTALISMAN, -1, 2, bonusRate); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 5); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2); + createSkillPassive_Priest_3exorcist_bykk(obj,activeObj,643005,0,0,50,sq_GetDirection(obj),2,totalDamage,lifeTime,hitTime,sizeRate,0,0,0); + } +} + +function createOnlyDrawObject_Priest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_Priest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createSkillPassive_Priest_3exorcist_bykk(obj,passiveObj,objnum,x,y,z,direction,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + local skillIndex = 0; + local subtype = 0; + switch(objnum){ + case 643001: skillIndex = SKILL_BYKK_CHAKRAOFGOD; subtype = 1; break; + case 643002: skillIndex = SKILL_BYKK_CHAKRAOFGOD; subtype = 2; break; + case 643003: skillIndex = SKILL_BYKK_ENTERINGNIRVANA; subtype = 1; break; + case 643004: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 1; break; + case 643005: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 2; break; + case 643006: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 3; break; + case 643007: skillIndex = SKILL_BYKK_BAEKHO; subtype = 1; break; + case 643008: skillIndex = SKILL_BYKK_BAEKHO; subtype = 2; break; + case 643009: skillIndex = SKILL_BYKK_THUNDERBOLTTALISMAN; subtype = 1; break; + case 643010: skillIndex = SKILL_BYKK_THUNDERBOLTTALISMAN; subtype = 2; break; + case 643011: skillIndex = SKILL_BYKK_HYUNMOO; subtype = 1; break; + case 643012: skillIndex = SKILL_BYKK_SHIKIGAMI; subtype = 1; break; + case 643013: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 1; break; + case 643014: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 2; break; + case 643015: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 3; break; + case 643016: skillIndex = SKILL_BYKK_ANTIAIRUPPER; subtype = 1; break; + case 643017: skillIndex = SKILL_BYKK_ANTIAIRUPPER; subtype = 2; break; + case 643018: skillIndex = SKILL_BYKK_GROUNDCRASH; subtype = 1; break; + case 643019: skillIndex = SKILL_BYKK_CUTTINGDARKNESS; subtype = 1; break; + case 643020: skillIndex = SKILL_BYKK_THROWWEAPON; subtype = 1; break; + case 643021: skillIndex = SKILL_BYKK_REPEATEDSMASH; subtype = 1; break; + case 643022: skillIndex = SKILL_BYKK_ATOMICSMASH; subtype = 1; break; + case 643023: skillIndex = SKILL_BYKK_DANGEROUSSCALE; subtype = 1; break; + case 643024: skillIndex = SKILL_BYKK_THEBEST7HIT; subtype = 1; break; + case 643025: skillIndex = SKILL_BYKK_THEBEST7HIT; subtype = 2; break; + case 643026: skillIndex = SKILL_BYKK_PENTAGON; subtype = 1; break; + case 643027: skillIndex = SKILL_BYKK_PENTAGON; subtype = 2; break; + case 643028: skillIndex = SKILL_BYKK_PENTAGON; subtype = 3; break; + case 643029: skillIndex = SKILL_BYKK_PENTAGON; subtype = 4; break; + case 643030: skillIndex = SKILL_BYKK_PENTAGON; subtype = 5; break; + case 643031: skillIndex = SKILL_BYKK_PENTAGON; subtype = 6; break; + case 643032: skillIndex = SKILL_BYKK_PENTAGON; subtype = 7; break; + case 643033: skillIndex = SKILL_BYKK_PENTAGON; subtype = 8; break; + case 643034: skillIndex = SKILL_BYKK_PENTAGON; subtype = 9; break; + case 643035: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 1; break; + case 643036: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 2; break; + case 643037: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 3; break; + case 643038: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 4; break; + case 643039: skillIndex = SKILL_BYKK_BLUEDRAGON; subtype = 1; break; + case 643040: skillIndex = SKILL_BYKK_ADVANCEDDRAGON; subtype = 1; break; + } + if(skillIndex == 0 && subtype == 0) return; + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_PRIESTBYKK, 0, destX_01 + x, destY_01 + y, z, direction); +} + +function getAttackCancelStartFrameSize_Priest_3exorcist(obj) +{ + return 2; +} + +function getAttackCancelStartFrame_Priest_3exorcist(obj, Index) +{ + if(Index == 0) return 7; + else if(Index == 1) return 6; + else if(Index == 2) return 6; +} + +function onAttack_priest_attack_3exorcist(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; +} + +function onAfterSetState_priest_attack_3exorcist(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local attackIndex = obj.getAttackIndex(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + switch(attackIndex){ + case 0: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack1_attack.ani"), 0, 0); + break; + case 1: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack2_attack2.ani"), 0, 0); + break; + case 2: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack3_attack3.ani"), 0, 0); + break; + } + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + switch(attackIndex){ + case 0: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack1_attack.ani"), 0, 0); + break; + case 1: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack2_attack2.ani"), 0, 0); + break; + case 2: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack3_attack3.ani"), 0, 0); + break; + } + } + } +} + +function onKeyFrameFlag_priest_attack_3exorcist(obj, flagIndex) +{ + if(!obj) return; + // print("flagIndex = "+flagIndex); + switch(flagIndex){ + case 1000: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + // print("test2222"); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 2, skillLevel); + if(skillLevel > 0) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643017,150,0,0,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,125,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,125,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + } + } + break; + } + return true; +} + +//脉轮 : 圣光 +function checkExecutableSkill_Chakraofcalmness(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAKRAOFCALMNESS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_CHAKRAOFCALMNESS); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Chakraofcalmness(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Chakraofcalmness(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skillIndex = obj.sq_GetVectorData(datas, 1); + obj.getVar("mailunSet").setInt(0, skillIndex); + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local castTime = sq_GetCastTime(obj, skillIndex, skill_level); + local timeRate = delaySum * 100 / castTime; + print("timeRate = "+timeRate); + obj.getVar("mailunSet").setInt(1, timeRate); + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + switch(skillIndex){ + case SKILL_BYKK_CHAKRAOFCALMNESS: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakracasting_f.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofcalmness/cast.ani"), 0, 0); + break; + case SKILL_BYKK_CHAKRAOFPASSION: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakracasting_f.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofpassion/cast.ani"), 0, 0); + break; + } + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + local speed = 500 * obj.getVar("mailunSet").getInt(1) / 100; + obj.setTimeEvent(1, speed, 1, false); + local skillIndex = obj.getVar("mailunSet").getInt(0); + switch(skillIndex){ + case SKILL_BYKK_CHAKRAOFCALMNESS: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/start.ani", 0, 0, 0); + break; + case SKILL_BYKK_CHAKRAOFPASSION: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chakraofpassion/start.ani", 0, 0, 0); + break; + } + + local skillLevel = sq_GetSkillLevel(obj, skillIndex); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath1); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath2); + switch(skillIndex){ + case SKILL_BYKK_CHAKRAOFCALMNESS: + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, apdPath1, true); + local buffTime = sq_GetLevelData(obj, skillIndex, 0, skillLevel); + // local mgAttack = sq_GetLevelData(obj, skillIndex, 1, skillLevel); + local castTime = sq_GetLevelData(obj, skillIndex, 2, skillLevel); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(46); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + obj.getVar("element_kk").setInt(1, 100); + local change_appendage = AddAppendage.sq_getChangeStatus("chakraofcalmness"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("chakraofcalmness",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (mgAttack).tofloat() * 0.1); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castTime).tofloat()); + } + AddAppendage.sq_DeleteEffectFront(); + AddAppendage.sq_DeleteEffectBack(); + local chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(false){//chakraofgodLevel > 0 + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_03.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_04.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_01.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_02.ani"); + } + else{ + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-dodge.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-glow.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-normal.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-dodge.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-glow.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-normal.ani"); + } + setSkillBonusRate_3Exorcist_bykk(obj); + obj.sq_PlaySound("PR_CHA_COLD"); + break; + case SKILL_BYKK_CHAKRAOFPASSION: + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, apdPath2, true); + local buffTime = sq_GetLevelData(obj, skillIndex, 0, skillLevel); + // local phAttack = sq_GetLevelData(obj, skillIndex, 1, skillLevel); + local stuckRate = sq_GetLevelData(obj, skillIndex, 2, skillLevel); + local hitReRate = sq_GetLevelData(obj, skillIndex, 3, skillLevel); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(47); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + obj.getVar("element_kk").setInt(0, 100); + local change_appendage = AddAppendage.sq_getChangeStatus("chakraofcalmness"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("chakraofcalmness",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (phAttack).tofloat() * 0.1); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate).tofloat() * -0.1); + change_appendage.addParameter(CHANGE_STATUS_TYPE_RIGIDITY, false, (hitReRate).tofloat()); + } + AddAppendage.sq_DeleteEffectFront(); + AddAppendage.sq_DeleteEffectBack(); + local chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(false){//chakraofgodLevel > 0 + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_03.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_04.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_01.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_02.ani"); + } + else{ + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-dodge.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-glow.ani"); + AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-normal.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-dodge.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-glow.ani"); + AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-normal.ani"); + } + setSkillBonusRate_3Exorcist_bykk(obj); + obj.sq_PlaySound("PR_CHA_HOT"); + break; + } + break; + } +} + +function onEndCurrentAni_Chakraofcalmness(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_AUTO, true); + break; + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onTimeEvent_Chakraofcalmness(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + if(timeEventIndex == 1){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } +} + +function onEndState_Chakraofcalmness(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_CHAKRAOFCALMNESS){ + sq_EndDrawCastGauge(obj); + } +} + +function drawAppend_appendage_chakraofcalmness(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if (!obj || obj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } +} + +function drawAppend_appendage_chakraofpassion(appendage, isOver, x, y, isFlip) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if (!obj || obj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } +} + +//脉轮 : 烈焰 +function checkExecutableSkill_Chakraofpassion(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAKRAOFPASSION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_BYKK_CHAKRAOFPASSION); + obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Chakraofpassion(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Chakraofpassion(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(0); + break; + } +} + +function onEndCurrentAni_Chakraofpassion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +//破魔符 +function checkExecutableSkill_Enteringnirvana(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ENTERINGNIRVANA); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ENTERINGNIRVANA, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Enteringnirvana(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Enteringnirvana(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(0); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENTERINGNIRVANA); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_ENTERINGNIRVANA, skill_level); + local timeRate = delaySum * 100 / castTime; + print("timeRate = "+timeRate); + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_ENTERINGNIRVANA); + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(0); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("setEnteringnirvana").setInt(0, speedRate); + local delaySum = currentAni.getDelaySum(0, 2); + obj.setTimeEvent(1, delaySum, 1, false); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ + setStageofhermitAppendage(obj); + } + obj.sq_PlaySound("BUDD_LIGHTBALL"); + } +} + +function onEndCurrentAni_Enteringnirvana(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ENTERINGNIRVANA, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Enteringnirvana(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Enteringnirvana(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Enteringnirvana(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local hitMax = sq_GetIntData(obj, SKILL_BYKK_ENTERINGNIRVANA, 3); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENTERINGNIRVANA, -1, 0, bonusRate); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENTERINGNIRVANA, -1, 12, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ENTERINGNIRVANA); + local prob = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 3, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 4, skillLevel); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 5, skillLevel); + local subtype = 0; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) subtype = 1; + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) subtype = 2; + local offSetX = 50; + if(obj.isDownSkillLastKey()){ + local speedRate = obj.getVar("setEnteringnirvana").getInt(0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/talisman1.ani", 0, 1, 61); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/talisman2.ani", 0, 0, 60); + local pAni = pooledObj.getCurrentAnimation(); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + pAni2.setSpeedRate(speedRate.tofloat()); + offSetX = 150; + } + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643003,offSetX,0,70,sq_GetDirection(obj),hitMax,totalDamage,sizeRate,prob,time,moveSpeed,attackSpeed,subtype); + break; + } +} + +function onEndState_Enteringnirvana(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_ENTERINGNIRVANA) + sq_EndDrawCastGauge(obj); +} + +//朱雀符 +function checkExecutableSkill_Vermilionbirdtalisman(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VERMILIONBIRDTALISMAN); + if (isUse){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofpassion.nut")){ + obj.startSkillCoolTime(SKILL_BYKK_VERMILIONBIRDTALISMAN, sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN), -1); + local size = obj.getVar("VermilionbirdtalismanObj").get_obj_vector_size(); + if(size <= 0){ + obj.getVar("VermilionbirdtalismanObj").clear_obj_vector(); + obj.getVar("vermilionbirdtalismanBool").setBool(0, true); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643005,-50,0,100,sq_GetDirection(obj),1,0,0,0,0,0,0,0); + } + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + obj.startSkillCoolTime(SKILL_BYKK_VERMILIONBIRDTALISMAN, sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_VERMILIONBIRDTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Vermilionbirdtalisman(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Vermilionbirdtalisman(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, skill_level); + local timeRate = delaySum * 100 / castTime; + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Vermilionbirdtalisman(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_VERMILIONBIRDTALISMAN, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onProcCon_Vermilionbirdtalisman(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Vermilionbirdtalisman(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + local delay = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3); + if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) <= 0 || !CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ + obj.setTimeEvent(1, delay + 500, 1, false); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VERMILIONBIRDTALISMAN, -1, 0, bonusRate); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 4); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643004,50,0,90,sq_GetDirection(obj),totalDamage,lifeTime,hitTime,sizeRate,0,0,0,0); + } + else{ + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/godofexorcism/godofexorcism_vermilionbirdtalisman_spawn_magic_body.ani", -45, 0, 95); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VERMILIONBIRDTALISMAN, -1, 1, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643006,50,0,90,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_Vermilionbirdtalisman(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Vermilionbirdtalisman(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_VERMILIONBIRDTALISMAN) + sq_EndDrawCastGauge(obj); +} + +//式神 : 白虎 +function checkExecutableSkill_Baekho(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BAEKHO); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BAEKHO, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Baekho(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Baekho(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BAEKHO); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_BAEKHO, skill_level); + local timeRate = delaySum * 100 / castTime; + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("R_PR_VO_BEAKHO"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ + setStageofhermitAppendage(obj); + } + break; + } +} + +function onEndCurrentAni_Baekho(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_BAEKHO, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Baekho(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Baekho(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BAEKHO, -1, 0, bonusRate); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BAEKHO, -1, 0, 4.4 * bonusRate); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 1); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 2); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + hitTime = hitTime - sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 4); + sizeRate = sizeRate * (1000 + sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 5)) / 1000; + } + // print("hitTime = "+hitTime); + // print("hitMax = "+hitMax); + // print("sizeRate = "+sizeRate); + local apdSet = 0; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) apdSet = 1; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) apdSet = 2; + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643007,50,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,sizeRate,apdSet,0,0); + break; + } + return true; +} + +function onTimeEvent_Baekho(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Baekho(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BAEKHO) + sq_EndDrawCastGauge(obj); +} + +//落雷符 +function checkExecutableSkill_Thunderbolttalisman(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THUNDERBOLTTALISMAN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THUNDERBOLTTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thunderbolttalisman(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Thunderbolttalisman(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_THUNDERBOLTTALISMAN); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, skill_level); + local timeRate = delaySum * 100 / castTime; + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ + setStageofhermitAppendage(obj); + } + obj.sq_PlaySound("PR_LIGHT"); + break; + } +} + +function onEndCurrentAni_Thunderbolttalisman(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_THUNDERBOLTTALISMAN, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Thunderbolttalisman(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Thunderbolttalisman(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + local hitTime = sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 2); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDERBOLTTALISMAN, -1, 1, bonusRate); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THUNDERBOLTTALISMAN); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel); + local prob = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 10; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 1); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 8)) / 100; + local isTalisman = 0; + if(sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 15) > 0) isTalisman = 1; + print("isTalisman = "+isTalisman); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643009,50,0,0,sq_GetDirection(obj),hitTime,totalDamage,lifeTime,prob,time,level,sizeRate,isTalisman); + break; + } + return true; +} + +function onTimeEvent_Thunderbolttalisman(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thunderbolttalisman(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_THUNDERBOLTTALISMAN) + sq_EndDrawCastGauge(obj); +} + +//式神 : 玄武 +function checkExecutableSkill_Hyunmoo(obj) +{ + if (!obj) return false; + local hyunmooObj = obj.getVar("hyunmooObj").get_obj_vector(0); + if (hyunmooObj){ + local state = obj.getState(); + if(state == 0 || state == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HYUNMOO); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HYUNMOO, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Hyunmoo(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Hyunmoo(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_HYUNMOO, skill_level); + local timeRate = delaySum * 100 / castTime; + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("PR_HYUNMU"); + + obj.getVar("hyunmooObj").clear_obj_vector(); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO); + local holdTime = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 1, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 0, skillLevel); + local mpRestore = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 3, skillLevel); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 8, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 9, skillLevel); + local changeRate = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 6); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643011,-50,0,0,sq_GetDirection(obj),0,sizeRate,holdTime,lifeTime,mpRestore,attackSpeed,moveSpeed,changeRate); + obj.endSkillCoolTime(SKILL_BYKK_HYUNMOO); + break; + } +} + +function onEndCurrentAni_Hyunmoo(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HYUNMOO, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Hyunmoo(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_HYUNMOO) + sq_EndDrawCastGauge(obj); +} + +function proc_appendage_hyunmoobuff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local sourceObj = appendage.getSource(); + local distance = appendage.getVar("custom").getInt(0); + local xPos = sq_GetXPos(sourceObj), yPos = sq_GetYPos(sourceObj); + if(sq_GetDistance(xPos, yPos, parentObj.getXPos(), parentObj.getYPos(), true) > distance / 2){ + appendage.setValid(false); + return; + } +} + +function proc_appendage_hyunmoohold(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); + if(!activeObj || activeObj.getState() == STATE_DIE || activeObj.getHp() <= 0){ + appendage.setValid(false); + return; + } + sq_setCurrentAxisPos(activeObj, 0, appendage.getVar("custom").getInt(0)); + sq_setCurrentAxisPos(activeObj, 1, appendage.getVar("custom").getInt(1)); + sq_setCurrentAxisPos(activeObj, 2, appendage.getVar("custom").getInt(2)); + local sourceObj = appendage.getSource(); + local colObj = sq_GetCNRDObjectToCollisionObject(sourceObj); + if(colObj.getState() != 24 && colObj.getState() != 23){ + appendage.setValid(false); + return; + } +} + +function procSkill_Hyunmoo(obj) +{ + local hyunmooObj = obj.getVar("hyunmooObj").get_obj_vector(0); + if(!sq_GetSkill(obj, SKILL_BYKK_HYUNMOO).isInCoolTime() && hyunmooObj){ + obj.setSkillCommandEnable(SKILL_BYKK_HYUNMOO,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HYUNMOO); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_HYUNMOO, sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO), -1); + local colObj = sq_GetCNRDObjectToCollisionObject(hyunmooObj); + if(colObj.getState() == 21 || colObj.getState() == 22){ + local distance = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 1); + local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + obj.getVar("HyunmooTar_boss").clear_obj_vector(); + obj.getVar("HyunmooTar_named").clear_obj_vector(); + obj.getVar("HyunmooTar_normal").clear_obj_vector(); + obj.getVar("HyunmooTar").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_GetDistance(xPos, yPos, object.getXPos(), object.getYPos(), true) <= distance / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + obj.getVar("HyunmooTar_boss").push_obj_vector(activeObj); + continue; + } + else if(sq_IsNamed(activeObj)){ + obj.getVar("HyunmooTar_named").push_obj_vector(activeObj); + continue; + } + else{ + obj.getVar("HyunmooTar_normal").push_obj_vector(activeObj); + continue; + } + } + } + local bossSize = obj.getVar("HyunmooTar_boss").get_obj_vector_size(); + local namedSize = obj.getVar("HyunmooTar_named").get_obj_vector_size(); + local normalSize = obj.getVar("HyunmooTar_normal").get_obj_vector_size(); + if(bossSize > 0){ + for(local i = 0; i < bossSize; i++){ + local targetObj = obj.getVar("HyunmooTar_boss").get_obj_vector(i); + if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj); + } + } + if(namedSize > 0){ + for(local i = 0; i < namedSize; i++){ + local targetObj = obj.getVar("HyunmooTar_named").get_obj_vector(i); + if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj); + } + } + if(normalSize > 0){ + for(local i = 0; i < normalSize; i++){ + local targetObj = obj.getVar("HyunmooTar_normal").get_obj_vector(i); + if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj); + } + } + if(obj.getVar("HyunmooTar").get_obj_vector_size() > 0){ + local targetObj = obj.getVar("HyunmooTar").get_obj_vector(0); + colObj.getVar("atkTarget").clear_obj_vector(); + colObj.getVar("atkTarget").push_obj_vector(targetObj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + } + else if(colObj.getState() == 24){ + colObj.stopTimeEvent(3); + colObj.setTimeEvent(3, 1000, 1, true); + } + } + } +} + +//式神·殇 +function checkExecutableSkill_Shikigami(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHIKIGAMI); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SHIKIGAMI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Shikigami(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Shikigami(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_SHIKIGAMI); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_SHIKIGAMI, skill_level) *0+100; + local timeRate = delaySum * 100 / castTime; + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true);//开始读条 + break; + case 1: + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHIKIGAMI, -1, 0, bonusRate); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHIKIGAMI, -1, 1, bonusRate); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SHIKIGAMI); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 2); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 3); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 7); + local sizeRateExp = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 6); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,-75,-1,200,sq_GetDirection(obj),1,totalDamage,totalDamageExp,hitTime,lifeTime,sizeRate,sizeRateExp,0); + + local apdPath = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + obj.setTimeEvent(1, 50, 1, false); + } + else{ + obj.setTimeEvent(1, lifeTime + 800, 1, false); + obj.getVar("shikigamiBool").setBool(0, false); + obj.getVar("shikigamiObj").clear_obj_vector(); + } + break; + } +} + +function onEndCurrentAni_Shikigami(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SHIKIGAMI, STATE_PRIORITY_AUTO, true); + break; + case 1: + // obj.sq_IntVectClear(); + // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Shikigami(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local apdPath = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) return; + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND) && obj.getVar("shikigamiBool").getBool(0) == false){ + obj.getVar("shikigamiBool").setBool(0, true); + obj.setTimeEvent(2, 50, 1, true); + } + break; + } +} + +function onKeyFrameFlag_Shikigami(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Shikigami(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + local size = obj.getVar("shikigamiObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local atkObj = obj.getVar("shikigamiObj").get_obj_vector(0); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + colObj.setTimeEvent(4, 1000, 1, true); + } + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Shikigami(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SHIKIGAMI) + sq_EndDrawCastGauge(obj); +} + +//灭魂符 +function checkExecutableSkill_Destroyspirittalisman(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DESTROYSPIRITTALISMAN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DESTROYSPIRITTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Destroyspirittalisman(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Destroyspirittalisman(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_DESTROYSPIRITTALISMAN); + break; + } +} + +function onEndCurrentAni_Destroyspirittalisman(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Destroyspirittalisman(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Destroyspirittalisman(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DESTROYSPIRITTALISMAN, -1, 1, bonusRate); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 23); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 28); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643013,50,0,90,sq_GetDirection(obj),0,totalDamage,lifeTime,hitTime,sizeRate,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Destroyspirittalisman(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Destroyspirittalisman(obj, new_state) +{ + if(!obj) return; +} + +//空斩打 +function checkExecutableSkill_Antiairupper(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ANTIAIRUPPER); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ANTIAIRUPPER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Antiairupper(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Antiairupper(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_ANTIAIRUPPER); + obj.sq_PlaySound("PR_ANTIAIR"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0; + local upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIAIRUPPER, -1, 1, 0.75) + 100; + local isCharge = 0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0) isCharge = 1; + if(isCharge > 0){ + obj.getVar("isCharge").setBool(0, true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 5, skillLevel).tofloat() / 100.0; + upForceSet = upForceSet * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 6, skillLevel)) / 100; + } + + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100; + obj.getVar("Charge").setInt(0, totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknUpForce(attackInfo, upForceSet); + if(isCharge > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 1); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chargeweapon.ani", -75, 1, 15); + local pAni = pooledObj.getCurrentAnimation(); + local speedRate = pAni.getDelaySum(false) * 100 / delay; + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + } +} + +function onEndCurrentAni_Antiairupper(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onKeyFrameFlag_Antiairupper(obj, flagIndex) +{ + if(!obj) return false; + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/antiairupper/front.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/antiairupper/back.ani"), 0, 0); + if(obj.getVar("isCharge").getBool(0)){ + local totalDamage = obj.getVar("Charge").getInt(0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 8, skillLevel); + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 7, skillLevel); + totalDamage = totalDamage * bonusRate / 100; + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643016,0,0,0,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643017,-165,0,0,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + local totalDamage = obj.getVar("Charge").getInt(0) * bonusRate / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/antiairupper_a.ani"), 0, 0); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,-165,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/antiairupper_a.ani"), 0, 0); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,-165,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + } + } + return true; +} + +//疾风打 +function checkExecutableSkill_Galesmash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GALESMASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Galesmash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Galesmash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_GALESMASH1); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local speed = 10.0 * speedRate.tofloat(); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GALESMASH1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + break; + case 1: + obj.getVar("galeCancel").setBool(1, true); + obj.sq_SetCurrentAnimation(PRANI_BYKK_GALESMASH2); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GALESMASH2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/galesmash_smashg.ani"), 0, 0); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/galesmash_smashg.ani"), 0, 0); + obj.sq_PlaySound("PR_RWIND"); + obj.sq_PlaySound("CROSS_SWING"); + break; + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GALESMASH); + local prob = sq_GetLevelData(obj, SKILL_BYKK_GALESMASH, 2, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_GALESMASH, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time); +} + +function onEndCurrentAni_Galesmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Galesmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetCurrentFrameIndex(obj) >= 2){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onKeyFrameFlag_Galesmash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.getVar("skillCancel").setBool(0, true); + break; + } + return true; +} + +function onEndState_Galesmash(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_GALESMASH){ + obj.getVar("skillCancel").setBool(0, false); + obj.getVar("galeCancel").setBool(1, false); + } +} + +function onAttack_Galesmash(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0 && obj.getVar("galeCancel").getBool(1)){ + obj.getVar("galeCancel").setBool(1, false); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 1, 1.0) * bonusRate / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0); + print(1); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0); + print(2); + } + } + break; + } +} + +//断空捶击 +function checkExecutableSkill_Groundcrash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GROUNDCRASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GROUNDCRASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Groundcrash(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Groundcrash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_GROUNDCRASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0; + local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + if(chargeLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GROUNDCRASH1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_GROUNDCRASHFINAL); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0; + local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + if(chargeLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 1, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GROUNDCRASH2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + break; + } +} + +function onEndCurrentAni_Groundcrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_GROUNDCRASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onKeyFrameFlag_Groundcrash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(6, 6); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chargeweapon.ani", -50, 0, 80); + local pAni = pooledObj.getCurrentAnimation(); + local speedRate = pAni.getDelaySum(false) * 100 / delay; + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 2: + local bonusRate = 1.0; + local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + local sizeRate = 100; + local isSuck = 0; + if(chargeLevel > 0){ + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0; + sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 2, 1.0) + 100; + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 18, sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON))) / 100; + } + print("bonusRate = "+bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 3, bonusRate); + print("totalDamage = "+totalDamage); + print("sizeRate = "+sizeRate); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643018,155,0,0,sq_GetDirection(obj),totalDamage,sizeRate,isSuck,0,0,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + totalDamage = totalDamage * bonusRate / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,155,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,155,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); + isSuck = 1; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + } + } + break; + } + return true; +} + +//星落打 +function checkExecutableSkill_Homerun(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOMERUN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Homerun(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Homerun(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNGRAB); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff02.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff03.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff04.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_floor_eff01.ani"), 0, 0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNGRAB)); + obj.getVar("homerunAtk").setBool(0, true); + obj.getVar("homerunselect").setBool(0, true); + obj.getVar("homerunselect2").setInt(0, 0); + obj.getVar("homerunTar").clear_obj_vector(); + obj.getVar("homerunObj").clear_obj_vector(); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HOMERUN); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNCHARGE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 30000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_chargeholdtarget_upeff01.ani", 145, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_charge_front_dust.ani", 0, 1, 0); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_charge_back_dust02.ani", 0, -1, 0); + obj.getVar("homerunEff").clear_obj_vector(); + obj.getVar("homerunEff").push_obj_vector(pooledObj); + obj.getVar("homerunEff").push_obj_vector(pooledObj2); + local range = sq_GetIntData(obj, SKILL_BYKK_HOMERUN, 3) / 2; + local appendage = sq_AttractToMe(obj, range, 145, 1000); + obj.getVar("homerun").setAppendage(0,appendage); + return; + break; + case 2: + local size = obj.getVar("homerunTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("homerunTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_homerun_hold.nut"); + } + } + local size = obj.getVar("homerunEff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("homerunEff").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNSMASH); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + local directionSelect = obj.sq_GetVectorData(datas, 1); + local isFullCharge = obj.sq_GetVectorData(datas, 2); + local attackInfo = sq_GetCurrentAttackInfo(obj); + switch(directionSelect){ + case 0: + sq_SetCurrentAttacknBackForce(attackInfo, 100); + sq_SetCurrentAttacknUpForce(attackInfo, 100); + break; + case 1: + sq_SetCurrentAttacknBackForce(attackInfo, 500); + sq_SetCurrentAttacknUpForce(attackInfo, 300); + break; + case 2: + sq_SetCurrentAttacknBackForce(attackInfo, 500); + sq_SetCurrentAttacknUpForce(attackInfo, 500); + break; + } + if(isFullCharge > 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_hit_fullcharge_eff01.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_back09.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_front09.ani", 0, 1, 0); + sq_flashScreen(obj,80,100,240,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 120); + local appendage = obj.getVar("homerun").getAppendage(0); + if(appendage) appendage.setValid(false); + obj.getVar("homerunAtk").setBool(1, true); + break; + case 3: + obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUN_SMASHA_BODY); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_back09.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_front09.ani", 0, 1, 0); + sq_SetMyShake(obj, 5, 60); + break; + case 4: + local zPos = obj.sq_GetVectorData(datas, 1); + local stateTime = obj.sq_GetVectorData(datas, 2); + local isFullCharge = obj.sq_GetVectorData(datas, 3); + obj.getVar("homerunSet").setInt(0, zPos); + obj.getVar("homerunSet").setInt(1, stateTime); + obj.getVar("homerunSet").setInt(2, isFullCharge); + obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNCHARGEHOLDTARGET); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, stateTime); + // if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + // local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + // local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/homerun_smashe.ani"), 0, 0); + // } + // else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/homerun_smashe.ani"), 0, 0); + // } + // } + return; + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Homerun(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("homerunAtk").getBool(0) == false){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + } + else { + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(obj.getVar("homerunselect2").getInt(0)); + obj.sq_IntVectPush(obj.getVar("homerunSet").getInt(2)); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Homerun(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 201800 / delaySum; + if(stateTime >= 30000 / speedRate){ + local targetObj = obj.getVar("homerunTar").get_obj_vector(0); + local zPos = sq_GetZPos(targetObj); + if(!obj.isDownSkillLastKey()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_IntVectPush(zPos); + obj.sq_IntVectPush(stateTime); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + } + if(stateTime >= delaySum / 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_IntVectPush(zPos); + obj.sq_IntVectPush(stateTime); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + } + } + case 4: + if(obj.getVar("homerunselect").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + obj.getVar("homerunselect").setBool(0, false); + obj.getVar("homerunselect2").setInt(0, 1); + } + else if( sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("homerunselect").setBool(0, false); + obj.getVar("homerunselect2").setInt(0, 2); + } + } + break; + } +} + +function onProc_Homerun(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local targetObj = obj.getVar("homerunTar").get_obj_vector(0); + local zPos = sq_GetAccel(obj.getVar("homerunSet").getInt(0), 400, stateTime, delaySum / 2, true); + sq_setCurrentAxisPos(targetObj, 2, zPos); + break; + case 4: + local stateTime = obj.sq_GetStateTimer(); + local targetObj = obj.getVar("homerunTar").get_obj_vector(0); + local zPos = sq_GetAccel(obj.getVar("homerunSet").getInt(0), 0, stateTime, obj.getVar("homerunSet").getInt(1), false); + sq_setCurrentAxisPos(targetObj, 2, zPos); + break; + } +} + +function onEndState_Homerun(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_HOMERUN){ + local size = obj.getVar("homerunTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("homerunTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_homerun_hold.nut"); + } + } + local size = obj.getVar("homerunEff").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("homerunEff").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + local appendage = obj.getVar("homerun").getAppendage(0); + if(appendage) appendage.setValid(false); + } +} + +function onAttack_Homerun(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(obj.getVar("homerunAtk").getBool(0)){ + obj.getVar("homerunAtk").setBool(0, false); + if(sq_IsFixture(damager)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + } + else{ + obj.getVar("homerunTar").push_obj_vector(damager); + local apdPath = "character/priest/3exorcist_bykk/ap_homerun_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local time = delaySum - stateTime; + if(time > 100) time = 100; + sq_MoveToAppendageForce(damager, obj, obj, 145, 0, 0, time, true, AddAppendage); + obj.getVar("homerunSet").setInt(0, sq_GetZPos(damager)); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); + } + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) return; + if(obj.getVar("homerunAtk").getBool(1)){ + obj.getVar("homerunAtk").setBool(1, false); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0) * bonusRate / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0); + } + } +} + +//黑暗切割 +function checkExecutableSkill_Cuttingdarkness(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTTINGDARKNESS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTTINGDARKNESS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Cuttingdarkness(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Cuttingdarkness(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_CUTTINGDARKNESSCHARGE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_CUTTINGDARKNESSFULLSMASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTTINGDARKNESS, -1, 1, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_CUTTINGDARKNESS)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + obj.sq_PlaySound("PR_STAR_THROW"); + break; + } +} + +function onEndCurrentAni_Cuttingdarkness(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTTINGDARKNESS, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onKeyFrameFlag_Cuttingdarkness(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTTINGDARKNESS, -1, 2, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CUTTINGDARKNESS, 1); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643019,175,0,60,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + return true; +} + +//巨旋风 +function checkExecutableSkill_Throwweapon(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THROWWEAPON); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THROWWEAPON, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Throwweapon(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Throwweapon(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THROWWEAPONREADY); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THROWWEAPONTHROW); + local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + local bonusRate = 1.0; + if(chargeLevel > 0){ + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 11, chargeLevel).tofloat() / 100.0; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THROWWEAPON, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_THROWWEAPONSECOND)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/throwweapon_chargethrowh2.ani"), 0, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/throwweapon_chargethrowh2.ani"), 0, 0); + } + } + obj.sq_PlaySound("PR_SPIN_FIN"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Throwweapon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_THROWWEAPON, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onKeyFrameFlag_Throwweapon(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local hitTime = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 2); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 1); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 5); + local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + local bonusRate = 1.0; + if(chargeLevel > 0){ + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 12, chargeLevel).tofloat() / 100.0; + lifeTime = lifeTime + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 14, chargeLevel); + sizeRate = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 6); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THROWWEAPON, -1, 1, bonusRate); + local sub = 0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) sub = 1; + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + sub = 2; + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + } + } + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643020,75,0,60,sq_GetDirection(obj),totalDamage,lifeTime,hitTime,sizeRate,sub,0,0,0); + break; + } + return true; +} + +//狂乱锤击 +function checkExecutableSkill_Repeatedsmash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REPEATEDSMASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Repeatedsmash(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Repeatedsmash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHSTART); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingstart.ani"), 150, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/repeatedsmash_swingstart.ani"), 150, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingstart.ani"), 150, 0); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + obj.getVar("repeatedsmashSet").setInt(0, 0); + obj.startRapidInput(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 7000 / currentAni.getDelaySum(0, 0); + local time = 15000 / speedRate; + obj.getVar("repeatedsmashSet").setInt(2, time); + obj.getVar("repeatedsmashSet").setInt(3, speedRate); + obj.setTimeEvent(1, time, 1, false); + sq_SetMyShake(obj, 2, 100); + obj.sq_PlaySound("PR_RATK"); + break; + case 1: + if(obj.getVar("repeatedsmashSet").getInt(0) > 0){ + obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHUPGRADE); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/crashrepeat1.ani"), 150, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/repeatedsmash/crashrepeat2.ani", 150, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + else obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASH); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingrepeat.ani"), 150, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/repeatedsmash_swingrepeat.ani"), 150, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingrepeat.ani"), 150, 0); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + sq_SetMyShake(obj, 2, 100); + obj.sq_PlaySound("PR_RATK"); + break; + case 2: + obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHFINAL); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingfinal.ani"), 150, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/repeatedsmash_swingfinalc.ani"), 150, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingfinalc.ani"), 150, 0); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 7000 / currentAni.getDelaySum(0, 0); + if(speedRate >= 130){ + speedRate = 130; + currentAni.setSpeedRate(130.0); + } + obj.getVar("repeatedsmashSetSpeed").setInt(0, speedRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASHFINAL)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + obj.sq_PlaySound("PR_MUSSANG_FIN"); + break; + } +} + +function onEndCurrentAni_Repeatedsmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.getVar("repeatedsmashSet").setInt(1, 1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REPEATEDSMASH); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 2, skillLevel); + if(obj.getVar("repeatedsmashSet").getInt(0) > 0) hitMax = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 3, skillLevel); + obj.getVar("repeatedsmashSet").setInt(1, obj.getVar("repeatedsmashSet").getInt(1) + 1); + print("hitcount = "+obj.getVar("repeatedsmashSet").getInt(1)); + print("hitMax = "+hitMax); + obj.sq_IntVectClear(); + if(obj.getVar("repeatedsmashSet").getInt(1) >= hitMax) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_Repeatedsmash(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); +} + +function onProcCon_Repeatedsmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 1){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true); + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.setTimeEvent(2, 1000, 1, true); + } +} + +function onKeyFrameFlag_Repeatedsmash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/repeatedsmash/charge.ani", -50, 1, 30); + local pAni = pooledObj.getCurrentAnimation(); + local speedRate = obj.getVar("repeatedsmashSetSpeed").getInt(0); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 5, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REPEATEDSMASH); + local prob = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 6, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 20; + local time = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 8, skillLevel); + local size = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 4, skillLevel); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_REPEATEDSMASH, 6); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643021,150,0,0,sq_GetDirection(obj),totalDamage,prob,level,time,size,sizeRate,0,0); + break; + } + return true; +} + +function onTimeEvent_Repeatedsmash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local rapidInput = obj.getRapidInputFrequency(); + if(rapidInput > 2){ + if(obj.getVar("repeatedsmashSet").getInt(0) == 0) obj.getVar("repeatedsmashSet").setInt(0, 1); + local delay = obj.getVar("repeatedsmashSet").getInt(2); + local speedRate = obj.getVar("repeatedsmashSet").getInt(3); + obj.setTimeEvent(1, delay, 1, false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat() * 2.0); + } + else{ + local delay = obj.getVar("repeatedsmashSet").getInt(2); + local speedRate = obj.getVar("repeatedsmashSet").getInt(3); + obj.setTimeEvent(1, delay, 1, false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 2: + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + break; + } +} + +function onEndState_Repeatedsmash(obj, new_state) +{ + if(!obj) return; +} + +//疾空旋风破 +function checkExecutableSkill_Giantswing(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GIANTSWING); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Giantswing(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Giantswing(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + print("subState = "+subState); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWINGREADY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.startRapidInput(); + obj.sq_PlaySound("PR_SPIN"); + obj.sq_PlaySound("WIND_SPIN"); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWING); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/weaponloop.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/dustloop1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/dustloop2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/giantswing_talisman/sphereloop_01.ani"), 0, 0); + local appendage = sq_AttractToMe(obj, 250, 100, 1000); + obj.getVar("giantswingAp").setAppendage(0, appendage); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/giantswing_weaponloopi.ani"), 0, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/giantswing_weaponloopi.ani"), 0, 0); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 9000 / currentAni.getDelaySum(0, 0); + if(speedRate >= 130) speedRate = 130; + print("speedRate = "+speedRate); + if(chargeLevel > 0){ + speedRate = speedRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 22, chargeLevel)) / 100; + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + local delay = currentAni.getDelaySum(false) / 2; + obj.getVar("giantswingSet").setInt(0, delay); + obj.getVar("giantswingSet").setInt(1, speedRate); + obj.getVar("giantswingSet").setInt(2, 0); + obj.getVar("giantswingSet").setInt(3, 0); + obj.setTimeEvent(1, delay, 1, false); + local time = (3000 / speedRate).tointeger(); + if(time < 20) time = 30; + obj.setTimeEvent(3, time, -1, true); + break; + case 2: + obj.stopTimeEvent(2); + obj.stopTimeEvent(3); + obj.getVar("GiantswingAtk").setBool(1, true); + obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWINGFINAL); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/weaponfinal.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/finish.ani", 0, 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/dustfinal1.ani", 0, -1, -1); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/dustfinal2.ani", 0, -1, -1); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/giantswing_weaponfinali.ani"), 0, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/giantswing_weaponfinali.ani"), 0, 0); + } + } + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 6, 300); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GIANTSWINGFINAL)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + obj.sq_PlaySound("PR_SPIN_FIN"); + local appendage = obj.getVar("giantswingAp").getAppendage(0); + if(appendage) appendage.setValid(false); + break; + } +} + +function onEndCurrentAni_Giantswing(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GIANTSWING)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_Giantswing(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); +} + +function onProcCon_Giantswing(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 1){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true); + } + } +} + +function onKeyFrameFlag_Giantswing(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + if(obj.isExistTimeEvent(2)) return; + if(obj.getVar("giantswingSet").getInt(3) == 0){ + obj.getVar("giantswingSet").setInt(3, obj.getVar("giantswingSet").getInt(3) + 1); + break; + } + else obj.getVar("giantswingSet").setInt(3, obj.getVar("giantswingSet").getInt(3) + 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GIANTSWING); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_GIANTSWING, 2, skillLevel); + if(obj.getVar("giantswingSet").getInt(2) > 0) hitMax = sq_GetLevelData(obj, SKILL_BYKK_GIANTSWING, 3, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0) hitMax = hitMax + sq_GetIntData(obj, SKILL_BYKK_CHARGEWEAPON, 2); + if(obj.getVar("giantswingSet").getInt(3) + 1 >= hitMax){ + obj.setTimeEvent(2, 100, 1, false); + } + else obj.resetHitObjectList(); + break; + } + return true; +} + +function onTimeEvent_Giantswing(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local rapidInput = obj.getRapidInputFrequency(); + if(rapidInput > 2){ + if(obj.getVar("giantswingSet").getInt(2) == 0) obj.getVar("giantswingSet").setInt(2, 1); + local delay = obj.getVar("giantswingSet").getInt(0); + local speedRate = obj.getVar("giantswingSet").getInt(1); + obj.setTimeEvent(1, delay, 1, false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat() * 2.0); + } + else{ + local delay = obj.getVar("giantswingSet").getInt(0); + local speedRate = obj.getVar("giantswingSet").getInt(1); + obj.setTimeEvent(1, delay, 1, false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true); + break; + case 3: + if(obj.isMyControlObject()){ + local speedRate = obj.getVar("giantswingSet").getInt(1); + local xSpeed = 130 * speedRate / 100; + local ySpeed = speedRate * 80 / 100; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) xSpeed = xSpeed; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) xSpeed = -xSpeed; + else xSpeed = 0; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) ySpeed = ySpeed; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) ySpeed = -ySpeed; + else ySpeed = 0; + obj.sq_StartWrite(); + obj.sq_WriteDword(xSpeed); + obj.sq_WriteDword(ySpeed); + sq_SendChangeSkillEffectPacket(obj, STATE_BYKK_GIANTSWING); + } + break; + } +} + +function onChangeSkillEffect_Giantswing(obj, skillIndex, reciveData) +{ + if(!obj) return; + local xSpeed = reciveData.readDword(); + local ySpeed = reciveData.readDword(); + sq_SetVelocity(obj, 0, xSpeed.tofloat()); + sq_SetVelocity(obj, 1, ySpeed.tofloat()); +} + +function onEndState_Giantswing(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_GIANTSWING){ + local appendage = obj.getVar("giantswingAp").getAppendage(0); + if(appendage) appendage.setValid(false); + } +} + +function onAttack_Giantswing(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) return; + if(obj.getVar("GiantswingAtk").getBool(1)){ + obj.getVar("GiantswingAtk").setBool(1, false); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 1, 1.0) * bonusRate / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + } + } +} + diff --git a/user/116.205.165.25/25_priest_3.c b/user/116.205.165.25/25_priest_3.c new file mode 100644 index 0000000..c4a3e59 --- /dev/null +++ b/user/116.205.165.25/25_priest_3.c @@ -0,0 +1,2078 @@ + + + +//无双击 +function checkExecutableSkill_Atomicsmash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ATOMICSMASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ATOMICSMASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Atomicsmash(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Atomicsmash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASHREADY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("atomicsmashTar").clear_obj_vector(); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASH); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/effect.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/atomicsmash_effecth2.ani"), 0, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/atomicsmash_effecth2.ani"), 0, 0); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_ATOMICSMASHSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + break; + case 2: + obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASHFINISH); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/effectfinal.ani"), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/atomicsmash_effectfinalc.ani"), 0, 0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/chakragodslash_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/atomicsmash_effectfinalc.ani"), 0, 0); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Atomicsmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_ATOMICSMASH, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Atomicsmash(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Atomicsmash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1,1); + local size = obj.getVar("atomicsmashTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -50, 0, 180, delay, true, masterAppendage); + } + } + } + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 1); + local apdPath = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 3) / 10) / 100; + local bonusRate = 1.0 + sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 2).tofloat() / 1000.0; + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, bonusRate); + } + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643022,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,speedRate,0,0,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, 1.0); + totalDamage = totalDamage * bonusRate / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,160,1,50,sq_GetDirection(obj),totalDamage,1,0,1,0,0,0,0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,160,1,50,sq_GetDirection(obj),totalDamage,0,0,1,0,0,0,0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/shockwave_00.ani", 150, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/atomicsmashpassionfloor_00.ani", 150, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/passiondust_00.ani", 150, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/passionstone.ani", 150, 1, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/atomicsmashgodfloor_00.ani", 150, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/atomicsmashfloorchakra_00.ani", 150, 1, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + } + } + sq_SetMyShake(obj, 12, 300); + break; + } + break; + case 2: + case 3: + case 4: + case 5: + local frameIndex = [3, 5, 7, 11]; + local offSet = [[-140,0],[0,15],[130,0],[130,0]]; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(frameIndex[flagIndex - 2],frameIndex[flagIndex - 2]); + local size = obj.getVar("atomicsmashTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, offSet[flagIndex - 2][0], offSet[flagIndex - 2][1], flagIndex==5?150:0, delay, true, masterAppendage); + } + } + } + break; + case 6: + local size = obj.getVar("atomicsmashTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); + if(masterAppendage) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); + } + } + } + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(12, 12); + speedRate = 18000 / speedRate; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/start.ani", -50, 1, 30); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + return true; +} + +function onTimeEvent_Atomicsmash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Atomicsmash(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Atomicsmash(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut")){ + obj.getVar("atomicsmashTar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + break; + case 2: + break; + } +} + +//逆鳞震 +function checkExecutableSkill_Dangerousscale(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DANGEROUSSCALE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DANGEROUSSCALE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Dangerousscale(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Dangerousscale(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE01_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + // obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_DANGEROUSSCALE); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/dangerousscale/dangerousscale01_casting.ani"), -150, -75); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/dangerousscale/dangerousscalecasting_00.ani"), -150, -75); + break; + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE02_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 3800 / currentAni.getDelaySum(0 ,0); + currentAni.setSpeedRate(speedRate.tofloat() * 2.0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02_after_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02dust_front.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02dust_back.ani", 0, -1, -1); + break; + case 2: + sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE03_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DANGEROUSSCALE, -1, 0, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 4); + sizeRate = sizeRate * sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 3) / 100; + local isTalisman = 0; + if(sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 15) > 0){ + isTalisman = 1; + totalDamage = totalDamage * 110 / 100; + sizeRate = sizeRate * 125 / 100; + } + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643023,0,0,0,sq_GetDirection(obj),1,totalDamage,sizeRate,isTalisman,0,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ + setStageofhermitAppendage(obj); + } + break; + } +} + +function onEndCurrentAni_Dangerousscale(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_DANGEROUSSCALE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_Dangerousscale(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + local vz = sq_GetUniformVelocity(0, 250, stateTime, delaySum); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +THEBEST7HIT_STONE <- 0 +//逆龙七杀 +function checkExecutableSkill_Thebest7hit(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THEBEST7HIT); + if (isUse){ + local isTalisman = 0,skill = sq_GetSkill(obj, SKILL_BYKK_THEBEST7HIT); + if(sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 10) > 0) isTalisman = 1; + obj.sq_IntVectClear(); + if(THEBEST7HIT_STONE > 0 || isTalisman > 0) obj.sq_IntVectPush(7); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thebest7hit(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_GALESMASH){ + if(obj.getVar("skillCancel").getBool(0)) return true; + else return false; + } + return true; +} + +function onSetState_Thebest7hit(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK1BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk1slash_eff_b.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("Thebest7hitTar").clear_obj_vector(); + obj.getVar("Thebest7hitBool").setBool(0, true); + obj.getVar("Thebest7hitBool").setBool(1, false); + obj.sq_PlaySound("R_PR_BESTSEVEN"); + sq_SetMyShake(obj, 2, 80); + break; + case 1: + local speedUp = obj.sq_GetVectorData(datas, 1); + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK2BODY_01); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk2slash_eff_b.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(speedUp > 0){ + print("speed up!"); + obj.getVar("Thebest7hitBool").setBool(1, true); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); + currentAni.setSpeedRate(speedRate * 1.3); + } + obj.sq_PlaySound("R_PR_BESTSEVEN"); + break; + case 2: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK3BODY_01); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk3slash_eff_a.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("Thebest7hitBool").getBool(1)){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); + currentAni.setSpeedRate(speedRate * 1.3); + } + obj.sq_PlaySound("R_PR_BESTSEVEN"); + break; + case 3: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK4BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk4slash_eff_a.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("Thebest7hitBool").getBool(1)){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); + currentAni.setSpeedRate(speedRate * 1.3); + } + obj.sq_PlaySound("R_PR_BESTSEVEN"); + break; + case 4: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK5BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk5slash_eff_b.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("Thebest7hitBool").getBool(1)){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); + currentAni.setSpeedRate(speedRate * 1.3); + } + obj.sq_PlaySound("PR_BESTSEVEN_09"); + break; + case 5: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK6BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk6slash_eff_c.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("Thebest7hitBool").getBool(1)){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); + currentAni.setSpeedRate(speedRate * 1.3); + } + obj + break; + case 6: + sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK7BODY_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("Thebest7hitBool").getBool(1)){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); + currentAni.setSpeedRate(speedRate * 1.3); + } + obj.sq_PlaySound("PR_BESTSEVEN_FIN"); + break; + case 7: + obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_TALISMAN_THEBEST7HIT_TALISMANBODY); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 10, 400); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("BEST_SEVEN_01"); + sq_SetMyShake(obj, 5, 300); + break; + } +} + +function onEndCurrentAni_Thebest7hit(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("Thebest7hitTar").get_obj_vector_size() > 0){ + local isDownSkillLastKey = 0; + if(obj.getVar("Thebest7hitBool").getBool(0) == false) isDownSkillLastKey = 1; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(isDownSkillLastKey); + obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 1: + case 2: + case 3: + case 4: + case 5: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_AUTO, true); + break; + case 6: + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_Thebest7hit(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 5: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local vz = sq_GetUniformVelocity(0, 200, stateTime, delaySum); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onProcCon_Thebest7hit(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("Thebest7hitBool").getBool(0)){ + obj.setSkillCommandEnable(SKILL_BYKK_THEBEST7HIT, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_THEBEST7HIT); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ + obj.getVar("Thebest7hitBool").setBool(0, false); + } + } + break; + } +} + +function onKeyFrameFlag_Thebest7hit(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("BEST_SEVEN_01"); + sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, 560); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk1text_b.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 0, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,1,speedRate,0,0,0,0); + break; + case 201: + obj.sq_PlaySound("BEST_SEVEN_02"); + sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 320); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk2text_b.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 1, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,2,speedRate,0,0,0,0); + break; + case 301: + obj.sq_PlaySound("BEST_SEVEN_03"); + sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 240); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk3text_b.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 2, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,3,speedRate,0,0,0,0); + break; + case 401: + obj.sq_PlaySound("BEST_SEVEN_04"); + sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 240); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk4text_a.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 3, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,4,speedRate,0,0,0,0); + break; + case 501: + obj.sq_PlaySound("BEST_SEVEN_05"); + sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 160); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk5text_b.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 4, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,5,speedRate,0,0,0,0); + break; + case 601: + obj.sq_PlaySound("BEST_SEVEN_06"); + sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 240); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk6text_b.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 5, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,6,speedRate,0,0,0,0); + sq_SetMyShake(obj, 6, 150); + break; + case 701: + obj.sq_PlaySound("BEST_SEVEN_07"); + sq_flashScreen(obj,0,160,400,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 320); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk7finish_word_7th.ani", 0, 1, 1); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + // local pAni = pooledObj.getCurrentAnimation(); + // pAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 6, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,7,speedRate,0,0,0,0); + sq_SetMyShake(obj, 10, 500); + local size = obj.getVar("Thebest7hitTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Thebest7hitTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut"); + } + } + break; + case 1001: + //`create talisman charge effect` + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_castingend_02.ani", -50, 1, 30); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_atk1text.ani", 0, 0, 0); + else pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_atk1textleftlook.ani", 0, 0, 0); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THEBEST7HIT); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 0, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 1, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 2, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 3, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 4, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 5, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 6, skillLevel) - 100; + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3) * 110 / 100; + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643025,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,speedRate,0,0,0,0,0); + break; + case 1002: obj.sq_PlaySound("PR_BESTSEVEN_FIN"); break; + case 1003: + obj.sq_PlaySound("BEST_SEVEN_07"); + sq_flashScreen(obj,0,300,100,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, 560); + break; + } + return true; +} + +function onTimeEvent_Thebest7hit(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thebest7hit(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_THEBEST7HIT){ + local size = obj.getVar("Thebest7hitTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Thebest7hitTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut"); + } + } + } +} + +//式神封灵阵 +function checkExecutableSkill_Pentagon(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PENTAGON); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PENTAGON, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Pentagon(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Pentagon(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/pentagon/pentagonobject/cast/pentagoncast01.ani"), 0, 0); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_PENTAGON); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_PENTAGON, skill_level); + local timeRate = delaySum * 100 / castTime; + currentAni.setSpeedRate(timeRate.tofloat()); + sq_StartDrawCastGauge(obj, castTime, true); + break; + case 1: + sq_EndDrawCastGauge(obj); + obj.sq_PlaySound("PR_PENTAGON"); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/pentagon/pentagonobject/cast/pentagoncastafter.ani", 0, 0, 0); + + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 12); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 19); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 15); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PENTAGON, -1, 1, bonusRate); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PENTAGON, -1, 2, bonusRate); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643026,250,25,0,sq_GetDirection(obj),totalDamage,totalDamageExp,sizeRate,lifeTime,hitTime,0,0,0); + break; + } +} + +function onEndCurrentAni_Pentagon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_PENTAGON, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Pentagon(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Pentagon(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Pentagon(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Pentagon(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_PENTAGON) + sq_EndDrawCastGauge(obj); +} + +//式神灭却·合 +function checkExecutableSkill_Fourgodpower(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FOURGODPOWER); + if (isUse){ + local state = 0; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + state = 10; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + state = 20; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(state); + obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Fourgodpower(obj) +{ + if (!obj) return false; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + return false; + } + return true; +} + +function onSetState_Fourgodpower(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 10: + obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_CAST_BODY); + obj.getVar("fourgodpowerBool").setBool(0, true); + obj.getVar("fourgodpowerBool").setBool(1, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 11: + local isRemote = obj.sq_GetVectorData(datas, 1); + local isStrong = obj.sq_GetVectorData(datas, 2); + obj.getVar("fourgodpowerSet").setInt(0, isRemote); + obj.getVar("fourgodpowerSet").setInt(1, isStrong); + if(isRemote > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_START_REMOTE_BODY); + else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_START_BODY); + obj.sq_PlaySound("FOURGODPOWER_WATER_1"); + obj.sq_PlaySound("PR_FOURGODPOWER_WATER_01"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 12: + local isRemote = obj.getVar("fourgodpowerSet").getInt(0); + local isStrong = obj.getVar("fourgodpowerSet").getInt(1); + if(isRemote > 0){ + if(isStrong > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPSTRONG_REMOTE_BODY); + else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPBASIC_REMOTE_BODY); + } + else{ + if(isStrong > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPSTRONG_BODY); + else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPBASIC_BODY); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("FOURGODPOWER_WATER_2", 2333); + if(isStrong > 0) sq_SetMyShake(obj, 2, 3120); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 8); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 7); + local lifeTime = 350 + hitMax * hitTime; + if(isStrong > 0) lifeTime = 350 + hitMax * hitTime / 2; + if(isRemote > 0) lifeTime = 350; + obj.setTimeEvent(1, lifeTime, 1, false); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 4, bonusRate); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 5, bonusRate); + if(isRemote > 0) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643037,60,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,isStrong,0,0,0); + else createSkillPassive_Priest_3exorcist_bykk(obj,obj,643036,0,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,isStrong,0,0,0); + break; + case 13: + obj.stopSound(2333); + local isRemote = obj.getVar("fourgodpowerSet").getInt(0); + local isStrong = obj.getVar("fourgodpowerSet").getInt(1); + if(isRemote > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_END_REMOTE_BODY); + else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_END_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_flashScreen(obj,0,60,20,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + obj.setTimeEvent(2, delay, 1, false); + break; + case 20: + obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_START_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + print("speedRate = "+speedRate); + if(speedRate > 200) speedRate = 200; + obj.getVar("fourgodpowerSet").setInt(2, speedRate); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_front_00.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_back_00.ani", 0, -1, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_bottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("FOURGODPOWER_FIRE_1"); + break; + case 21: + obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_1STATTACK_BODY); + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("fourgodpowerSet").getInt(2); + currentAni.setSpeedRate(speedRate.tofloat()); + local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_front_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_back_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_bottom_00.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], 0, i==0?1:0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + sq_flashScreen(obj,0,80,0,178, sq_RGB(255,90,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 15, 250); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_01"); + else obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_04"); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_FOURGODPOWER_1STATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + break; + case 22: + obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_2NDATTACK_BODY); + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("fourgodpowerSet").getInt(2); + currentAni.setSpeedRate(speedRate.tofloat()); + local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_startfront_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_startbottom_00.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], 0, i==0?1:0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(i == 1) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + obj.sq_PlaySound("FOURGODPOWER_FIRE_2"); + obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_02"); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 1, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_FOURGODPOWER_2NDATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setChakraAttackInfo(obj); + break; + case 23: + obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_3RDATTACK_BODY); + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("fourgodpowerSet").getInt(2); + currentAni.setSpeedRate(speedRate.tofloat()); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattackhit_speedline_00.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.sq_PlaySound("FOURGODPOWER_FIRE_3"); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_05"); + else obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_03"); + sq_flashScreen(obj,240,0,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + break; + } +} + +function onEndCurrentAni_Fourgodpower(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + case 11: + case 12: + case 20: + case 21: + case 22: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + if(subState == 10){ + if(obj.getVar("fourgodpowerBool").getBool(0) == false) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + if(obj.getVar("fourgodpowerBool").getBool(1) == false) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + } + obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_AUTO, true); + break; + case 13: + case 23: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Fourgodpower(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + if(obj.getVar("fourgodpowerBool").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + obj.getVar("fourgodpowerBool").setBool(0, false); + } + } + if(obj.getVar("fourgodpowerBool").getBool(1)){ + obj.setSkillCommandEnable(SKILL_BYKK_FOURGODPOWER, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FOURGODPOWER); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ + obj.getVar("fourgodpowerBool").setBool(1, false); + } + } + break; + } +} + +function onKeyFrameFlag_Fourgodpower(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 21: + //`Rise Stone` + local speedRate = obj.getVar("fourgodpowerSet").getInt(2); + local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_risefront_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_riseback_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_risebottom_00.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], i==2?-300:0, i==0?1:0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + break; + case 22: sq_SetMyShake(obj, 30, 200); break; + case 23: + //`Create Wave` + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 2, bonusRate); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643038,0,0,0,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); + break; + case 31: + sq_flashScreen(obj,0,100,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + break; + case 32: + sq_flashScreen(obj,0,160,0,178, sq_RGB(255,90,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 30, 400); + //`Create Stone` + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_groundhit_00.ani", 0, 1, 1); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_flash_00.ani", 0, -1, -1); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_hit_bottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 3, bonusRate); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 1); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643035,0,0,0,sq_GetDirection(obj),totalDamage,hitMax,0,0,0,0,0,0); + break; + case 33: + sq_flashScreen(obj,0,0,120,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + break; + } + return true; +} + +function onTimeEvent_Fourgodpower(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(13); + obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_PlaySound("FOURGODPOWER_WATER_3"); + sq_flashScreen(obj,0,10,250,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 12, 350); + break; + } +} + +function onEndState_Fourgodpower(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_FOURGODPOWER) obj.stopSound(2333); +} + +//苍龙逐日 +function checkExecutableSkill_Bluedragon(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLUEDRAGON); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLUEDRAGON, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Bluedragon(obj) +{ + if (!obj) return false; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + return false; + } + return true; +} + +function onSetState_Bluedragon(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(PRANI_BYKK_BLUEDRAGON_START_BODY); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + } + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("bluedragonTotem").clear_obj_vector(); + obj.getVar("bluedragonSet").setInt(0, -60); + //obj.setTimeEvent(1, 20, -1, false); + local bonusRate = 1.0; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLUEDRAGON); + if(skillLevel >= 3) sq_SendMessage(obj, 0, 1, 0); + if(skillLevel >= 9) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_BLUEDRAGON, 3, skillLevel).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLUEDRAGON, -1, 1, bonusRate); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLUEDRAGON, -1, 2, 1.0) + 1100; + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643039,100,0,150,sq_GetDirection(obj),1,totalDamage,sizeRate,speedRate,0,0,0,0); + break; + } +} + +function onEndCurrentAni_Bluedragon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Bluedragon(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Bluedragon(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + //`dragonTotemCreate` + break; + case 2: + //`dragonCreate` + obj.sq_PlaySound("PR_DRAGONSPEAR"); + break; + case 16: + //`dragonDown` + obj.stopTimeEvent(1); + local totemObj = obj.getVar("bluedragonTotem").get_obj_vector(0); + if(totemObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(totemObj); + // colObj.getVar("custom").setInt(3, -60); + colObj.setTimeEvent(1, 1000, 1, true); + } + break; + case 17: + //`cameraBack` + break; + case 18: obj.sq_PlaySound("PR_DRAGONSPEAR_SHOT"); break; + } + return true; +} + +function onCreateObject_Bluedragon(obj, createObject) +{ + if(!obj) return; + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + // local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + // local index = colObj.getCollisionObjectIndex(); + // print("index = "+index); + // if(index == 24030){ + // } + } +} + +function onTimeEvent_Bluedragon(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + // if(obj.isMyControlObject()){ + // local angle = obj.getVar("bluedragonSet").getInt(0); + // local angleSave = angle; + // if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + // angle = angle + 1; + // } + // else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + // angle = angle - 1; + // } + // if(angle > -30) angle = -20; + // else if(angle < -60) angle = -80; + // obj.getVar("bluedragonSet").setInt(0, angle); + // if(angle != angleSave){ + // obj.sq_StartWrite(); + // obj.sq_WriteDword(angle); + // sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_BLUEDRAGON); + // } + // } + break; + } +} + +function onChangeSkillEffect_Bluedragon(obj, skillIndex, reciveData) +{ + if(!obj) return; + local angle = reciveData.readDword(); + print("angle = "+angle); + // local totemObj = obj.getVar("bluedragonTotem").get_obj_vector(0); + // if(totemObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(totemObj); + // colObj.getVar("custom").setInt(3, angle); + // sq_SetCustomRotate(colObj, sq_ToRadian(angle.tofloat())); + // } +} + +function onEndState_Bluedragon(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BLUEDRAGON){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLUEDRAGON); + if(skillLevel >= 3) sq_SendMessage(obj, 0, 0, 0); + } +} + +//真龙焚天 +function checkExecutableSkill_Advanceddragon(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ADVANCEDDRAGON); + if (isUse){ + local state = 0; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) state = 1; + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) state = 2; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(state); + obj.sq_AddSetStatePacket(STATE_BYKK_ADVANCEDDRAGON, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Advanceddragon(obj) +{ + if (!obj) return false; + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + return false; + } + return true; +} + +function onSetState_Advanceddragon(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 1: + obj.sq_SetCurrentAnimation(PRANI_BYKK_ADVANCEDDRAGON_BRIGHT_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("PR_ADVANCED_DRAGON"); + break; + case 2: + obj.sq_SetCurrentAnimation(PRANI_BYKK_ADVANCEDDRAGON_PASSION_ATTACK); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 2, bonusRate); + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,0,0,sq_GetDirection(obj),2,totalDamage,speedRate,0,0,0,0,0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/front/attack_dust_front_normal.ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.sq_PlaySound("PR_ADVANCED_DRAGON"); + break; + case 100: + local ani = obj.sq_GetStayAni(); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); + else obj.getVar("element_kk").setInt(0, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); + else obj.getVar("element_kk").setInt(1, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); + else obj.getVar("element_kk").setInt(2, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); + else obj.getVar("element_kk").setInt(3, 0); + obj.setTimeEvent(1, 50, 1, false); + print("getatkelement_success"); + break; + } +} + +function onEndCurrentAni_Advanceddragon(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Advanceddragon(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Advanceddragon(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); + if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; + print("bonusRate = "+ bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 0, bonusRate); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 1, bonusRate); + local range = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 2); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 4); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 3); + if(speedRate >= 150) speedRate = 150; + createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,250,0,0,sq_GetDirection(obj),1,totalDamage,totalDamageExp,range,hitTime,lifeTime,speedRate,0); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/dust/attack_dusta7.ani", 0, 0, 0); + break; + } + return true; +} + +function onTimeEvent_Advanceddragon(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +//////// +function onStart_appendage_bigweaponmastery(appendage)//巨兵精通 1/4 +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType != 1 && weaponSubType != 4) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BIGWEAPONMASTERY); + local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 0, skillLevel); + local pysicalAtkRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 1, skillLevel); + local magicalAtkRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 3, skillLevel); + local cooltimeRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 4, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("prBigweaponmastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prBigweaponmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, -(stuckRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (pysicalAtkRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (magicalAtkRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (cooltimeRate * -0.1).tofloat()); + } +} + +function onStart_appendage_forceofexorcism(appendage)//驱魔震慑 +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local attackRate = sq_GetIntData(obj, SKILL_BYKK_FORCEOFEXORCISM, 0); + local moveSpeed = sq_GetIntData(obj, SKILL_BYKK_FORCEOFEXORCISM, 1); + local change_appendage = appendage.sq_getChangeStatus("prForceofexorcism"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prForceofexorcism",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, moveSpeed.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + } +} + +function onStart_appendage_stageofhermit_magic(appendage)//式神之力_魔法 +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT); + local attackRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 2, skillLevel); + local hitRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 3, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("prStageofhermit_magic"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prStageofhermit_magic",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (hitRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + } +} + +function onStart_appendage_stageofhermit_pysic(appendage)//式神之力_力量 +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT); + local attackRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 0, skillLevel); + local hitRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 1, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("prStageofhermit_magic"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prStageofhermit_magic",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (hitRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + } +} + +function setStageofhermitAppendage(obj) +{ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT); + if(skillLevel > 0){ + local buffTime = sq_GetIntData(obj, SKILL_BYKK_STAGEOFHERMIT, 2); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + local apdPath = "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STAGEOFHERMIT, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + local apdPath = "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STAGEOFHERMIT, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + } +} + +function setSkillBonusRate_3Exorcist_bykk(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BOOKOFEXOCISM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BOOKOFEXOCISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_BOOKOFEXOCISM))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_RADIATEFIGHTINGAURA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_RADIATEFIGHTINGAURA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_RADIATEFIGHTINGAURA))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_GODOFEXORCISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM))) / 1000; + print("bonusRate3 = "+bonusRate); + local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; + local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFCALMNESS, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFCALMNESS))) / 1000; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFPASSION, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFPASSION))) / 1000; + } + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function onStartDungeon_PrExorcist_bykk(obj) +{ + obj.getVar("isReset").setInt(0, 1); + setSkillBonusRate_3Exorcist_bykk(obj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(100); + obj.sq_AddSetStatePacket(STATE_BYKK_ADVANCEDDRAGON, STATE_PRIORITY_IGNORE_FORCE, true); +} + +function reset_Priest(obj) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 3){ + if(obj.getVar("isReset").getInt(0) == 0) setSkillBonusRate_3Exorcist_bykk(obj); + } +} + +function ProcPassiveSkill_3PrExorcist_bykk(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_BYKK_BIGWEAPONMASTERY: + local append = "character/priest/3exorcist_bykk/passiveskill/ap_bigweaponmastery.nut"; + if (skill_level > 0) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, append, true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skill_index, skill_level); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + } else { + if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, append)) { + CNSquirrelAppendage.sq_RemoveAppendage(obj, append); + } + } + break; + case SKILL_BYKK_FORCEOFEXORCISM: + local append = "character/priest/3exorcist_bykk/passiveskill/ap_forceofexorcism.nut"; + if (skill_level > 0) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, append, true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skill_index, skill_level); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + } else { + if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, append)) { + CNSquirrelAppendage.sq_RemoveAppendage(obj, append); + } + } + break; + } +} + +function setChakraAttackInfo(obj) +{ + local skill = sq_GetSkill(obj, SKILL_BYKK_FORCEOFEXORCISM); + if(skill.isSealFunction()) sq_setAttackInfoType(obj, ATTACKTYPE_MAGICAL); + else sq_setAttackInfoType(obj, ATTACKTYPE_PHYSICAL); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = obj.getVar("element_kk").getInt(0); + local element_kk_water = obj.getVar("element_kk").getInt(1); + local element_kk_dark = obj.getVar("element_kk").getInt(2); + local element_kk_light = obj.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function setAttackType_2Exorcist(sqrChr, obj) +{ + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local skill = sq_GetSkill(sqrChr, SKILL_BYKK_FORCEOFEXORCISM); + if(skill.isSealFunction()){ + sq_setAttackInfoType(obj, ATTACKTYPE_MAGICAL); + obj.getVar("atkType").setInt(0, 1); + } + else{ + sq_setAttackInfoType(obj, ATTACKTYPE_PHYSICAL); + obj.getVar("atkType").setInt(0, 0); + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + } +} + +function onStart_appendage_prchakraofgod(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + sq_clearSkillData(); + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)) / 10; + print("bonusRate = "+bonusRate); + sq_setLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_CUTTINGDARKNESS, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_CUTTINGDARKNESS, 2, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_BAEKHO, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_DANGEROUSSCALE, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_PENTAGON, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_PENTAGON, 2, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 2, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 3, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 4, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 5, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 6, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 2, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 0, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 1, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 2, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 3, bonusRate, 1); + sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 4, bonusRate, 1); + sq_setLevelData(obj, 99, 0, bonusRate, 1); + sq_setLevelData(obj, 99, 3, 10, 1); +} + + + +function setCustomData_po_2nd_priest(obj, receiveData) +{ + setCustomData_po_qq506807329new_priest_24374(obj, receiveData); +} + +function setState_po_2nd_priest(obj, state, datas) +{ + setState_po_qq506807329new_priest_24374(obj, state, datas); +} + +function onEndCurrentAni_po_2nd_priest(obj) +{ + onEndCurrentAni_po_qq506807329new_priest_24374(obj); +} + +function onTimeEvent_po_2nd_priest(obj, timeEventIndex, timeEventCount) +{ + onTimeEvent_po_qq506807329new_priest_24374(obj, timeEventIndex, timeEventCount); +} + +function onKeyFrameFlag_po_2nd_priest(obj, flagIndex) +{ + onKeyFrameFlag_po_qq506807329new_priest_24374(obj, flagIndex); +} + +function onAttack_po_2nd_priest(obj, damager, boundingBox, isStuck) +{ + onAttack_po_qq506807329new_priest_24374(obj, damager, boundingBox, isStuck); +} + +function getCustomHitEffectFileName_po_2nd_priest(obj, isAttachOnDamager) +{ + getCustomHitEffectFileName_po_qq506807329new_priest_24374(obj, isAttachOnDamager); +} + +function onChangeSkillEffect_po_2nd_priest(obj, skillIndex, reciveData) +{ + onChangeSkillEffect_po_qq506807329new_priest_24374(obj, skillIndex, reciveData); +} + +function destroy_po_2nd_priest(obj) +{ + destroy_po_qq506807329new_priest_24374(obj); +} + +function procAppend_po_2nd_priest(obj) +{ + procAppend_po_qq506807329new_priest_24374(obj); +} + + + + +//////////////////////2 + +//正义铁拳 +function checkExecutableSkill_AggressiveJudgement(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AGGRESSIVEJUDGEMENT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_AGGRESSIVEJUDGEMENT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_AggressiveJudgement(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_AggressiveJudgement(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(378); + if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,150,0,0,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(379); + obj.setTimeEvent(1, 200, -1, false); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 3200 / currentAni.getDelaySum(0, 0); + createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,300,0,0,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,3,speedRate,0,0,0,0,0,0,0); + break; + case 2: + obj.sq_SetCurrentAnimation(381); + break; + case 3: + obj.sq_SetCurrentAnimation(382); + obj.sq_PlaySound("R_PR_AGGRESSIVE_JUDGEMENT_03"); + obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_FINISH"); + sq_flashScreen(obj,0,50,600,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 20, 400); + //`createHitSuccessEffect` 84 0 66 + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/2infighter_bykk/aggressivejudgement/dlasthit/dfront_00.ani", 84, 0, 66); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/2infighter_bykk/aggressivejudgement/dlasthit/dback_04.ani", 84, -1, 65); + //`stopMultiHitSound` + obj.stopTimeEvent(1); + obj.stopSound(2333); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 186)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_AggressiveJudgement(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_AGGRESSIVEJUDGEMENT, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_AggressiveJudgement(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_AggressiveJudgement(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 103: + obj.sq_PlaySound("R_PR_AGGRESSIVE_JUDGEMENT_01"); + obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_START"); + sq_SetMyShake(obj, 13, 300); + //`createGroundExpObject` 115 0 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 0, 1.0); + createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,115,0,0,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,1,totalDamage,0,0,0,0,0,0,0); + break; + case 202: + sq_SetMyShake(obj, 2, 32); + //`createMultiHitObject` 112 0 73 + local currentAni = obj.getCurrentAnimation(); + local time = currentAni.getDelaySum(2, 48); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 1, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_AGGRESSIVEJUDGEMENT, 6); + local hitTime = time / (hitMax + 1); + print("hitMax = "+hitMax); + print("hitTime = "+hitTime); + createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,112,0,73,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,2,totalDamage,hitMax,hitTime,0,0,0,0,0); + break; + case 203: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 48); + sq_SetMyShake(obj, 2, delay); + break; + case 303: + sq_flashScreen(obj,250,0,250,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + break; + } + return true; +} + +function onTimeEvent_AggressiveJudgement(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_BEAT", 2333); + break; + } +} + +function onEndState_AggressiveJudgement(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_AGGRESSIVEJUDGEMENT){ + } +} + +///////////////////////////////1 + +//神罚之锤 : 天怒 +function checkExecutableSkill_Astrafe(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ASTRAFE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_ASTRAFE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Astrafe(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Astrafe(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(385); + else obj.sq_SetCurrentAnimation(377); + obj.getVar("AstrafeJump").setBool(0, false); + sq_flashScreen(obj,0,0,300,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startfront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startback_01.ani", 0, -1, -1); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startback_04.ani", 0, -1, -1); + obj.sq_PlaySound("PR_ASTRAPE_V1_01"); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(384); + else obj.sq_SetCurrentAnimation(376); + local isBigJump = obj.sq_GetVectorData(datas, 1); + if(isBigJump > 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/jump_bigfeather.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/jumpfeather_00.ani", 0, 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/userbuff_front.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/userbuffback_03.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/buffarea_00.ani", 0, 1, 1); + local speed = 300.0; + if(isBigJump > 0) speed = 500.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + //`buff` + break; + case 2: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(383); + else obj.sq_SetCurrentAnimation(375); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/boombodyfront_01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/boombody_back.ani"), 0, 0); + obj.setTimeEvent(1, 5, 9, false); + //`sound1` + obj.sq_PlaySound("R_PR_ASTRAPE_V2_02"); + break; + } +} + +function onEndCurrentAni_Astrafe(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + if(subState == 1){ + if(obj.getVar("AstrafeJump").getBool(0)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + } + obj.sq_AddSetStatePacket(SKILL_BYKK_ASTRAFE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Astrafe(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("AstrafeJump").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + obj.sq_StartWrite(); + obj.sq_WriteDword(1); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_ASTRAFE); + } + } + break; + } +} + +function onProc_Astrafe(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fireT = currentAni.getDelaySum(false); + local vz = sq_GetUniformVelocity(0, 250, stateTime, fireT); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onChangeSkillEffect_Astrafe(obj, skillIndex, reciveData) +{ + if(!obj) return; + local set = reciveData.readDword(); + if(set == 1) obj.getVar("AstrafeJump").setBool(0, true); +} + +function onKeyFrameFlag_Astrafe(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 110: sq_SetMyShake(obj, 1, 200); break; + case 0: + sq_SetMyShake(obj, 25, 300); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boombodyfront_04.ani", 0, 1, -sq_GetZPos(obj)); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boomback_00.ani", 0, -1, -sq_GetZPos(obj)); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ASTRAFE, -1, 0, 1.0); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ASTRAFE, -1, 1, 1.0); + createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,200,0,0,sq_GetDirection(obj),1,SKILL_BYKK_ASTRAFE,1,totalDamage,totalDamageExp,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Astrafe(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vz = sq_GetUniformVelocity(250, 0, timeEventCount, 9); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_Astrafe(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_ASTRAFE){ + } +} + + + +function createSkillPassive_Priest_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + diff --git a/user/116.205.165.25/2_atpriest_1.c b/user/116.205.165.25/2_atpriest_1.c new file mode 100644 index 0000000..46fa267 --- /dev/null +++ b/user/116.205.165.25/2_atpriest_1.c @@ -0,0 +1,3758 @@ + + +function createOnlyDrawObject_ATPriest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_ATPriest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createSkillPassive_ATPriest_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + + +function getAttackAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + print("attackIndex = "+index); + local ani = obj.sq_GetAttackAni(index); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_MISTRESS_ATTACK1 + index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + local aniName = ["demonizationattack_basic_a_body","demonizationattack_basic_b_body","demonizationattack_basic_c_body"]; + ani = getCurrentAnimation_demonization(obj, aniName[index], false); + } + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEATTACK1_BODY + index); + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_INQUISITOR_ATTACK1 + index); + } + return ani; +} + +function getStayAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetStayAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_stay", false); + return ani; + } + return ani; +} + +function getMoveAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetMoveAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_move", false); + return ani; + } + return ani; +} + +function getSitAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetSitAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_sit", false); + return ani; + } + return ani; +} + +function getDamageAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetDamageAni(index); + local aniName = ["demonization_damage1","demonization_damage2"]; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, aniName[index], false); + return ani; + } + return ani; +} + +function getDownAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDownAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_down", false); + return ani; + } + return ani; +} + +function getOverturnAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetOverturnAni(); + return ani; +} + +function getJumpAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_jump", false); + return ani; + } + return ani; +} + +function getJumpAttackAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAttackAni(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEJUMPATTACK_BODY); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonizationattack_jump_body", false); + return ani; + } + return ani; +} + +function getRestAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetRestAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_stay", false); + return ani; + } + return ani; +} + +function getThrowChargeAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetThrowChargeAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_throw1", false); + return ani; + } + return ani; +} + +function getThrowShootAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetThrowShootAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_throw2", false); + return ani; + } + return ani; +} + +function getDashAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_dash", false); + return ani; + } + return ani; +} + +function getDashAttackAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAttackAni(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEDASHATTACK_BODY); + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_HOLYFLAME_FRONT_BODY); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonizationattack_dash_body", false); + return ani; + } + return ani; +} + +function getGetItemAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetGetItemAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_sit", false); + return ani; + } + return ani; +} + +function getBuffAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetBuffAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_buff", false); + return ani; + } + return ani; +} + + +function getDefaultAttackInfo_DemonicSwordman(obj, index) +{ + if (!obj) return null; + local attackInfo = obj.sq_GetDefaultAttackInfo(index); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(index == 4) index = 0; + attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERATTACK1 + index); + break; + case 2: + attackInfo = sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INQUISITOR_ATTACK1 + index); + break; + } + return attackInfo; +} + +function getDashAttackInfo_DemonicSwordman(obj) +{ + if (!obj) return null; + local attackInfo = obj.sq_GetDashAttackInfo(); + if(sq_getGrowType(obj) == 1){ + attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERDASHATTACK); + } + return attackInfo; +} + +function getJumpAttackInfo_DemonicSwordman(obj) +{ + if (!obj) return null; + local attackInfo = obj.sq_GetJumpAttackInfo(); + if(sq_getGrowType(obj) == 1){ + attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERJUMPATTACK); + } + return attackInfo; +} + +function onSetState_ATPriestAttack(obj, state, datas, isResetTimer) +{ + print("sub = "+sq_GetVectorData(datas, 0)); + if(sq_getGrowType(obj) == 4){ + if(sq_GetVectorData(datas, 0) != 0) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){ + //print("test"); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(sq_getGrowType(obj) == 1) { + local attackIndex = sq_GetVectorData(datas, 0); + switch(attackIndex){ + case 0: obj.sq_PlaySound("R_PW_1ATK"); break; + case 1: obj.sq_PlaySound("R_PW_2ATK"); break; + case 2: obj.sq_PlaySound("R_PW_3ATK"); break; + } + } +} + +function onAfterSetState_ATPriestAttack(obj, state, datas, isResetTimer) +{ + // + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: obj.sq_PlaySound("R_PW_INQUISITOR_READING_01"); obj.sq_PlaySound("R_PW_1ATK"); break; + case 1: obj.sq_PlaySound("R_PW_INQUISITOR_READING_02"); obj.sq_PlaySound("R_PW_2ATK"); break; + case 2: obj.sq_PlaySound("R_PW_INQUISITOR_READING_03"); obj.sq_PlaySound("R_PW_3ATK"); break; + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + switch(attackIndex){ + case 0: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack1.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack1_holyflamea_1hitsmokea.ani", 0, 1, 0); + break; + case 1: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack2.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack2_holyflame_2hitsmoke.ani", 0, 1, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 3), 1, false); + break; + case 2: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack3.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack3_holyflame_3hitsmoke.ani", 0, 1, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 6), 1, false); + break; + } + } + } + break; + } + obj.getVar("cansetAttackInfo").setBool(0, true); +} + +function onTimeEvent_ATPriestAttack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + switch(timeEventIndex){ + case 1: + local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0); + if(epObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 2, 100); + colObj.setTimeEvent(1, 1000, 1, true); + return; + } + } + break; + } + break; + } +} + +function onBeforeAttack_ATPriestAttack(obj,damager,boundingBox,isStuck) +{ + if(obj.getVar("cansetAttackInfo").getBool(0)){ + obj.getVar("cansetAttackInfo").setBool(0, false); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + } + } + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } +} + +function onAttack_ATPriestAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +function getAttackCancelStartFrameSize_DemonicSwordman(obj) +{ + local maxAttackNumber = 2; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0) maxAttackNumber = 2; break; + case 4: maxAttackNumber = 2; break; + } + return maxAttackNumber; +} + +function getAttackCancelStartFrame_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local growType = sq_getGrowType(obj); + local frm = obj.sq_GetAttackCancelStartFrame(index); + if(growType == 2) frm = 3; + return frm; +} + +function onSetState_ATPriestDashAttack(obj, state, datas, isResetTimer) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_PlaySound("PW_DASHATK_DM"); + obj.sq_PlaySound("R_SCYTHE"); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_glow.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydusta.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustb.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustc.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayrosea.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayroseb.ani", 0, 1, 0); + } + else obj.sq_PlaySound("R_PW_3ATK"); +} + +function onAfterSetState_ATPriestDashAttack(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashtail.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashdust.ani", 0, 1, 0); + obj.sq_PlaySound("R_PW_3ATK"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dashattack.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atholyflame/holyflame_beffect2_bdodge2.ani", 125, 0, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false); + } + } + break; + } + obj.getVar("cansetAttackInfo").setBool(0, true); +} + +function onTimeEvent_ATPriestDashAttack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + switch(timeEventIndex){ + case 1: + local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0); + if(epObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 2, 100); + colObj.setTimeEvent(1, 1000, 1, true); + return; + } + } + break; + } + break; + } +} + +function onBeforeAttack_ATPriestDashAttack(obj,damager,boundingBox,isStuck) +{ + if(obj.getVar("cansetAttackInfo").getBool(0)){ + obj.getVar("cansetAttackInfo").setBool(0, false); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local totalDamage = sq_GetLevelData(obj, 174, 1, sq_GetSkillLevel(obj, 174)) * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onAttack_ATPriestDashAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +function onKeyFrameFlag_ATPriestDashAttack(obj, flagIndex) +{} + +function onSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer) +{ + // print("state = "+state); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_effb01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayrosea.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayroseb.ani"), 0, 0); + obj.sq_PlaySound("PW_JUMPATK_DM"); + obj.sq_PlaySound("R_SCYTHE"); + } + else obj.sq_PlaySound("PW_JUMPATK"); +} + +function onAfterSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/jumpattack_effect_jumptail.ani"), 0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jumpattack.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/jumpattack_holyflame_jumpsmoke.ani", 0, 1, 0); + } + } + break; + } + obj.getVar("cansetAttackInfo").setBool(0, true); +} + +function onBeforeAttack_ATPriestJumpAttack(obj,damager,boundingBox,isStuck) +{ + if(obj.getVar("cansetAttackInfo").getBool(0)){ + obj.getVar("cansetAttackInfo").setBool(0, false); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local totalDamage = sq_GetLevelData(obj, 174, 2, sq_GetSkillLevel(obj, 174)) * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onAttack_ATPriestJumpAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +function onKeyFrameFlag_ATPriestJumpAttack(obj, flagIndex) +{ +} + +function onAfterSetState_ATPriestJump(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local isBackStep = sq_GetVectorData(datas, 1); + if(isBackStep == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); + if(!timer){ + obj.getVar("ATPriestJumpTimer").clear_ct_vector(); + obj.getVar("ATPriestJumpTimer").push_ct_vector(); + timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + obj.getVar("ATPriestJumpSet").setBool(0, true); + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jump.ani"), 0, 0); + } + break; + } +} + +function onProc_ATPriestJump(obj) +{ + if(!obj) return; + if(obj.getVar("ATPriestJumpSet").getBool(0)){ + local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + local coolTime = sq_GetIntData(obj, SKILL_BYKK_WILLOFINQUISITOR, 14); + if(currentT >= coolTime){ + obj.setSkillCommandEnable(SKILL_BYKK_PATROLBOMB,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_PATROLBOMB) != -1){ + obj.getVar("ATPriestJumpSet").setBool(0, false); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + obj.setSkillCommandEnable(SKILL_BYKK_ESSENCEOFPHLEGE,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_ESSENCEOFPHLEGE) != -1){ + obj.getVar("ATPriestJumpSet").setBool(0, false); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.getVar("ATPriestJumpSet").setBool(0, false); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } + + } +} + +function onEndState_ATPriestJump(obj, new_state) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(obj.getVar("ATPriestJumpSet").getBool(0)) obj.getVar("ATPriestJumpSet").setBool(0, false); + break; + } +} + + +function onAfterSetState_ATPriestStand(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + obj.getVar("StaySet").setInt(0, 0); + break; + } +} + +function onProc_ATPriestStand(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){ + local poleAni = obj.getCurrentAnimation(); + local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0); + if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){ + obj.getVar("StaySet").setInt(0, poleAniFrameNumber); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); + if(addAppendage){ + addAppendage.sq_DeleteEffectFront(); + switch(poleAniFrameNumber){ + case 15: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/rest.ani"); break;//rest + case 4: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/stay.ani"); break;//stay + case 8: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/move.ani"); break;//move + } + } + } + } + break; + } +} + +function onEndState_ATPriestStand(obj, new_state) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); + if(addAppendage){ + addAppendage.sq_DeleteEffectFront(); + obj.getVar("StaySet").setInt(0, 0); + } + break; + } +} + +function onAfterSetState_ATPriestDash(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dash.ani"), 0, 0); + } + break; + } +} + + + + + + + + + +function procSkill_Temptress_bykk(obj) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_VIOLENTASSAULT,false); + obj.setSkillCommandEnable(SKILL_BYKK_CURE,false); + obj.setSkillCommandEnable(SKILL_BYKK_HOLYSMASH,false); + obj.setSkillCommandEnable(SKILL_BYKK_WEAPONGUARD,false); + obj.setSkillCommandEnable(SKILL_BYKK_TALISMANOFLIGHTNING,false); + obj.setSkillCommandEnable(SKILL_BYKK_PRAYEROFHEAL,false); + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_SINSAYER) > 0 && obj.getVar("setCancelSkill").getBool(10)){ + local skillIndex = [SKILL_BYKK_CARDINALEXECUTION, SKILL_BYKK_DUALSLASH, SKILL_BYKK_ENVIOUSKISS, SKILL_BYKK_FLOWEROFPURIFICATION, SKILL_BYKK_GLUTTONYVOMIT, SKILL_BYKK_GREEDTHELURKER, SKILL_BYKK_HANDAWAKENTOSIN, SKILL_BYKK_LASTGENESIS, SKILL_BYKK_LUSTHAND, SKILL_BYKK_PRIDEACCEL, SKILL_BYKK_ROLLINGRUSH, SKILL_BYKK_SCUDTHEWRATH, SKILL_BYKK_SCYTHEMSSACRE, SKILL_BYKK_SECONDSOUL, SKILL_BYKK_SLOTHBODY, SKILL_BYKK_THIRDRIB]; + for(local i = 0; i < skillIndex.len(); i++){ + if(!sq_GetSkill(obj, skillIndex[i]).isInCoolTime()){ + if(skillIndex[i] == SKILL_BYKK_FLOWEROFPURIFICATION && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) continue; + obj.setSkillCommandEnable(skillIndex[i],true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + print("test"); + obj.getVar("setCancelSkill").setBool(10, false); + switch(skillIndex){ + case SKILL_BYKK_CARDINALEXECUTION: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CARDINALEXECUTION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_DUALSLASH: + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DUALSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_ENVIOUSKISS: + obj.getVar("Enviouskiss_Bool").setBool(0, false); + obj.getVar("Enviouskiss_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ENVIOUSKISS, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_FLOWEROFPURIFICATION: + obj.getVar("Flowerofpurification_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FLOWEROFPURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_GLUTTONYVOMIT: + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_GLUTTONYVOMIT); + obj.getVar("Gluttonyvomit_Count").setInt(0, 0); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GLUTTONYVOMIT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_GREEDTHELURKER: + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GREEDTHELURKER, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_HANDAWAKENTOSIN: + obj.getVar("Handawakentosin_EXP").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_LASTGENESIS: + obj.getVar("Lastgenesis_Tar").clear_obj_vector(); + obj.getVar("Lastgenesis_TarFix").clear_obj_vector(); + obj.getVar("Lastgenesis_Bool").setBool(0, true); + obj.getVar("Lastgenesis_Bool").setBool(1, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Lastgenesis_Bool").setBool(1, true); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LASTGENESIS, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_LUSTHAND: + obj.getVar("lusthand_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_PRIDEACCEL: + obj.getVar("Prideaccel_Move").setBool(0, false); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(4); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_ROLLINGRUSH: + obj.getVar("Rollingrush_Bool").setBool(0, false); + obj.getVar("Rollingrush_Bool").setBool(1, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Rollingrush_Bool").setBool(0, true); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_SCUDTHEWRATH: + obj.getVar("Scudthewrath_Bool").setBool(0, false); + obj.getVar("Scudthewrath_Bool").setBool(1, false); + obj.getVar("Scudthewrath_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SCUDTHEWRATH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_SCYTHEMSSACRE: + obj.getVar("Scythemssacre_Bool").setBool(0, false); + obj.getVar("Scythemssacre_Count").setInt(10, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Scythemssacre_Bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SCYTHEMSSACRE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_SECONDSOUL: + obj.getVar("Secondsoul_Bool").setBool(0, false); + obj.getVar("Scudthewrath_Tar").clear_obj_vector(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Secondsoul_Bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SECONDSOUL, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_SLOTHBODY: + obj.getVar("Slothbody_ani").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_THIRDRIB: + obj.getVar("Thirdrib_Bool").setBool(0, false); + if(false) obj.getVar("Thirdrib_Bool").setBool(0, true); + obj.getVar("Thirdrib_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + } + } + } +} + +function getCurrentAnimation_demonization(obj, aniName, isRewind) +{ + local ani = null; + local aniPath_01 = "character/swordman/dsanimation/atpriest_bykk/", aName = "demonization_" + aniName; + ani = obj.getVar().GetAnimationMap(aName, aniPath_01 + aniName + ".ani"); + if(ani && isRewind) sq_Rewind(ani); + return ani; +} + +function proc_appendage_latentability(appendage) +{ + if(!appendage) return; + local obj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj); + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local t = appendage.getVar("skill_1").get_timer_vector(0); + local t2 = appendage.getVar("skill_2").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t2 && t2.isOnEvent(currentT)){ + local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_LATENTABILITY); + local value57 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 57, skillLevel); //是否释能 + if(value57 > 0){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, -1, false, "appendage/character/ap_skillbonus.nut", true); + AddAppendage.sq_SetValidTime(20000); + AddAppendage.getVar().setInt(10, value57); + // print("bonus = "+AddAppendage.getVar().getInt(10)); + if(value57 > 100){ + local tTerm = t2.getEventTerm(); + if(tTerm == 5000) t2.setEventTerm(20000); + else if(tTerm != 20000) t2.setEventTerm(20000); + } + else { + local tTerm = t2.getEventTerm(); + if(tTerm == 5000) t2.setEventTerm(30000); + else if(tTerm != 30000) t2.setEventTerm(30000); + } + sq_SendCreatePassiveObjectPacket(sqrChr, 990002, 0, 0, 0, 0, sqrChr.getDirection()); + } + + } + if(t && t.isOnEvent(currentT)){ + local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_LATENTABILITY); + local value0 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 0, skillLevel); //力量% + local value1 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 1, skillLevel); //智力% + local value2 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 2, skillLevel); //體力% + local value3 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 3, skillLevel); //精神% + + local value4 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 4, skillLevel); //力量 + local value5 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 5, skillLevel); //智力 + local value6 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 6, skillLevel); //體力 + local value7 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 7, skillLevel); //精神 + + local value8 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 8, skillLevel); //力量增加率% + local value9 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 9, skillLevel); //智力增加率% + local value10 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 10, skillLevel); //體力增加率% + local value11 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 11, skillLevel); //精神增加率% + + local value12 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 12, skillLevel); //力量增加率 + local value13 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 13, skillLevel); //智力增加率 + local value14 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 14, skillLevel); //體力增加率 + local value15 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 15, skillLevel); //精神增加率 + + local value16 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 16, skillLevel); //?擊速度 + local value17 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 17, skillLevel); //釋放速度 + local value18 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 18, skillLevel); //移動速度 + + local value19 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 19, skillLevel); //物理暴擊率 + local value20 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 20, skillLevel); //魔法暴擊率 + + local value21 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 21, skillLevel); //火強 + local value22 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 22, skillLevel); //冰強 + local value23 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 23, skillLevel); //暗強 + local value24 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 24, skillLevel); //光強 + local value25 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 25, skillLevel); //所有屬強 + + local value26 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 26, skillLevel); //CD + if(sq_getJob(sqrChr) == 10 && sq_getGrowType(sqrChr) == 1 && CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/atswordman/1_swordmaster/timeslash/ap_timeslash.nut")){ + value26 = value26 - sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_TIMESLASH, 6, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_TIMESLASH)); + } + + local value27 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 27, skillLevel); //物理暴傷增加率 + local value28 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 28, skillLevel); //魔法暴傷增加率 + + local value29 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 29, skillLevel); //物理攻擊力 + local value30 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 30, skillLevel); //魔法攻擊力 + local value31 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 31, skillLevel); //獨立物理攻擊力 + local value32 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 32, skillLevel); //獨立魔法攻擊力 + + local valueMax = [value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15, value16, value17, value18, value19, value20, value21, value22, value23, value24, value25, value26, value27, value28, value29, value30]; + + for(local i = 0; i < valueMax.len(); i++){ + if(valueMax[i] == appendage.getVar("value").getInt(i)) continue; + else{ + appendage.getVar("value").setInt(i, valueMax[i]); + local change_appendage = appendage.sq_getChangeStatus("latentability"); + if(!change_appendage){ + change_appendage = appendage.sq_AddChangeStatus("latentability",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value0); + } + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value0.tofloat()); //力量% + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, true, value1.tofloat()); //智力% + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, true, value2.tofloat()); //體力% + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, true, value3.tofloat()); //精神% + + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, value4.tofloat()); //力量+ + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, value5.tofloat()); //智力+ + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, value6.tofloat()); //體力+ + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, value7.tofloat()); //精神+ + + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK_BONUS, true, value8.tofloat()); //力量增加率% + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK_BONUS, true, value9.tofloat()); //智力增加率% + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, value10.tofloat()); //體力增加率% + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, value11.tofloat()); //精神增加率% + + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, value12.tofloat()); //力量增加率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, value13.tofloat()); //智力增加率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, value14.tofloat()); //體力增加率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, value15.tofloat()); //精神增加率 + + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, value16.tofloat()); //攻擊速度 + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, true, value17.tofloat()); //釋放速度 + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, value18.tofloat()); //移動速度 + + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, value19.tofloat()); //物理暴擊率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, value20.tofloat()); //魔法暴擊率 + + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, value21.tofloat()); //火強 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, value22.tofloat()); //冰強 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, value23.tofloat()); //暗強 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, value24.tofloat()); //光強 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_ALL, false, value25.tofloat()); //所有屬強 + + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, value26.tofloat()); //CD + + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (value27 / 0.667).tofloat()); //物理暴傷增加率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (value28 / 0.667).tofloat()); //魔法暴傷增加率 + + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, value29.tofloat()); //物理攻擊力 + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, value30.tofloat()); //魔法攻擊力 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, value31.tofloat()); //獨立物理攻擊力 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, value32.tofloat()); //獨立魔法攻擊力 + } + } + } + } +} + + +function onStart_appendage_latentability(appendage) +{ + if(!appendage) return; + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(500, -1); + t_01.resetInstant(0); + for(local i = 0; i < 29; i++){ + appendage.getVar("value").setInt(i, 0); + } + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(5000, -1); + t_02.resetInstant(0); + t_02.setEventOnStart(true); +} + +function onEnd_appendage_latentability(appendage) +{ + if(!appendage) return; + local obj = appendage.getParent(); +} + + + + + + +//惩戒十字 +function checkExecutableSkill_Crossofpunishment(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT); + if (isUse){ + obj.getVar("Crossofpunishment").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("Crossofpunishment").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Crossofpunishment(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Crossofpunishment(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CROSSOFPUNISHMENT_A_BODY); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_a_basic_slash02.ani"), 0, 0); + obj.sq_PlaySound("CROSS_PUNISHMENT_01_FLAME"); + obj.sq_PlaySound("CROSS_PUNISHMENT_01"); + if(obj.getVar("Crossofpunishment").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/crossofpunishment_a_body.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_a_holyflame_smoke.ani", 0, 1, 0); + obj.sq_PlaySound("CROSS_PUNISHMENT_01_FLAME"); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CROSSOFPUNISHMENT_B_BODY); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_basic_slash02.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_basic_backdust.ani", 0, -1, 0); + obj.sq_PlaySound("CROSS_PUNISHMENT_02_FLAME"); + obj.sq_PlaySound("CROSS_PUNISHMENT_02"); + if(obj.getVar("Crossofpunishment").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/crossofpunishment_b_body.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_holyflame_backeff02.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_holyflame_smoke.ani", 0, 1, 0); + obj.sq_PlaySound("CROSS_PUNISHMENT_01_FLAME"); + } + break; + } + local bonus = [0, 1], attackIndex = [ATPRIESTATK_BYKK_CROSSOFPUNISHMENT_A, ATPRIESTATK_BYKK_CROSSOFPUNISHMENT_B]; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSOFPUNISHMENT, -1, bonus[subState], 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subState])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("Crossofpunishment").getInt(0) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onEndCurrentAni_Crossofpunishment(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Crossofpunishment(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Crossofpunishment(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Crossofpunishment(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Crossofpunishment(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Crossofpunishment(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("Crossofpunishment").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//衝刺斬 +function checkExecutableSkill_Cutindash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTINDASH); + if (isUse){ + obj.getVar("Cutindash_Bool").setBool(0, false); + obj.getVar("Cutindash_Bool").setBool(1, false); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CUTINDASH); + local sub = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) sub = 1; + local count = sq_GetLevelData(obj, SKILL_BYKK_CUTINDASH, sub, skillLevel); + obj.getVar("Cutindash_Count").setInt(10, count); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Cutindash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Cutindash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://dash + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_FRONT_DASH_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/atcutindash_front_dust_1.ani", 0, 1, 0); + obj.sq_PlaySound("R_PW_CUTINDASH_01"); + break; + case 1://redash + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_FRONT_REDASH_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/atcutindash_front_dust_1.ani", 0, 1, 0); + obj.sq_PlaySound("R_PW_CUTINDASH_02"); + break; + case 2://back dash + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_BACK_DASH_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/atcutindash_back_dust_1.ani", 0, 1, 0); + obj.sq_PlaySound("R_PW_CUTINDASH_02"); + break; + case 3://att + obj.removeAllTimeEvent(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){ + local ani = getCurrentAnimation_demonization(obj, "atcutindashlv95atoriginalsinattacka_body", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackafront_13.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackbfront_08.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_01.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinslashb_00.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_03.ani", 0, -1, 0); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_ATT_BODY); + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASHLV95ATORIGINALSINATTACKA_LAST_BODY); + break; + case 10: + local ani = getCurrentAnimation_demonization(obj, "atcutindash_front_dash_demonization", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("R_PW_CUTINDASH_DM_01"); + break; + case 11: + obj.removeAllTimeEvent(); + local aniSet = "atcutindash_att_demonization_front"; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){ + aniSet = "atcutindashlv95atoriginalsinattackb_body"; + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackafront_13.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackbfront_08.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_01.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinslashb_00.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_03.ani", 0, -1, 0); + } + local ani = getCurrentAnimation_demonization(obj, aniSet, false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_CUTINDASH_DM_02"); + break; + case 12: + local aniSet = "atcutindash_back_dash_demonization"; + local ani = getCurrentAnimation_demonization(obj, aniSet, false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_CUTINDASH_DM_02"); + break; + case 13: + obj.removeAllTimeEvent(); + local ani = getCurrentAnimation_demonization(obj, "atcutindash_att_demonization_back", false); + obj.setCurrentAnimation(ani); + break; + } + if(subState == 3 || subState == 11 || subState == 13) { + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTINDASH, -1, 2, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CUTINDASH_ATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + return; + } + local moveX = [300, 200, -300, 0, 0]; + if(subState > 9) {subState = subState - 10; moveX = [300, 200, -300, 0, 0];} + obj.getVar("Cutindash_Move").setInt(10, sq_GetXPos(obj)); + obj.getVar("Cutindash_Move").setInt(11, moveX[subState]); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delaySum / 50, 30, true); +} + +function onEndCurrentAni_Cutindash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + if(obj.getVar("Cutindash_Bool").getBool(0)) { + if(obj.getVar("Cutindash_Bool").getBool(1)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + } + else obj.sq_IntVectPush(3); + obj.getVar("Cutindash_Bool").setBool(0, false); + //obj.getVar("Cutindash_Bool").setBool(1, false); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(obj.getVar("Cutindash_Bool").getBool(0)) { + obj.getVar("Cutindash_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + } + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + case 3: + if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + } + case 4: + case 11: + case 13: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + if(obj.getVar("Cutindash_Bool").getBool(0)) { + if(obj.getVar("Cutindash_Bool").getBool(1)) obj.sq_IntVectPush(12); + else obj.sq_IntVectPush(10); + print(obj.getVar("Cutindash_Bool").getBool(0)); + print(obj.getVar("Cutindash_Bool").getBool(1)); + } + else obj.sq_IntVectPush(11); + obj.getVar("Cutindash_Bool").setBool(0, false); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + case 12: + obj.sq_IntVectClear(); + if(obj.getVar("Cutindash_Bool").getBool(0)) { + if(obj.getVar("Cutindash_Bool").getBool(1)) obj.sq_IntVectPush(12); + else obj.sq_IntVectPush(10); + } + else obj.sq_IntVectPush(13); + obj.getVar("Cutindash_Bool").setBool(0, false); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Cutindash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 10: + case 12: + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.sq_IntVectClear(); + if(subState == 10) obj.sq_IntVectPush(11); + else if(subState == 12) obj.sq_IntVectPush(13); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + break; + } + if(obj.getVar("Cutindash_Count").getInt(10) < 1) return; + if(obj.getVar("Cutindash_Bool").getBool(0) == false) { + obj.setSkillCommandEnable(SKILL_BYKK_CUTINDASH, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CUTINDASH); + if(b_useskill != -1) { + obj.getVar("Cutindash_Bool").setBool(0, true); + obj.getVar("Cutindash_Count").setInt(10, obj.getVar("Cutindash_Count").getInt(10) - 1); + } + } + if(obj.getVar("Cutindash_Bool").getBool(1) == false) { + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) { + obj.getVar("Cutindash_Bool").setBool(1, true); + } + } + break; + case 2: + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.sq_IntVectClear(); + if(subState == 10) obj.sq_IntVectPush(11); + else if(subState == 12) obj.sq_IntVectPush(13); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_Cutindash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 103: sq_SetMyShake(obj, 10, 120); break; + case 104: sq_SetMyShake(obj, 2, 180); break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Cutindash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local base_X = obj.getVar("Cutindash_Move").getInt(10); + local v = sq_GetUniformVelocity(0, obj.getVar("Cutindash_Move").getInt(11), timeEventCount, 30); + local moveX = sq_GetDistancePos(base_X, obj.getDirection(), v); + if(obj.isMovablePos(moveX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, moveX); + local subState = obj.getSkillSubState(); + if(timeEventCount >= 25 && subState == 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_Cutindash(obj, new_state) +{ + if(!obj) return; +} + + +//罪業加身 +function checkExecutableSkill_Heavysin(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HEAVYSIN); + if (isUse){ + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HEAVYSIN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Heavysin(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Heavysin(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HEAVYSIN_READY_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HEAVYSIN_ATTACK_BODY); + obj.sq_PlaySound("R_PW_HEAVYSIN"); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "heavysin_demonization", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("R_PW_HEAVYSIN_DM"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Heavysin(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HEAVYSIN, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Heavysin(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Heavysin(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("HEAVYSIN"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEAVYSIN, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HEAVYSIN, 0); + local sub = 0; + if(sq_getGrowType(obj) == 4){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, THESEVENDEADLYSINS_APDPATH); + if(AddAppendage && AddAppendage.getVar("Sub").getInt(10) == 3){ + sub = 1; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN); + local prob = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 1, skillLevel); + local level = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 2, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 3, skillLevel); + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 4, skillLevel); + local speedRate2 = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 5, skillLevel); + if(obj.isMyControlObject()){ + local add_number = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + if(add_number > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > add_number){ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,-20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + else{ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + } + break; + } + else if(obj.isMyControlObject()){ + local add_number = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + if(add_number > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > add_number){ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,-20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + } + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + } + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + } + else{ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + } + } + } + else if(obj.isMyControlObject()){ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + } + local buffCount = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 9, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + if(buffCount > 0){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, HEAVYSINBUFF_APDPATH); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, HEAVYSINBUFF_APDPATH, true); + } + addAppendage.sq_SetValidTime(10000); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HEAVYSIN, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + if(addAppendage.getVar("buffCount").getInt(10) >= buffCount) break; + addAppendage.getVar("buffCount").setInt(10, addAppendage.getVar("buffCount").getInt(10) + 1); + setSkillBonusRate_Temptress(obj); + } + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Heavysin(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Heavysin(obj, new_state) +{ + if(!obj) return; +} + +function onEnd_appendage_heavysin_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + setSkillBonusRate_Temptress(obj); +} + + +//審判錘擊 +function checkExecutableSkill_Holysmash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYSMASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYSMASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Holysmash(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Holysmash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYSMASH_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYSMASH, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_HOLYSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onEndCurrentAni_Holysmash(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Holysmash(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Holysmash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("R_PW_HOLYSMASH"); + obj.sq_PlaySound("HOLYSMASH"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholysmash/hseff_hseffa.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholysmash/holysmash_eff.ani", 0, 1, 0); + break; + } + return true; +} + +function onTimeEvent_Holysmash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Holysmash(obj, new_state) +{ + if(!obj) return; +} + + +//鉤頸斬 +function checkExecutableSkill_Neckupscythe(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NECKUPSCYTHE); + if (isUse){ + obj.getVar("NeckupscytheTar").clear_obj_vector(); + obj.getVar("Neckupscythe_Bool").setBool(0, false); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_NECKUPSCYTHE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Neckupscythe(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Neckupscythe(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://attack1 + obj.sq_SetCurrentAnimation(ATPANI_BYKK_NECKUPSCYTHE_ATTACK1_BODY); + break; + case 1://attack2 + obj.sq_SetCurrentAnimation(ATPANI_BYKK_NECKUPSCYTHE_ATTACK2_BODY); + break; + case 2://attack2 front + obj.sq_SetCurrentAnimation(ATPANI_BYKK_NECKUPSCYTHE_ATTACK2_FRONT_BODY); + break; + case 3: + local ani = getCurrentAnimation_demonization(obj, "neckupscythe_attack1_demon", false); + obj.setCurrentAnimation(ani); + break; + case 4: + local ani = getCurrentAnimation_demonization(obj, "neckupscythe_attack2_demon", false); + obj.setCurrentAnimation(ani); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonus = [0, 1, 1, 0, 1], attackIndex = [ATPRIESTATK_BYKK_NECKUPSCYTHE_POKE, ATPRIESTATK_BYKK_NECKUPSCYTHE_BACKTHROW, ATPRIESTATK_BYKK_NECKUPSCYTHE_FRONTTHROW, ATPRIESTATK_BYKK_NECKUPSCYTHE_POKE, ATPRIESTATK_BYKK_NECKUPSCYTHE_BACKTHROW]; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NECKUPSCYTHE, -1, bonus[subState], 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subState])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onEndCurrentAni_Neckupscythe(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + if(obj.getVar("NeckupscytheTar").get_obj_vector_size() < 1){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + if(obj.getVar("Neckupscythe_Bool").getBool(0)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_NECKUPSCYTHE, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + if(obj.getVar("NeckupscytheTar").get_obj_vector_size() < 1){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_NECKUPSCYTHE, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Neckupscythe(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("Neckupscythe_Bool").getBool(0) == false) { + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) { + obj.getVar("Neckupscythe_Bool").setBool(0, true); + } + } + break; + } +} + +function onKeyFrameFlag_Neckupscythe(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 102: + local size = obj.getVar("NeckupscytheTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("NeckupscytheTar").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/0_common/ap_neckupscythe.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -150, 0, 0, 100, true, addAppendage); + } + } + } + break; + case 103: sq_SetMyShake(obj, 3, 160); break; + case 104: sq_SetMyShake(obj, 2, 240); break; + case 105: sq_SetMyShake(obj, 2, 160); break; + case 106: sq_SetMyShake(obj, 3, 120); break; + } + return true; +} + +function onTimeEvent_Neckupscythe(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Neckupscythe(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_NECKUPSCYTHE){ + local size = obj.getVar("NeckupscytheTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("NeckupscytheTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/0_common/ap_neckupscythe.nut"); + } + } + } +} + +function onAttack_Neckupscythe(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 3: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/0_common/ap_neckupscythe.nut")){ + if(!obj.getVar("NeckupscytheTar").is_obj_vector(damager)) obj.getVar("NeckupscytheTar").push_obj_vector(damager); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/demonicswordman/0_common/ap_neckupscythe.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); + if(subState == 0) sq_MoveToAppendageForce(damager, obj, obj, 160, 0, 50, 100, true, addAppendage); + else sq_MoveToAppendageForce(damager, obj, obj, 50, 0, 0, 200, true, addAppendage); + } + } + } + break; + } +} + + + + + + +//喚雷符 +function checkExecutableSkill_Talismanoflightning(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TALISMANOFLIGHTNING); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_TALISMANOFLIGHTNING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Talismanoflightning(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Talismanoflightning(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_TALISMANOFLIGHTNING_CAST_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_TALISMANOFLIGHTNING_SHOT_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Talismanoflightning(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_TALISMANOFLIGHTNING, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Talismanoflightning(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Talismanoflightning(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local offset_x = sq_GetIntData(obj, SKILL_BYKK_TALISMANOFLIGHTNING, 8); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TALISMANOFLIGHTNING, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_TALISMANOFLIGHTNING, 10); + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,offset_x,0,0,obj.getDirection(),0,SKILL_BYKK_TALISMANOFLIGHTNING,0,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Talismanoflightning(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Talismanoflightning(obj, new_state) +{ + if(!obj) return; +} + +//空中錘擊 +function checkExecutableSkill_Violentassault(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VIOLENTASSAULT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_VIOLENTASSAULT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Violentassault(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Violentassault(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIOLENTASSAULT_START_BODY); + sq_SetVelocity(obj, 2, -600.0); + obj.setTimeEvent(0, 10, 20, true); + obj.getVar("ViolentassaultMove").setInt(10, sq_GetXPos(obj)); + obj.getVar("ViolentassaultMove").setInt(11, sq_GetZPos(obj) * 15 / 10); + obj.sq_PlaySound("PW_JUMP_DM"); + // obj.sq_ZStop(); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIOLENTASSAULT_LOOP_BODY); + sq_SetVelocity(obj, 2, -600.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIOLENTASSAULT, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_VIOLENTASSAULT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIOLENTASSAULT_END_BODY); + obj.removeAllTimeEvent(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIOLENTASSAULT, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VIOLENTASSAULT, 2); + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,50,0,0,obj.getDirection(),0,SKILL_BYKK_VIOLENTASSAULT,0,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } +} + +function onEndCurrentAni_Violentassault(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_VIOLENTASSAULT, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Violentassault(obj) +{ + if(!obj) return; + local zPos = sq_GetZPos(obj); + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(zPos <= 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_VIOLENTASSAULT, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_Violentassault(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Violentassault(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local base_X = obj.getVar("ViolentassaultMove").getInt(10); + local v = sq_GetUniformVelocity(0, obj.getVar("ViolentassaultMove").getInt(11), timeEventCount, 20); + local moveX = sq_GetDistancePos(base_X, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, moveX); + break; + } +} + +function onEndState_Violentassault(obj, new_state) +{ + if(!obj) return; +} + +//武器格擋 +function checkExecutableSkill_Weaponguard(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WEAPONGUARD); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_WEAPONGUARD); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_WEAPONGUARD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Weaponguard(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Weaponguard(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_WEAPONGUARD_STAND_BODY); + local apdPath = "character/demonicswordman/0_common/ap_weaponguard.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_WEAPONGUARD, false, apdPath, true); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_WEAPONGUARD_ATTACKED_BODY); + break; + } +} + +function onEndCurrentAni_Weaponguard(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_WEAPONGUARD, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onDamage_Weaponguard(obj,attacker,boundingBox) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_WEAPONGUARD, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Weaponguard(obj) +{ + if(!obj) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } +} + +function onKeyFrameFlag_Weaponguard(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Weaponguard(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Weaponguard(obj, new_state) +{ + if(!obj) return; + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/demonicswordman/0_common/ap_weaponguard.nut"); +} + +function getImmuneTypeDamageRate_appendage_Atpriest_weaponguard(appendage, damageRate, attacker) +{ + if (!appendage) return damageRate; + local parentObj = appendage.getParent(); + parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if (!parentObj) { + appendage.setValid(false); + return damageRate; + } + local sub = 2; + local attackInfo = sq_GetCurrentAttackInfo(attacker); + if (sq_GetAttackType(attackInfo) == 1) sub = 3; + local newdamageRate = (1000 - sq_GetLevelData(parentObj, SKILL_BYKK_WEAPONGUARD, sub, sq_GetSkillLevel(parentObj, SKILL_BYKK_WEAPONGUARD))) / 10; + return newdamageRate; +} + + +/////////////////////////////////////////////////////////////////诱魔者/////////////////////////////////////////////////////////// + +//雙重切割 +function checkExecutableSkill_Dualslash(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DUALSLASH); + if (isUse){ + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DUALSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Dualslash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Dualslash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DUALSLASH_BODY); + obj.sq_PlaySound("R_PW_DUALSLASH_01"); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "dualslash_demonization", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_DUALSLASH_DM"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 0, 1.0) + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 1, 1.0) + 200; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_DUALSLASH_SECOND)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_Dualslash(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Dualslash(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Dualslash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex) { + case 101: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_DUALSLASH_FIRST)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 102: + obj.sq_PlaySound("R_PW_DUALSLASH_02"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_DUALSLASH_SECOND)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Dualslash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Dualslash(obj, new_state) +{ + if(!obj) return; +} + +//斷頭台 +function checkExecutableSkill_Pwguillotine(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PWGUILLOTINE); + if (isUse){ + obj.getVar("PwguillotineTar").clear_obj_vector(); + obj.getVar("PwguillotineTar_fix").clear_obj_vector(); + obj.getVar("Pwguillotine_Bool").setBool(0, false); + obj.getVar("Pwguillotine_Bool").setBool(1, false); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PWGUILLOTINE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Pwguillotine(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Pwguillotine(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_GUILLOTINE_READY_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("PW_GUILLOTINE_01"); + break; + case 1://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_GUILLOTINE_SMASH); + obj.sq_PlaySound("PW_GUILLOTINE_02"); + break; + case 2://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_GUILLOTINE_GRAB); + local xPos = obj.getVar("Pwguillotine_Move").getInt(10), yPos = obj.getVar("Pwguillotine_Move").getInt(11), zPos = obj.getVar("Pwguillotine_Move").getInt(12); + sq_setCurrentAxisPos(obj, 0, xPos); + sq_setCurrentAxisPos(obj, 1, yPos); + sq_setCurrentAxisPos(obj, 2, zPos); + obj.sq_PlaySound("PW_GUILLOTINE_02"); + break; + case 10: + local ani = getCurrentAnimation_demonization(obj, "guillotine_ready_demonization", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_GUILLOTINE_DM_01"); + break; + case 11: + local ani = getCurrentAnimation_demonization(obj, "guillotine_smash_demonization", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_GUILLOTINE_DM_02"); + obj.sq_PlaySound("BURSTSLASH_JUMP"); + break; + case 12: + local ani = getCurrentAnimation_demonization(obj, "guillotine_grab_demonization", false); + obj.setCurrentAnimation(ani); + local xPos = obj.getVar("Pwguillotine_Move").getInt(10), yPos = obj.getVar("Pwguillotine_Move").getInt(11), zPos = obj.getVar("Pwguillotine_Move").getInt(12); + sq_setCurrentAxisPos(obj, 0, xPos); + sq_setCurrentAxisPos(obj, 1, yPos); + sq_setCurrentAxisPos(obj, 2, zPos); + obj.sq_PlaySound("PW_GUILLOTINE_DM_02"); + break; + } + local bonus = 1, attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_GRABTRY; + if(subState != 0 && subState != 10) { + bonus = 2; + if(subState == 1) attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_SMASH; + else if(subState == 2) attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_GRAB_FIRST; + else if(subState == 11) attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_SMASH; + else attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_GRAB_FIRST; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PWGUILLOTINE, -1, bonus, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onEndCurrentAni_Pwguillotine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + obj.sq_IntVectClear(); + if(obj.getVar("PwguillotineTar").get_obj_vector_size() < 1 && obj.getVar("PwguillotineTar_fix").get_obj_vector_size() < 1){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + if(sq_GetLevelData(obj, SKILL_BYKK_PWGUILLOTINE, 4, sq_GetSkillLevel(obj, SKILL_BYKK_PWGUILLOTINE)) > 0){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + if(subState == 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(STATE_BYKK_PWGUILLOTINE, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 11: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 12: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Pwguillotine(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Pwguillotine(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex) { + case 101: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PWGUILLOTINE, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_GUILLOTINE_GRAB_SECOND)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 102: + sq_flashScreen(obj,10,100,20,51, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,2,100); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Pwguillotine(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Pwguillotine(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_PWGUILLOTINE){ + local size = obj.getVar("PwguillotineTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("PwguillotineTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, PWGUILLOTINETE_APDPATH); + } + } + } +} + +function onAttack_Pwguillotine(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){ + if(obj.getVar("Pwguillotine_Bool").getBool(1) == false){ + obj.getVar("Pwguillotine_Bool").setBool(1, true); + obj.getVar("Pwguillotine_Move").setInt(10, sq_GetXPos(damager)); + obj.getVar("Pwguillotine_Move").setInt(11, sq_GetYPos(damager)); + obj.getVar("Pwguillotine_Move").setInt(12, sq_GetZPos(damager) + sq_GetObjectHeight(obj)); + } + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, PWGUILLOTINETE_APDPATH)){ + if(!obj.getVar("PwguillotineTar").is_obj_vector(damager)) obj.getVar("PwguillotineTar").push_obj_vector(damager); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, PWGUILLOTINETE_APDPATH, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); + } + } + else if(sq_IsFixture(damager)){ + obj.sq_IntVectClear(); + if(subState == 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_BYKK_PWGUILLOTINE, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + + +//七宗罪 +function checkExecutableSkill_Thesevendeadlysins(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THESEVENDEADLYSINS); + if (isUse){ + obj.getVar("Thesevendeadlysins_Bool").setBool(0, false); + obj.getVar("Thesevendeadlysins_Sub").setInt(10, 0); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THESEVENDEADLYSINS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thesevendeadlysins(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Thesevendeadlysins(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_THEDEADLYSINS_CAST); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "thedeadlysinsdemon_05", false); + obj.setCurrentAnimation(ani); + break; + } +} + +function onEndCurrentAni_Thesevendeadlysins(obj) +{ + if(!obj) return; +} + +function onProcCon_Thesevendeadlysins(obj) +{ + if(!obj) return; + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + if(stateTime >= 5000) obj.setTimeEvent(0, 300, 1, true); + if(stateTime >= delaySum / 2 && obj.getVar("Thesevendeadlysins_Bool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 1); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 2); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 3); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 4); + else if(sq_IsKeyDown(OPTION_HOTKEY_SKILL2, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 5); + if(obj.getVar("Thesevendeadlysins_Sub").getInt(10) > 0){ + obj.getVar("Thesevendeadlysins_Bool").setBool(0, true); + local sub = obj.getVar("Thesevendeadlysins_Sub").getInt(10); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, THESEVENDEADLYSINS_APDPATH)) CNSquirrelAppendage.sq_RemoveAppendage(obj, THESEVENDEADLYSINS_APDPATH); + if(sub == 5){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, THESEVENDEADLYSINS_APDPATH); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + obj.setTimeEvent(0, 300, 1, false); + return; + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_THESEVENDEADLYSINS, false, THESEVENDEADLYSINS_APDPATH, true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 21, skillLevel); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_THESEVENDEADLYSINS, sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + local bufficonNum = 0; + switch(sub){ + case 1: bufficonNum = 152; break; + case 2: bufficonNum = 154; break; + case 3: bufficonNum = 153; break; + case 4: bufficonNum = 155; break; + } + AddAppendage.setBuffIconImage(bufficonNum); + AddAppendage.getVar("Sub").setInt(10, sub); + + setBuffEffect_Temptress(obj, AddAppendage, sub); + + obj.setTimeEvent(0, 300, 1, false); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atthedeadlysins/thedeadlysins_02.ani", 0, 1, 0); + else{ + for(local i = 1; i < 5; i++){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atthedeadlysins/thedeadlysinsdemon_0"+i.tostring()+".ani", 0, i, 0); + } + } + + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(!loadSlot){ + local coolTime = sq_GetIntData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 0); + obj.sq_AddSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS, 109, 0, coolTime); + print(1); + } + } + } +} + +function onKeyFrameFlag_Thesevendeadlysins(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("R_PW_SEVENSINS"); + obj.sq_PlaySound("DEDLY_CAPE_CAST"); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_01.ani"), -40, -50); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_02.ani"), 40, -50); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_03.ani"), 0, -90); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_04.ani"), 0, -10); + break; + case 102: + obj.sq_PlaySound("R_PW_SEVENSINS_DM"); + obj.sq_PlaySound("DEDLY_CAPE_CAST"); + break; + } + return true; +} + +function onTimeEvent_Thesevendeadlysins(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Thesevendeadlysins(obj, new_state) +{ + if(!obj) return; +} + +function onAfterSetState_PW_Throw(obj, state, datas, isResetTimer) +{ + local skillIndex = obj.getThrowIndex(); + if (skillIndex == SKILL_BYKK_THESEVENDEADLYSINS){ + if (obj.getThrowState() == 0){ + obj.setIsCustomSelectSkill(true); + } + else if (obj.getThrowState() == 1){ + if (obj.isMyControlObject()){ + print("1"); + } + } + } +} + +function setBuffEffect_Temptress(obj, appendage, sub) +{ + if(sub < 1) return; + obj = sq_GetCNRDObjectToSQRCharacter(obj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS); + switch(sub){ + case 1://贪食者的欲念 + local hpmpRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 6, skillLevel); + local attackRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 12, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpmpRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (hpmpRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + } + break; + case 2://浸染嫉妒的喜悦 + local elemental_tol = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 2, skillLevel);//CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL + local elemental_attack = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 23, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (elemental_tol * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_ALL, false, (elemental_attack * 1).tofloat()); + } + setSkillBonusRate_Temptress(obj); + break; + case 3://傲慢者的懒惰 + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 8, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, (speedRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, (speedRate * -0.1).tofloat()); + } + setSkillBonusRate_Temptress(obj); + break; + case 4://欲望溢满的愤怒 + local defenseRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 4, skillLevel); + local criticaldamageRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 22, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, true, (defenseRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE , true, (defenseRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat()); + } + break; + } +} + + +//欲望之手 +function checkExecutableSkill_Lusthand(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LUSTHAND); + if (isUse){ + // obj.getVar("lusthand_bosstar").clear_obj_vector(); + // obj.getVar("lusthand_namedtar").clear_obj_vector(); + // obj.getVar("lusthand_normaltar").clear_obj_vector(); + obj.getVar("lusthand_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Lusthand(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Lusthand(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDATK01_BODY); + obj.sq_PlaySound("R_PW_LUSTHAND"); + break; + case 1://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDATK02_BODY); + local targetObj = obj.getVar("lusthand_tar").get_obj_vector(0); + if(targetObj){ + local dis = sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj)) - 50; + if(dis < 60) dis = 0; + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), dis)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + } + break; + case 2://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDATK03BODY_BODY); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LUSTHANDSWINGCUT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDEND_BODY); + break; + case 10: + local ani = getCurrentAnimation_demonization(obj, "lusthandatk01_demon", false); + obj.setCurrentAnimation(ani); + local sound = ["PW_LUSTHAND_DM_01","PW_LUSTHAND_DM_02","PW_LUSTHAND_DM_03"]; + obj.sq_PlaySound(sound[sq_getRandom(0,2)]); + break; + case 11: + local ani = getCurrentAnimation_demonization(obj, "lusthandatk03effa_demon", false); + obj.setCurrentAnimation(ani); + local targetObj = obj.getVar("lusthand_tar").get_obj_vector(0); + if(targetObj){ + local dis = sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj)) - 50; + if(dis < 60) dis = 0; + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), dis)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LUSTHANDSWINGCUT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + // if(subState == 0 || subState == 10){ + // local currentAni = obj.getCurrentAnimation(); + // local delaySum = currentAni.getDelaySum(false); + // obj.setTimeEvent(0, delaySum / 3, 1, false); + // } +} + +function onEndCurrentAni_Lusthand(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + if(obj.getVar("lusthand_tar").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 11: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Lusthand(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Lusthand(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("PW_LUSTHAND_DM_03"); + obj.sq_PlaySound("DGUARDIAN_CATCH"); + //`CreateClaw` 103 0 81 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 0, 1.0) + 100; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,103,0,81,obj.getDirection(),4,SKILL_BYKK_LUSTHAND,0,totalDamage,0,0,0,0,0,0,0); + break; + case 102: + sq_flashScreen(obj,10,50,60,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 103: + sq_SetMyShake(obj, 2, 100); + break; + case 104: + //`CreateClaw` 103 0 81 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 0, 1.0) + 100; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,103,0,81,obj.getDirection(),4,SKILL_BYKK_LUSTHAND,0,totalDamage,0,0,0,0,0,0,0); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Lusthand(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= 400 && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= 30) { + print(i); + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)) obj.getVar("lusthand_bosstar").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("lusthand_namedtar").push_obj_vector(activeObj); + else obj.getVar("lusthand_normaltar").push_obj_vector(activeObj); + } + } + local size1 = obj.getVar("lusthand_bosstar").get_obj_vector_size(); + local size2 = obj.getVar("lusthand_namedtar").get_obj_vector_size(); + local size3 = obj.getVar("lusthand_normaltar").get_obj_vector_size(); + if(size1 > 0){ + for(local i = 0; i < size1; i++){ + local targetObj = obj.getVar("lusthand_bosstar").get_obj_vector(i); + obj.getVar("lusthand_tar").push_obj_vector(targetObj); + } + } + if(size2 > 0){ + for(local i = 0; i < size2; i++){ + local targetObj = obj.getVar("lusthand_namedtar").get_obj_vector(i); + obj.getVar("lusthand_tar").push_obj_vector(targetObj); + } + } + if(size3 > 0){ + for(local i = 0; i < size3; i++){ + local targetObj = obj.getVar("lusthand_normaltar").get_obj_vector(i); + obj.getVar("lusthand_tar").push_obj_vector(targetObj); + } + } + local targetObj = obj.getVar("lusthand_tar").get_obj_vector(0); + sq_SendHitObjectPacket(obj,targetObj,0,0,75); + break; + } +} + +function onEndState_Lusthand(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_LUSTHAND){ + local size = obj.getVar("lusthand_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("lusthand_tar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, LUSTHAND_APDPATH); + } + } + } + sq_SimpleMoveToNearMovablePos(obj,300); + } +} + +//傲慢之堕 +function checkExecutableSkill_Prideaccel(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRIDEACCEL); + if (isUse){ + obj.getVar("Prideaccel_Move").setBool(0, false); + if(sq_GetLevelData(obj, SKILL_BYKK_PRIDEACCEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_PRIDEACCEL)) > 0) obj.getVar("Prideaccel_Bool").setBool(0, true); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(4); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Prideaccel(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Prideaccel(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PRIDEACCEL_START_BOBY); + obj.sq_PlaySound("R_PW_PRIDEACCEL"); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "prideaccelmove01_boby", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_02.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_07.ani", 0, 1, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("R_PW_PRIDEACCEL_DM"); + break; + case 2: + sq_setCurrentAxisPos(obj, 2, 0); + local ani = getCurrentAnimation_demonization(obj, "prideaccelmove02_boby", false); + obj.setCurrentAnimation(ani); + sq_flashScreen(obj,30,50,60,102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,4,200); + //CreateShockWave + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PRIDEACCEL, -1, 0, 1.0) + 100; + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_PRIDEACCEL, 2, sq_GetSkillLevel(obj, SKILL_BYKK_PRIDEACCEL)); + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),4,SKILL_BYKK_PRIDEACCEL,0,totalDamage,sizeRate,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove02_02.ani", 0, 1, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PRIDEACCEL_END_BOBY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccel_end_01.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccel_end_03.ani", 0, -1, 0); + break; + case 4: + local ani = getCurrentAnimation_demonization(obj, "prideaccelmove01_air_boby", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_air_02.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_air_07.ani", 0, 1, 0); + obj.sq_PlaySound("R_PW_PRIDEACCEL_DM"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Prideaccel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(subState == 0) sq_setCurrentAxisPos(obj, 2, 125); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true); + } + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Prideaccel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 4: + if(obj.getVar("Prideaccel_Move").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("Prideaccel_Move").setBool(0, true); + if(obj.isMovablePos(sq_GetXPos(obj) - 200, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - 200); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 50); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 50); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("Prideaccel_Move").setBool(0, true); + if(obj.isMovablePos(sq_GetXPos(obj) + 200, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + 200); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 50); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 50); + } + } + } + break; + } + if(subState != 3){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + } +} + +function onKeyFrameFlag_Prideaccel(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local add_number = sq_GetLevelData(obj, SKILL_BYKK_PRIDEACCEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_PRIDEACCEL)); + if(add_number > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber >= add_number && obj.getVar("Prideaccel_Bool").getBool(0)){ + obj.getVar("Prideaccel_Bool").setBool(0, false); + loadSlot.decreaseLoadCount(1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true); + break; + } + } + } + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Prideaccel(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Prideaccel(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_PRIDEACCEL){ + sq_SimpleMoveToNearMovablePos(obj, 200); + } +} + + + +//屠戮回旋斩 +function checkExecutableSkill_Rollingrush(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ROLLINGRUSH); + if (isUse){ + obj.getVar("Rollingrush_Bool").setBool(0, false); + obj.getVar("Rollingrush_Bool").setBool(1, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Rollingrush_Bool").setBool(0, true); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else if(sq_GetLevelData(obj, SKILL_BYKK_ROLLINGRUSH, 4, sq_GetSkillLevel(obj, SKILL_BYKK_ROLLINGRUSH)) > 0) obj.sq_IntVectPush(5); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Rollingrush(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Rollingrush(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(obj.getVar("Rollingrush_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_ready_body", false); + obj.setCurrentAnimation(ani); + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_READY_BODY); + obj.sq_PlaySound("PW_ROLLINGRUSH_01_2"); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ROLLINGRUSH, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ROLLINGRUSH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + if(obj.getVar("Rollingrush_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_hit_01_body", false); + obj.setCurrentAnimation(ani); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_HIT_01_BODY); + obj.resetHitObjectList(); + break; + case 2: + if(obj.getVar("Rollingrush_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_hit_02_body", false); + obj.setCurrentAnimation(ani); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_HIT_02_BODY); + obj.resetHitObjectList(); + break; + case 3: + if(obj.getVar("Rollingrush_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_spin_end_body", false); + obj.setCurrentAnimation(ani); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_SPIN_END_BODY); + break; + case 4: + if(obj.getVar("Rollingrush_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_landing_body", false); + obj.setCurrentAnimation(ani); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_LANDING_BODY); + break; + case 5: + if(obj.getVar("Rollingrush_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_finish_body", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_ROLLINGRUSH_DM_02"); + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_FINISH_BODY); + obj.sq_PlaySound("PW_ROLLINGRUSH_02_2"); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ROLLINGRUSH, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ROLLINGRUSHFINSH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_flashScreen(obj,0,10,100,38, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,4,200); + break; + } + local speed = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_ROLLINGRUSH, 3, sq_GetSkillLevel(obj, SKILL_BYKK_ROLLINGRUSH)) / 100.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + if(obj.getVar("Rollingrush_Bool").getBool(1) == false && subState == 1){ + obj.getVar("Rollingrush_Bool").setBool(1, true); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + if(delay <= 5) delay = 5; + obj.getVar("Rollingrush").setInt(10, delay); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_ROLLINGRUSH, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ROLLINGRUSH)); + obj.getVar("Rollingrush").setInt(11, hitMax); + obj.getVar("Rollingrush").setInt(13, hitMax * 3 / 2 * 5 + 10); + if(sq_GetZPos(obj) <= 0) obj.setTimeEvent(0, delay / 5, obj.getVar("Rollingrush").getInt(13), true); + else{ + obj.getVar("Rollingrush").setInt(12, sq_GetZPos(obj)); + obj.getVar("Rollingrush").setInt(13, hitMax * 3 * 5); + obj.setTimeEvent(1, delay / 5, hitMax * 3 * 5, true); + } + } + if(subState == 1 || subState == 2){ + local speed = 100 * obj.getVar("Rollingrush").getInt(10) / 60.0; + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + } + else if(subState == 3){ + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 200.0); + else sq_SetVelocity(obj, 0, -200.0); + } +} + +function onEndCurrentAni_Rollingrush(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_AUTO, true); + break; + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + if(obj.getVar("Rollingrush").getInt(11) <= 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_AUTO, true); + break; + } + else{ + obj.getVar("Rollingrush").setInt(11, obj.getVar("Rollingrush").getInt(11) - 1); + obj.sq_IntVectClear(); + if(subState == 1) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onProcCon_Rollingrush(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ + local speed = 300 * obj.getVar("Rollingrush").getInt(10) / 60.0; + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + } + break; + } +} + +function onKeyFrameFlag_Rollingrush(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Rollingrush(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local hitMax = sq_GetIntData(obj, SKILL_BYKK_ROLLINGRUSH, 0); + local v = sq_GetAccel(0, 123, timeEventCount, obj.getVar("Rollingrush").getInt(13), true); + sq_setCurrentAxisPos(obj, 2, v); + if(timeEventCount >= obj.getVar("Rollingrush").getInt(13)){ + local delay = obj.getVar("Rollingrush").getInt(10); + obj.getVar("Rollingrush").setInt(12, sq_GetZPos(obj)); + obj.setTimeEvent(1, delay / 5, obj.getVar("Rollingrush").getInt(13), true); + } + break; + case 1: + local hitMax = sq_GetIntData(obj, SKILL_BYKK_ROLLINGRUSH, 0); + local v = sq_GetAccel(obj.getVar("Rollingrush").getInt(12), 0, timeEventCount, obj.getVar("Rollingrush").getInt(13), false); + sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onEndState_Rollingrush(obj, new_state) +{ + if(!obj) return; +} + + +//怠惰之息 +function checkExecutableSkill_Slothbody(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SLOTHBODY); + if (isUse){ + obj.getVar("Slothbody_ani").clear_obj_vector(); + obj.sq_IntVectClear(); + local sub = sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY)); + if(sub > 0 && sub < 100) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Slothbody(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Slothbody(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://SLOTHBODY_APDPATH + local ani = getCurrentAnimation_demonization(obj, "slothbodystep1_body", false); + obj.setCurrentAnimation(ani); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_SLOTHBODY, false, SLOTHBODY_APDPATH, true); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY); + local allTolerance = sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 2, skillLevel); + local change_appendage = AddAppendage.sq_getChangeStatus("Slothbody"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("Slothbody",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allTolerance * 1).tofloat()); + } + obj.getVar("Slothbody_Bool").setBool(0, true); + obj.setTimeEvent(0, 100, 1, false); + obj.sq_PlaySound("R_PW_SLOTHBODY_01"); + + local range = 270, speed = 350; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){ + range = range * sq_GetLevelData(obj, SKILL_BYKK_ORIGINALSIN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN)) / 100; + speed = speed * sq_GetLevelData(obj, SKILL_BYKK_ORIGINALSIN, 1, sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN)) / 100; + obj.sq_AddStateLayerAnimation(-1001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinpullbottom_05.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinpullfront_07.ani"), 0, 0); + } + local appendage = sq_AttractToMe(obj, range, 100, speed); + obj.getVar("Slothbody").setAppendage(0,appendage);//设置ap + break; + case 1: + obj.removeAllTimeEvent(); + local appendage = obj.getVar("Slothbody").getAppendage(0); + if(appendage) appendage.setValid(false); + local aniSet = "slothbodyfinish_body"; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0) aniSet = "atslothbodylv95atoriginalsinattackbodydemon_00"; + local ani = getCurrentAnimation_demonization(obj, aniSet, false); + obj.setCurrentAnimation(ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + CNSquirrelAppendage.sq_RemoveAppendage(obj, SLOTHBODY_APDPATH); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SLOTHBODY, -1, 2, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SLOTHBODYATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local size = obj.getVar("Slothbody_ani").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aniObj = obj.getVar("Slothbody_ani").get_obj_vector(i); + if(aniObj) aniObj.setValid(false); + } + } + obj.sq_PlaySound("R_PW_SLOTHBODY_02"); + break; + } +} + +function onEndCurrentAni_Slothbody(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY)) >= 100){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Slothbody(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local sub = sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY)); + if(obj.getVar("Slothbody_Bool").getBool(0) && sub < 100){ + obj.setSkillCommandEnable(SKILL_BYKK_SLOTHBODY,true); + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_SLOTHBODY); + if(b_useskill != -1 || sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.getVar("Slothbody_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_AUTO, true); + break; + } + else if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.getVar("Slothbody_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + } + else if(sub >= 100){ + if(!sq_GetSkill(obj, SKILL_BYKK_GREEDTHELURKER).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_GREEDTHELURKER, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_GREEDTHELURKER); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GREEDTHELURKER); + obj.startSkillCoolTime(SKILL_BYKK_GREEDTHELURKER, skillLevel, -1); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GREEDTHELURKER, -1, 0, 1.0) + 100; + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 2, skillLevel); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 3, skillLevel); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 1, skillLevel); + local sub = 0, maxHit = 0; + if(sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 4, skillLevel) > 0){sub = 1; maxHit = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 5, skillLevel);} + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,25,0,3,obj.getDirection(),4,SKILL_BYKK_GREEDTHELURKER,0,totalDamage,sizeRate,hitMax,hitTime,sub,maxHit,0,0); + break; + } + } + if(!sq_GetSkill(obj, SKILL_BYKK_HEAVYSIN).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_HEAVYSIN, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HEAVYSIN); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_HEAVYSIN, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN), -1); + obj.sq_PlaySound("HEAVYSIN"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEAVYSIN, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HEAVYSIN, 0); + local sub = 0; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, THESEVENDEADLYSINS_APDPATH); + if(AddAppendage && AddAppendage.getVar("Sub").getInt(10) == 3){ + sub = 1; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN); + local prob = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 1, skillLevel); + local level = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 2, skillLevel); + local time = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 3, skillLevel); + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 4, skillLevel); + local speedRate2 = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 5, skillLevel); + if(obj.isMyControlObject()){ + local add_number = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + if(add_number > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > add_number){ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,-20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + else{ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2); + } + } + break; + } + else if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0); + + local buffCount = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 9, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + if(buffCount > 0){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, HEAVYSINBUFF_APDPATH); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, HEAVYSINBUFF_APDPATH, true); + } + addAppendage.sq_SetValidTime(10000); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HEAVYSIN, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + if(addAppendage.getVar("buffCount").getInt(10) >= buffCount) break; + addAppendage.getVar("buffCount").setInt(10, addAppendage.getVar("buffCount").getInt(10) + 1); + setSkillBonusRate_Temptress(obj); + } + break; + } + } + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + } + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + break; + } +} + +function onKeyFrameFlag_Slothbody(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodystep1_smoke1.ani", 0, -1, 0); + break; + case 102: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_atkleaf.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_atk.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_dust.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_backshock2.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_backshock1.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_circle.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_shockwave.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_scytheshadow.ani", 0, 1, 0); + sq_flashScreen(obj,10,80,100,102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,4,300); + break; + case 103: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_roseleaf.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_smoke1.ani", 0, 1, 0); + break; + case 201: + createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinattackbottom_13.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinattackfront_16.ani", 0, 1, 0); + sq_flashScreen(obj,20,160,40,134, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 340); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SLOTHBODY, -1, 2, 1.0) + 100; + local sizeRate = 100; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),4,SKILL_BYKK_SLOTHBODY,0,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 202://cancel + obj.getVar("setCancelSkill").setBool(10, true); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Slothbody(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atslothbody/slothbodypull_01.ani"), 0, 0); + obj.setTimeEvent(1, 500, -1, true); + break; + case 1: + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodypull_floor.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Slothbody_ani").push_obj_vector(pooledObj); + break; + } +} + +function onEndState_Slothbody(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SLOTHBODY){ + local appendage = obj.getVar("Slothbody").getAppendage(0); + if(appendage) appendage.setValid(false); + } +} + +function getImmuneTypeDamageRate_appendage_SlothBody(appendage, damageRate, attacker) +{ + if(!appendage) return damageRate; + local parentObj = appendage.getParent(); + parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if (!parentObj) { + appendage.setValid(false); + return damageRate; + } + local newdamageRate = (100 - sq_GetLevelData(parentObj, SKILL_BYKK_SLOTHBODY, 1, sq_GetSkillLevel(parentObj, SKILL_BYKK_SLOTHBODY))); + return newdamageRate; +} + +//诱魔之手 +function checkExecutableSkill_Handawakentosin(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HANDAWAKENTOSIN); + if (isUse){ + obj.getVar("Handawakentosin_EXP").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Handawakentosin(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Handawakentosin(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + local ani = getCurrentAnimation_demonization(obj, "handawakentosin_human2devil_body", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_HANDAWAKENTOSIN"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_human2devil_greedready_eff_a.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_human2devil_greedready_eff_d.ani", 0, 0, 0); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "handawakentosin_skill_body_a", false); + obj.setCurrentAnimation(ani); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HANDAWAKENTOSIN, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_HANDAWAKENTOSIN)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("PW_HANDAWAKENTOSIN_DM"); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "handawakentosin_skill_body_b", false); + obj.setCurrentAnimation(ani); + break; + case 3: + local ani = getCurrentAnimation_demonization(obj, "handawakentosin_devil2human_body", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_devil2human_greedready_eff_a_e.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_devil2human_greedready_eff_d_e.ani", 0, 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Handawakentosin(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_AUTO, true); + break; + } + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Handawakentosin(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState != 3){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + } +} + +function onKeyFrameFlag_Handawakentosin(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 104: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_skill_slash_nor2.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_skill_slash_nor1.ani", 0, 0, 0); + break; + case 105: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_skill_absorption.ani", 0, 1, 0); + obj.sq_PlaySound("HOLD_GO_FINGER"); + obj.sq_PlaySound("SCUDWRATH_END"); + sq_flashScreen(obj,0,80,160,107, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,6,300); + local size = obj.getVar("Handawakentosin_EXP").get_obj_vector_size(); + print("size = "+size); + if(size > 0){ + for(local i = 0; i < size; i++){ + local attackObj = obj.getVar("Handawakentosin_EXP").get_obj_vector(i); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + local increaseCount = sq_GetLevelData(obj, SKILL_BYKK_HANDAWAKENTOSIN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_HANDAWAKENTOSIN)); + local loadMax = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 0, sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS)); + if((loadnumber + increaseCount) > loadMax) increaseCount = loadMax - loadnumber; + if(loadnumber < loadMax){ + loadSlot.increaseLoadCount(increaseCount); + } + } + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Handawakentosin(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Handawakentosin(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Handawakentosin(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PRIDEACCEL, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PRIDEACCEL, 2); + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetObjectHeight(damager) / 2,obj.getDirection(),4,SKILL_BYKK_HANDAWAKENTOSIN,0,totalDamage,group,uniqueId,0,0,0,0,0); + } + break; + } +} + + diff --git a/user/116.205.165.25/2_atpriest_2.c b/user/116.205.165.25/2_atpriest_2.c new file mode 100644 index 0000000..adc1ffc --- /dev/null +++ b/user/116.205.165.25/2_atpriest_2.c @@ -0,0 +1,2636 @@ + + +//贪婪之刺 +function checkExecutableSkill_Greedthelurker(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GREEDTHELURKER); + if (isUse){ + obj.getVar("Handawakentosin_EXP").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GREEDTHELURKER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Greedthelurker(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Greedthelurker(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_GREEDREADY_BODY); + obj.sq_PlaySound("R_PW_GREEDLURKER"); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "greedreadydemon_body", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_GREEDLURKER_DM"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Greedthelurker(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Greedthelurker(obj) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } +} + +function onKeyFrameFlag_Greedthelurker(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_SetMyShake(obj, 5, 240); + //`create Lurker` 25 0 3 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GREEDTHELURKER, -1, 0, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GREEDTHELURKER); + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 2, skillLevel); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 3, skillLevel); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 1, skillLevel); + local sub = 0, maxHit = 0; + if(sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 4, skillLevel) > 0){sub = 1; maxHit = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 5, skillLevel);} + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,25,0,3,obj.getDirection(),4,SKILL_BYKK_GREEDTHELURKER,0,totalDamage,sizeRate,hitMax,hitTime,sub,maxHit,0,0); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Greedthelurker(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Greedthelurker(obj, new_state) +{ + if(!obj) return; +} + +//杀戮战镰 +function checkExecutableSkill_Scythemssacre(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SCYTHEMSSACRE); + if (isUse){ + obj.getVar("Scythemssacre_Bool").setBool(0, false); + obj.getVar("Scythemssacre_Count").setInt(10, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Scythemssacre_Bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SCYTHEMSSACRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Scythemssacre(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Scythemssacre(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(obj.getVar("Scythemssacre_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atscythemssacre_demonstep1_body", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_SCYTHEMSSACRE_DM_01"); + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATSCYTHEMSSACRE_STEP1_BODY); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PW_SCYTHEMSSACRE_01_1"); + else obj.sq_PlaySound("PW_SCYTHEMSSACRE_01_2"); + } + break; + case 1: + local sizeRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMSSACRE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMSSACRE)) / 100.0; + if(obj.getVar("Scythemssacre_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atscythemssacre_demonloop_body", false); + obj.setCurrentAnimation(ani); + local effectAni = ["effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonloop_dodge02.ani", "effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonloop_dodge01.ani", "effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonloop_normal02.ani", "effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonloop_normal01.ani"]; + for(local i = 0; i < effectAni.len(); i++){ + local currentAni = obj.sq_CreateCNRDAnimation(effectAni[i]); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + obj.sq_AddStateLayerAnimation(10004 - i, currentAni, 0, ((sizeRate - 1.0)*60).tointeger()); + } + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATSCYTHEMSSACRE_LOOP_BODY); + local effectAni = ["effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_loopeff_dodge01.ani", "effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_loopeff_normal01.ani"]; + for(local i = 0; i < effectAni.len(); i++){ + local currentAni = obj.sq_CreateCNRDAnimation(effectAni[i]); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.sq_AddStateLayerAnimation(10002 - i, currentAni, 0, ((sizeRate - 1.0)*60).tointeger()); + } + } + + local attackBox = [-149,-50,0,355,100,161]; + for(local ui = 0; ui < attackBox.len(); ui++){ + attackBox[ui] = (attackBox[ui] * sizeRate).tointeger(); + } + local pAni = obj.getCurrentAnimation(); + sq_AddAttackBox(pAni, attackBox[0], attackBox[1], attackBox[2], attackBox[3], attackBox[4], attackBox[5]); + obj.setTimeEvent(1, 100, 1, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SCYTHEMSSACRE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SCYTHEMSSACRE_LOOP)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMSSACRE, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMSSACRE)) > 0) obj.setTimeEvent(2, 30, -1, true); + if(sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMSSACRE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMSSACRE)) < 1) break; + local appendage = sq_AttractToMe(obj, -attackBox[0] * 120 / 100, 0, 200); + obj.getVar("Scythemssacre").setAppendage(0,appendage);//设置ap + break; + case 2: + obj.stopTimeEvent(2) + if(obj.getVar("Scythemssacre_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, "atscythemssacre_demonstep2_body", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_SCYTHEMSSACRE_DM_02"); + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATSCYTHEMSSACRE_STEP2_BODY); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PW_SCYTHEMSSACRE_02_1"); + else obj.sq_PlaySound("PW_SCYTHEMSSACRE_02_2"); + } + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SCYTHEMSSACRE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SCYTHEMSSACRE_END)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local appendage = obj.getVar().getAppendage(0); + if(appendage) appendage.setValid(false); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Scythemssacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SCYTHEMSSACRE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Scythemssacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + //按C后取消: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + case 0: + //加快 + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + } +} + +function onKeyFrameFlag_Scythemssacre(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_loopeff_rose01.ani", 0, 2, 0); + break; + case 102: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_loopeff_dust04.ani", 0, -1, 0); + break; + case 103: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonlooprose_01.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonloopdust_04.ani", 0, -1, 0); + break; + case 200: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_step2eff_dust05.ani", 0, -6, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Rose02.ani", 0, 6, 0); + obj.sq_PlaySound("SCYTHEMSSACRE_LOOP"); + break; + case 204: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust06.ani", 0, -5, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust07.ani", 0, -4, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Rose03.ani", 0, 7, 0); + break; + case 209: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust08.ani", 0, -3, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Rose04.ani", 0, 8, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust11.ani", 0, 1, 0); + break; + case 214: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Rose05.ani", 0, 9, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust12.ani", 0, 2, 0); + break; + case 215: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust09.ani", 0, -2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust10.ani", 0, -1, 0); + break; + case 217: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SCYTHEMSSACRE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SCYTHEMSSACRE_LASTATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 219: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Rose06.ani", 0, 10, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust15.ani", 0, 5, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust14.ani", 0, 4, 0); + break; + case 220: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/atscythemssacre_Step2Eff_Dust13.ani", 0, 3, 0); + sq_flashScreen(obj,1,40,50,76, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 100); + break; + case 208: + case 213: + case 218: + obj.resetHitObjectList(); + break; + case 300: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/demonstep2_rose01.ani", 0, 5, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust01.ani", 0, -1, 0); + obj.sq_PlaySound("SCYTHEMSSACRE_LOOP"); + break; + case 304: + obj.sq_PlaySound("DUALSLASH_01"); + obj.sq_PlaySound("PW_SCYTHEMSSACRE_DM_01"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Rose02.ani", 0, 4, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust02.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust03.ani", 0, -2, 0); + break; + case 310: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Rose03.ani", 0, 3, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust04.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust05.ani", 0, -2, 0); + break; + case 315: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Rose04.ani", 0, 2, 0); + break; + case 316: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust06.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust07.ani", 0, -2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust08.ani", 0, -3, 0); + break; + case 317: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SCYTHEMSSACRE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SCYTHEMSSACRE_LASTATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 320: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Rose05.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust09.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust10.ani", 0, -2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscythemssacre/demonization/DemonStep2_Dust11.ani", 0, -3, 0); + sq_flashScreen(obj,1,50,100,76, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 100); + obj.resetHitObjectList(); + break; + case 309: + case 314: + obj.resetHitObjectList(); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Scythemssacre(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMSSACRE, 1, sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMSSACRE)); + // if(obj.getVar("Scythemssacre_Bool").getBool(0)) hitMax = hitMax + 1; + local count = obj.getVar("Scythemssacre_Count").getInt(10); + if(count <= hitMax){ + obj.getVar("Scythemssacre_Count").setInt(10, obj.getVar("Scythemssacre_Count").getInt(10) + 1); + obj.resetHitObjectList(); + obj.sq_PlaySound("SCYTHEMSSACRE_LOOP"); + + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + local inputMax = 1, gapByInputMin = 100, gapByInputMax = 200; + + if(inputConut >= inputMax){ + obj.setTimeEvent(1, gapByInputMin, 1, false); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 200.0 * (1 + sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMSSACRE, 3, sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMSSACRE)) / 100.0); + currentAni.setSpeedRate(speedRate); + } + else{ + obj.setTimeEvent(1, gapByInputMax, 1, false); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 100.0 * (1 + sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMSSACRE, 3, sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMSSACRE)) / 100.0); + currentAni.setSpeedRate(speedRate); + } + } + else{ + obj.removeAllTimeEvent(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_SCYTHEMSSACRE, STATE_PRIORITY_AUTO, true); + } + break; + case 2: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 1)){ + obj.sq_StartWrite(); + obj.sq_WriteDword(1); + obj.sq_WriteDword(obj.getYPos() - 2); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - 2,obj.getYPos())){ + obj.sq_StartWrite(); + obj.sq_WriteDword(2); + obj.sq_WriteDword(obj.getXPos() - 4); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + 2,obj.getYPos())){ + obj.sq_StartWrite(); + obj.sq_WriteDword(2); + obj.sq_WriteDword(obj.getXPos() + 4); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 1)){ + obj.sq_StartWrite(); + obj.sq_WriteDword(1); + obj.sq_WriteDword(obj.getYPos() + 2); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - 2,obj.getYPos())){ + obj.sq_StartWrite(); + obj.sq_WriteDword(2); + obj.sq_WriteDword(obj.getXPos() - 4); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + 2,obj.getYPos())){ + obj.sq_StartWrite(); + obj.sq_WriteDword(2); + obj.sq_WriteDword(obj.getXPos() + 4); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - 2,obj.getYPos())){ + obj.sq_StartWrite(); + obj.sq_WriteDword(2); + obj.sq_WriteDword(obj.getXPos() - 4); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + 2,obj.getYPos())){ + obj.sq_StartWrite(); + obj.sq_WriteDword(2); + obj.sq_WriteDword(obj.getXPos() + 4); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_SCYTHEMSSACRE); + } + } + break; + } +} + +function onChangeSkillEffect_Scythemssacre(obj, skillIndex, reciveData) +{ + if(!obj) return; + local sub = reciveData.readDword(); + local offSet = reciveData.readDword(); + switch(sub){ + case 1: + sq_setCurrentAxisPos(obj, 1, offSet); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, offSet); + break; + } +} + +function onEndState_Scythemssacre(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SCYTHEMSSACRE){ + sq_SimpleMoveToNearMovablePos(obj,200); + local appendage = obj.getVar("Scythemssacre").getAppendage(0); + if(appendage) appendage.setValid(false); + } +} + +//愤怒之袭 +function checkExecutableSkill_Scudthewrath(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SCUDTHEWRATH); + if (isUse){ + obj.getVar("Scudthewrath_Bool").setBool(0, false); + obj.getVar("Scudthewrath_Bool").setBool(1, false); + obj.getVar("Scudthewrath_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SCUDTHEWRATH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Scudthewrath(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Scudthewrath(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATSCUDTHEWRATH_TRANSFORM_BODY); + obj.sq_PlaySound("R_PW_SCUDWRATH"); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "atscudthewrath_dash_01", false); + obj.setCurrentAnimation(ani); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SCUDTHEWRATH, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ATSCUDTHEWRATH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("Scudthewrath_Move").setInt(10, sq_GetXPos(obj)); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "atscudthewrath_stop_01", false); + obj.setCurrentAnimation(ani); + break; + case 3: + local ani = getCurrentAnimation_demonization(obj, "atscudthewrath_end_body", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/end/atscudthewrath_transform02_b_front.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/end/atscudthewrath_transform02_back_dust.ani", 0, -1, 0); + break; + case 4: + local ani = getCurrentAnimation_demonization(obj, "atscudthewrath_chase1", false); + obj.setCurrentAnimation(ani); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SCUDTHEWRATH, -1, 0, 0.6) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ATSCUDTHEWRATH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 5: + local ani = getCurrentAnimation_demonization(obj, "atscudthewrath_chase2", false); + obj.setCurrentAnimation(ani); + local size = obj.getVar("Scudthewrath_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Scudthewrath_Tar").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,82); + } + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Scudthewrath(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 4: + if(subState == 0){ + if(obj.isMyControlObject()){ + local effectObj = sq_setFullScreenEffect(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/atscudthewrath_screen.ani"); + sq_ChangeDrawLayer(effectObj, ENUM_DRAWLAYER_BOTTOM); + } + } + else if(subState == 1){ + local moveX = 300; + if(obj.getVar("Scudthewrath_Bool").getBool(0)) moveX = 450; + local dstX = sq_GetDistancePos(obj.getVar("Scudthewrath_Move").getInt(10), obj.getDirection(), moveX); + sq_setCurrentAxisPos(obj, 0, dstX); + } + else if(subState == 2){ + if(obj.getVar("Scudthewrath_Bool").getBool(1)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_SCUDTHEWRATH, STATE_PRIORITY_AUTO, true); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_SCUDTHEWRATH, STATE_PRIORITY_AUTO, true); + } + } + break; + } + else if(subState == 4){ + sq_setCurrentAxisPos(obj, 0, obj.getVar("Scudthewrath_Move").getInt(10)); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_SCUDTHEWRATH, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Scudthewrath(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("Scudthewrath_Bool").setBool(0, true); + case 2: + if(obj.getVar("Scudthewrath_Bool").getBool(1) == false){ + if(sq_GetLevelData(obj, SKILL_BYKK_SCUDTHEWRATH, 1, sq_GetSkillLevel(obj, SKILL_BYKK_SCUDTHEWRATH)) > 0){ + obj.setSkillCommandEnable(SKILL_BYKK_SCUDTHEWRATH,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_SCUDTHEWRATH) != -1) obj.getVar("Scudthewrath_Bool").setBool(1, true); + } + } + break; + } + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } +} + +function onKeyFrameFlag_Scudthewrath(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 8: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/ready/atscudthewrath_ready_a_back.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/ready/atscudthewrath_ready_a_front.ani", 0, 1, 0); + break; + case 100: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/dash/atscudthewrath_dash_back_02.ani", 0, -1, 0); + break; + case 101: + obj.sq_PlaySound("SCUDWRATH"); + local pAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(pAni); + local attackBox = [-127, -50, -105, 444, 100, 312]; + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_SCUDTHEWRATH, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SCUDTHEWRATH)); + if(sizeRate > 0){ + for(local i = 0; i < attackBox.len(); i++){ + attackBox[i] = attackBox[i] * (100 + sizeRate) / 100; + } + } + sq_AddAttackBox(pAni, attackBox[0], attackBox[1], attackBox[2], attackBox[3], attackBox[4], attackBox[5]); + break; + case 411: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atscudthewrath/atscudthewrath_hit_01.ani", -157, 0, 82); + sq_SetMyShake(obj, 10, 300); + break; + case 416: + sq_flashScreen(obj,1,25,110,127, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Scudthewrath(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local moveX = 250; + if(obj.getVar("Scudthewrath_Bool").getBool(0)) moveX = 400; + local vx = sq_GetUniformVelocity(0, moveX, timeEventCount, 50); + local dstX = sq_GetDistancePos(obj.getVar("Scudthewrath_Move").getInt(10), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_Scudthewrath(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SCUDTHEWRATH){ + sq_SimpleMoveToNearMovablePos(obj,500); + } +} + +function onAttack_Scudthewrath(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("Scudthewrath_Tar").is_obj_vector(damager)) obj.getVar("Scudthewrath_Tar").push_obj_vector(damager); + } + break; + } +} + + +//原罪释放·净化 +function checkExecutableSkill_Depravitysevensins(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + // if(obj.getVar("Depravitysevensins_Skill").getBool(0) && ){ + if(!sq_GetSkill(obj, SKILL_BYKK_FLOWEROFPURIFICATION).isInCoolTime()){ + // obj.getVar("Depravitysevensins_Skill").setBool(0, false); + obj.startSkillCoolTime(SKILL_BYKK_FLOWEROFPURIFICATION, sq_GetSkillLevel(obj, SKILL_BYKK_FLOWEROFPURIFICATION), -1); + obj.getVar("Flowerofpurification_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FLOWEROFPURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Depravitysevensins(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Depravitysevensins(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DEPRAVITYSEVENSINS_CHANGEON_BODY); + obj.sq_PlaySound("R_PW_DSEVENSINS"); + obj.sq_PlaySound("DGUARDIAN_CHANGE_1");// + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/demonization/depravitysevensins_changeon_bgblack.ani"; + createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "demonization_return", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/demonization/depravitysevensins_changeoff_eff02.ani", 0, 1, 0); + break; + case 10: + obj.getVar("attackMoveBool").setBool(0, false); + case 11: + case 12: + obj.getVar("attackBool").setBool(10, false); + obj.getVar("attackBool").setBool(11, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + local aniName = ["demonizationattack_basic_a_body","demonizationattack_basic_b_body","demonizationattack_basic_c_body"]; + local ani = getCurrentAnimation_demonization(obj, aniName[subState - 10], false); + obj.setCurrentAnimation(ani); + local atkIndex = [ATPRIESTATK_BYKK_DEMONIZATION_ATTACK1,ATPRIESTATK_BYKK_DEMONIZATION_ATTACK2,ATPRIESTATK_BYKK_DEMONIZATION_ATTACK3]; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState - 10])); + switch(subState){ + case 10: + local aniPath = ["effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/","demonizationattack_basic_a_eff01.ani","demonizationattack_basic_a_eff02.ani","demonizationattack_basic_a_eff03.ani","demonizationattack_basic_a_eff04.ani","demonizationattack_basic_a_eff05.ani"]; + local drawLayer = [0, 1, 0, 1, 1, 0]; + for(local i = 1;i < aniPath.len(); i++){ + obj.sq_AddStateLayerAnimation(drawLayer[i],obj.sq_CreateCNRDAnimation(aniPath[0] + aniPath[i]), 0, 0); + } + break; + case 11: + local aniPath = ["effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/","demonizationattack_basic_b_eff02.ani","demonizationattack_basic_b_eff03.ani","demonizationattack_basic_b_eff04.ani"]; + local drawLayer = [0, 1, 1, 0]; + for(local i = 1;i < aniPath.len(); i++){ + obj.sq_AddStateLayerAnimation(drawLayer[i],obj.sq_CreateCNRDAnimation(aniPath[0] + aniPath[i]), 0, 0); + } + break; + case 12: + local aniPath = ["effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/","demonizationattack_basic_c_eff03.ani","demonizationattack_basic_c_eff05.ani"]; + local drawLayer = [0, 1, 0]; + for(local i = 1;i < aniPath.len(); i++){ + obj.sq_AddStateLayerAnimation(drawLayer[i],obj.sq_CreateCNRDAnimation(aniPath[0] + aniPath[i]), 0, 0); + } + break; + } + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SECONDSOULATTACK1_03 + subState); + local attackIndex = obj.sq_GetDefaultAttackInfo(subState - 10); + sq_SetCurrentAttackInfo(obj, attackIndex); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + // local speedRate = [[250,-1000,400,-1000],[100,-300,200,300],[50,-300,50,-300]]; + local speedRate = [0,100,50]; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) speedRate = [0,150,80]; + local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) + 100; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local skill = sq_GetSkill(obj, SKILL_BYKK_DEPRAVITYSEVENSINS); + if(obj.getVar("attackMoveBool").getBool(0) == false && skill.isSealFunction()){ + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate[subState - 10].tofloat()); + else if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -speedRate[subState - 10].tofloat()); + } + // obj.setAttackXVelocity(speedRate[subState - 10][0]); + // obj.setAttackXAccel(speedRate[subState - 10][1]); + // obj.setAttackXVelocityFast(speedRate[subState - 10][2]); + // obj.setAttackXAccelFast(speedRate[subState - 10][3]); + local sound = ["R_PW_1ATK_DM", "R_PW_2ATK_DM", "R_PW_3ATK_DM"]; + obj.sq_PlaySound(sound[subState - 10]); + obj.sq_PlaySound("R_SCYTHE"); + break; + } + +} + +function onEndCurrentAni_Depravitysevensins(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 10: + case 11: + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Depravitysevensins(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.sq_StartWrite(); + obj.sq_WriteDword(1); + sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_DEPRAVITYSEVENSINS); + } + case 11: + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + local currentT = sq_GetCurrentTime(pAni); + if(obj.getVar("attackBool").getBool(subState) == false){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(currentT > delaySum * 50 / 100 && sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("attackBool").setBool(subState, true); + } + if(obj.getVar("attackBool").getBool(subState)){ + if(currentT >= delaySum * 90 / 100){ + obj.sq_IntVectClear(); + local skill = sq_GetSkill(obj, SKILL_BYKK_DEPRAVITYSEVENSINS); + if(!skill.isSealFunction() && subState == 11) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_USER, true); + } + } + case 12: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onChangeSkillEffect_Depravitysevensins(obj, skillIndex, reciveData) +{ + if(!obj) return; + local set = reciveData.readDword(); + if(set == 1){ + obj.getVar("attackMoveBool").setBool(0, true); + } +} + +function onKeyFrameFlag_Depravitysevensins(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + setDepravitysevensinsAppendage(obj); + break; + case 102: sq_SetMyShake(obj, 2, 300); break; + case 103: sq_SetMyShake(obj, 10, 160); break; + case 104: sq_SetMyShake(obj, 1, 160); break; + case 201: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_b_eff01.ani"), 0, 0); + break; + case 202: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_C_eff01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_C_eff04.ani"), 0, 0); + break; + case 203: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_C_eff02.ani"), 0, 0); + break; + } + return true; +} + +function onTimeEvent_Depravitysevensins(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Depravitysevensins(obj, new_state) +{ + if(!obj) return; +} + +function onEnd_appendage_depravitysevensins(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sqrChr.getState() == 0 || sqrChr.getState() == 8 || sqrChr.getState() == 14){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(1); + sqrChr.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_USER, true); + } +} + +function setDepravitysevensinsAppendage(obj) +{ + if(!obj.isObjectType(OBJECTTYPE_CHARACTER)) return; + obj.getVar("Depravitysevensins_Skill").setBool(0, true); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_DEPRAVITYSEVENSINS, false, DEMONIZATION_APDPATH, true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DEPRAVITYSEVENSINS); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_DEPRAVITYSEVENSINS, 0, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRSTPRANA) > 0) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_FIRSTPRANA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_FIRSTPRANA)); + if(buffTime > 0){ + AddAppendage.sq_SetValidTime(buffTime); + obj.sq_SetSuperArmorUntilTime(obj, buffTime); + } + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_DEPRAVITYSEVENSINS, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + + AddAppendage.sq_DeleteEffectFront(); + AddAppendage.sq_DeleteEffectBack(); + AddAppendage.sq_AddEffectBack("character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/demonization/depravitysevensins_changeloop_back.ani"); + AddAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/demonization/depravitysevensins_changeloop_front01.ani"); + + local value1 = sq_GetLevelData(obj, SKILL_BYKK_DEPRAVITYSEVENSINS, 9, skillLevel); + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_DEPRAVITYSEVENSINS, 6, skillLevel); + local defenseRate = sq_GetLevelData(obj, SKILL_BYKK_DEPRAVITYSEVENSINS, 1, skillLevel); + local hpmpRate = sq_GetLevelData(obj, SKILL_BYKK_DEPRAVITYSEVENSINS, 2, skillLevel); + local cooltimeRate = sq_GetLevelData(obj, SKILL_BYKK_DEPRAVITYSEVENSINS, 3, skillLevel); + local change_appendage = AddAppendage.sq_getChangeStatus("Depravitysevensins"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("Depravitysevensins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (value1 * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speedRate * 10).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (speedRate * 10).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE , true, (defenseRate * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE , true, (defenseRate * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_REGEN_RATE , true, (hpmpRate * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_REGEN_RATE, true, (hpmpRate * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (cooltimeRate * -1).tofloat()); + } +} + +//净化之花 +function checkExecutableSkill_Flowerofpurification(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + // if(obj.getVar("Depravitysevensins_Skill").getBool(0) == false) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLOWEROFPURIFICATION); + if (isUse){ + obj.getVar("Flowerofpurification_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FLOWEROFPURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Flowerofpurification(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Flowerofpurification(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local ani = getCurrentAnimation_demonization(obj, "delightflower_castbody", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_DSEVENSINS_DM_01"); + obj.sq_PlaySound("DSEVENSINS_CAST"); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 22, 2500); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.5, 0.5); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + if(speedRate > 130) currentAni.setSpeedRate(130.0); +} + +function onEndCurrentAni_Flowerofpurification(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Flowerofpurification(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Flowerofpurification(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + //`add body effect` -25 0 0 + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/delightflower_floweradd_fxb01.ani"), -25, 0); + break; + case 104: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/delightflower_cast04.ani", 0, 1, 0); + break; + case 105: + //`shoot heart` -1 0 182 + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/effect/delightflower_namedhit01.ani", 200, 0, 0); + + local objmg = obj.getObjectManager(); + for(local i= 0; i < objmg.getCollisionObjectNumber(); i++){ + local object = objmg.getCollisionObject(i); + if(object && obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_ACTIVE) && sq_Abs(object.getXPos() - obj.getXPos()) <= 400 && sq_Abs(object.getYPos() - obj.getYPos()) <= 200){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DELIGHTFLOWER_APDPATH)){ + if(!obj.getVar("Flowerofpurification_Tar").is_obj_vector(activeObj)) obj.getVar("Flowerofpurification_Tar").push_obj_vector(activeObj); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_BYKK_FLOWEROFPURIFICATION, -1, DELIGHTFLOWER_APDPATH, true); + addAppendage.sq_AddEffectBack("character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/effect/delightflower_wavehitghost_back.ani"); + addAppendage.sq_AddEffectBack("character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/effect/delightflower_floorwavehit.ani"); + addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/effect/delightflower_wavehit01.ani"); + addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/effect/delightflower_wavehitghost_front.ani"); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); + } + } + } + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLOWEROFPURIFICATION, -1, 0, 1.0) + 100; + local hitMax = sq_GetIntData(obj ,SKILL_BYKK_FLOWEROFPURIFICATION, 4); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(5, 18); + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),4,SKILL_BYKK_FLOWEROFPURIFICATION,2,totalDamage,hitMax,delaySum,0,0,0,0,0); + break; + case 110: + //`create river` 1 0 187 + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,1,0,187,obj.getDirection(),4,SKILL_BYKK_FLOWEROFPURIFICATION,0,0,0,0,0,0,0,0,0); + break; + case 119: + obj.sq_PlaySound("DSEVENSINS"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/delightflower_cast05.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/delightflower_cast06.ani", 0, 1, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_flarebg03.ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(1.8, 1.2); + pAni.setAutoLayerWorkAnimationAddSizeRate(1.8); + //`create flower` 1 0 235 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLOWEROFPURIFICATION, -1, 1, 1.0) + 100; + local size = obj.getVar("Flowerofpurification_Tar").get_obj_vector_size(); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 6000 / delay; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,1,0,-20,obj.getDirection(),4,SKILL_BYKK_FLOWEROFPURIFICATION,1,totalDamage,size,speedRate,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Flowerofpurification(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Flowerofpurification(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_FLOWEROFPURIFICATION){ + local aniObj = obj.getVar("Flowerofpurification_river").get_obj_vector(0); + if(aniObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aniObj); + colObj.setTimeEvent(0, 200, 1, false); + } + local size = obj.getVar("Flowerofpurification_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Flowerofpurification_Tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, DELIGHTFLOWER_APDPATH); + } + } + } +} + +//嫉妒之吻 +function checkExecutableSkill_Enviouskiss(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + if(obj.getVar("Enviouskiss_Bool").getBool(0)){ + obj.getVar("Enviouskiss_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ENVIOUSKISS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ENVIOUSKISS); + if (isUse){ + obj.getVar("Enviouskiss_Bool").setBool(0, false); + obj.getVar("Enviouskiss_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(sq_GetLevelData(obj, SKILL_BYKK_ENVIOUSKISS, 3, sq_GetSkillLevel(obj, SKILL_BYKK_ENVIOUSKISS)) > 0) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ENVIOUSKISS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Enviouskiss(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Enviouskiss(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + local ani = getCurrentAnimation_demonization(obj, "enviouskissthrow", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/humancast_bodyeffect01.ani", 0, 0, 0); + obj.sq_PlaySound("R_PW_ENVIOUSKISS_DM_01"); + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ENVIOUSKISSTHROWHUMAN); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/dashhuman_rose01.ani", 0, 0, 0); + obj.sq_PlaySound("R_PW_ENVIOUSKISS"); + } + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "enviouskissdash", false); + obj.setCurrentAnimation(ani); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "enviouskisshold", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/holddust_01.ani", 0, -1, 0); + break; + case 3: + local ani = getCurrentAnimation_demonization(obj, "enviouskissfinish", false); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/finishslash_hit11.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENVIOUSKISS, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ENVIOUSKISS)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ENVIOUSKISSFINISHHUMAN); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/changehumaneffect_rose02.ani", 0, 1, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Enviouskiss(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local targetObj = obj.getVar("Enviouskiss_Tar").get_obj_vector(0); + if(targetObj){ + local moveX = sq_GetDistancePos(sq_GetXPos(targetObj), targetObj.getDirection(), -50); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + sq_SetCurrentDirection(obj, targetObj.getDirection()); + } + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_ENVIOUSKISS, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 0: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_ENVIOUSKISS, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + } +} + +function onProcCon_Enviouskiss(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState <= 3){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + } +} + +function onKeyFrameFlag_Enviouskiss(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ENVIOUSKISS); + local stunTime = sq_GetLevelData(obj, SKILL_BYKK_ENVIOUSKISS, 1, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_ENVIOUSKISS, 2, skillLevel); + local ishold = sq_GetLevelData(obj, SKILL_BYKK_ENVIOUSKISS, 4, skillLevel); + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,25,0,92,obj.getDirection(),4,SKILL_BYKK_ENVIOUSKISS,0,stunTime,lifeTime,ishold,0,0,0,0,0); + break; + case 102: sq_SetMyShake(obj, 3, 300); break; + case 103: + sq_flashScreen(obj,80,100,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 300); + break; + case 104: + obj.sq_PlaySound("DEVASTATE"); + obj.sq_PlaySound("PW_ENVIOUSKISS_DM_03_1"); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Enviouskiss(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Enviouskiss(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_ENVIOUSKISS){ + sq_SimpleMoveToNearMovablePos(obj,300); + } +} + +function onEnd_appendage_EnviousKiss(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + obj.getVar("Enviouskiss_Bool").setBool(0, false); +} + +//靈魂烙印·原罪衝擊 +function checkExecutableSkill_Secondsoul(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SECONDSOUL); + if (isUse){ + obj.getVar("Secondsoul_Bool").setBool(0, false); + obj.getVar("Scudthewrath_Tar").clear_obj_vector(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Secondsoul_Bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SECONDSOUL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Secondsoul(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Secondsoul(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local aniSet = [ATPANI_BYKK_SECONDSOULATTACK1_03,ATPANI_BYKK_SECONDSOULATTACK2_03,ATPANI_BYKK_SECONDSOULATTACK3_02,ATPANI_BYKK_SECONDSOULATTACK4_03,ATPANI_BYKK_SECONDSOULATTACK5_03,ATPANI_BYKK_SECONDSOULATTACK6_02,ATPANI_BYKK_SECONDSOULATTACK2_03_TALISMAN,ATPANI_BYKK_SECONDSOULATTACK6_02_TALISMAN], aniName = ["demonsecondsoulattack1_03","demonsecondsoulattack2_03","demonsecondsoulattack3_03","demonsecondsoulattack4_03","demonsecondsoulattack5_03","demonsecondsoulattack6_02","demonsecondsoulattack2_03_talisman","demonsecondsoulattack6_02_talisman"]; + if(obj.getVar("Secondsoul_Bool").getBool(0)){ + local ani = getCurrentAnimation_demonization(obj, aniName[subState], false); + obj.setCurrentAnimation(ani); + } + else{ + obj.sq_SetCurrentAnimation(aniSet[subState]); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + switch(subState){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsecondsoul/secondsoulattack2_dust1_01.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SECONDSOUL, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SECONDSOUL)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsecondsoul/secondsoulattack2_dust2_02.ani", 0, 1, 0); + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(false) / 60, 40, true); + break; + case 3: + obj.getVar("Secondsoul_Move").setInt(10, sq_GetZPos(obj)); + break; + case 4: + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(false) / 75, 40, true); + break; + } +} + +function onEndCurrentAni_Secondsoul(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetLevelData(obj, SKILL_BYKK_SECONDSOUL, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SECONDSOUL)) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(6); + obj.sq_AddSetStatePacket(STATE_BYKK_SECONDSOUL, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + case 1: + case 2: + case 3: + case 4: + case 6: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_SECONDSOUL, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 5: + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Secondsoul(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Secondsoul(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_flashScreen(obj,0,0,320,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 2, 400); + break; + case 102: sq_SetMyShake(obj, 3, 160); break; + case 103: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SECONDSOUL, -1, 1, 1.0) + 100; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 6000 / delay; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,125,0,4,obj.getDirection(),4,SKILL_BYKK_SECONDSOUL,0,totalDamage,speedRate,0,0,0,0,0,0); + break; + case 201: + sq_flashScreen(obj,0,0,320,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 2, 150); + break; + case 202: + break; + case 203: sq_SetMyShake(obj, 3, 160); break; + case 204: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SECONDSOUL, -1, 1, 1.0) + 100; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,125,0,4,obj.getDirection(),4,SKILL_BYKK_SECONDSOUL,0,totalDamage,0,0,0,0,0,0,0); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Secondsoul(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vz = sq_GetUniformVelocity(0, 250, timeEventCount, 40); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 2: + local vz = sq_GetUniformVelocity(obj.getVar("Secondsoul_Move").getInt(10), 0, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_Secondsoul(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SECONDSOUL){ + local size = obj.getVar("Scudthewrath_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Scudthewrath_Tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, SECONDSOUL_APDPATH); + } + } + } +} + +function onAttack_Secondsoul(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, SECONDSOUL_APDPATH)){ + if(!obj.getVar("Scudthewrath_Tar").is_obj_vector(activeObj)) obj.getVar("Scudthewrath_Tar").push_obj_vector(activeObj); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_BYKK_SECONDSOUL, false, SECONDSOUL_APDPATH, true); + if(sq_IsHoldable(obj, activeObj)) sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, obj, 125, 0, activeObj.getZPos(), 200, true, AddAppendage); + } + } + break; + } +} + + +//暴食之噬 +function checkExecutableSkill_Gluttonyvomit(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GLUTTONYVOMIT); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_GLUTTONYVOMIT); + obj.getVar("Gluttonyvomit_Count").setInt(0, 0); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GLUTTONYVOMIT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Gluttonyvomit(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Gluttonyvomit(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATGLUTTONYVOMIT_TRANSFORM1_BODY); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "atgluttonyvomit_casting_body", false); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + local attackBox = [0,-50,0,250,100,161]; + local sizeRate = 1.0; + if(sizeRate > 1.0){ + for(local ui = 0; ui < attackBox.len(); ui++){ + attackBox[ui] = (attackBox[ui] * sizeRate).tointeger(); + } + } + sq_AddAttackBox(currentAni, attackBox[0], attackBox[1], attackBox[2], attackBox[3], attackBox[4], attackBox[5]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GLUTTONYVOMIT, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_GLUTTONYVOMIT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GLUTTONYVOMIT, -1, 1, 1.0) + 100; + obj.setTimeEvent(1, 100, hitMax, false); + local attractPower = sq_GetLevelData(obj, SKILL_BYKK_GLUTTONYVOMIT, 6, sq_GetSkillLevel(obj, SKILL_BYKK_GLUTTONYVOMIT)); + local range = 250 * (100 + sq_GetLevelData(obj, SKILL_BYKK_GLUTTONYVOMIT, 11, sq_GetSkillLevel(obj, SKILL_BYKK_GLUTTONYVOMIT))) / 100; + if(false){attractPower = attractPower * 130 / 100; range = range * 120 / 100}; + local appendage = sq_AttractToMe(obj, 300, 200, attractPower); + obj.getVar("Gluttonyvomit").setAppendage(0,appendage); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("PW_GLUTTONY_DM_01"); + obj.sq_PlaySound("GLUTTONY_CAST"); + break; + case 2: + obj.resetHitObjectList(); + local appendage = obj.getVar("Gluttonyvomit").getAppendage(0);//得到ap + if(appendage)//为真 + appendage.setValid(false);//删除ap + local ani = getCurrentAnimation_demonization(obj, "atgluttonyvomit_att_body", false); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("PW_GLUTTONY_DM_02"); + obj.sq_PlaySound("GLUTTONY_SHOOT"); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATGLUTTONYVOMIT_TRANSFORM2_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Gluttonyvomit(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_GLUTTONYVOMIT, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_GLUTTONYVOMIT, STATE_PRIORITY_AUTO, true); + break; + } + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Gluttonyvomit(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local bDownKey = obj.isDownSkillLastKey(); + local stateTime = obj.sq_GetStateTimer(); + local timeMax = sq_GetLevelData(obj, SKILL_BYKK_GLUTTONYVOMIT, 5, sq_GetSkillLevel(obj, SKILL_BYKK_GLUTTONYVOMIT)); + if(!bDownKey || stateTime >= timeMax){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_GLUTTONYVOMIT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + case 2: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + break; + } +} + +function onKeyFrameFlag_Gluttonyvomit(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: sq_flashScreen(obj,0,120,0,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); break; + case 102: + sq_SetMyShake(obj, 10, 420); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GLUTTONYVOMIT, -1, 2, 1.0) + 100; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,15,0,90,obj.getDirection(),4,SKILL_BYKK_GLUTTONYVOMIT,0,totalDamage,0,0,0,0,0,0,0); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Gluttonyvomit(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(sq_GetLevelData(obj, SKILL_BYKK_GLUTTONYVOMIT, 10, sq_GetSkillLevel(obj, SKILL_BYKK_GLUTTONYVOMIT)) > 0){ + local hpRate = sq_GetLevelData(obj, SKILL_BYKK_GLUTTONYVOMIT, 4, sq_GetSkillLevel(obj, SKILL_BYKK_GLUTTONYVOMIT)) / 10; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && !obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local hp = activeObj.getHp() + activeObj.getHpMax() * hpRate / 100; + obj.sq_SendSetHpPacket(hp, true, activeObj); + } + } + } + break; + } +} + +function onEndState_Gluttonyvomit(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_GLUTTONYVOMIT){ + local appendage = obj.getVar("Gluttonyvomit").getAppendage(0);//得到ap + if(appendage)//为真 + appendage.setValid(false);//删除ap + } +} + +function onAttack_Gluttonyvomit(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GLUTTONYVOMIT, -1, 1, 1.0) + 100; + if(obj.getVar("Gluttonyvomit_Count").getInt(0) >= hitMax) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + obj.getVar("Gluttonyvomit_Count").setInt(0, obj.getVar("Gluttonyvomit_Count").getInt(0) + 1); + local hpRate = sq_GetLevelData(obj, SKILL_BYKK_GLUTTONYVOMIT, 4, sq_GetSkillLevel(obj, SKILL_BYKK_GLUTTONYVOMIT)) / 10; + local hp = obj.getHp() + obj.getHpMax() * hpRate / 100; + obj.sq_SendSetHpPacket(hp, true, obj); + } + break; + } +} + +//肋骨重塑:原罪戰矛 +function checkExecutableSkill_Thirdrib(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THIRDRIB); + if (isUse){ + obj.getVar("Thirdrib_Bool").setBool(0, false); + if(sq_GetLevelData(obj, SKILL_BYKK_THIRDRIB, 3, sq_GetSkillLevel(obj, SKILL_BYKK_THIRDRIB)) > 0) obj.getVar("Thirdrib_Bool").setBool(0, true); + obj.getVar("Thirdrib_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(sq_GetLevelData(obj, SKILL_BYKK_THIRDRIB, 4, sq_GetSkillLevel(obj, SKILL_BYKK_THIRDRIB)) > 0) obj.sq_IntVectPush(3); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thirdrib(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Thirdrib(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_THIRDRIB_TRANS_START_BODY); + obj.sq_PlaySound("PW_THIRDRIB_01"); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "thirdrib_a_body", false); + obj.setCurrentAnimation(ani); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THIRDRIB, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_THIRDRIB)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("PW_THIRDRIB_DM_01"); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "thirdrib_b_body", false); + obj.setCurrentAnimation(ani); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_b_bg_eff_all02.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_b_bg_black_all.ani"), 0, 0); + obj.setTimeEvent(0, 1500, 1, false); + break; + case 3: + obj.removeAllTimeEvent(); + local ani = getCurrentAnimation_demonization(obj, "thirdrib_c_body", false); + obj.setCurrentAnimation(ani); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_c_bg_eff_all01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_c_bg_black_player01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_c_back_rose01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_c_bg_black_all.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THIRDRIB, -1, 2, 1.0) + 100; + if(sq_GetLevelData(obj, SKILL_BYKK_THIRDRIB, 4, sq_GetSkillLevel(obj, SKILL_BYKK_THIRDRIB)) > 0) totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THIRDRIB, -1, 0, 1.0) + 100; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local count = loadSlot.getRemainLoadNumber(); + totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_BYKK_THIRDRIB, 0) / 10 * count) / 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRSTPRANA) < 1){ + loadSlot.decreaseLoadCount(count); + } + else loadSlot.decreaseLoadCount(count - 1); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_THIRDRIBFINSH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("PW_THIRDRIB_DM_02"); + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_THIRDRIB_TRANS_END_BODY); + obj.sq_PlaySound("PW_THIRDRIB_02"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Thirdrib(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_AUTO, true); + break; + case 3: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_AUTO, true); + break; + } + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Thirdrib(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 6); + if(stateTime <= delaySum) break; + case 2: + if(obj.getVar("Thirdrib_Bool").getBool(0)){ + obj.setSkillCommandEnable(SKILL_BYKK_THIRDRIB,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_THIRDRIB); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_AUTO, true); + break; + } + } + case 3: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + break; + } +} + +function onKeyFrameFlag_Thirdrib(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + //`draw back ground` -1 0 140 + // createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_a_bg_black_all.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) - 1,0,ENUM_DRAWLAYER_BOTTOM); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_a_bg_eff_all01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthirdrib/thirdrib_a_bg_black_all.ani"), 0, 0); + break; + case 102: + //`play pierce sound` 35 0 133 + break; + case 103: + sq_flashScreen(obj,0,80,0,127, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 4, 80); + //`cut holdTarget` 1 0 -2 + break; + case 104: + sq_flashScreen(obj,0,80,0,127, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 2, 60); + break; + case 105: sq_SetMyShake(obj, 1, 40); break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Thirdrib(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Thirdrib(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_THIRDRIB){ + local size = obj.getVar("Thirdrib_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Thirdrib_Tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, THIRDRIB_APDPATH); + } + } + } +} + +function onAttack_Thirdrib(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(!obj.getVar("Thirdrib_Tar").is_obj_vector(activeObj)){ + obj.getVar("Thirdrib_Tar").push_obj_vector(activeObj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, THIRDRIB_APDPATH)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_BYKK_SECONDSOUL, false, THIRDRIB_APDPATH, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + case 3: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager,"character/swordman/effect/animation/1_atpriest_bykk/atthirdrib/lasthit_eff03.ani", 0, 1, sq_GetObjectHeight(damager) / 2); + } + break; + } +} + +//失乐园 +function checkExecutableSkill_Lastgenesis(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LASTGENESIS); + if (isUse){ + obj.getVar("Lastgenesis_Tar").clear_obj_vector(); + obj.getVar("Lastgenesis_TarFix").clear_obj_vector(); + obj.getVar("Lastgenesis_Bool").setBool(0, true); + obj.getVar("Lastgenesis_Bool").setBool(1, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Lastgenesis_Bool").setBool(1, true); + obj.sq_IntVectClear(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LASTGENESIS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Lastgenesis(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Lastgenesis(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATLASTGENESIS_TRANSFORMATION1_BODY1); + obj.sq_PlaySound("PW_LASTGENESIS_01"); + break; + case 1: + local ani = getCurrentAnimation_demonization(obj, "atlastgenesis_casting_body1", false); + obj.setCurrentAnimation(ani); + if(obj.getVar("Lastgenesis_Bool").getBool(1)) obj.sq_PlaySound("PW_LASTGENESIS_DM_01"); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "atlastgenesis_att1_body", false); + obj.setCurrentAnimation(ani); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASTGENESIS, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LASTGENESISSWING)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Lastgenesis_Bool").getBool(1)) obj.sq_PlaySound("PW_LASTGENESIS_DM_02"); + else obj.sq_PlaySound("PW_LASTGENESIS_02"); + break; + case 3: + case 4: + local aniSet = "atlastgenesis_finish1_body"; + if(subState == 4) aniSet = "atlastgenesis_finish2_body"; + local ani = getCurrentAnimation_demonization(obj, aniSet, false); + obj.setCurrentAnimation(ani); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASTGENESIS, -1, 2, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LASTGENESISFINSH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 5: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATLASTGENESIS_TRANSFORMATION2_BODY1); + break; + } + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.5, 0.5); +} + +function onEndCurrentAni_Lastgenesis(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_LASTGENESIS, STATE_PRIORITY_AUTO, true); + break; + case 2: + local size = obj.getVar("Lastgenesis_TarFix").get_obj_vector_size(); + obj.sq_IntVectClear(); + if(size > 0) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_LASTGENESIS, STATE_PRIORITY_AUTO, true); + break; + case 3: + case 4: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(STATE_BYKK_LASTGENESIS, STATE_PRIORITY_AUTO, true); + break; + } + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Lastgenesis(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState != 5){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } + } +} + +function onKeyFrameFlag_Lastgenesis(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 7: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/bg/atlastgenesis_bg_1.ani" + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj)-1,450,ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Lastgenesis_Effect").clear_obj_vector(); + obj.getVar("Lastgenesis_Effect").push_obj_vector(pooledObj); + break; + case 100: + break; + case 101: + createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/att1/atlastgenesis_att1_spin2.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj)-1,0,ENUM_DRAWLAYER_BOTTOM); + break; + case 102: + local size = obj.getVar("Lastgenesis_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Lastgenesis_Tar").get_obj_vector(i); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, LASTGENESIS_APDPATH); + if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 160, 0, 50, 50, true, addAppendage); + } + } + break; + case 103: + break; + case 104: + local size = obj.getVar("Lastgenesis_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Lastgenesis_Tar").get_obj_vector(i); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, LASTGENESIS_APDPATH); + if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, -160, 0, 100, 100, true, addAppendage); + } + } + break; + case 105: + sq_SetMyShake(obj, 5, 60); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/att1/atlastgenesis_att1_body_scythe_dust1.ani", 0, 1, 0); + break; + case 106: + break; + case 107: + break; + case 108: + break; + case 109: + local moveX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 80); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 2, 100); + local size = obj.getVar("Lastgenesis_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Lastgenesis_Tar").get_obj_vector(i); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, LASTGENESIS_APDPATH); + if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 150, 0, -100, 50, true, addAppendage); + } + } + break; + case 110: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASTGENESIS, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LASTGENESISSMASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + // sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/att1/atlastgenesis_att1_scythe_weapon_normal.ani", 0, 0, 7); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atlastgenesis/att1/atlastgenesis_att1_scythe_weapon_normal.ani"), 0, 0); + if(obj.getVar("Lastgenesis_Bool").getBool(1)) obj.sq_PlaySound("PW_LASTGENESIS_DM_03"); + else obj.sq_PlaySound("PW_LASTGENESIS_03"); + sq_flashScreen(obj,0,100,0,153, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 13, 320); + break; + case 111: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/att1/atlastgenesis_shockwave_crack_01.ani", -275, -1, -100); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/att1/atlastgenesis_shockwave_crack.ani", 425, -1, -100); + break; + case 206: + local moveX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 2, 0); + break; + case 208: + sq_SetMyShake(obj, 7, 100); + break; + case 212: + break; + case 217: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atlastgenesis/atlastgenesis_finish1_ball.ani"), 0, 0); + if(obj.getVar("Lastgenesis_Bool").getBool(1)) obj.sq_PlaySound("PW_LASTGENESIS_DM_04"); + else obj.sq_PlaySound("PW_LASTGENESIS_04"); + break; + case 220: + sq_SetMyShake(obj, 2, 1600); + break; + case 231: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/finish1/atlastgenesis_finish_boom_leaf3.ani", 0, 1, 0); + createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atlastgenesis/finish1/atlastgenesis_finish1_shock_crack_02.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case 232: + sq_SetMyShake(obj, 10, 720); + break; + case 233: + break; + case 235: + sq_flashScreen(obj,0,160,0,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + break; + case 302: + break; + case 304: + local targetObj = obj.getVar("Lastgenesis_TarFix").get_obj_vector(0); + local dis = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(targetObj)) - 150; + local moveX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), dis); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 2, 0); + break; + case 307: + sq_flashScreen(obj,0,100,0,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 7, 160); + break; + case 308: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atlastgenesis/finish2/atlastgenesis_circle_finish2_body_2.ani"), 0, 0); + if(obj.getVar("Lastgenesis_Bool").getBool(1)) obj.sq_PlaySound("PW_LASTGENESIS_DM_04"); + else obj.sq_PlaySound("PW_LASTGENESIS_04"); + break; + case 309: sq_SetMyShake(obj, 3, 1600); break; + case 322: + break; + case 330: + break; + case 332: + sq_SetMyShake(obj, 3, 1600); + local effectObj = obj.getVar("Lastgenesis_Effect").get_obj_vector(0); + if(effectObj) effectObj.setValid(false); + break; + case 333: + sq_flashScreen(obj,0,240,0,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + obj.getVar("setCancelSkill").setBool(10, true); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Lastgenesis(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Lastgenesis(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_LASTGENESIS){ + sq_SimpleMoveToNearMovablePos(obj,300); + local size = obj.getVar("Lastgenesis_TarFix").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Lastgenesis_TarFix").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, LASTGENESIS_APDPATH); + } + } + size = obj.getVar("Lastgenesis_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Lastgenesis_Tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, LASTGENESIS_APDPATH); + } + } + local effectObj = obj.getVar("Lastgenesis_Effect").get_obj_vector(0); + if(effectObj) effectObj.setValid(false); + } +} + +function onAttack_Lastgenesis(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getVar("Lastgenesis_Bool").getBool(0)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(sq_IsFixture(activeObj) && !obj.getVar("Lastgenesis_TarFix").is_obj_vector(activeObj)){ + obj.getVar("Lastgenesis_TarFix").push_obj_vector(activeObj); + } + else if(!obj.getVar("Lastgenesis_Tar").is_obj_vector(activeObj)) obj.getVar("Lastgenesis_Tar").push_obj_vector(activeObj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, LASTGENESIS_APDPATH)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_BYKK_LASTGENESIS, false, LASTGENESIS_APDPATH, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + break; + } +} + +//至高之刑 +function checkExecutableSkill_Cardinalexecution(obj) +{ + if (!obj) return false; + if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CARDINALEXECUTION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CARDINALEXECUTION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Cardinalexecution(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Cardinalexecution(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local aniSet = ["atcardinalexecutionready_body","atcardinalexecutionattack1_body","atcardinalexecutionattack2_body","atcardinalexecutionattack3_body","atcardinalexecutionattack4_body","atcardinalexecutionattack5_body","atcardinalexecutionattack6_body","atcardinalexecutionattack7_body","atcardinalexecutionend_body"]; + local ani = getCurrentAnimation_demonization(obj, aniSet[subState], false); + obj.setCurrentAnimation(ani); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.5, 0.5); + local effect_basic = "character/swordman/effect/animation/1_atpriest_bykk/atcardinalexecution/" + local effect = ["atcardinalexecutionreadyfront_00.ani","atcardinalexecutionattack1front_00.ani","atcardinalexecutionattack2front_00.ani","atcardinalexecutionattack3front_00.ani","atcardinalexecutionattack4front_00.ani","atcardinalexecutionattack5front_00.ani","atcardinalexecutionattack6front_00.ani","atcardinalexecutionattack7front_00.ani"]; + if(subState <= 7){ + //obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation(effect_basic + effect[subState]),0, 0); + sq_AddDrawOnlyAniFromParent(obj, effect_basic + effect[subState], 0, 1, 0); + } + + switch(subState){ + case 0: + obj.sq_PlaySound("PW_CARDINALEXECUTION_DM_01"); + break; + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CARDINALEXECUTION, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CARDINALEXECUTIONATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + obj.resetHitObjectList(); + if(subState == 6) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcardinalexecution/atcardinalexecutionattack6back_00.ani", 0, -1, 0); + break; + case 7: + if(subState == 6) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcardinalexecution/atcardinalexecutionattack7back_00.ani", 0, -1, 0); + obj.sq_PlaySound("PW_CARDINALEXECUTION_DM_02"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CARDINALEXECUTION, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CARDINALEXECUTIONFINISH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_Cardinalexecution(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + if(subState == 7 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_CARDINALEXECUTION, STATE_PRIORITY_AUTO, true); + break; + case 8: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Cardinalexecution(obj) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS); + if(b_useskill != -1){ + setDepravitysevensinsAppendage(obj); + } + } +} + +function onKeyFrameFlag_Cardinalexecution(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: sq_flashScreen(obj,60,260,60,180, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 2: sq_SetMyShake(obj, 9, 240); break; + case 101: + sq_flashScreen(obj,5,35,5,40, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 1, 60); + break; + case 201: + sq_flashScreen(obj,5,35,5,50, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 60); + break; + case 301: + sq_flashScreen(obj,5,35,5,45, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 1, 60); + break; + case 401: + sq_flashScreen(obj,5,35,5,55, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 60); + break; + case 501: + sq_flashScreen(obj,5,35,5,50, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 1, 60); + break; + case 601: + sq_flashScreen(obj,5,35,5,60, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 60); + break; + case 700: + sq_flashScreen(obj,30,180,30,140, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 701: + sq_SetMyShake(obj, 15, 260); + break; + case 800: + sq_flashScreen(obj,10,70,300,90, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 10001: obj.getVar("setCancelSkill").setBool(10, true); break; + } + return true; +} + +function onTimeEvent_Cardinalexecution(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Cardinalexecution(obj, new_state) +{ + if(!obj) return; +} + + + + +///////////////////////////////////////被动/////////////////////////////////// +//罪业诱惑 +function onStart_appendage_temptress_bodypressedsin(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE){ + appendage.setValid(false);return; + } + local frequency = 1000; + appendage.getVar("timeEvent").clear_timer_vector(); + appendage.getVar("timeEvent").push_timer_vector(); + local t = appendage.getVar("timeEvent").get_timer_vector(0); + t.setParameter(frequency, -1); + t.resetInstant(0); +} + +function proc_appendage_temptress_bodypressedsin(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE){ + appendage.setValid(false);return; + } + + local skill = sq_GetSkill(obj, SKILL_BYKK_BODYPRESSEDSIN); + if(skill.isSealFunction()) return; + + local t = appendage.getVar("timeEvent").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t && t.isOnEvent(currentT)){ + local hitRate = sq_GetLevelData(obj, SKILL_BYKK_BODYPRESSEDSIN, 1, sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN)); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_ACTIVE) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= 300 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 150){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/4_temptress/passiveskill/ap_bodypressedsintoe.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, "character/demonicswordman/4_temptress/passiveskill/ap_bodypressedsintoe.nut", true); + AddAppendage.sq_SetValidTime(2000); + + local change_appendage = AddAppendage.sq_getChangeStatus("bodypressedsintoe"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("bodypressedsintoe",object, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, true, (hitRate * 1).tofloat()); + } + } + } + } + } +} + +function drawAppend_appendage_temptress_bodypressedsin(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skill = sq_GetSkill(obj, SKILL_BYKK_BODYPRESSEDSIN); + if(!skill.isSealFunction()){ + local var = appendage.getVar(); + local Ani = var.GetAnimationMap("atbodypressedsin", "character/swordman/effect/animation/1_atpriest_bykk/atbodypressedsin/atbodypressedsin_floor01.ani"); + if (Ani && !isOver) { + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y + sq_GetZPos(obj), isFlip); + } + } +} + +//七宗罪AP +function onStart_appendage_thesevendeadlysins(appendage) +{ + if(!appendage) return; +} + +function onEnd_appendage_thesevendeadlysins(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + setSkillBonusRate_Temptress(obj); +} + +function proc_appendage_thesevendeadlysins(appendage) +{ + if(!appendage) return; + if(!appendage.isValid()) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function onAttackParent_appendage_thesevendeadlysins(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS); + local prob = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 1, skillLevel); + if(sq_getRandom(1, 1000) > prob) return; + if(!loadSlot.isCooling()){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber < sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 0, skillLevel)){ + //loadSlot.decreaseLoadCount(1); + loadSlot.increaseLoadCount(1); + } + } + } +} + +//智慧起源 : 原罪结晶 +function onAttackParent_appendage_temptress_firstprana(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + switch(obj.getState()){ + case SKILL_BYKK_DEPRAVITYSEVENSINS: + case SKILL_BYKK_HOLYSMASH: + case SKILL_BYKK_RISINGSLASH: + case SKILL_BYKK_VIOLENTASSAULT: + return; + break; + } + + local timer = appendage.getVar().get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + if(currentT >= sq_GetLevelData(obj, SKILL_BYKK_FIRSTPRANA, 3, sq_GetSkillLevel(obj, SKILL_BYKK_FIRSTPRANA))){ + timer.Reset(); + timer.Start(10000,0); + } + else return; + } + else{ + appendage.getVar().clear_ct_vector(); + appendage.getVar().push_ct_vector(); + timer = appendage.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FIRSTPRANA, -1, 1, 1.0) + 100; + if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_BYKK_FIRSTPRANA,0,totalDamage,100,0,0,0,0,0,0); +} + +//负罪者镰刀精通 +function onStart_appendage_temptress_scythemastery(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponType = obj.getWeaponSubType(); + if(weaponType == -1) return; + if(weaponType == 3){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SCYTHEMASTERY); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMASTERY, 0, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMASTERY, 4, skillLevel); + local hitRate = sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMASTERY, 1, skillLevel); + local magicalEquAttack = sq_GetLevelData(obj, SKILL_BYKK_SCYTHEMASTERY, 2, skillLevel); + // print(magicalEquAttack); + local change_appendage = appendage.sq_getChangeStatus("scythemastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("scythemastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (hitRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (magicalEquAttack * 0.1).tofloat()); + } + } +} + +//罪业宣告 +function onAttackParent_appendage_temptress_sinsayer(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/4_temptress/passiveskill/ap_sinsayerbuff.nut"); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/demonicswordman/4_temptress/passiveskill/ap_sinsayerbuff.nut", true); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SINSAYER); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_SINSAYER, 6, skillLevel); + local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_SINSAYER, 5, skillLevel); + local criticalhitRate = sq_GetLevelData(obj, SKILL_BYKK_SINSAYER, 4, skillLevel); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_SINSAYER, skillLevel); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + + local change_appendage = addAppendage.sq_getChangeStatus("temptress_sinsayer"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("temptress_sinsayer",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticalhitRate * 0.1 / 0.667).tofloat()); + } +} + +//副本开始时 +function onStartDungeon_Temptress_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + obj.sq_RemoveSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + } + obj.getVar("isReset").setInt(0, 1); + setSkillBonusRate_Temptress(obj); +} + +function setSkillBonusRate_Temptress(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, THESEVENDEADLYSINS_APDPATH)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, THESEVENDEADLYSINS_APDPATH); + local sub = addAppendage.getVar("Sub").getInt(10); + switch(sub){ + case 2: + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 24, sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS))) / 1000; + break;//侵染嫉妒的喜悦 + case 3: + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 16, sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS))) / 1000; + break;//傲慢者的懒惰 + } + obj.getVar("apGetSetbyKK").setInt(0, bonusRate); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, HEAVYSINBUFF_APDPATH)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, HEAVYSINBUFF_APDPATH); + local buffCount = addAppendage.getVar("buffCount").getInt(10); + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 10, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN)) * buffCount) / 1000; + } + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BODYPRESSEDSIN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRSTPRANA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_FIRSTPRANA, 0, sq_GetSkillLevel(obj, SKILL_BYKK_FIRSTPRANA))) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ORIGINALSIN, 0, sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN))) / 1000; + print("bonusRate4 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SINSAYER) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SINSAYER, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SINSAYER))) / 1000; + print("bonusRate5 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + diff --git a/user/116.205.165.25/2_atpriest_3.c b/user/116.205.165.25/2_atpriest_3.c new file mode 100644 index 0000000..b9f549b --- /dev/null +++ b/user/116.205.165.25/2_atpriest_3.c @@ -0,0 +1,3679 @@ + +//聖潔之光 +function checkExecutableSkill_Holyflash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYFLASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Holyflash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Holyflash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYFLASH_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Holyflash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Holyflash(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Holyflash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYFLASH, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYFLASH, 3); + local moveX = sq_GetIntData(obj, SKILL_BYKK_HOLYFLASH, 5); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,47,1,94,obj.getDirection(),0,SKILL_BYKK_HOLYFLASH,1,totalDamage,sizeRate,moveX,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Holyflash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Holyflash(obj, new_state) +{ + if(!obj) return; +} + + +//治愈祈禱 +function checkExecutableSkill_Prayerofheal(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRAYEROFHEAL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PRAYEROFHEAL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Prayerofheal(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Prayerofheal(obj, state, datas, isResetTimer) +{ + if(!obj) return;//126 + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PRAYEROFHEAL_BODY); + obj.sq_PlaySound("R_PW_PRAYERHEAL");// + //obj.sq_AddStateLayerAnimation(-1, obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atprayerofheal/groundrange_00.ani"), 0, 0); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atprayerofheal/groundrange_00.ani"; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PRAYEROFHEAL, 1).tofloat() / 207.5; + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(0, currentAni.getDelaySum(false) / 4 * 3, 1, false); +} + +function onEndCurrentAni_Prayerofheal(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Prayerofheal(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Prayerofheal(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Prayerofheal(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local range = sq_GetIntData(obj, SKILL_BYKK_PRAYEROFHEAL, 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRAYEROFHEAL); + local HP_heal = sq_GetLevelData(obj, SKILL_BYKK_PRAYEROFHEAL, 1, skillLevel); + local apdPath = "character/demonicswordman/0_common/ap_prayerofheal.nut"; + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true); + local change_appendage = appendage.sq_GetCNChangeHp("changehp"); + if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", object, obj, 0, HP_heal.tofloat(), 1000); + appendage.sq_SetValidTime(1000); + } + } + break; + } +} + +function onEndState_Prayerofheal(obj, new_state) +{ + if(!obj) return; +} + + +//升空斬 +function checkExecutableSkill_Risingslash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RISINGSLASH); + if (isUse){ + obj.sq_IntVectClear(); + if(false) obj.sq_IntVectPush(1); + else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0) obj.sq_IntVectPush(3); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_RISINGSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Risingslash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Risingslash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0://normal + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUSADERISINGSLASH_BODY); + obj.sq_PlaySound("PW_RISING_SLASH"); + break; + case 1://FFF + obj.sq_SetCurrentAnimation(ATPANI_BYKK_RISINGSLASH_BODY); + obj.sq_PlaySound("PW_RISING_SLASH"); + break; + case 2: + local ani = getCurrentAnimation_demonization(obj, "demonizationattack_basic_z_body", false); + obj.setCurrentAnimation(ani); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff02.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(0,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff03.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff04.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(0,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff05.ani"), 0, 0); + obj.sq_PlaySound("R_PW_CUTINDASH_02"); + obj.sq_PlaySound("CUTINDASH_SWISH"); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUSADERISINGSLASH_BODY); + obj.sq_PlaySound("PW_RISING_SLASH"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RISINGSLASH, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_RISINGSLASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknBackForce(attackInfo, 100); + sq_SetCurrentAttacknUpForce(attackInfo, 600); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0); + else if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -100.0); +} + +function onEndCurrentAni_Risingslash(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Risingslash(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Risingslash(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Risingslash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Risingslash(obj, new_state) +{ + if(!obj) return; +} + + +//净化 +function checkExecutableSkill_Cure(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CURE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CURE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Cure(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; + return true; +} + +function onSetState_Cure(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CURE_CAST_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CURE_START_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Cure(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CURE, STATE_PRIORITY_AUTO, true); + break; + case 1: + local range = sq_GetIntData(obj, SKILL_BYKK_CURE, 5); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CURE); + local realeaseMax = sq_GetLevelData(obj, SKILL_BYKK_CURE, 0, skillLevel); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local count = 0; + for(local ui = 0; ui < 18; ui++){ + if (sq_IsValidActiveStatus(activeObj, ui)){ + sq_ReleaseActiveStatus(activeObj, ui); + count = count + 1; + if(count > realeaseMax) continue; + } + } + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Cure(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Cure(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Cure(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Cure(obj, new_state) +{ + if(!obj) return; +} + + +//胜利之矛 +function checkExecutableSkill_Spearofvictory(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SPEAROFVICTORY); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_SPEAROFVICTORY); + obj.getVar("spv").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Spearofvictory(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Spearofvictory(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODY_READY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODY_CHARGELOOP); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearnochargeloop_01.ani"), 0, -76); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODYSHOT_02); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Spearofvictory(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Spearofvictory(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local pAni = obj.getCurrentAnimation(); + local chargeTime = sq_GetCurrentTime(pAni); + if((chargeTime >= sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 0) || sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0) && obj.getVar("spv").getBool(0) == false){ + obj.sq_PlaySound("WSPEAR_CREATE_BIG"); + obj.getVar("spv").setBool(0, true); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/speartchargeeff_01.ani", 0, 0, 76); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearchargeokloop.ani"), 0, -76); + } + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_Spearofvictory(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/spearstart_01.ani", 0, 0, 76); + local pAni = pooledObj.getCurrentAnimation(); + obj.setTimeEvent(0, pAni.getDelaySum(false), 1, false); + obj.sq_PlaySound("PW_VICTORYSPEAR_01"); + obj.sq_PlaySound("WSPEAR_CREATE"); + break; + case 102: obj.sq_PlaySound("VICTORYSPEAR"); break; + case 103: + if(obj.getVar("spv").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/shot_charge.ani", -40, 0, 145); + else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/shot_normal.ani", -40, 0, 145); + break; + case 104: + obj.sq_PlaySound("PW_VICTORYSPEAR_02"); + obj.sq_PlaySound("SPEAR_THROW_BIG"); + //`CreateSpear` 0 0 130 + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SPEAROFVICTORY, -1, 0, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SPEAROFVICTORY, -1, 2, 1.0); + local holdTime = sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 2); + local isCharge = 0; + if(obj.getVar("spv").getBool(0) || sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0){holdTime = sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 3); isCharge = 1;} + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,130,obj.getDirection(),1,SKILL_BYKK_SPEAROFVICTORY,0,power,power_exp,holdTime,isCharge,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Spearofvictory(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearnochargeloop_01.ani"), 0, -76); + break; + } +} + +function onEndState_Spearofvictory(obj, new_state) +{ + if(!obj) return; +} + + +//守护祝福 +function checkExecutableSkill_Blessofprotection(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFPROTECTION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFPROTECTION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Blessofprotection(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Blessofprotection(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFPROTECTIONCAST_BODY); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_BLESSOFPROTECTION, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION)); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = delaySum.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, castTime, true); + break; + case 1: + sq_EndDrawCastGauge(obj); + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFPROTECTIONSTART_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Blessofprotection(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFPROTECTION, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Blessofprotection(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Blessofprotection(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("PW_BLESSPROTECTION"); + obj.sq_PlaySound("BLESSPROTECTION_CAST"); + break; + case 102: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_sky.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_front_4.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_back_1.ani", 0, -1, 0); + createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_floor.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + if(!obj.isMyControlObject()) break; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); + local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFPROTECTION, 0); + local damageRate = sq_GetIntData(obj, SKILL_BYKK_BLESSOFPROTECTION, 1); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 0, skillLevel); + local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel); + local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel); + local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel); + local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel); + local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel); + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel); + + local now_mgAttack = sq_GetMagicalAttack();//1000;// + now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100; + local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1).tofloat(); + if(addRate > 1){ + hpMax = hpMax.tofloat() * (1.0 + addRate); + mpMax = mpMax.tofloat() * (1.0 + addRate); + phDefense = phDefense.tofloat() * (1.0 + addRate); + mgDefense = mgDefense.tofloat() * (1.0 + addRate); + } + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(SKILL_BYKK_BLESSOFPROTECTION); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(skillLevel); + sq_BinaryWriteDword(range); + sq_BinaryWriteDword(buffTime); + sq_BinaryWriteDword(hpMax.tointeger()); + sq_BinaryWriteDword(mpMax.tointeger()); + sq_BinaryWriteDword(phDefense.tointeger()); + sq_BinaryWriteDword(mgDefense.tointeger()); + sq_BinaryWriteDword(phlDefense); + sq_BinaryWriteDword(mglDefense); + sq_BinaryWriteDword(damageRate); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection()); + break; + } + return true; +} + +function onTimeEvent_Blessofprotection(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Blessofprotection(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BLESSOFPROTECTION){ + sq_EndDrawCastGauge(obj); + } +} + +function getImmuneTypeDamageRate_appendage_at_blessofprotection(appendage, damageRate, attacker) +{ + local parentObj = appendage.getParent(); + parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local targetObj = appendage.getVar("source").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE && !isSameObject(targetObj, parentObj)){ + local new_damageRate = damageRate - appendage.getVar("custom").getInt(10); + return new_damageRate; + } + else{ + return damageRate; + } +} + +//圣光守护 +function checkExecutableSkill_Holylight(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYLIGHT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYLIGHT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Holylight(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Holylight(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_BYKK_ARIA) > 0) obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHTARIA_CAST_BODY); + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHT_CAST_BODY); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_HOLYLIGHT, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT)); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = delaySum.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, castTime, true); + break; + case 1: + sq_EndDrawCastGauge(obj); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ARIA) > 0) obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHTARIA_START_BODY); + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHT_START_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Holylight(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYLIGHT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Holylight(obj) +{ + if(!obj) return; + // local subState = obj.getSkillSubState(); + // switch(subState){ + // } +} + +function onKeyFrameFlag_Holylight(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("PW_HOLYLIGHT"); + obj.sq_PlaySound("CURE_CAST"); + break; + case 102: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT); + local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720; + local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0); + local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0); + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel); + local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4); + + local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); + local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100; + local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100; + local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100; + local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100; + local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100; + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100; + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(44); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ + local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); + local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection"); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); + } + } + + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local power = power_Pty; + if(isSameObject(obj, activeObj)) power = power_Chr; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0); + } + } + break; + } + return true; +} + +function onTimeEvent_Holylight(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Holylight(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_HOLYLIGHT){ + sq_EndDrawCastGauge(obj); + } +} + +function getImmuneTypeDamageRate_appendage_at_holylight(appendage, damageRate, attacker) +{ + local new_damageRate = damageRate - appendage.getVar("custom").getInt(10) / 10; + return new_damageRate; +} + +function onDamageParent_appendage_at_holylight(appendage ,attacker, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if (!parentObj) { + appendage.setValid(false); + return; + } + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/hiteffect.ani"; + local pooledObj = createOnlyDrawObject_ATPriest_bykk(parentObj,aniPath,true,attacker.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj) + sq_GetHeightObject(parentObj) / 2,ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(parentObj, pooledObj); +} + +//洗礼之光 +function checkExecutableSkill_Lightofhaptism(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIGHTOFHAPTISM); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTOFHAPTISM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Lightofhaptism(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Lightofhaptism(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATLIGHTOFHAPTISM_CASTING_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATLIGHTOFHAPTISM_SHOOT_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Lightofhaptism(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTOFHAPTISM, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Lightofhaptism(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Lightofhaptism(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Lightofhaptism(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Lightofhaptism(obj, new_state) +{ + if(!obj) return; +} + + +//勇气祝福 +function checkExecutableSkill_Blessofcourage(obj) +{ + if (!obj) return false; + if(obj.getVar("canUseSkill").getBool(0)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFCOURAGE); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BLESSOFCOURAGE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFCOURAGE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Blessofcourage(obj) +{ + if (!obj) return false; + if(obj.getVar("canUseSkill").getBool(0)) return false; + return true; +} + +function onSetState_Blessofcourage(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFCOURAGECAST_BODY); + + //if(obj.isMyControlObject()){ + // obj.getVar("Save_mgAttack").setInt(10, now_mgAttack); + //} + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFCOURAGESTART_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_front_d1.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/startb_effect_1.ani", 0, 0, 0); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_back_floor.ani"; + local aniPath2 = "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_back_glow.ani"; + createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + createOnlyDrawObject_ATPriest_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Blessofcourage(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFCOURAGE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Blessofcourage(obj) +{ + if(!obj) return; + // local subState = obj.getSkillSubState(); + // switch(subState){ + // } +} + +function onKeyFrameFlag_Blessofcourage(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("PW_BLESSCOURAGE"); + obj.sq_PlaySound("DAWN_BLESS_CAST"); + break; + case 102: + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + local count = 0; + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr) == GROW_TYPE_CRUSADER) count = count + 1; + } + } + print("count = "+count); + if(count > 0){ + obj.getVar("canUseSkill").setBool(0, true); + return; + } + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/1crusader_bykk/ap_gloriousbless.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/1crusader_bykk/ap_gloriousbless.nut"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFVICTORIA)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFVICTORIA); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE); + local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 0); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 0, skillLevel); + local phAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1, skillLevel); + local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 2, skillLevel); + local adtAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 3, skillLevel); + local phlAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 4, skillLevel); + local mglAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 5, skillLevel); + local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 6, skillLevel); + + //local now_mgAttack = obj.getVar("Save_mgAttack").getInt(10); + local now_mgAttack = obj.getVar("mgAttackSave").getInt(0); + print("now_mgAttack = "+now_mgAttack); + local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1).tofloat(); + if(addRate > 1){ + phAttack = phAttack.tofloat() * (1.0 + addRate); + mgAttack = mgAttack.tofloat() * (1.0 + addRate); + adtAttack = adtAttack.tofloat() * (1.0 + addRate); + phlAttack = phlAttack.tofloat() * (1.0 + addRate); + mglAttack = mglAttack.tofloat() * (1.0 + addRate); + } + // print("addRate = "+addRate); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(SKILL_BYKK_BLESSOFCOURAGE); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(skillLevel); + sq_BinaryWriteDword(range); + sq_BinaryWriteDword(buffTime); + sq_BinaryWriteDword(phAttack.tointeger()); + sq_BinaryWriteDword(mgAttack.tointeger()); + sq_BinaryWriteDword(adtAttack.tointeger()); + sq_BinaryWriteDword(phlAttack.tointeger()); + sq_BinaryWriteDword(mglAttack.tointeger()); + sq_BinaryWriteDword(stuckRate); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection()); + + setSkillBonusBate_Crusader_bykk(obj); + break; + case 103: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/cast_effect_1.ani", 0, 1, 0); + break; + } + return true; +} + +function onTimeEvent_Blessofcourage(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Blessofcourage(obj, new_state) +{ + if(!obj) return; +} + +function onEnd_appendage_at_blessofcourage(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_AT_MAGE && sq_getGrowType(sqrChr) == 1) setSkillBonusBate_Crusader_bykk(sqrChr); +} + +//圣光烬盾 +function checkExecutableSkill_Saintflash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SAINTFLASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SAINTFLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Saintflash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Saintflash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SAINTFLASH_CAST_BODY); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 4, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SAINTWALLCAST)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SAINTFLASH_SHOOT_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Saintflash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SAINTFLASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + +} + +function onProcCon_Saintflash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Saintflash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("R_PW_SAINTWALL_01"); + obj.sq_PlaySound("SAINTWALL"); + sq_SetMyShake(obj, 5, 200); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SAINTFLASH, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsaintwall/saintwall_ready_creatshield.ani", 60, 0, 0); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 102: + obj.sq_PlaySound("FINALTEMPEST_MOVE_02"); + obj.sq_PlaySound("R_PW_SAINTWALL_02"); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 4, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SAINTFLASH, 0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,60,0,0,obj.getDirection(),1,SKILL_BYKK_SAINTFLASH,0,power,power_exp,sizeRate,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Saintflash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Saintflash(obj, new_state) +{ + if(!obj) return; +} + + +//勇气圣歌 +function checkExecutableSkill_Ariaofcourage(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ARIAOFCOURAGE); + if (isUse){ + obj.getVar("hitCount").setInt(10, 0); + obj.getVar("Ariaofcourage_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Ariaofcourage(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Ariaofcourage(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGESTART_BODY); + obj.sq_PlaySound("R_PW_ARIACOURAGE"); + obj.sq_PlaySound("ARIACOURAGE_CAST"); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartfront_1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartback_1.ani"), 0, 0); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFCOURAGE); + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFCOURAGE, 1, skillLevel); + local allTolerance = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 9); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ARIAOFCOURAGE, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Ariaofcourage"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Ariaofcourage",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allTolerance).tofloat()); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGELOOP_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraloopfront_5.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraloopback_1.ani"), 0, 0); + //-270 -70 -4 540 140 300 + local skill = sq_GetSkill(obj, SKILL_BYKK_ARIA); + if(!skill.isSealFunction()){ + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni,-270, -70, -4, 540, 140, 300); + } + break; + case 2: + obj.stopSound(2001); + obj.stopTimeEvent(2); + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGEEND_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendfront_6.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendback_1.ani"), 0, 0); + obj.sq_PlaySound("ARIACOURAGE_END"); + local pooledObj = obj.getVar("Ariaofcourage_eff").get_obj_vector(0); + local pooledObj2 = obj.getVar("Ariaofcourage_eff").get_obj_vector(1); + if(pooledObj) pooledObj.setValid(false); + if(pooledObj2) pooledObj2.setValid(false); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendfront_6.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendback_1.ani", 0, -1, 0); + local floorObj = obj.getVar("ARIAOFCOURAGE_FLOOR").get_obj_vector(0); + local effectObj = obj.getVar("ARIAOFCOURAGE_EFFECT").get_obj_vector(0); + local musicObj = obj.getVar("ARIAOFCOURAGE_MUSIC").get_obj_vector(0); + if(floorObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + if(musicObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); + colObj.setValid(false); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Ariaofcourage(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local isStone = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 13); + if(isStone > 0) {//stone + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6); + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + if(isStone > 100) hitTime = hitTime / 2; + print("range = "+range); + local sizeRate = range * 100 / 275; + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 0); + local increaseRate = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 8); + local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + // if(obj.isMyControlObject()){ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,4,sizeRate,power,hitTime,hitMax,lifeTime,range,increaseRate,buffTime); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,5,sizeRate,lifeTime,0,0,0,0,0,0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,6,sizeRate,lifeTime,0,0,0,0,0,0); + // } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + local hitTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5); + local skill = sq_GetSkill(obj, SKILL_BYKK_ARIA); + if(!skill.isSealFunction()){ + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ARIAOFCOURAGEATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.setTimeEvent(1, hitTime, 1, false); + } + else{ + local lifeTime = hitTime * sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6); + obj.setTimeEvent(4, lifeTime, 1, false); + } + obj.setTimeEvent(2,20,-1,false); + obj.setTimeEvent(3,hitTime,-1,true); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/buffeffect/buffloop_front.ani", 0, 0, 67); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/buffeffect/buffloop_back.ani", 0, -1, 67); + sq_moveWithParent(obj, pooledObj); + sq_moveWithParent(obj, pooledObj2); + obj.getVar("Ariaofcourage_eff").clear_obj_vector(); + obj.getVar("Ariaofcourage_eff").push_obj_vector(pooledObj); + obj.getVar("Ariaofcourage_eff").push_obj_vector(pooledObj2); + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + local sizeRate = range * 100 / 275; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,3,sizeRate,0,0,0,0,0,0,0); + obj.sq_PlaySound("ARIACOURAGE", 2001); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Ariaofcourage(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); + } + + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + if(sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LIGHTOFHAPTISM).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_LIGHTOFHAPTISM,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LIGHTOFHAPTISM); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_LIGHTOFHAPTISM, sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM), -1); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0); + // if(obj.isMyControlObject()){ + local target = sq_FindTarget(obj, 0, 500, 500, 500); + if(target) createSkillPassive_ATPriest_bykk(obj,target,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); + // } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_BLESSOFANGEL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFANGEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_BLESSOFANGEL); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_BLESSOFANGEL, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL), -1); + local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel); + obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + if(loadSlot) loadSlot.setStartCool(); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel); + local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0); + local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); + local effectObj = activeObj.getVar("Blessofangel_eff").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setValid(false); + } + } + local power = power_Pty; + if(isSameObject(obj, activeObj)) power = power_Chr; + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,power,buffTime,group,uniqueId,0,0,0,0); + if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true); + AddAppendage.setBuffIconImage(131); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.getVar("tar").clear_obj_vector(); + AddAppendage.getVar("tar").push_obj_vector(obj); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); + } + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_PROTECTIONOFURIEL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_PROTECTIONOFURIEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_PROTECTIONOFURIEL); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL), -1); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1); + local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){ + local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + attackSpeed = attackSpeed + addRate; + moveSpeed = moveSpeed + addRate; + castSpeed = castSpeed + addRate; + } + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10; + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate); + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT) > 0 && !sq_GetSkill(obj, SKILL_BYKK_HOLYLIGHT).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_HOLYLIGHT,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HOLYLIGHT); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT); + obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); + local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720; + local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0); + local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0); + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel); + local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4); + + local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); + local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100; + local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100; + local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100; + local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100; + local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100; + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100; + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(44); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ + local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); + local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection"); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); + } + } + + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local power = power_Pty; + if(isSameObject(obj, activeObj)) power = power_Chr; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0); + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION) > 0 && !sq_GetSkill(obj, SKILL_BYKK_EDIFICATION).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_EDIFICATION,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_EDIFICATION); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION); + obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(128); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("custom").setInt(10, moveSpeed); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_CRUXOFSHAPIEL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL); + obj.startSkillCoolTime(SKILL_BYKK_CRUXOFSHAPIEL, skillLevel, -1); + + obj.getVar("cruxofshapiel_obj").clear_obj_vector(); + obj.getVar("cruxofshapiel_bool").setBool(0, false); + + local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0); + local buffTime = hitTime * 21 + 2080; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + } + + if(obj.getVar("cruxofshapiel_bool").getBool(0)){ + obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if(b_useskill != -1){ + obj.getVar("cruxofshapiel_bool").setBool(0, false); + local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + } + break; + } +} + +function onKeyFrameFlag_Ariaofcourage(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 103: + if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 13) > 0) break; //stone + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + local sizeRate = range * 100 / 275; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,1,sizeRate,0,0,0,0,0,0,0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,2,sizeRate,0,0,0,0,0,0,0); + break; + case 106: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartfront_1.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartback_1.ani", 0, -1, 0); + break; + } + return true; +} + +function onTimeEvent_Ariaofcourage(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 2; + local gapByInputMin = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5) / 2; + local gapByInputMax = gapByInputMin * 2; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6); + + if(obj.getVar("hitCount").getInt(10) + 1 >= hitMax){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); + break; + } + else obj.getVar("hitCount").setInt(10, obj.getVar("hitCount").getInt(10) + 1); + + if(inputConut >= inputMax) obj.setTimeEvent(1, gapByInputMin, 1, false); + else obj.setTimeEvent(1, gapByInputMax, 1, false); + + obj.resetHitObjectList(); + break; + case 2: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 2); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 2); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); + return; + } + break; + case 3: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFCOURAGE); + local increaseRate = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 8); + local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0) / 2; + local skill = sq_GetSkill(obj, SKILL_BYKK_ARIAOFCOURAGE); + local isSeal = skill.isSealFunction(); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!obj.getVar("Ariaofcourage_Tar").is_obj_vector(activeObj)) obj.getVar("Ariaofcourage_Tar").push_obj_vector(activeObj); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF)){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF); + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_ARIAOFCOURAGEBUFF, true); + + if(!isSeal){ + local change2_appendage = AddAppendage.sq_GetCNChangeHp("changehp"); + if (!change2_appendage) change2_appendage = AddAppendage.sq_AddCNChangeHp("changehp", activeObj, obj, 0, power.tofloat(), 1000); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_ARIAOFCOURAGE, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + } + + AddAppendage.getVar("custom").setInt(16, buffTime); + AddAppendage.getVar("custom").setInt(17, range); + AddAppendage.getVar("bool").setBool(0, true); + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)) continue; + local AddAppendage2 = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE); + local phAttack = AddAppendage2.getVar("custom").getInt(10); + local mgAttack = AddAppendage2.getVar("custom").getInt(11); + local adtAttack = AddAppendage2.getVar("custom").getInt(12); + local phlAttack = AddAppendage2.getVar("custom").getInt(13); + local mglAttack = AddAppendage2.getVar("custom").getInt(14); + local stuckRate = AddAppendage2.getVar("custom").getInt(15); + // print("phAttack = "+phAttack+"; mgAttack ="+mgAttack+"; adtAttack ="+adtAttack+"; phlAttack ="+phlAttack+"; mglAttack ="+mglAttack+"; stuckRate ="+stuckRate); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_AriaofcourageBuff"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_AriaofcourageBuff",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1 * increaseRate / 100).tofloat()); + } + } + } + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Ariaofcourage(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_ARIAOFCOURAGE){ + local size = obj.getVar("Ariaofcourage_Tar").get_obj_vector_size(); + if(size > 0){ + local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Ariaofcourage_Tar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ARIAOFCOURAGEBUFF); + local validT = AddAppendage.getAppendageInfo().getValidTime(); + AddAppendage.getAppendageInfo().setValidTime(buffTime); + } + } + } + local floorObj = obj.getVar("ARIAOFCOURAGE_FLOOR").get_obj_vector(0); + local effectObj = obj.getVar("ARIAOFCOURAGE_EFFECT").get_obj_vector(0); + local musicObj = obj.getVar("ARIAOFCOURAGE_MUSIC").get_obj_vector(0); + if(floorObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); + colObj.setValid(false); + } + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setValid(false); + } + if(musicObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); + colObj.setValid(false); + } + local pooledObj = obj.getVar("Ariaofcourage_eff").get_obj_vector(0); + local pooledObj2 = obj.getVar("Ariaofcourage_eff").get_obj_vector(1); + if(pooledObj) pooledObj.setValid(false); + if(pooledObj2) pooledObj2.setValid(false); + } +} + +function getImmuneTypeDamageRate_appendage_at_ariaofcourage(appendage, damageRate, attacker) +{ + local new_damageRate = damageRate - appendage.getVar("custom").getInt(10) / 10; + return new_damageRate; +} + +function proc_appendage_at_ariaofcouragebuff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, APDPATH_BLESSOFCOURAGE)){ + appendage.setValid(false); + return; + } + if((!parentObj || parentObj.getState() == STATE_DIE) && appendage.getVar("bool").getBool(1) == false){ + appendage.getVar("bool").setBool(1, true); + appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16)); + return; + } + local sourceObj = appendage.getSource(); + if((!parentObj || parentObj.getState() == STATE_DIE) && appendage.getVar("bool").getBool(1) == false){ + appendage.getVar("bool").setBool(1, true); + appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16)); + return; + } + local range = appendage.getVar("custom").getInt(17); + if(sq_Abs(sourceObj.getXPos() - parentObj.getXPos()) > range && sq_Abs(sourceObj.getYPos() - parentObj.getYPos()) > range / 2 && appendage.getVar("bool").getBool(0)){ + appendage.getVar("bool").setBool(0, false); + appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16)); + } +} + +function onEnd_appendage_at_ariaofcouragebuff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +//神之教诲 +function checkExecutableSkill_Edification(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EDIFICATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_EDIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Edification(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Edification(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_EDIFICATION_CAST_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atedification/edification_top_angelbody.ani", 0, 1, 0); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atedification/edification_bottom_glow.ani"; + createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("R_PW_EDITICATION"); + obj.sq_PlaySound("EDIFICATION_CAST"); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_EDIFICATION_START_BODY); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(128); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("custom").setInt(10, moveSpeed); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } + } + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Edification(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_EDIFICATION, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Edification(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Edification(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_Edification(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Edification(obj, new_state) +{ + if(!obj) return; +} + + +//神光惩戒 +function checkExecutableSkill_Shinecross(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHINECROSS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Shinecross(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Shinecross(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYA); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYB); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYC); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Shinecross(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Shinecross(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Shinecross(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: obj.sq_PlaySound("PW_1ATK_01"); break; + case 103: obj.sq_PlaySound("SHINECROSS_01"); break; + case 105: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slasha_01.ani", 0, 1, 0); break; + case 200: + obj.sq_PlaySound("PW_3ATK_02"); + obj.sq_PlaySound("SHINECROSS_02"); + break; + case 203: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slashb_01.ani", 0, 1, 0); break; + case 300: obj.sq_PlaySound("PW_RISING_SLASH"); break; + case 301: + obj.sq_PlaySound("SHINECROSS_03"); + sq_flashScreen(obj,0,80,0,153, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 100); + break; + case 310: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slashc_01.ani", 0, 1, 0); break; + } + return true; +} + +function onTimeEvent_Shinecross(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Shinecross(obj, new_state) +{ + if(!obj) return; +} + + +//神圣锁环 +function checkExecutableSkill_Holycirclet(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYCIRCLET); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYCIRCLET, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Holycirclet(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Holycirclet(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYCIRCLET_A_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYCIRCLET_B_BODY); + sq_SetMyShake(obj, 2, 40); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholycirclet/holycirclet_b_bodyeff.ani", 0, 1, 0); + break; + } +} + +function onEndCurrentAni_Holycirclet(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYCIRCLET, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Holycirclet(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Holycirclet(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + //`ShootHolyCirclet` 300 0 70 + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYCIRCLET, -1, 0, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYCIRCLET, -1, 1, 1.0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 6); + local subTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 0); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 2); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 10); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,300,0,70,obj.getDirection(),1,SKILL_BYKK_HOLYCIRCLET,1,power,power_exp,hitTime,lifeTime,subTime,sizeRate,0,0); + break; + case 104: sq_SetMyShake(obj, 2, 80); break; + } + return true; +} + +function onTimeEvent_Holycirclet(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Holycirclet(obj, new_state) +{ + if(!obj) return; +} + + +//复苏之光 +function checkExecutableSkill_Revive(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTINDASH); + if (isUse){ + //obj.sq_IntVectClear(); + //obj.sq_IntVectPush(0); + //obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Revive(obj) +{ + if (!obj) return false; + // return true; + return false; +} + +function onSetState_Revive(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + } +} + +function onEndCurrentAni_Revive(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onProcCon_Revive(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Revive(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_Revive(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Revive(obj, new_state) +{ + if(!obj) return; +} + + +//忏悔之雷 +function checkExecutableSkill_Thunderofcleans(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THUNDEROFCLEANS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THUNDEROFCLEANS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thunderofcleans(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Thunderofcleans(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATTHUNDEROFCLEANS_CASTING_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATTHUNDEROFCLEANS_START_BODY); + if(sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 23) < 1){//stone + local createMax = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 2); + local createTime = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 3); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 3, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 0, 1.0); + local minSizeRate = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 10); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,300,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,1,power,power_exp,createMax,createTime,0,minSizeRate,0,0); + } + else{ + local createTime = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 3); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 0, -1, 2.0); + local sub = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 23); + local speed = 200; + if(sub > 50) speed = 300; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,1,0,power_exp,0,createTime,sub,0,speed,0); + obj.setTimeEvent(0, 100, 1, false); + } + break; + } +} + +function onEndCurrentAni_Thunderofcleans(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_THUNDEROFCLEANS, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Thunderofcleans(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Thunderofcleans(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + } + return true; +} + +function onTimeEvent_Thunderofcleans(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Thunderofcleans(obj, new_state) +{ + if(!obj) return; +} + + +//新生圣歌 +function checkExecutableSkill_Ariaofregeneration(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ARIAOFREGENERATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Ariaofregeneration(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Ariaofregeneration(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONSTART_BODY); + obj.sq_PlaySound("R_PW_ARIAREGENERATION"); + obj.sq_PlaySound("ARIAREGENERATION", 2001); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION); + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 1, skillLevel); + local allTolerance = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 9); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ARIAOFCOURAGE, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Ariaofcourage"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Ariaofcourage",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allTolerance).tofloat()); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONLOOP_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraloopfront_1.ani"), 0, -67); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraloopback_glow.ani"), 0, -67); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONEND_BODY); + obj.stopSound(2001); + obj.removeAllTimeEvent(); + local floorObj = obj.getVar("ARIAOFREGENERATION_FLOOR").get_obj_vector(0); + local effectObj = obj.getVar("ARIAOFREGENERATION_EFFECT").get_obj_vector(0); + local musicObj = obj.getVar("ARIAOFREGENERATION_MUSIC").get_obj_vector(0); + if(floorObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + if(musicObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); + colObj.setValid(false); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Ariaofregeneration(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 13) > 0) {//stone + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + local sizeRate = range * 100 / 275; + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION); + local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0, skillLevel); + local decreaseMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0) / 1000; + // if(obj.isMyControlObject()){ + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,4,sizeRate,lifeTime,HP_healRate,decreaseMax,range,0,0,0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,5,sizeRate,lifeTime,0,0,0,0,0,0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,6,sizeRate,lifeTime,0,0,0,0,0,0); + // } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0); + obj.setTimeEvent(1,lifeTime,1,false); + obj.setTimeEvent(2,20,-1,false); + obj.setTimeEvent(3,1000,-1,true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Ariaofregeneration(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LIGHTOFHAPTISM).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_LIGHTOFHAPTISM,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LIGHTOFHAPTISM); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_LIGHTOFHAPTISM, sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM), -1); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, -1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0); + // if(obj.isMyControlObject()){ + local target = sq_FindTarget(obj, 0, 500, 500, 500); + if(target) createSkillPassive_ATPriest_bykk(obj,target,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); + // } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_BLESSOFANGEL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFANGEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_BLESSOFANGEL); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_BLESSOFANGEL, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL), -1); + local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel); + obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + if(loadSlot) loadSlot.setStartCool(); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel); + local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0); + local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); + local effectObj = activeObj.getVar("Blessofangel_eff").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setValid(false); + } + } + local power = power_Pty; + if(isSameObject(obj, activeObj)) power = power_Chr; + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,power,buffTime,group,uniqueId,0,0,0,0); + if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true); + AddAppendage.setBuffIconImage(131); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.getVar("tar").clear_obj_vector(); + AddAppendage.getVar("tar").push_obj_vector(obj); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); + } + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_PROTECTIONOFURIEL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_PROTECTIONOFURIEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_PROTECTIONOFURIEL); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL), -1); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1); + local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){ + local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + attackSpeed = attackSpeed + addRate; + moveSpeed = moveSpeed + addRate; + castSpeed = castSpeed + addRate; + } + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10; + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate); + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT) > 0 && !sq_GetSkill(obj, SKILL_BYKK_HOLYLIGHT).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_HOLYLIGHT,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HOLYLIGHT); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT); + obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); + local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720; + local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0); + local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0); + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel); + local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4); + + local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); + local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100; + local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100; + local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100; + local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100; + local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100; + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100; + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(44); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ + local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); + local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection"); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); + } + } + + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local power = power_Pty; + if(isSameObject(obj, activeObj)) power = power_Chr; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0); + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION) > 0 && !sq_GetSkill(obj, SKILL_BYKK_EDIFICATION).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_EDIFICATION,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_EDIFICATION); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION); + obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(128); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("custom").setInt(10, moveSpeed); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_CRUXOFSHAPIEL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL); + obj.startSkillCoolTime(SKILL_BYKK_CRUXOFSHAPIEL, skillLevel, -1); + + obj.getVar("cruxofshapiel_obj").clear_obj_vector(); + obj.getVar("cruxofshapiel_bool").setBool(0, false); + + local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0); + local buffTime = hitTime * 21 + 2080; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + } + + if(obj.getVar("cruxofshapiel_bool").getBool(0)){ + obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if(b_useskill != -1){ + obj.getVar("cruxofshapiel_bool").setBool(0, false); + local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + } + break; + } +} + +function onKeyFrameFlag_Ariaofregeneration(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 103: + //`StartEffect` 61 0 60 + if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 13) > 0) break; + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + local sizeRate = range * 100 / 275; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,1,sizeRate,0,0,0,0,0,0,0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,2,sizeRate,0,0,0,0,0,0,0); + break; + case 106: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/orastartfront_1.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/orastartback_backlight.ani", 0, -1, 0); + break; + case 300: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraendfront_1.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraendback_1.ani", 0, -1, 0); + break; + } + return true; +} + +function onTimeEvent_Ariaofregeneration(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); + break; + case 2: + local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 2); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); + return; + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 2); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); + return; + } + break; + case 3: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION); + local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) HP_healRate = HP_healRate + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 4, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)) / 10; + local decreaseMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0) / 1000; + local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local hp = activeObj.getHp() * HP_healRate / 100; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_ARIAOFREGENERATIONBUFF, true); + local change_appendage = appendage.sq_GetCNChangeHp("changehp"); + if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", activeObj, obj, 0, hp.tofloat(), 800); + appendage.sq_SetValidTime(500); + local activeStatus = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16]; + local count = 0; + for(local ui = 0; ui < activeStatus.len(); ui++){ + if (sq_IsValidActiveStatus(activeObj, activeStatus[ui])){ + if(count + 1 < decreaseMax){ + sq_ReleaseActiveStatus(activeObj, activeStatus[ui]); + count = count + 1; + } + } + } + } + } + break; + } +} + +function onEndState_Ariaofregeneration(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_ARIAOFREGENERATION){ + local floorObj = obj.getVar("ARIAOFREGENERATION_FLOOR").get_obj_vector(0); + local effectObj = obj.getVar("ARIAOFREGENERATION_EFFECT").get_obj_vector(0); + local musicObj = obj.getVar("ARIAOFREGENERATION_MUSIC").get_obj_vector(0); + if(floorObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); + colObj.setValid(false); + } + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setValid(false); + } + if(musicObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); + colObj.setValid(false); + } + } +} + + +//神光十字 +function checkExecutableSkill_Grandcrosscrash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRANDCROSSCRASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GRANDCROSSCRASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Grandcrosscrash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Grandcrosscrash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATGRANDCROSSCRASH_READY_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATGRANDCROSSCRASH_SMASH_BODY); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GRANDCROSSCRASH, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_GRANDCROSSCRASHATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.sq_PlaySound("PW_GRANDCROSS_02"); + obj.sq_PlaySound("HOLYSANCTUARY_EXP"); + sq_SetMyShake(obj, 15, 300); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 1){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000.0 / currentAni.getDelaySum(0, 0).tofloat(); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atgrandcrosscrash/screen/atgrandcrosscrash_screen.ani", 302, 10, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + } +} + +function onEndCurrentAni_Grandcrosscrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_GRANDCROSSCRASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Grandcrosscrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Grandcrosscrash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + //75 0 5 + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GRANDCROSSCRASH, -1, 0, 1.0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,75,0,5,obj.getDirection(),1,SKILL_BYKK_GRANDCROSSCRASH,1,power_exp,0,0,0,0,0,0,0); + break; + case 2: + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_GRANDCROSSCRASH, 1); + local addTime = sq_GetLevelData(obj, SKILL_BYKK_GRANDCROSSCRASH, 1, sq_GetSkillLevel(obj, SKILL_BYKK_GRANDCROSSCRASH)); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,74,0,5,obj.getDirection(),1,SKILL_BYKK_GRANDCROSSCRASH,2,lifeTime,addTime,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_Grandcrosscrash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Grandcrosscrash(obj, new_state) +{ + if(!obj) return; +} + + +//圣光天启 +function checkExecutableSkill_Cruxofvictoria(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFVICTORIA); + if (isUse){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA) >= 6) sq_SetCustomDamageType(obj, true, 2); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFVICTORIA, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Cruxofvictoria(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Cruxofvictoria(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY1); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/ready/covreadyeff_skylight.ani", 0, 1, 0); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY2); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/fly/covflyeff_01.ani", 0, 1, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/fly/covflycross_01.ani", 0, -1, -50); + obj.getVar("Cruxofvictoria_Eff").clear_obj_vector(); + obj.getVar("Cruxofvictoria_Eff").push_obj_vector(pooledObj); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY3); + local pooledObj = obj.getVar("Cruxofvictoria_Eff").get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/crosscatch/covsetupeff_feather_00.ani", 0, 1, 0); + sq_flashScreen(obj,100,500,100,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY_ITEM4); + sq_SetMyShake(obj, 5, 320); + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_COVBUFFFINISHBODY_BODY); + sq_SetMyShake(obj, 5, 320); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 1){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delay / 50, 40, true); + } + else if(subState == 3){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 1); + // obj.getVar("Cruxofvictoria_move").setInt(10, sq_GetZPos(obj)); + obj.setTimeEvent(1, delay / 10, 10, true); + } +} + +function onEndCurrentAni_Cruxofvictoria(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFVICTORIA, STATE_PRIORITY_AUTO, true); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Cruxofvictoria(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Cruxofvictoria(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("R_PW_CRUXVICTORIA"); + obj.sq_PlaySound("CRUXVICTORIA_CAST"); + break; + case 104: + //`CreateBuffChaser` 40 0 150 + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { + local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr) == GROW_TYPE_CRUSADER) continue; + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,10,0,50,obj.getDirection(),1,SKILL_BYKK_CRUXOFVICTORIA,2,group,uniqueId,0,0,0,0,0,0); + } + } + + obj.setTimeEvent(2, 1100, 1, false); + break; + case 404: + sq_SetMyShake(obj, 2, 2400); + local bonusRate = 1.0; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA); + if(skillLevel >= 3) bonusRate = 1.1; + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFVICTORIA, -1, 0, bonusRate); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFVICTORIA, -1, 1, bonusRate); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 12, skillLevel); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,10,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_CRUXOFVICTORIA,1,power,power_exp,hitTime,0,0,0,0,0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 427: + //`AddFlash` 62 0 131 + break; + case 439: + sq_SetMyShake(obj, 5, 400); + //`FinishExplosion` 69 0 47 + break; + } + return true; +} + +function onTimeEvent_Cruxofvictoria(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local v = sq_GetUniformVelocity(0, 150, timeEventCount, 40); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 1: + local v = sq_GetUniformVelocity(150, 0, timeEventCount, 4); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 2: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 11, skillLevel); + if(skillLevel >= 9) buffTime = buffTime + 3000; + local phAttack = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 4, skillLevel); + local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 5, skillLevel); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 3, skillLevel); + local phDefense = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 6, skillLevel); + local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 7, skillLevel); + + local now_mgAttack = sq_GetMagicalAttack();//1000;// + now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100; + // print("now_mgAttack = "+now_mgAttack); + local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_CRUXOFVICTORIA, 1).tofloat(); + // print("addRate = "+addRate); + if(addRate > 1){ + phAttack = (phAttack.tofloat() * (1.0 + addRate)).tointeger(); + mgAttack = (mgAttack.tofloat() * (1.0 + addRate)).tointeger(); + } + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(SKILL_BYKK_CRUXOFVICTORIA); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(skillLevel); + sq_BinaryWriteDword(buffTime); + sq_BinaryWriteDword(phAttack.tointeger()); + sq_BinaryWriteDword(mgAttack.tointeger()); + sq_BinaryWriteDword(attackSpeed); + sq_BinaryWriteDword(moveSpeed); + sq_BinaryWriteDword(phDefense); + sq_BinaryWriteDword(mgDefense); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection()); + break; + } +} + +function onEndState_Cruxofvictoria(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_CRUXOFVICTORIA){ + sq_SetCustomDamageType(obj, true, 0); + } +} + + +//忏悔重击 +function checkExecutableSkill_Repentencesmash(obj) +{ + if (!obj) return false; + local isStone = sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10); + if(isStone > 0 && isStone != 5000){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH); + if(loadSlot){ + local getNumber = loadSlot.getRemainLoadNumber() + if(getNumber > 0){ + loadSlot.decreaseLoadCount(1); + loadSlot.setStartCool(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else return false; + } + else return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REPENTENCESMASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Repentencesmash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Repentencesmash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_READY_BODY); + obj.sq_PlaySound("PW_REPENTENCE_01"); + obj.sq_PlaySound("THUNDERHAMMER"); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_SMASH01_BODY); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPENTENCESMASH, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_REPENTENCESMASHATK1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_SMASH02_BODY); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPENTENCESMASH, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_REPENTENCESMASHATK2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.sq_PlaySound("PW_REPENTENCE_02"); + obj.sq_PlaySound("IMPACT_SMASH"); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_END_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_ready_front.ani", 0, 0, 0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 10000.0 / currentAni.getDelaySum(0, 0).tofloat(); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + } +} + +function onEndCurrentAni_Repentencesmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Repentencesmash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Repentencesmash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: sq_SetMyShake(obj, 12, 100); break; + case 1: + sq_flashScreen(obj,0,80,0,89, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 15, 300); + break; + case 2: + sq_flashScreen(obj,0,200,200,127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + return true; +} + +function onTimeEvent_Repentencesmash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Repentencesmash(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Repentencesmash(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_hit_normal.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + break; + case 2: + sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_hit_finish.ani", 0, 0, sq_GetCenterZPos(boundingBox) - 75); + break; + } + if(sq_IsFixture(damager)) return; + if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 0){ + //APDPATH_REPENTENCESMASH + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_REPENTENCESMASH)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_REPENTENCESMASH, true); + AddAppendage.sq_SetValidTime(500); + sq_MoveToAppendageForce(damager, obj, obj, 200, 0, damager.getZPos(), 300, true, AddAppendage); + } + } +} + +//圣佑之阵 +function checkExecutableSkill_Protectionofuriel(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PROTECTIONOFURIEL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PROTECTIONOFURIEL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Protectionofuriel(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Protectionofuriel(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PROTECTIONOFURIEL_CAST_BODY); + obj.sq_PlaySound("R_PW_URIEL"); + obj.sq_PlaySound("URIEL_CAST"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Protectionofuriel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Protectionofuriel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Protectionofuriel(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + //`CreateProtection` 0 0 0 + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1); + local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){ + local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + attackSpeed = attackSpeed + addRate; + moveSpeed = moveSpeed + addRate; + castSpeed = castSpeed + addRate; + } + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10; + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate); + break; + } + return true; +} + +function onTimeEvent_Protectionofuriel(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Protectionofuriel(obj, new_state) +{ + if(!obj) return; +} + +function getImmuneTypeDamageRate_appendage_at_protectionofuriel(appendage, damageRate, attacker) +{ + local new_damageRate = damageRate - appendage.getVar("custom").getInt(10); + return new_damageRate; +} + +function onEnd_appendage_at_protectionofuriel(appendage) +{ + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + sq_SendMessage(sqrChr, 0, 0, 0); + } +} + +//圣洁之翼 +function checkExecutableSkill_Blessofangel(obj) +{ + if (!obj) return false; + if(obj.getVar("Blessofangel_Bool").getBool(0)){ + obj.getVar("Blessofangel_Bool").setBool(0, false); + local size = obj.getVar("Blessofangel_sqr").get_obj_vector_size();// + if(size > 0){ + obj.sq_PlaySound("URIEL_END"); + local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0); + local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0); + local sizeRate = 100; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + if(loadSlot){ + local count = loadSlot.getRemainLoadNumber(); + if(count > 1) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 0) * count) / 100; + obj.sq_RemoveSkillLoad(SKILL_BYKK_BLESSOFANGEL); + } + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Blessofangel_sqr").get_obj_vector(i); + if(!targetObj || targetObj.getState() == STATE_DIE) continue; + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); + local power = power_Pty; + if(isSameObject(obj, activeObj)) power = power_Chr; + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,2,power,sizeRate,0,0,0,0,0,0); + } + print("testsize = "+obj.getVar("Blessofangel_eff").get_obj_vector_size()); + local size2 = obj.getVar("Blessofangel_eff").get_obj_vector_size(); + if(size2 > 0){ + for(local i = 0; i < size2; i++){ + local effect = obj.getVar("Blessofangel_eff").get_obj_vector(i); + if(effect){ + local colObj = sq_GetCNRDObjectToCollisionObject(effect); + colObj.setValid(false); + } + } + } + } + local state = obj.getState(); + if(state == 0 || state == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFANGEL); + if (isUse){ + obj.getVar("Blessofangel_sqr").clear_obj_vector(); + obj.getVar("Blessofangel_eff").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFANGEL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Blessofangel(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Blessofangel(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFANGEL_PHASE1_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("R_PW_URIEL"); + obj.sq_PlaySound("URIEL_CAST"); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase1bottom_feather02.ani", 0, -1 ,0); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase1top_sparkle02.ani", 0, 1 ,0); + sq_moveWithParent(obj, pooledObj); + sq_moveWithParent(obj, pooledObj2); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 15000.0 / delay.tofloat(); + local pAni = pooledObj.getCurrentAnimation(); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + pAni2.setSpeedRate(speedRate); + break; + } + +} + +function onEndCurrentAni_Blessofangel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Blessofangel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Blessofangel(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel); + obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + if(loadSlot) loadSlot.setStartCool(); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel); + // local power_Chr = obj.sq_GetPowerWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, -1, 1.0); + // local power_Pty = obj.sq_GetPowerWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, -1, 1.0); + print("size = "+obj.getVar("Blessofangel_eff").get_obj_vector_size()); + local size2 = obj.getVar("Blessofangel_eff").get_obj_vector_size(); + if(size2 > 0){ + for(local i = 0; i < size2; i++){ + local effect = obj.getVar("Blessofangel_eff").get_obj_vector(i); + if(effect){ + local colObj = sq_GetCNRDObjectToCollisionObject(effect); + colObj.setValid(false); + } + } + } + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); + } + // local power = power_Pty; + // if(isSameObject(obj, activeObj)) power = power_Chr; + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,0,buffTime,group,uniqueId,0,0,0,0); + if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true); + AddAppendage.setBuffIconImage(131); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFANGEL, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + AddAppendage.getVar("tar").clear_obj_vector(); + AddAppendage.getVar("tar").push_obj_vector(obj); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); + } + } + } + break; + } + return true; +} + +function onTimeEvent_Blessofangel(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + // switch(timeEventIndex){ + // case 0: + // break; + // } +} + +function onEndState_Blessofangel(obj, new_state) +{ + if(!obj) return; +} + +function onAttackParent_appendage_at_blessofangel(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local targetObj = appendage.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + if(!isSameObject(targetObj, parentObj)) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(parentObj.getState() == STATE_ATTACK) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(targetObj); + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + local maxCount = sq_GetIntData(sqrChr, SKILL_BYKK_BLESSOFANGEL, 3); + if(loadSlot){ + local count = loadSlot.getRemainLoadNumber(); + if(count + 1 <= maxCount) loadSlot.increaseLoadCount(1); + } +} + +function onEnd_appendage_at_blessofangel(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local targetObj = appendage.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + if(!isSameObject(targetObj, parentObj)) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(targetObj); + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + if(loadSlot) sqrChr.sq_RemoveSkillLoad(SKILL_BYKK_BLESSOFANGEL); + sqrChr.getVar("Blessofangel_Bool").setBool(0, false); +} diff --git a/user/116.205.165.25/2_atpriest_4.c b/user/116.205.165.25/2_atpriest_4.c new file mode 100644 index 0000000..6411b92 --- /dev/null +++ b/user/116.205.165.25/2_atpriest_4.c @@ -0,0 +1,3511 @@ + +//圣光普照 +function checkExecutableSkill_Miraclechine(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MIRACLECHINE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_MIRACLECHINE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Miraclechine(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Miraclechine(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_MIRACLESHINE01_02); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("R_PW_MIRACLESHINE"); + obj.sq_PlaySound("MIRACLESHINE_CAST"); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_MIRACLESHINE02_02); + sq_flashScreen(obj,0,80,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local targetMax = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 10); + local firstTargetXRange = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 1); + local firstTargetYRange = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 2); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MIRACLECHINE, -1, 1, 1.0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 8); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 9); + local addRate = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 13) / 10; + local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_MIRACLECHINE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_MIRACLECHINE)); + // if(obj.isMyControlObject()){ + if(sq_GetLevelData(obj, SKILL_BYKK_MIRACLECHINE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_MIRACLECHINE)) > 0){//stone + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,100,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,10,power,hitTime,hitMax,HP_healRate,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/userhealing02_end02.ani", 40, 0, 95); + obj.setTimeEvent(0, 500, 1, false); + break; + } + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,40,0,95,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,1,targetMax,firstTargetXRange,firstTargetYRange,power,hitTime,hitMax,addRate,HP_healRate); + // } + local stateTime = hitTime * hitMax; + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 1, stateTime); + break; + } +} + +function onEndCurrentAni_Miraclechine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_MIRACLECHINE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Miraclechine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Miraclechine(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 201: + sq_flashScreen(obj,0,0,480,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + return true; +} + +function onTimeEvent_Miraclechine(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Miraclechine(obj, new_state) +{ + if(!obj) return; +} + + +function setLightning_atp_Miraclechine_bykk(obj, drawObj, targetObj) +{ + if(!obj) return; + //if(!pTargetChr) return; + + local X = drawObj.getXPos(); + local Y = drawObj.getYPos(); + local Z = drawObj.getZPos(); + + local pAni = drawObj.getCurrentAnimation(); + + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local posX = activeObj.getXPos(); + local posY = activeObj.getYPos() + 1; + local posZ = activeObj.getZPos() + (sq_GetObjectHeight(activeObj) / 2); + + if(posX == -1) return; + + local offset = posX - X; + + if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT); + else drawObj.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) - (Y); + local width = sq_Abs(posX - X); + local angle = sq_Atan2( h.tofloat(), width.tofloat()); + 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); + local dis = 300; + local cos_x = dis.tofloat() * sq_Cos(angle); + local sin_y = dis.tofloat() * sq_Sin(angle); + local nW = sq_Abs( cos_x.tointeger() ); + local nH = sq_Abs( sin_y.tointeger() ); + local wRate = width.tofloat() / nW.tofloat(); + local hRate = h.tofloat() / nH.tofloat(); + pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); +} + + +//救赎彼岸:惩戒圣枪 +function checkExecutableSkill_Brionac(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BRIONAC); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BRIONAC, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Brionac(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Brionac(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BRIONACBODY_BODY); + obj.sq_PlaySound("R_PW_BRUNAQ"); + obj.sq_PlaySound("BRUNAQ_CAST"); + break; + } + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 5); + local delay2 = currentAni.getDelaySum(5, 11); + sq_flashScreen(obj,delay,delay2,delay,150, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); +} + +function onEndCurrentAni_Brionac(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Brionac(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Brionac(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 102: + //`HoldStart` 18 0 -50 + obj.getVar("Brionac_Tar").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + if(!obj.getVar("Brionac_Tar").is_obj_vector(object)) obj.getVar("Brionac_Tar").push_obj_vector(object); + local AddAppendage; + if(CNSquirrelAppendage.sq_IsAppendAppendage(object, APDPATH_BRIONAC)) AddAppendage = CNSquirrelAppendage.sq_GetAppendage(object, APDPATH_BRIONAC); + else AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, APDPATH_BRIONAC, true); + sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdlight_eff01.ani", 0, 0, sq_GetHeightObject(object) / 2); + sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdaa_eff01.ani", 0, 0, sq_GetHeightObject(object) / 2); + sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdab_eff11.ani", 0, 0, sq_GetHeightObject(object) / 2); + } + } + break; + case 104: + //`CutIn` 20 0 -42 + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat(); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/cutin/brionaccutina_eff01.ani"; + local aniPath2 = "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/cutin/brionaccutinc_bg05.ani"; + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj)+142,ENUM_DRAWLAYER_BOTTOM); + local pooledObj2 = createOnlyDrawObject_ATPriest_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) - 1,sq_GetZPos(obj)+142,ENUM_DRAWLAYER_BOTTOM); + local sizeRate = 1.2; + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni2.setImageRateFromOriginal(sizeRate, sizeRate); + pAni2.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + pAni.setSpeedRate(speedRate); + pAni2.setSpeedRate(speedRate); + break; + case 110: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat(); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/body/brionacbody_eff09.ani", 0, -1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 111: + //`FlyStart` 0 0 0 + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(11, 14) / 60, 60, true); + break; + case 113: + sq_SetMyShake(obj, 5, 80); + break; + case 132: + //`DrawSpearCircle` 0 0 0 + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/spear/brionaclanceeff_eff08.ani", 0, 0, 0); + break; + case 152: + //`ThrowSpear` 100 -2 0 + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat(); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 0, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 1, 1.0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,-50,-2,sq_GetZPos(obj) - 10,obj.getDirection(),1,SKILL_BYKK_BRIONAC,1,power,power_exp,speedRate.tointeger(),0,0,0,0,0); + break; + case 153: + //`SlowDown` 17 0 1 + //`MoveScroll` -8 0 -40 + obj.sq_SetXScrollStart(300, 200); + break; + case 162: + //`FlyEnd` -5 0 -27 + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(62, 65) / 60, 60, true); + obj.setTimeEvent(3, currentAni.getDelaySum(62, 64), 1, false); + break; + } + return true; +} + +function onTimeEvent_Brionac(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 42, timeEventCount, 30, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 2: + local v = sq_GetAccel(42, 0, timeEventCount, 60, false); + sq_setCurrentAxisPos(obj, 2, v); + // if(timeEventCount == 10) obj.setTimeEvent(3, 1000, 1, true); + break; + case 3: + sq_flashScreen(obj,80,200,0,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 24, 600); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 1, 1.0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,150,1,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_BRIONAC,2,power_exp,0,0,0,0,0,0,0); + break; + } +} + +function onEndState_Brionac(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BRIONAC){ + obj.sq_SetXScrollStop(200); + local size = obj.getVar("Brionac_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Brionac_Tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BRIONAC); + } + } + } + } +} + + +//圣言十字 +function checkExecutableSkill_Cruxofshapiel(obj) +{ + if (!obj) return false; + if(obj.getVar("cruxofshapiel_bool").getBool(0)){ + obj.getVar("cruxofshapiel_bool").setBool(0, false); + local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL); + if (isUse){ + obj.getVar("cruxofshapiel_obj").clear_obj_vector(); + obj.getVar("cruxofshapiel_bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Cruxofshapiel(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Cruxofshapiel(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUXOFSHAPIELREADY_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4100.0 / currentAni.getDelaySum(0, 0).tofloat(); + local delay1 = 150 / speedRate.tointeger() * 100, delay2 = 1800 / speedRate.tointeger() * 100, delay3 = 400 / speedRate.tointeger() * 100; + sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); +} + +function onEndCurrentAni_Cruxofshapiel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Cruxofshapiel(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + } +} + +function onKeyFrameFlag_Cruxofshapiel(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 108: + obj.sq_PlaySound("R_PW_CRUXOFSHAPIEL"); + obj.sq_PlaySound("CRUXOFSHAPIEL_SHOT"); + break; + case 109: + //`CreateCruxOfShapiel` 0 0 0 + local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0); + local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0); + local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0); + // if(obj.isMyControlObject()) + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0); + local buffTime = hitTime * 21 + 2080; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + break; + } + return true; +} + +function onTimeEvent_Cruxofshapiel(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + } +} + +function onEndState_Cruxofshapiel(obj, new_state) +{ + if(!obj) return; +} + +////////////////////女圣骑设置 + +function setSkillBonusBate_Crusader_bykk(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CRUSADE, 6, sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_LUCULENTUISANGEL, 0, sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL))) / 1000; + print("bonusRate2 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) bonusRate * (1000 + bonusRate + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE))) / 1000; + print("bonusRate3 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function onStartDungeon_Crusader_bykk(obj) +{ + local apdPath = [APDPATH_BLESSOFCOURAGE, APDPATH_BLESSOFPROTECTION, APDPATH_HOLYLIGHT, APDPATH_EDIFICATION]; + for(local i = 0; i < apdPath.len(); i++){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, apdPath[i]); + if(AddAppendage) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath[i]); + } + setSkillBonusBate_Crusader_bykk(obj); + local now_mgAttack = sq_GetMagicalAttack();//1000;// + now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100; + obj.getVar("isReset").setInt(0, 1); + obj.getVar("mgAttackSave").setInt(0, now_mgAttack); + print("now_mgAttack = "+now_mgAttack); +} + +function retset_Crusader_bykk(obj) +{ + setSkillBonusBate_Crusader_bykk(obj); + if(obj.getVar("mgAttackSave").getInt(0) > 0) return; + local now_mgAttack = sq_GetMagicalAttack();//1000;// + now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100; + obj.getVar("mgAttackSave").setInt(0, now_mgAttack); + print("now_mgAttack = "+now_mgAttack); +} + +function procSkill_Crusader_bykk(obj) +{ + if(obj.getVar("canUseSkill").getBool(0)){ + obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFCOURAGE, false); + // obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFVICTORIA, false); + } + if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 0 && sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) != 5000){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH); + if(loadSlot){ + if(!loadSlot.isCooling()){ + local getNumber = loadSlot.getRemainLoadNumber(); + if(getNumber + 1 <= 2){ + loadSlot.increaseLoadCount(1); + } + } + } + else{ + local coolTime = 15000; + if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 5000) coolTime = 10000; + obj.sq_AddSkillLoad(SKILL_BYKK_REPENTENCESMASH, 112, 2, coolTime); + } + } + else{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_REPENTENCESMASH); + } +} + +function setState_Crusader_canUseSkill(obj, state, datas, isResetTimer) +{ + if(state == 13 && (sq_GetVectorData(datas, 2) == 7 || sq_GetVectorData(datas, 2) == 53)){ + print("test"); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + local count = 0; + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_BLESSOFCOURAGEBOOL)) CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_BLESSOFCOURAGEBOOL, true); + if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_AT_MAGE && sq_getGrowType(sqrChr) == 1){ + sqrChr.getVar("canUseSkill").setBool(0, true); + count = count + 1; + } + } + } + if(count > 0){ + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, APDPATH_BLESSOFCOURAGE); + } + } + } + } +} + +/////////////////////////////被动 +function onStart_appendage_atpriest_aria(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIA); + local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_ARIA, 0, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("atpriest_aria"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_aria", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat()); + } +} + +function onStart_appendage_atpriest_blessofraphael(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL); + local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 0, skillLevel); + local mgctlRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 1, skillLevel); + local mgctldmgRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 2, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("atpriest_blessofraphael"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_blessofraphael", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (mgctlRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (mgAttack * 0.1 / 0.667).tofloat()); + } +} + +function onStart_appendage_atcrusader_weaponmastery(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local weaponType = obj.getWeaponSubType(); + if(weaponType == -1) return; + if(weaponType == 0){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CROSSMASTERY); + local adtEquAttack = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 0, skillLevel); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 1, skillLevel); + local mgctlRate = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 2, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("crossmastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("crossmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK , true, (adtEquAttack * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_BACK_ATTACK_CRITICAL, false, (mgctlRate * 0.1).tofloat()); + } + } +} + +function onStart_appendage_atpriest_crusade(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUSADE, 5, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("atpriest_crusade"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_crusade", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 0.1).tofloat()); + } +} + +function onStart_appendage_atpriest_graceofdevine(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + + local lightTolerance = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 2); + local actTolerance = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 3); + local countMax = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 0); + local debuffTime = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 1); + local decrease = sq_GetLevelData(obj, SKILL_BYKK_GRACEOFDEVINE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE)); + appendage.getVar("custom").setInt(10, countMax); + appendage.getVar("custom").setInt(11, debuffTime); + appendage.getVar("custom").setInt(12, decrease); + + local change_appendage = appendage.sq_getChangeStatus("atpriest_graceofdevine"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_graceofdevine", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, (lightTolerance).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (actTolerance).tofloat()); + } +} + +function onAttackParent_appendage_atpriest_graceofdevine(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + return; + if(isStuck) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local AddAppendage; + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_GRACEOFDEVINEDEBUFF)) AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_GRACEOFDEVINEDEBUFF); + else{ + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_GRACEOFDEVINEDEBUFF, true); + AddAppendage.getVar("debuffTime").setInt(10, appendage.getVar("custom").getInt(11)); + } + local timer = AddAppendage.getVar().get_ct_vector(0); + if(!timer){ + AddAppendage.getVar().clear_ct_vector(); + AddAppendage.getVar().push_ct_vector(); + timer = AddAppendage.getVar().get_ct_vector(0); + } + timer.Reset(); + timer.Start(10000,0); + if(AddAppendage.getVar("count").getInt(10) < appendage.getVar("custom").getInt(10)){ + AddAppendage.getVar("count").setInt(10, AddAppendage.getVar("count").getInt(10) + 1); + } + + local decrease = appendage.getVar("custom").getInt(12) * AddAppendage.getVar("count").getInt(10); + local change_appendage = AddAppendage.sq_getChangeStatus("atpriest_graceofdevine"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("atpriest_graceofdevine", activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (decrease * -1).tofloat()); + } +} + +function proc_appendage_graceofdevinedebuff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local timer = appendage.getVar().get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + if(currentT > appendage.getVar("debuffTime").getInt(10)){ + appendage.getVar("count").setInt(10, 0); + timer.Reset(); + timer.Start(10000,0); + } + } +} + +function onStart_appendage_atpriest_luculentuisangel(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL); + local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_LUCULENTUISANGEL, 1, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("atpriest_luculentuisangel"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_luculentuisangel", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat()); + } +} + +function onStart_appendage_atpriest_zealoffaith(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ZEALOFFAITH); + local addAttack = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 0, skillLevel); + local addDefense = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 1, skillLevel); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 2, skillLevel); + local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 3, skillLevel); + // local addTime = sq_GetIntData(obj, SKILL_BYKK_ZEALOFFAITH, 1); + // appendage.getVar("custom").setInt(10, addAttack); + // appendage.getVar("custom").setInt(11, addDefense); + // appendage.getVar("custom").setInt(12, attackSpeed); + // appendage.getVar("custom").setInt(13, moveSpeed); + // appendage.getVar("custom").setInt(14, addTime); + // appendage.getVar("user").clear_obj_vector(); + + // appendage.getVar().clear_timer_vector(); + // appendage.getVar().push_timer_vector(); + // local t = appendage.getVar().get_timer_vector(0); + // t.setParameter(1000, -1); + // t.resetInstant(0); + + local change_appendage = appendage.sq_getChangeStatus("atpriest_luculentuisangel"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_luculentuisangel", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (addAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (addAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (addDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (addDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } +} + +function proc_appendage_atpriest_zealoffaith(appendage) +{ + if(!appendage) return; + // if(sq_GetCurrentModuleType() != 3) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + // local t = appendage.getVar().get_timer_vector(0); + // local currentT = appendage.getTimer().Get(); + // if(t && t.isOnEvent(currentT)){ + // local addAttack = appendage.getVar("custom").getInt(10); + // local addDefense = appendage.getVar("custom").getInt(11); + // local attackSpeed = appendage.getVar("custom").getInt(12); + // local moveSpeed = appendage.getVar("custom").getInt(13); + + // local objectManager = obj.getObjectManager(); + // local objectNumber = objectManager.getCollisionObjectNumber(); + // for (local i = 0; i < objectNumber; i++){ + // local object = objectManager.getCollisionObject(i); + // if(object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)){// && isSameObject(obj, object) + // local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + // if(sqrChr.getState() == STATE_DIE || sqrChr.getHp() <= 0) continue; + // if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_ZEALOFFAITHBUFF)){ + // if(!appendage.getVar("user").is_obj_vector(sqrChr)) appendage.getVar("user").push_obj_vector(sqrChr); + // local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_ZEALOFFAITHBUFF, true); + // AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_ZEALOFFAITH, sq_GetSkillLevel(obj, SKILL_BYKK_ZEALOFFAITH)); + // CNSquirrelAppendage.sq_Append(AddAppendage, sqrChr, obj, true); + + // local tiaozheng = 1; + // if(isSameObject(obj, sqrChr)){ + // tiaozheng = 0; + // } + + // local change_appendage = AddAppendage.sq_getChangeStatus("atpriest_zealoffaithbuff"); + // if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("atpriest_zealoffaithbuff", sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + // if(change_appendage){ + // change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (addAttack * tiaozheng).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (addAttack * tiaozheng).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (addDefense).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (addDefense).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + // } + // } + // } + // } + // } +} + +function onAttackParent_appendage_atpriest_zealoffaith(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + return; + // if(isStuck) return; + // local parentObj = appendage.getParent(); + // local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + // if(!obj || obj.getState() == STATE_DIE) return; + // if(obj.getState() == STATE_ATTACK || obj.getState() == STATE_DASH_ATTACK || obj.getState() == STATE_JUMP_ATTACK) return; + // if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + // local size = appendage.getVar("user").get_obj_vector_size(); + // if(size > 0){ + // local addTime = appendage.getVar("custom").getInt(14); + // for(local i = 0; i < size; i++){ + // local sqr = appendage.getVar("user").get_obj_vector(i); + // if(sqr){ + // local activeObj = sq_GetCNRDObjectToActiveObject(sqr); + // if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)){ + // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE); + // if(AddAppendage){ + // local useTime = AddAppendage.getTimer().Get(); + // local validT = AddAppendage.getAppendageInfo().getValidTime(); + // AddAppendage.sq_SetValidTime(validT + addTime - useTime); + // print(validT + addTime - useTime); + // AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFCOURAGE, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE)); + // CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + + // local phAttack = AddAppendage.getVar("custom").getInt(10); + // local mgAttack = AddAppendage.getVar("custom").getInt(11); + // local adtAttack = AddAppendage.getVar("custom").getInt(12); + // local phlAttack = AddAppendage.getVar("custom").getInt(13); + // local mglAttack = AddAppendage.getVar("custom").getInt(14); + // local stuckRate = AddAppendage.getVar("custom").getInt(15); + + // local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofcourage"); + // if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofcourage",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + // if(change_appendage){ + // change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); + // } + // } + // } + // if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ + // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); + // if(AddAppendage){ + // local useTime = AddAppendage.getTimer().Get(); + // local validT = AddAppendage.getAppendageInfo().getValidTime(); + // AddAppendage.sq_SetValidTime(validT + addTime - useTime); + // AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFPROTECTION, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION)); + // CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); + + // local hpMax = AddAppendage.getVar("custom").getInt(11); + // local mpMax = AddAppendage.getVar("custom").getInt(12); + // local phDefense = AddAppendage.getVar("custom").getInt(13); + // local mgDefense = AddAppendage.getVar("custom").getInt(14); + // local phlDefense = AddAppendage.getVar("custom").getInt(15); + // local mglDefense = AddAppendage.getVar("custom").getInt(16); + + // local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofprotection"); + // if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofprotection",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + // if(change_appendage){ + // change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); + // } + // } + // } + // } + // } + // } +} + +function proc_appendage_atpriest_zealoffaithbuff(appendage) +{ + if(!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local sourceObj = appendage.getSource(); + if(!sourceObj || sourceObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + + +//////////////////////////////////////////////////////////////// + +function getAttackAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetAttackAni(index); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_MISTRESS_ATTACK1 + index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + local aniName = ["demonizationattack_basic_a_body","demonizationattack_basic_b_body","demonizationattack_basic_c_body"]; + ani = getCurrentAnimation_demonization(obj, aniName[index], false); + } + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEATTACK1_BODY + index); + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_INQUISITOR_ATTACK1 + index); + } + return ani; +} + +function getStayAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetStayAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_stay", false); + return ani; + } + return ani; +} + +function getMoveAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetMoveAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_move", false); + return ani; + } + return ani; +} + +function getSitAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetSitAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_sit", false); + return ani; + } + return ani; +} + +function getDamageAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetDamageAni(index); + local aniName = ["demonization_damage1","demonization_damage2"]; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, aniName[index], false); + return ani; + } + return ani; +} + +function getDownAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDownAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_down", false); + return ani; + } + return ani; +} + +function getOverturnAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetOverturnAni(); + return ani; +} + +function getJumpAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_jump", false); + return ani; + } + return ani; +} + +function getJumpAttackAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAttackAni(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEJUMPATTACK_BODY); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonizationattack_jump_body", false); + return ani; + } + return ani; +} + +function getRestAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetRestAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_stay", false); + return ani; + } + return ani; +} + +function getThrowChargeAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetThrowChargeAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_throw1", false); + return ani; + } + return ani; +} + +function getThrowShootAni_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetThrowShootAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_throw2", false); + return ani; + } + return ani; +} + +function getDashAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_dash", false); + return ani; + } + return ani; +} + +function getDashAttackAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAttackAni(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEDASHATTACK_BODY); + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + ani = sq_GetCustomAni(obj, ATPANI_BYKK_HOLYFLAME_FRONT_BODY); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonizationattack_dash_body", false); + return ani; + } + return ani; +} + +function getGetItemAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetGetItemAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_sit", false); + return ani; + } + return ani; +} + +function getBuffAni_DemonicSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetBuffAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + ani = getCurrentAnimation_demonization(obj, "demonization_buff", false); + return ani; + } + return ani; +} + + +function getDefaultAttackInfo_DemonicSwordman(obj, index) +{ + if (!obj) return null; + local attackInfo = obj.sq_GetDefaultAttackInfo(index); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(index == 4) index = 0; + attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERATTACK1 + index); + break; + case 2: + attackInfo = sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INQUISITOR_ATTACK1 + index); + break; + } + return attackInfo; +} + +function getDashAttackInfo_DemonicSwordman(obj) +{ + if (!obj) return null; + local attackInfo = obj.sq_GetDashAttackInfo(); + if(sq_getGrowType(obj) == 1){ + attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERDASHATTACK); + } + return attackInfo; +} + +function getJumpAttackInfo_DemonicSwordman(obj) +{ + if (!obj) return null; + local attackInfo = obj.sq_GetJumpAttackInfo(); + if(sq_getGrowType(obj) == 1){ + attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERJUMPATTACK); + } + return attackInfo; +} + +function onSetState_ATPriestAttack(obj, state, datas, isResetTimer) +{ + if(sq_getGrowType(obj) == 4){ + if(sq_GetVectorData(datas, 0) != 0) return; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){ + //print("test"); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(sq_getGrowType(obj) == 1) { + local attackIndex = sq_GetVectorData(datas, 0); + switch(attackIndex){ + case 0: obj.sq_PlaySound("R_PW_1ATK"); break; + case 1: obj.sq_PlaySound("R_PW_2ATK"); break; + case 2: obj.sq_PlaySound("R_PW_3ATK"); break; + } + } +} + +function onAfterSetState_ATPriestAttack(obj, state, datas, isResetTimer) +{ + // + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: obj.sq_PlaySound("R_PW_INQUISITOR_READING_01"); obj.sq_PlaySound("R_PW_1ATK"); break; + case 1: obj.sq_PlaySound("R_PW_INQUISITOR_READING_02"); obj.sq_PlaySound("R_PW_2ATK"); break; + case 2: obj.sq_PlaySound("R_PW_INQUISITOR_READING_03"); obj.sq_PlaySound("R_PW_3ATK"); break; + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + switch(attackIndex){ + case 0: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack1.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack1_holyflamea_1hitsmokea.ani", 0, 1, 0); + break; + case 1: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack2.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack2_holyflame_2hitsmoke.ani", 0, 1, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 3), 1, false); + break; + case 2: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack3.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack3_holyflame_3hitsmoke.ani", 0, 1, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 6), 1, false); + break; + } + } + } + break; + } + obj.getVar("cansetAttackInfo").setBool(0, true); +} + +function onTimeEvent_ATPriestAttack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + switch(timeEventIndex){ + case 1: + local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0); + if(epObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 2, 100); + colObj.setTimeEvent(1, 1000, 1, true); + return; + } + } + break; + } + break; + } +} + +function onBeforeAttack_ATPriestAttack(obj,damager,boundingBox,isStuck) +{ + if(obj.getVar("cansetAttackInfo").getBool(0)){ + obj.getVar("cansetAttackInfo").setBool(0, false); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + } + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } +} + +function onAttack_ATPriestAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +function getAttackCancelStartFrameSize_DemonicSwordman(obj) +{ + local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); + if(sq_getGrowType(obj) == 2){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0) maxAttackNumber = 2; + } + return maxAttackNumber; +} + +function getAttackCancelStartFrame_DemonicSwordman(obj, index) +{ + if(!obj) return null; + local growType = sq_getGrowType(obj); + local frm = obj.sq_GetAttackCancelStartFrame(index); + switch(growType){ + case 1: + switch(index){ + case 0: frm = 2; break; + case 1: frm = 3; break; + } + break; + case 2: frm = 3; break; + } + return frm; +} + +function onSetState_ATPriestDashAttack(obj, state, datas, isResetTimer) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_PlaySound("PW_DASHATK_DM"); + obj.sq_PlaySound("R_SCYTHE"); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_glow.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydusta.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustb.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustc.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayrosea.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayroseb.ani", 0, 1, 0); + } + else obj.sq_PlaySound("R_PW_3ATK"); +} + +function onAfterSetState_ATPriestDashAttack(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashtail.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashdust.ani", 0, 1, 0); + obj.sq_PlaySound("R_PW_3ATK"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dashattack.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atholyflame/holyflame_beffect2_bdodge2.ani", 125, 0, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false); + } + } + break; + } + obj.getVar("cansetAttackInfo").setBool(0, true); +} + +function onTimeEvent_ATPriestDashAttack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + switch(timeEventIndex){ + case 1: + local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0); + if(epObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 2, 100); + colObj.setTimeEvent(1, 1000, 1, true); + return; + } + } + break; + } + break; + } +} + +function onBeforeAttack_ATPriestDashAttack(obj,damager,boundingBox,isStuck) +{ + if(obj.getVar("cansetAttackInfo").getBool(0)){ + obj.getVar("cansetAttackInfo").setBool(0, false); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onAttack_ATPriestDashAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +function onKeyFrameFlag_ATPriestDashAttack(obj, flagIndex) +{} + +function onSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer) +{ + // print("state = "+state); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_effb01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayrosea.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayroseb.ani"), 0, 0); + obj.sq_PlaySound("PW_JUMPATK_DM"); + obj.sq_PlaySound("R_SCYTHE"); + } + else obj.sq_PlaySound("PW_JUMPATK"); +} + +function onAfterSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/jumpattack_effect_jumptail.ani"), 0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jumpattack.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/jumpattack_holyflame_jumpsmoke.ani", 0, 1, 0); + } + } + break; + } + obj.getVar("cansetAttackInfo").setBool(0, true); +} + +function onBeforeAttack_ATPriestJumpAttack(obj,damager,boundingBox,isStuck) +{ + if(obj.getVar("cansetAttackInfo").getBool(0)){ + obj.getVar("cansetAttackInfo").setBool(0, false); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onAttack_ATPriestJumpAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +function onKeyFrameFlag_ATPriestJumpAttack(obj, flagIndex) +{ +} + +function onAfterSetState_ATPriestJump(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local isBackStep = sq_GetVectorData(datas, 1); + if(isBackStep == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ + local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); + if(!timer){ + obj.getVar("ATPriestJumpTimer").clear_ct_vector(); + obj.getVar("ATPriestJumpTimer").push_ct_vector(); + timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + obj.getVar("ATPriestJumpSet").setBool(0, true); + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jump.ani"), 0, 0); + } + break; + } +} + +function onProc_ATPriestJump(obj) +{ + if(!obj) return; + if(obj.getVar("ATPriestJumpSet").getBool(0)){ + local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + local coolTime = sq_GetIntData(obj, SKILL_BYKK_WILLOFINQUISITOR, 14); + if(currentT >= coolTime){ + obj.setSkillCommandEnable(SKILL_BYKK_PATROLBOMB,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_PATROLBOMB) != -1){ + obj.getVar("ATPriestJumpSet").setBool(0, false); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + obj.setSkillCommandEnable(SKILL_BYKK_ESSENCEOFPHLEGE,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_ESSENCEOFPHLEGE) != -1){ + obj.getVar("ATPriestJumpSet").setBool(0, false); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.getVar("ATPriestJumpSet").setBool(0, false); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } + + } +} + +function onEndState_ATPriestJump(obj, new_state) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + if(obj.getVar("ATPriestJumpSet").getBool(0)) obj.getVar("ATPriestJumpSet").setBool(0, false); + break; + } +} + + +function onAfterSetState_ATPriestStand(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + obj.getVar("StaySet").setInt(0, 0); + break; + } +} + +function onProc_ATPriestStand(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){ + local poleAni = obj.getCurrentAnimation(); + local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0); + if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){ + obj.getVar("StaySet").setInt(0, poleAniFrameNumber); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); + if(addAppendage){ + addAppendage.sq_DeleteEffectFront(); + switch(poleAniFrameNumber){ + case 15: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/rest.ani"); break;//rest + case 4: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/stay.ani"); break;//stay + case 8: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/move.ani"); break;//move + } + } + } + } + break; + } +} + +function onEndState_ATPriestStand(obj, new_state) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); + if(addAppendage){ + addAppendage.sq_DeleteEffectFront(); + obj.getVar("StaySet").setInt(0, 0); + } + break; + } +} + +function onAfterSetState_ATPriestDash(obj, state, datas, isResetTimer) +{ + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dash.ani"), 0, 0); + } + break; + } +} + +function onStartDungeon_AtPriest_2bykk(obj) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME); + obj.getVar("isReset").setInt(0, 1); +} + + + + +////////////////////团长 + +function onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox) +{ + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local epObj = activeObj.getVar("EssenceofPhlege").get_obj_vector(0); + if(epObj){ + //character/demonicswordman/2_inquistor/ap_holyflame_hold.nut + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(colObj.getState() >= 20) return; + if(colObj.isExistTimeEvent(1)) colObj.stopTimeEvent(1); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")) CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, colObj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut", true); + sq_HoldAndDelayDie(damager, colObj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + local lifeTimeForBurning = colObj.getVar("custom").getInt(0); + AddAppendage.sq_SetValidTime(lifeTimeForBurning); + sq_EffectLayerAppendage(damager,sq_RGB(0,0,0),255,0,0,lifeTimeForBurning + 500); + sq_SendHitObjectPacket(colObj,damager,0,0,0); + colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + colObj.setTimeEvent(2, lifeTimeForBurning - 500, 1, false); + } + } +} + + +//净化火焰瓶 +function checkExecutableSkill_PatrolBomb(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PATROLBOMB); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_POURESSENCE) > 0 && (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PatrolBomb(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PatrolBomb(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PETROLBOMB_STANDING_BODY); + obj.sq_PlaySound("R_PW_PETROL_BOMB"); + obj.sq_PlaySound("PETROL_BOMB_READY"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_standing_body.ani"), 0, 0); + obj.getVar("PatrolBombSet").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + else obj.getVar("PatrolBombSet").setInt(0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 7), 1, false); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PETROLBOMB_BACKSTEP_BODY); + obj.sq_PlaySound("R_PW_PETROL_BOMB"); + obj.sq_PlaySound("PETROL_BOMB_READY"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_backstep_body.ani"), 0, 0); + obj.getVar("PatrolBombSet").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + else obj.getVar("PatrolBombSet").setInt(0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 4), 1, false); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_MALLEUSMALEFICARUM); + obj.sq_PlaySound("PW_PETROL_BOMB"); + obj.sq_PlaySound("ESSENCE_PHLEGE_EXP"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_backstep_body.ani"), 0, 0); + obj.getVar("PatrolBombSet").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + else obj.getVar("PatrolBombSet").setInt(0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(0, 4), 1, false); + break; + } +} + +function onEndCurrentAni_PatrolBomb(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PatrolBomb(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PatrolBomb(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_PatrolBomb(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PATROLBOMB, 5); + local isFire = obj.getVar("PatrolBombSet").getInt(0); + if(obj.getSkillSubState() == 0) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,51,0,97,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,1,totalDamage,sizeRate,isFire,0,0,0,0,0); + else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,31,1,97,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,1,totalDamage,sizeRate,isFire,0,0,0,0,0); + break; + case 2: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); + local isFire = obj.getVar("PatrolBombSet").getInt(0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,-50,0,0,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,4,totalDamage,isFire,0,0,0,0,0,0); + break; + } +} + +function onEndState_PatrolBomb(obj, new_state) +{ + if(!obj) return; +} + + +//裁决之击 +function checkExecutableSkill_PunishmentBlow(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PUNISHMENTBLOW); + if (isUse){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("PunishmentBlowBool").setBool(2, true); + loadSlot.decreaseLoadCount(1); + } + else obj.getVar("PunishmentBlowBool").setBool(2, false); + } + else obj.getVar("PunishmentBlowBool").setBool(2, false); + obj.sq_IntVectClear(); + if(obj.getState() == STATE_JUMP){ + obj.getVar("PunishmentBlowSet").setInt(1, sq_GetZPos(obj)); + obj.sq_IntVectPush(1); + } + else if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PunishmentBlow(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PunishmentBlow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_A); + obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("PunishmentBlowBool").setBool(0, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 3000 / currentAni.getDelaySum(0, 0); + currentAni.setSpeedRate(speedRate.tofloat() * 2.0); + obj.sq_PlaySound("R_PW_PUNISHMENT_BLOW_01"); + obj.sq_PlaySound("PUNISHMENT_BLOW_JUMP"); + if(obj.getVar("PunishmentBlowBool").getBool(2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_a.ani"), 0, 0); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_B); + obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("PunishmentBlowBool").setBool(0, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 3000 / currentAni.getDelaySum(0, 0); + currentAni.setSpeedRate(speedRate.tofloat() * 3.0); + if(obj.getVar("PunishmentBlowBool").getBool(2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_b.ani"), 0, 0); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_ATTACK); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + print(speedRate); + currentAni.setSpeedRate(speedRate * 3.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_ATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("PunishmentBlowBool").getBool(2)) { + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pslash_01.ani", 0, 2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pslash_02.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/floor.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/dust.ani", 0, -2, 0); + obj.sq_PlaySound("R_PW_PUNISHMENT_BLOW_02"); + if(obj.getVar("PunishmentBlowBool").getBool(2)){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/psaintfire_01.ani", 0, 2, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_attack.ani"), 0, 0); + obj.sq_PlaySound("PUNISHMENT_BLOW_FLAME"); + } + else obj.sq_PlaySound("PUNISHMENT_BLOW"); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOWDASH_BODY); + obj.sq_PlaySound("PUNISHMENT_BLOW_DASH"); + if(obj.getVar("PunishmentBlowBool").getBool(2)){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pendfire_01.ani", -200, 2, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblowdash_body.ani"), 0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("PunishmentBlowBool").setBool(0, true); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -50, -30, -5, 250, 60, 155); + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_FIRECONFESSION, 3, sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION)); + bonusRate = bonusRate.tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_DASHATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("PunishmentBlowBool").getBool(2)) { + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOWDASHATTACK_BODY); + if(obj.getVar("PunishmentBlowBool").getBool(2)){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfireconfession/punishmentblowdashattack_dashsmokea.ani", 0, 2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfireconfession/punishmentblowdashattack_dashsmokeb.ani", 0, -1, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblowdashattack_body.ani"), 0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_ATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("PunishmentBlowBool").getBool(2)) { + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } + +} + +function onEndCurrentAni_PunishmentBlow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.getVar("PunishmentBlowSet").setInt(1, sq_GetZPos(obj)); + case 1: + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PunishmentBlow(obj) +{ + if(!obj) return; +} + +function onProc_PunishmentBlow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + if(obj.getVar("PunishmentBlowBool").getBool(0)){ + local vx = sq_GetUniformVelocity(0, 50, stateTime, fullTime); + local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.getVar("PunishmentBlowBool").setBool(0, false); + } + local vz = sq_GetAccel(0, 100, stateTime, fullTime / 2, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 1: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + if(obj.getVar("PunishmentBlowBool").getBool(0)){ + local vx = sq_GetUniformVelocity(0, 50, stateTime, fullTime); + local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.getVar("PunishmentBlowBool").setBool(0, false); + } + local vz = sq_GetAccel(obj.getVar("PunishmentBlowSet").getInt(1), 0, stateTime, fullTime, false); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + if(obj.getVar("PunishmentBlowBool").getBool(0)){ + local vx = sq_GetUniformVelocity(0, 200, stateTime, fullTime); + local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.getVar("PunishmentBlowBool").setBool(0, false); + } + obj.setSkillCommandEnable(SKILL_BYKK_PUNISHMENTBLOW,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_PUNISHMENTBLOW) != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_AUTO, true); + return false; + } + break; + } +} + +function onKeyFrameFlag_PunishmentBlow(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + } + return true; +} + +function onTimeEvent_PunishmentBlow(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_PunishmentBlow(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_PUNISHMENTBLOW){ + sq_SimpleMoveToNearMovablePos(obj,200); + obj.getVar("PunishmentBlowBool").setBool(1, false); + } +} + +function onAttack_PunishmentBlow(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getSkillSubState() == 2){ + if(obj.getVar("PunishmentBlowBool").getBool(2)) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + +//火焰精华 +function checkExecutableSkill_EssenceofPhlege(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ESSENCEOFPHLEGE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_POURESSENCE) > 0 && (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_EssenceofPhlege(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_EssenceofPhlege(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ESSENCEOFPHLEGE_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ESSENCEOFPHLEGEAIR_BODY); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_POURESSENCE_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_EssenceofPhlege(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_EssenceofPhlege(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_EssenceofPhlege(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101://`throw bottle` 56 0 95 + obj.getVar("EssenceofPhlegeObj").clear_obj_vector(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); + local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); + local lifeTimeForLanding = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 9); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,56,0,95,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,1,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0); + break; + case 102://`throw bottle` 38 0 89 + obj.getVar("EssenceofPhlegeObj").clear_obj_vector(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); + local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); + local lifeTimeForLanding = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 9); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,38,0,89,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,1,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0); + break; + case 103:// + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); + local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 19); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,2,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_EssenceofPhlege(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_EssenceofPhlege(obj, new_state) +{ + if(!obj) return; +} + + +//神焰 +function checkExecutableSkill_HolyFlame(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYFLAME); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLAME, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HolyFlame(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HolyFlame(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYFLAME_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYFLAME, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 10); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_HOLYFLAME,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); + obj.sq_PlaySound("R_PW_HOLY_FLAME"); + break; + } +} + +function onEndCurrentAni_HolyFlame(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_HolyFlame(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_HolyFlame(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 102: + sq_SetMyShake(obj, 2, 100); + sq_flashScreen(obj,20,100,80,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(!loadSlot){ + local loadNumber = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY); + if(skillLevel > 0) loadNumber = loadNumber + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 0, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) loadNumber = loadNumber + 2; + obj.sq_AddSkillLoad(SKILL_BYKK_HOLYFLAME, 147, loadNumber, 5000); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut", true); + local burnTime = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 1); + AddAppendage.getVar("custom").setInt(0, burnTime); + } + } + else{ + local nowNumber = loadSlot.getRemainLoadNumber(); + local loadNumber = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY); + if(skillLevel > 0) loadNumber = loadNumber + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 0, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) loadNumber = loadNumber + 2; + if(nowNumber < loadNumber){ + loadSlot.increaseLoadCount(loadNumber - nowNumber); + } + // obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME); + } + break; + } + return true; +} + +function onTimeEvent_HolyFlame(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_HolyFlame(obj, new_state) +{ + if(!obj) return; +} + + +//审判重击 +function checkExecutableSkill_JudgmentBlow(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_JUDGMENTBLOW); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_JUDGMENTBLOW, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_JudgmentBlow(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_JudgmentBlow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + local atkIndex = ATPATK_BYKK_JUDGMENTBLOW; + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYFLAME_JUDGMENTBLOW); + atkIndex = ATPATK_BYKK_HOLYFLAME_JUDGMENTBLOW; + loadSlot.decreaseLoadCount(1); + obj.getVar("JudgmentBlowSet").setInt(0, 1); + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_JUDGMENTBLOW_BODY); + obj.getVar("JudgmentBlowSet").setInt(0, 0); + } + } + else{ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_JUDGMENTBLOW_BODY); + obj.getVar("JudgmentBlowSet").setInt(0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("JudgmentBlowSet").getInt(0) > 0) { + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } +} + +function onEndCurrentAni_JudgmentBlow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_JudgmentBlow(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_JudgmentBlow(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_att1_01.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_stone_6.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_JUDGMENTBLOW, 0); + local isFire = obj.getVar("JudgmentBlowSet").getInt(0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,1,totalDamage,sizeRate,isFire,0,0,0,0,0); + sq_SetMyShake(obj, 5, 80); + break; + case 102: + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + obj.sq_PlaySound("JUDGMENT_BLOW"); + break; + case 111://69 + sq_SetMyShake(obj, 2, 120); + sq_flashScreen(obj,0,80,40,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 112: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_att2_02.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_stone_6.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_JUDGMENTBLOW, 0); + local isFire = obj.getVar("JudgmentBlowSet").getInt(0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,1,totalDamage,sizeRate,isFire,0,0,0,0,0); + sq_SetMyShake(obj, 12, 120); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION); + if(skillLevel > 0){ + local addTime = sq_GetIntData(obj, SKILL_BYKK_FIRECONFESSION, 11); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_FIRECONFESSION, 12); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 0, 1.0); + totalDamage = totalDamage + totalDamage2 + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FIRECONFESSION, -1, 4, 1.0); + totalDamage = totalDamage * bonusRate / 1000; + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,2,totalDamage,sizeRate,isFire,hitMax,addTime,0,0,0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,3,sizeRate,0,0,0,0,0,0,0); + } + break; + case 113: + obj.sq_PlaySound("JUDGMENT_BLOW_FLAME"); + break; + } + return true; +} + +function onTimeEvent_JudgmentBlow(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_JudgmentBlow(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_JudgmentBlow(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("JudgmentBlowSet").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//神焰斩 +function checkExecutableSkill_Summarytiral(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUMMARYTIRAL); + if (isUse){ + obj.getVar("Summarytiral").setInt(1, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + loadSlot.decreaseLoadCount(1); + obj.getVar("Summarytiral").setInt(1, 1); + } + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SUMMARYTIRAL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Summarytiral(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Summarytiral(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_PIERCE_ATK1); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("Summarytiral").setInt(0, 0); + obj.getVar("SummarytiralTar").clear_obj_vector(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUMMARYTIRAL, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALPIERCE)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + print("test : "+obj.getVar("Summarytiral").getInt(1)); + if(obj.getVar("Summarytiral").getInt(1) > 0) { + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_pierce_atk1.ani"), 0, 0); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_NOMAL_ATTACK2); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUMMARYTIRAL, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALNOMALSWING)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Summarytiral").getInt(1) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_nomal_attack2.ani"), 0, 0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 2); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/normal/statk1fire_firedodge.ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat() * 0.9); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_INCINERATION_ATTACK2); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUMMARYTIRAL, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALINCINERATIONSWING)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Summarytiral").getInt(1) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_incineration_attack2.ani"), 0, 0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 2); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/incineration/statk2fire_fire01.ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + } +} + +function onEndCurrentAni_Summarytiral(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("SummarytiralTar").get_obj_vector_size() > 0){ + obj.setTimeEvent(1, 200, 1, false); + return; + } + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Summarytiral(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Summarytiral(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 201: + if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_SWISH_FLAME"); + else obj.sq_PlaySound("SUMMARY_TIRAL_SWISH"); + break; + case 202: + sq_SetMyShake(obj, 5, 240); + break; + case 203: + //`purification enable` + obj.getVar("PurificationEnable").setBool(0, true); + break; + case 204: + //`SwingEndHolyFlameEffect` -11 0 -21 + if(obj.getVar("Summarytiral").getInt(1) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/normal/statk1endfire_01.ani", -11, 0, -21); + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + case 301://flag=2 + //`HoldMonsterMovePos` 166 0 -20 + local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(2, 2); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 166, 0, -20, delay, true, addAppendage); + } + } + } + //`CreateHoleEffect` 136 0 -66 + //`CreateDustEffect` 108 0 -103 + break; + case 302://flag=3 + sq_SetMyShake(obj, 5, 160); + //`HoldMonsterMovePos` 153 0 -40 + local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 3); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 153, 0, -40, delay, true, addAppendage); + } + } + } + if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_DOWN_FLAME"); + else obj.sq_PlaySound("SUMMARY_TIRAL_DOWN"); + break; + case 303://flag=7 + local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7, 7); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 213, 0, 10, delay, true, addAppendage); + } + } + } + //`HoldMonsterMovePos` 213 0 10 + //`CreateDustEffect` 192 0 -43 + //`RemoveHoleEffect` 162 0 -91 + if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_UP_FLAME"); + else obj.sq_PlaySound("SUMMARY_TIRAL_UP"); + break; + case 304://flag=8 + local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(8, 8); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 199, 0, 50, delay, true, addAppendage); + } + } + } + //`HoldMonsterMovePos` 199 0 50 + //`HoldMonsterCutting` 192 0 14 + break; + case 305://flag=9 + sq_flashScreen(obj,0,80,240,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + break; + case 306://flag=10 + sq_SetMyShake(obj, 5, 240); + break; + case 307://flag=11 + //`holy flame enable` 0 0 0 + obj.getVar("HolyFlameEnable").setBool(0, true); + //`purification enable` 0 0 0 + obj.getVar("PurificationEnable").setBool(0, true); + break; + } + return true; +} + +function onTimeEvent_Summarytiral(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + if(obj.getVar("Summarytiral").getInt(0) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SUMMARYTIRAL, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Summarytiral(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SUMMARYTIRAL){ + local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + // if(AddAppendage && !sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), 300, true, AddAppendage); + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_summarytiral_hold.nut"); + } + } + } + } +} + +function onAttack_Summarytiral(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("Summarytiral").getInt(1) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + if(!obj.getVar("SummarytiralTar").is_obj_vector(damager)) obj.getVar("SummarytiralTar").push_obj_vector(damager); + local currentAni = obj.getCurrentAnimation(); + local frameIndex = sq_GetCurrentFrameIndex(obj); + local delay = currentAni.getDelaySum(frameIndex, 4); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){ + if(obj.getVar("Summarytiral").getInt(0) != 1) obj.getVar("Summarytiral").setInt(0, 1); + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); + if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 151, 0, 52, delay, true, AddAppendage); + return; + } + else{ + local apdPath = "character/demonicswordman/2_inquistor/ap_summarytiral_hold.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 151, 0, 52, delay, true, AddAppendage); + } + + + + } + break; + } +} + + +//神焰洗礼 +function checkExecutableSkill_FlameOfBaptism(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMEOFBAPTISM); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FLAMEOFBAPTISM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlameOfBaptism(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlameOfBaptism(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_FLAMEOFBAPTISM_BODY); + obj.sq_PlaySound("PW_FLAME_BAPTISM_01"); + obj.sq_PlaySound("FLAME_BAPTISM_SPLASH"); + obj.getVar("FlameOfBaptism").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("FlameOfBaptism").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_FlameOfBaptism(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlameOfBaptism(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FlameOfBaptism(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMEOFBAPTISM, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMEOFBAPTISM, 2); + local sub = obj.getVar("FlameOfBaptism").getInt(0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_FLAMEOFBAPTISM,1,totalDamage,sizeRate,speedRate,sub,0,0,0,0); + break; + case 102: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atflameofbaptism/flameofbaptismback_24.ani", 0, -1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMEOFBAPTISM, 2); + local rangeX = 290 * sizeRate / 100, rangeY = 70 * sizeRate / 100;; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); + local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); + sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 19); + local sub = obj.getVar("FlameOfBaptism").getInt(0); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY) { + local group = sq_GetGroup(object); + local uniqueId = sq_GetUniqueId(object); + local aObj = object.getVar("EssenceofPhlege").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getState() >= 20) continue; + else colObj.setTimeEvent(1, 1000, 1, true); + } + createSkillPassive_ATPriest_bykk(obj,object,PASSIVEOBJ_BYKK_ATPRIEST,0,1,sq_GetZPos(object) + sq_GetHeightObject(object) / 2 - sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,3,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,group,uniqueId,0,0); + } + } + } + break; + case 103: + sq_SetShake(obj, 3, 250); + break; + case 104: + obj.sq_PlaySound("PW_FLAME_BAPTISM_02"); + obj.sq_PlaySound("FLAME_BAPTISM_FIRE"); + break; + } + return true; +} + +function onTimeEvent_FlameOfBaptism(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FlameOfBaptism(obj, new_state) +{ + if(!obj) return; +} + + +//神焰怒火 +function checkExecutableSkill_Virtuousfury(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VIRTUOUSFURY); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_VIRTUOUSFURY, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Virtuousfury(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Virtuousfury(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.getVar("FlameOfBaptism").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("FlameOfBaptism").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + local flashScreenObj = sq_flashScreen(obj,80,99990,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Virtuousfury_Flashobj").clear_obj_vector(); + obj.getVar("Virtuousfury_Flashobj").push_obj_vector(flashScreenObj); + } + } + if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIRTUOUSFURY_HOLYFLAME_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/virtuousfury_holyflame_body.ani"), 0, 0); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIRTUOUSFURY_NORMAL_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("VirtuousfuryBool").setBool(0, true); + break; + } +} + +function onEndCurrentAni_Virtuousfury(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Virtuousfury(obj) +{ + if(!obj) return; + if(obj.getVar("VirtuousfuryBool").getBool(0)){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.getVar("VirtuousfuryBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + } +} + +function onKeyFrameFlag_Virtuousfury(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 103: + case 203: + local atkIndex = ATPATK_BYKK_VIRTUOUSFURY_NORMAL; + if(obj.getVar("FlameOfBaptism").getInt(0) > 0) atkIndex = ATPATK_BYKK_VIRTUOUSFURY_HOLYFLAME; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIRTUOUSFURY, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 104: + case 204: + //`loop start` + break; + case 107: + case 207: + case 113: + case 213: + case 117: + case 217: + case 119: + case 219: + obj.resetHitObjectList(); + break; + case 124: + case 224: + if(obj.getVar("VirtuousfuryBool").getBool(0)) obj.getVar("VirtuousfuryBool").setBool(0, false); + break; + case 125: + case 225: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIRTUOUSFURY, -1, 1, 1.0); + local atkIndex = ATPATK_BYKK_VIRTUOUSFURY_LAST_NORMAL; + if(obj.getVar("FlameOfBaptism").getInt(0) > 0) atkIndex = ATPATK_BYKK_VIRTUOUSFURY_LAST_HOLYFLAME; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + obj.sq_PlaySound("R_PW_VIRTUOUS_FURY"); + break; + case 126: + case 226: + if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ + //`off flash` + local flashScreenObj = obj.getVar("Virtuousfury_Flashobj").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + sq_flashScreen(obj,0,80,160,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + } + else sq_flashScreen(obj,0,60,300,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 360); + obj.resetHitObjectList(); + break; + case 128: + case 228: + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + case 230: + //`add holy flame off effect` + if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvirtuousfury/holyflame/vfsaintendfire_endfire01.ani", 0, 1, 0); + } + //`remove holy flame weapon effect` + break; + } + return true; +} + +function onTimeEvent_Virtuousfury(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Virtuousfury(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Virtuousfury(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("FlameOfBaptism").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//行刑 +function checkExecutableSkill_Decollation(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DECOLLATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DECOLLATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Decollation(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Decollation(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.getVar("Decollation").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("Decollation").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + } + if(obj.getVar("Decollation").getInt(0) > 0){ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DECOLLATIONFIREBODY_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/decollationfirebody_body.ani"), 0, 0); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_DECOLLATIONNORMAL_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Decollation(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Decollation(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Decollation(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 102: + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DECOLLATION_PUSH)); + obj.getVar("DecollationBool").setBool(0, true); + break; + case 107: + sq_SetMyShake(obj, 2, 160); + local flashScreenObj = sq_flashScreen(obj,80,99990,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Decollation_Flashobj").clear_obj_vector(); + obj.getVar("Decollation_Flashobj").push_obj_vector(flashScreenObj); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7, 10); + local delay2 = currentAni.getDelaySum(11, 12); + sq_flashScreen(obj,120,delay,delay2,102, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 115: + obj.getVar("DecollationBool").setBool(0, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DECOLLATION, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DECOLLATION)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Decollation").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 116: + sq_SetMyShake(obj, 5, 320); + //off flash + local flashScreenObj = obj.getVar("Decollation_Flashobj").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + // sq_flashScreen(obj,0,0,80,102, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj,0,0,320,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 117: + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + case 120: + //`add holy flame off effect` + if(obj.getVar("Decollation").getInt(0) > 0){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdecollation/decollationendfire_endfire_01.ani", 0, 1, 0); + } + break; + } + return true; +} + +function onTimeEvent_Decollation(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Decollation(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Decollation(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("Decollation").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + if(obj.getVar("DecollationBool").getBool(0)){ + + } + } +} + + +//神焰漩涡 +function checkExecutableSkill_VortexOfHellFire(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VORTEXOFHELLFIRE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_VortexOfHellFire(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_VortexOfHellFire(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYREADY_00); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("VortexOfHellFire").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("VortexOfHellFire").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyready_00.ani"), 0, 0); + } + } + obj.startRapidInput(); + obj.getVar("VortexOfHellFire").setInt(1, 0); + obj.getVar("VortexOfHellFire").setInt(2, 0); + break; + case 1: + // local atkIndex = ATPATK_BYKK_VORTEXOFHELLFIRELOOP; + local sub = obj.getVar("VortexOfHellFire").getInt(0); + if(sub > 0){ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYLOOP_00_HOLYFRAME); + // atkIndex = ATPATK_BYKK_VORTEXOFHELLFIRELOOP_HOLYFRAME; + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyloop_00_holyframe.ani"), 0, 0); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYLOOP_00); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atvortexofhellfire/loop/vortexofhellfireeffloop_00.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VORTEXOFHELLFIRE, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + sq_ClearAttackBox(currentAni); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_VORTEXOFHELLFIRE,1,totalDamage,sizeRate,speedRate,sub,0,0,0,0); + if(obj.getVar("VortexOfHellFire").getInt(2) == 0){ + obj.getVar("VortexOfHellFire").setInt(2, 1); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loop/vortexofhellfireeffloop_00.ani"; + local pooledObj = createOnlyDrawObjectEX_ATPriest_bykk(obj,aniPath,false,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + sq_moveWithParent(obj, pooledObj); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setLoop(true); + pAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("VortexOfHellFireEffect").clear_obj_vector(); + obj.getVar("VortexOfHellFireEffect").push_obj_vector(pooledObj); + } + if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 20, -1, false); + break; + case 2: + obj.stopTimeEvent(1); + local sub = obj.getVar("VortexOfHellFire").getInt(0); + if(sub > 0){ + obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYEND_00_HOLYFRAME); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyend_00_holyframe.ani"), 0, 0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/endfire/vortexofhellfireatkfire_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/endfire/vortexofhellfireatksmoke_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYEND_00); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VORTEXOFHELLFIRE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + sq_ClearAttackBox(currentAni); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_VORTEXOFHELLFIRE,2,totalDamage,sizeRate,speedRate,sub,0,0,0,0); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_eff.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_smoke00.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_smoke01.ani", 0, -1, 0); + break; + } +} + +function onEndCurrentAni_VortexOfHellFire(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + sq_SetMyShake(obj, 3, 80); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true); + break; + case 1: + local roundMax = 5; + if(obj.getRapidInputFrequency() > 0) roundMax = 10; + if(obj.getVar("VortexOfHellFire").getInt(1) + 1 >= roundMax){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true); + } + else{ + obj.getVar("VortexOfHellFire").setInt(1, obj.getVar("VortexOfHellFire").getInt(1) + 1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true); + } + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_VortexOfHellFire(obj) +{ + if(!obj) return; +} + +function onProc_VortexOfHellFire(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + obj.setSkillCommandEnable(SKILL_BYKK_VORTEXOFHELLFIRE,true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_VORTEXOFHELLFIRE) != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) + obj.addRapidInput(); +} + +function onKeyFrameFlag_VortexOfHellFire(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + obj.resetHitObjectList(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + if(obj.getRapidInputFrequency() > 0){ + currentAni.setSpeedRate(speedRate.tofloat() * 1.5); + local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0); + if(pooledObj){ + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat() * 1.5); + } + } + if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfirea_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokea_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + case 1: + if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfireb_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokeb_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + case 2: + // if(obj.getRapidInputFrequency() > 0) obj.resetHitObjectList(); + if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfirec_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokec_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + case 3: + if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfired_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmoked_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + case 100: + //`EndEffectCorrection` + local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + break; + case 101: + obj.sq_PlaySound("PW_VORTEX_HELL_FIRE"); + sq_SetMyShake(obj, 8, 200); + break; + case 102: + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + case 106: + //`add holy flame end effect` + if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_fireend01.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_fireend02.ani", 0, -1, 0); + } + break; + } + return true; +} + +function onTimeEvent_VortexOfHellFire(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + if(obj.isMyControlObject()){ + local speed = 400.0; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 0, speed); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 0, -speed); + else sq_SetVelocity(obj, 0, 0.0); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, -speed * 0.2); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed * 0.2); + else sq_SetVelocity(obj, 1, 0.0); + } + break; + } +} + +function onEndState_VortexOfHellFire(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_VORTEXOFHELLFIRE){ + local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + } +} + +function onAttack_VortexOfHellFire(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("VortexOfHellFire").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//净化之焰 +function checkExecutableSkill_Purification(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PURIFICATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Purification(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Purification(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PURIFICATION_LOOP_BODY); + obj.getVar("PurificationSet").setInt(0, 0); + obj.getVar("PurificationTar").clear_obj_vector(); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/purification_loop_body.ani"), 0, 0); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_PURIFICATION_END_BODY); + local sub = 0; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + sub = 1; + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/purification_end_body.ani"), 0, 0); + } + local size = obj.getVar("PurificationTar").get_obj_vector_size(); + print("size = "+size); + if(size > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PURIFICATION, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PURIFICATION, 2); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("PurificationTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE) createSkillPassive_ATPriest_bykk(obj,targetObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_PURIFICATION,1,totalDamage,sizeRate,sub,0,0,0,0,0); + } + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Purification(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Purification(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Purification(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/passiveskill/ap_brandofheresy_debuff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut", true); + sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(1500); + } + if(!obj.getVar("PurificationTar").is_obj_vector(object)) obj.getVar("PurificationTar").push_obj_vector(object); + obj.getVar("PurificationSet").setInt(0, obj.getVar("PurificationSet").getInt(0) + 1); + } + } + } + if(obj.getVar("PurificationSet").getInt(0) > 3){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + } + else obj.getVar("PurificationSet").setInt(0, obj.getVar("PurificationSet").getInt(0) + 1); + break; + } + return true; +} + +function onTimeEvent_Purification(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Purification(obj, new_state) +{ + if(!obj) return; +} + diff --git a/user/116.205.165.25/2_atpriest_5.c b/user/116.205.165.25/2_atpriest_5.c new file mode 100644 index 0000000..909481c --- /dev/null +++ b/user/116.205.165.25/2_atpriest_5.c @@ -0,0 +1,2969 @@ + +//裁决轮回斩 +function checkExecutableSkill_Dismember(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DISMEMBER); + if (isUse){ + obj.getVar("Dismember").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("Dismember").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + } + obj.sq_IntVectClear(); + if(obj.getState() == STATE_JUMP) obj.sq_IntVectPush(6); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DISMEMBER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Dismember(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Dismember(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_1_UPPERHIT_READYBODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/upperhit_slash_dodge02.ani", 0, 2, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(obj.getVar("Dismember").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_1_upperhit_readybody.ani"), 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/upperhitfire_fire02.ani", 0, 2, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + return; + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_2_UPPERHIT_JUMPBODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/upperjumpdust.ani", 0, -1, 0); + if(obj.getVar("Dismember").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_2_upperhit_jumpbody.ani"), 0, 0); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DISMEMBER, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DISMEMBER_UPPER)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Dismember").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + obj.sq_PlaySound("PW_DISMEMBER_01"); + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_3_SPINHIT_SPINBODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/spinhit_slash_dodge03.ani"), 0, 0); + if(obj.getVar("Dismember").getInt(0) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_3_spinhit_spinbody.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DISMEMBER, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DISMEMBER_SPINATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Dismember").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_4_SPINHIT_DROPBODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/spinhit_slash_dodge03.ani"), 0, 0); + if(obj.getVar("Dismember").getInt(0) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_4_spinhit_dropbody.ani"), 0, 0); + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_5_DOWNHIT_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/downhit_slash_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/downhit_slash_normal.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/downhitdustfront_01.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/downhitdustback_01.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/downhit_dust01.ani", 0, -1, 0); + if(obj.getVar("Dismember").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_5_downhit_body.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/downhitfire_smoke.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/downhitfire_smoke.ani", 0, -1, 0); + } + else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/downhitfloor_crack.ani", 0, -1, 0); + sq_flashScreen(obj,0,100,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DISMEMBER, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DISMEMBER_DOWNBLOW)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Dismember").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 5: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_6_FINISHHIT_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/finishhit_slash_dodge02.ani"), 0, 0); + if(obj.getVar("Dismember").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_6_finishhit_body.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/finishhitfire_fire02.ani"), 0, 0); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DISMEMBER, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DISMEMBER_FINISHBLOW)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Dismember").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 6: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_3_BACKSTEP_BODYSPIN); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/backstep_slash_dodge02.ani"), 0, 0); + if(obj.getVar("Dismember").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_3_backstep_bodyspin.ani"), 0, 0); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DISMEMBER, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DISMEMBER_SPINATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("Dismember").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 7: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_DISMEMBER_4_BACKSTEP_BODYDROP); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdismember/backstep_slash_dodge02.ani"), 0, 0); + if(obj.getVar("Dismember").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dismember_4_backstep_bodydrop.ani"), 0, 0); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 3 || subState == 7){ + obj.getVar("Dismember").setInt(1, sq_GetXPos(obj)); + obj.getVar("Dismember").setInt(2, 120); + obj.getVar("Dismember").setInt(3, 0); + obj.getVar("Dismember").setInt(4, sq_GetZPos(obj)); + } +} + +function onEndCurrentAni_Dismember(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 6: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_DISMEMBER, STATE_PRIORITY_AUTO, true); + break; + case 4: + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 7: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(STATE_BYKK_DISMEMBER, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Dismember(obj) +{ + if(!obj) return; +} + +function onProc_Dismember(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + local v = sq_GetAccel(0, 120, stateTime, delaySum, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 3: + case 7: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + local v = sq_GetAccel(obj.getVar("Dismember").getInt(4), 0, stateTime, delaySum, false); + sq_setCurrentAxisPos(obj, 2, v); + local vx = sq_GetAccel(obj.getVar("Dismember").getInt(3), obj.getVar("Dismember").getInt(2), stateTime, delaySum, false); + local offSetX = sq_GetDistancePos(obj.getVar("Dismember").getInt(1), sq_GetDirection(obj), vx); + if(obj.isMovablePos(offSetX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, offSetX); + else{ + obj.getVar("Dismember").setInt(1, sq_GetXPos(obj)); + obj.getVar("Dismember").setInt(2, 120); + obj.getVar("Dismember").setInt(3, 0); + } + break; + } +} + +function onKeyFrameFlag_Dismember(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 201: sq_SetMyShake(obj, 3, 50); break; + case 301: + //`draw holy flame spin effect` + if(obj.getVar("Dismember").getInt(0) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/spinhitfire_fire03.ani", 0, 0, 0); + break; + case 302: + obj.resetHitObjectList(); + break; + case 1301: + //`draw holy flame spin effect` + if(obj.getVar("Dismember").getInt(0) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/spinhitfire_fire03.ani", 0, 0, 0); + break; + case 1302: + //`draw holy flame spin effect` + if(obj.getVar("Dismember").getInt(0) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdismember/spinhitfire_fire03.ani", 0, 0, 0); + obj.resetHitObjectList(); + break; + case 1303: + obj.resetHitObjectList(); + break; + case 501: + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + case 601: + obj.sq_PlaySound("PW_DISMEMBER_02"); + sq_flashScreen(obj,0,50,100,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 60); + break; + case 602: + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + } + return true; +} + +function onTimeEvent_Dismember(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Dismember(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Dismember(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("Dismember").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//车轮刑 +function checkExecutableSkill_WheelOfPunishment(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WHEELOFPUNISHMENT); + if (isUse){ + obj.getVar("WheelOfPunishment").setInt(0, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() > 0){ + obj.getVar("WheelOfPunishment").setInt(0, 1); + loadSlot.decreaseLoadCount(1); + } + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_WHEELOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_WheelOfPunishment(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_WheelOfPunishment(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_WHEELOFPUNISHMENT_START_BODY); + if(obj.getVar("WheelOfPunishment").getInt(0) > 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/wheelofpunishment_start_body.ani"), 0, 0); + } + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwheelofpunishment/attack2fire_1.ani", 0, 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WHEELOFPUNISHMENT, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_WHEELOFPUNISHMENT_FIRST)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("WheelOfPunishment").getInt(0) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_WheelOfPunishment(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_WheelOfPunishment(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_WheelOfPunishment(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_flashScreen(obj,0,80,80,51, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 5, 160); + break; + case 102: + //`add fire effect` + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwheelofpunishment/floor_7.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 103: + sq_SetMyShake(obj, 5, 160); + break; + case 104: + //`create wheel` + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WHEELOFPUNISHMENT, -1, 1, 1.0); + local totalDamage_Exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WHEELOFPUNISHMENT, -1, 2, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_WHEELOFPUNISHMENT, 5); + local hitMax = 25; + local sub = 0; + if(obj.getVar("WheelOfPunishment").getInt(0) > 0) sub = 1; + // local currentAni = obj.getCurrentAnimation(); + // local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local sub = obj.getVar("WheelOfPunishment").getInt(0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_WHEELOFPUNISHMENT,1,totalDamage,totalDamage_Exp,sizeRate,hitMax,sub,0,0,0); + break; + } + return true; +} + +function onTimeEvent_WheelOfPunishment(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_WheelOfPunishment(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_WheelOfPunishment(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("WheelOfPunishment").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//补赎逆十字 +function checkExecutableSkill_EradicateCross(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ERADICATECROSS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_ERADICATECROSS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_EradicateCross(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_EradicateCross(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ERADICATECROSS_READY_BODY); + sq_flashScreen(obj,80,240,0,165, sq_RGB(0,0,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ERADICATECROSS_ATTACK1_BODY); + sq_flashScreen(obj,0,240,0,165, sq_RGB(0,0,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ERADICATECROSS, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_ERADICATECROSS_ATTACK1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ERADICATECROSS_ATTACK2_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 4), 1, false); + sq_flashScreen(obj,0,320,0,165, sq_RGB(0,0,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ERADICATECROSS, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_ERADICATECROSS_ATTACK2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_ERADICATECROSS_END_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_EradicateCross(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_ERADICATECROSS, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_EradicateCross(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_EradicateCross(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + sq_SetMyShake(obj, 3, 100); + break; + case 102: + sq_flashScreen(obj,0,0,80,255, sq_RGB(0,0,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + //`Slash1` + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/ateradicatecross/slash1/slash1_front_00.ani", 300, 1, 0); + //`Slash1Effect` + break; + case 201: + sq_flashScreen(obj,50,40,50,255, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 17, 200); + //`Slash2` + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/ateradicatecross/slash2/slash2_front_00.ani", 300, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/ateradicatecross/slash2/slash2_back_00.ani", 300, -1, 0); + //`Slash2Effect` + break; + case 202: + //`holy flame enable` + obj.getVar("HolyFlameEnable").setBool(0, true); + obj.getVar("PurificationEnable").setBool(0, true); + break; + } + return true; +} + +function onTimeEvent_EradicateCross(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local sub = 0; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) sub = 1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ERADICATECROSS, -1, 2, 1.0); + local hitMax = 20; + local lifeTime = 2000; + obj.getVar("EradicateCrossObj").clear_obj_vector(); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,150,0,0,obj.getDirection(),2,SKILL_BYKK_ERADICATECROSS,1,totalDamage,hitMax,lifeTime,sub,0,0,0,0); + break; + } +} + +function onEndState_EradicateCross(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_EradicateCross(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } +} + + +//火刑 +function checkExecutableSkill_BurnAtTheStake(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BURNATTHESTAKE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BURNATTHESTAKE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BurnAtTheStake(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BurnAtTheStake(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_CAST_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_cast_body.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cast_effect_1.ani", 0, 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BURNATTHESTAKE) >= 3) sq_SendMessage(obj, 0, 1, 0); + obj.sq_PlaySound("R_PW_BURN_STAKE_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_A_START_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_a_start_body.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BURNATTHESTAKE, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_BURNATTHESTAKE_FIRST)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_B_MOVE_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_b_move_body.ani"), 0, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_C_JUMP_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_c_jump_body.ani"), 0, 0); + break; + case 4: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_D_SLOWJUMP_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_d_slowjump_body.ani"), 0, 0); + break; + case 5: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_E_FALL_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_e_fall_body.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BURNATTHESTAKE, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_BURNATTHESTAKE_DOWN)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 6: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_F_MOVEBACK_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_f_moveback_body.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/01front_a1.ani","character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/02crossfront_1.ani","character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/02frontfrie_1.ani","character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/03cross_q1.ani","character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/04crossback_1.ani","character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/05sky_1.ani","character/swordman/effect/animation/1_atpriest_bykk/atburnatthestake/cross/06back_backobject_03.ani"]; + local offSetY = [1,1,2,-1,-1,0,-1]; + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, offSetY[i], 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local bonusRate = 1.0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BURNATTHESTAKE) >= 6) bonusRate = 1.1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BURNATTHESTAKE, -1, 2, bonusRate); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_BURNATTHESTAKE, 4); + local sub = 0; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) sub = 1; + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_BURNATTHESTAKE,1,totalDamage,hitTime,sub,speedRate,0,0,0,0); + obj.sq_PlaySound("R_PW_BURN_STAKE_02"); + return; + break; + case 7: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_BURNATTHESTAKE_FINISH_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("/effect/animation/1_atpriest_bykk/holyflameweaponeffect/burnatthestake_finish_body.ani"), 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_BurnAtTheStake(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + if(subState == 5) sq_SetMyShake(obj, 7, 130); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_BURNATTHESTAKE, STATE_PRIORITY_AUTO, true); + break; + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BurnAtTheStake(obj) +{ + if(!obj) return; +} + +function onProc_BurnAtTheStake(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 3: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + local v = sq_GetAccel(0, 125, stateTime, fullTime, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 4: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + local v = sq_GetAccel(125, 150, stateTime, fullTime, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 5: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + local v = sq_GetAccel(150, 0, stateTime, fullTime, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onKeyFrameFlag_BurnAtTheStake(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_SetXScrollStart(50, 0); + local offSetX = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -50); + sq_setCurrentAxisPos(obj, 0, offSetX); + break; + } + return true; +} + +function onTimeEvent_BurnAtTheStake(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BurnAtTheStake(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_BURNATTHESTAKE){ + obj.sq_SetXScrollStop(0); + sq_SimpleMoveToNearMovablePos(obj, 100); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BURNATTHESTAKE) >= 3) sq_SendMessage(obj, 0, 0, 0); + if(sq_GetSkillLevel(obj, SKILL_BYKK_BURNATTHESTAKE) >= 9){ + local apdPath = "character/demonicswordman/2_inquistor/ap_burnatthestake_buff.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BURNATTHESTAKE, sq_GetSkillLevel(obj, SKILL_BYKK_BURNATTHESTAKE)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + local buffTime = sq_GetIntData(obj, SKILL_BYKK_BURNATTHESTAKE, 3); + AddAppendage.sq_SetValidTime(buffTime); + } + } +} + +function onAttack_BurnAtTheStake(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + local subState = obj.getSkillSubState(); + if(subState == 2){ + local apdPath = "appendage/ap_common_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(500); + if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 150, true, AddAppendage); + } + } + } +} + +function onStart_appendage_burnatthestake_buff(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BURNATTHESTAKE) + local coolTime = 10; + local change_appendage = appendage.sq_getChangeStatus("burnatthestake"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("burnatthestake",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (coolTime * -1).tofloat()); + } +} + + +//炎狱祭坛 : 炮烙 +function checkExecutableSkill_Inferno(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_INFERNO); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_INFERNO, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Inferno(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Inferno(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_INFERNO_START1_BODY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/inferno_start1_body.ani"), 0, 0); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,-1,0,obj.getDirection(),2,SKILL_BYKK_INFERNO,1,speedRate,0,0,0,0,0,0,0); + obj.sq_PlaySound("R_PW_INFERNO"); + obj.sq_PlaySound("INFERNO_ALTAR"); + obj.getVar("InfernoTar").clear_obj_vector(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INFERNOHOLD)); + break; + case 1: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_INFERNO_ATTACK3_BODY); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + // local currentAni = obj.getCurrentAnimation(); + // local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local aniPath = [ + "character/swordman/effect/animation/1_atpriest_bykk/atinferno/2attack/inferno_attack7_ground.ani", + // "character/swordman/effect/animation/1_atpriest_bykk/atinferno/2attack/inferno_attack2_rock1.ani", + // "character/swordman/effect/animation/1_atpriest_bykk/atinferno/2attack/inferno_attack4_stake1.ani", + "character/swordman/effect/animation/1_atpriest_bykk/atinferno/2attack/inferno_attack5_bgfire1.ani", + // "character/swordman/effect/animation/1_atpriest_bykk/atinferno/2attack/inferno_attack6_crack.ani" + ]; + local drawlayer = [ENUM_DRAWLAYER_BOTTOM,ENUM_DRAWLAYER_BOTTOM,ENUM_DRAWLAYER_BOTTOM];//ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL, + obj.getVar("InfernoEffect").clear_obj_vector(); + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, drawlayer[i]); + // local pAni = pooledObj.getCurrentAnimation(); + // pAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("InfernoEffect").push_obj_vector(pooledObj); + } + sq_flashScreen(obj,0,10,0,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetShake(obj, 3, 240); + //`clip` 17 0 94 + //`makeCrack` + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_INFERNO, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INFERNOATK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_INFERNO_FINISH3_BODY); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + // local currentAni = obj.getCurrentAnimation(); + // local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_INFERNO, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INFERNOFINISH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + local size = obj.getVar("InfernoEffect").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("InfernoEffect").get_obj_vector(i); + if(aObj) aObj.setValid(false); + } + } + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atinferno/3finish/inferno_finish1_fire1.ani", + "character/swordman/effect/animation/1_atpriest_bykk/atinferno/3finish/inferno_finish2_rock1.ani", + "character/swordman/effect/animation/1_atpriest_bykk/atinferno/3finish/inferno_finish4_fire1.ani", + "character/swordman/effect/animation/1_atpriest_bykk/atinferno/3finish/inferno_finish5_ground.ani", + "character/swordman/effect/animation/1_atpriest_bykk/atinferno/3finish/inferno_finish6_bgfire1.ani"]; + local drawlayer = [ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_BOTTOM,ENUM_DRAWLAYER_BOTTOM]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, drawlayer[i]); + // local pAni = pooledObj.getCurrentAnimation(); + // pAni.setSpeedRate(speedRate.tofloat()); + if(i == 0){ + pAni.setImageRateFromOriginal(1.25, 1.0); + pAni.setAutoLayerWorkAnimationAddSizeRate(1.25); + } + } + break; + case 3: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_INFERNO_LANDING_BODY); + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local size = obj.getVar("InfernoTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("InfernoTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_inferno_hold.nut"); + } + } + break; + } +} + +function onEndCurrentAni_Inferno(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_INFERNO, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Inferno(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Inferno(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 104: + obj.resetHitObjectList(); + break; + case 106: + sq_SetShake(obj, 3, 240); + //`makeCrack` + // sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atinferno/groundcrack/inferno_smallcracka_start_crack.ani", 0, 0, 0); + break; + case 116: sq_SetShake(obj, 2, 960); break; + case 120: + //`releaseClip` + break; + case 201: sq_SetShake(obj, 10, 500); break; + case 204: + sq_flashScreen(obj,0,10,0,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + return true; +} + +function onTimeEvent_Inferno(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Inferno(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_INFERNO){ + local size = obj.getVar("InfernoTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("InfernoTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_inferno_hold.nut"); + } + } + } +} + +function onAttack_Inferno(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + } + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_inferno_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/demonicswordman/2_inquistor/ap_inferno_hold.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + obj.getVar("InfernoTar").push_obj_vector(damager); + // local group = sq_GetGroup(damager); + // local uniqueId = sq_GetUniqueId(damager); + // createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_INFERNO,2,group,uniqueId,0,0,0,0,0,0); + } + } + break; + } +} + + +//狂热信仰 +function checkExecutableSkill_Fanaticism(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FANATICISM); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_FANATICISM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Fanaticism(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Fanaticism(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ATPANI_BYKK_FANATICISM_BODY); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/fanaticism_body.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfanaticism/fanaticismfloor_floor.ani", 0, -1, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.sq_PlaySound("R_PW_FANATICISM"); + break; + } +} + +function onEndCurrentAni_Fanaticism(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Fanaticism(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Fanaticism(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local apdPath = "character/demonicswordman/2_inquistor/ap_fanaticism_buff.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + break; + } + return true; +} + +function onTimeEvent_Fanaticism(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Fanaticism(obj, new_state) +{ + if(!obj) return; +} + +function onStart_appendage_fanaticism_buff(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + setSkillBonusRate_2Inquistor_bykk(obj); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FANATICISM); + appendage.setBuffIconImage(130); + appendage.setEnableIsBuff(true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_FANATICISM, skillLevel); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_FANATICISM, 2, skillLevel); + if(buffTime != 0) appendage.sq_SetValidTime(buffTime); + local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_FANATICISM, 1, skillLevel); + // local criticalDamageRate = sq_GetLevelData(obj, SKILL_BYKK_FANATICISM, 0, skillLevel); + // print("criticalRate = "+criticalRate); + // print("criticalDamageRate = "+criticalDamageRate); + local change_appendage = appendage.sq_getChangeStatus("Fanaticism"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Fanaticism",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, true, (criticalDamageRate * 0.1 / 0.667).tofloat()); + } +} + +function onStart_appendage_atinquistor_weaponmastery(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local weaponType = obj.getWeaponSubType(); + // print("weaponType = "+weaponType); + if(weaponType == -1) return; + if(weaponType == 4){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BATTLEAXEMASTERY); + local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BATTLEAXEMASTERY, 0, skillLevel); + local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BATTLEAXEMASTERY, 1, skillLevel); + local damageRate = sq_GetLevelData(obj, SKILL_BYKK_BATTLEAXEMASTERY, 2, skillLevel); + // print(attackSpeed); + // print(stuckRate); + // print(damageRate); + + local change_appendage = appendage.sq_getChangeStatus("crossmastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("crossmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK , false, (stuckRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (damageRate * 0.1).tofloat()); + } + } +} + +function onStart_appendage_atinquistor_willofinquisitor(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local moveSpeed = sq_GetIntData(obj, SKILL_BYKK_WILLOFINQUISITOR, 15); + local change_appendage = appendage.sq_getChangeStatus("willofinquisitor"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("willofinquisitor",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } +} + +function onAttackParent_appendage_atinquistor_weaponmastery(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(!loadSlot) return; + if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + if(colObj.getVar("skillIndex").getInt(0) == SKILL_BYKK_ESSENCEOFPHLEGE) return; + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY); + if(skillLevel <= 0) return; + local buffTime = sq_GetIntData(obj, SKILL_BYKK_BRANDOFHERESY, 1); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local apdPath = "character/demonicswordman/2_inquistor/passiveskill/ap_brandofheresy_debuff.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(buffTime); + } + } +} + +function drawAppend_appendage_brandofheresy_debuff(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local obj = appendage.getParent(); + if (!obj || obj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local var = appendage.getVar(); + local height = sq_GetHeightObject(obj) / 2; + if(height > 100) height = 100; + local Ani = var.GetAnimationMap("brandofheresy_eff01", "character/swordman/effect/animation/1_atpriest_bykk/atbrandofheresy/brandofheresy_eff01.ani"); + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y - height, isFlip); +} + +function drawAppend_appendage_holyflame_debuff(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local obj = appendage.getParent(); + if (!obj || obj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local var = appendage.getVar(); + local height = sq_GetHeightObject(obj) / 2; + if(height > 100) height = 100; + local Ani = var.GetAnimationMap("burn", "common/commoneffect/animation/decreaseeffect/burn.ani"); + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y - height, isFlip); +} + +function onAttackParent_appendage_holyflame_buff(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(!loadSlot) return; + if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + return; + } + local burnDamage = obj.getVar("holyflameDamageSet").getInt(0); + local burnTime = appendage.getVar("custom").getInt(0); + if(damager.getVar("holyflameObj").get_obj_vector_size() > 0){ + local holyflameObj = damager.getVar("holyflameObj").get_obj_vector(0); + if(holyflameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(holyflameObj); + print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,sq_GetDirection(obj),2,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); + } +} + +function onStartMap_2inquistor_bykk(obj) +{ + if(obj.getVar("isReset").getInt(0) == 0) setSkillBonusRate_2Inquistor_bykk(obj); +} + +function onStartDungeon_AtPriest_2bykk(obj) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME); + obj.getVar("isReset").setInt(0, 1); +} + +function procAppend_AtPriest_2bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); + if(loadSlot){ + if(loadSlot.getRemainLoadNumber() == 0){obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME);} + } + local state = obj.getState(); + if(obj.getVar("HolyFlameEnable").getBool(0) && state < 1 && state > 9){ + obj.setSkillCommandEnable(SKILL_BYKK_HOLYFLAME, true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_HOLYFLAME) != -1){ + obj.getVar("HolyFlameEnable").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLAME, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + if(obj.getVar("PurificationEnable").getBool(0) && state < 1 && state > 9){ + obj.setSkillCommandEnable(SKILL_BYKK_PURIFICATION, true); + if(obj.sq_IsEnterSkill(SKILL_BYKK_PURIFICATION) != -1){ + obj.getVar("PurificationEnable").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } +} + +function setSkillBonusRate_2Inquistor_bykk(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 1, sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_FIRECONFESSION, 0, sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_MALLEUSMALEFICARUM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_MALLEUSMALEFICARUM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_MALLEUSMALEFICARUM))) / 1000; + print("bonusRate3 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_fanaticism_buff.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_FANATICISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_FANATICISM))) / 1000; + print("bonusRate4 = "+bonusRate); + // bonusRate = bonusRate.tofloat() / 1000.0; + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +//////////////////////////////////////////////////////////////// + + + +//obj + +function setCustomData_po_atpriest_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("job").setInt(0, job); + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + + switch(job){ + case 0: + switch(skillIndex){ + case SKILL_BYKK_VIOLENTASSAULT: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/atviolentassault/floor_shock_1.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 2, 160); + break; + case SKILL_BYKK_HEAVYSIN: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/atheavysin/heavysin_attack_dust.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sub = receiveData.readDword(); + if(sub == 1){ + local prob = receiveData.readDword()*10; + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local speedRate2 = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW,prob,level,time); + } + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/atheavysin/heavysin_ground_crack.ani"),true); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(0, currentAni.getDelaySum(0, 6), 1, false); + break; + case SKILL_BYKK_TALISMANOFLIGHTNING: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/attalismanoflightning/talismanoflightning_attackeff01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + createOnlyDrawObject_ATPriest_bykk(obj, "passiveobject/atpriest_bykk/animation/attalismanoflightning/talismanoflightning_attackfloor.ani", true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj,0,0,25,30, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,2,500); + break; + case SKILL_BYKK_HOLYFLASH: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local moveX = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, moveX); + obj.getVar("custom").setInt(13, sq_GetXPos(obj)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SPEAROFVICTORY: + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local isCharge = receiveData.readDword(); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, power_exp); + obj.getVar("custom").setInt(12, holdTime); + obj.getVar("custom").setInt(13, isCharge); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetZPos(obj)); + obj.getVar("tar").clear_obj_vector(); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_HOLYLIGHT: + local power = receiveData.readDword(); + local buffTime = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + local sqr = sq_GetCNRDObjectToSQRCharacter(targetObj); + if(sqr.getVar("holyLight_eff").get_obj_vector_size() < 1) sqr.getVar("holyLight_eff").clear_obj_vector(); + sqr.getVar("holyLight_eff").push_obj_vector(obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(sqr); + // sq_moveWithParent(sqr, obj); + obj.setTimeEvent(100, 10, -1, true); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, buffTime); + obj.getVar("custom").setInt(12, sq_GetZPos(obj)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_LIGHTOFHAPTISM: + local power = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atlightofhaptism/atlightofhaptism_maggic_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atlightofhaptism/atlightofhaptism_ready.ani", 0, -1, 0); + local pAni = obj.getCurrentAnimation(); + obj.setTimeEvent(0, pAni.getDelaySum(0, 0), 1, false); + if(sizeRate > 100){ + obj.getVar("custom").setInt(10, sizeRate); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_SAINTFLASH: + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, power_exp); + obj.getVar("custom").setInt(13, sizeRate); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetZPos(obj)); + obj.getVar("tar").clear_obj_vector(); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_ARIAOFCOURAGE: + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, sizeRate); + switch(subtype){ + case 4://magiccircle + local power = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local range = receiveData.readDword(); + local increaseRate = receiveData.readDword(); + local buffTime = receiveData.readDword(); + obj.getVar("custom").setInt(11, power); + obj.getVar("custom").setInt(12, hitTime); + obj.getVar("custom").setInt(13, hitMax); + obj.getVar("custom").setInt(14, lifeTime); + obj.getVar("custom").setInt(15, range); + obj.getVar("custom").setInt(16, increaseRate); + obj.getVar("custom").setInt(17, buffTime); + case 1://magiccircle + if(subtype == 1){ + sqrChr.getVar("ARIAOFCOURAGE_FLOOR").clear_obj_vector(); + sqrChr.getVar("ARIAOFCOURAGE_FLOOR").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local skill = sq_GetSkill(sqrChr, SKILL_BYKK_ARIAOFCOURAGE); + local isSeal = skill.isSealFunction(); + if(!isSeal) obj.getVar("custom").setInt(30, 1); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5://effect + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(11, lifeTime); + case 2://effect + if(subtype == 2){ + sqrChr.getVar("ARIAOFCOURAGE_EFFECT").clear_obj_vector(); + sqrChr.getVar("ARIAOFCOURAGE_EFFECT").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 6://musicpaper + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(0, lifeTime, 1, false); + case 3://musicpaper + if(subtype == 3){ + sqrChr.getVar("ARIAOFCOURAGE_MUSIC").clear_obj_vector(); + sqrChr.getVar("ARIAOFCOURAGE_MUSIC").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_ARIAOFREGENERATION: + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, sizeRate); + switch(subtype){ + case 4://magiccircle lifeTime,HP_healRate,decreaseMax,0,0,0,0); + local lifeTime = receiveData.readDword(); + local HP_healRate = receiveData.readDword(); + local decreaseMax = receiveData.readDword(); + local range = receiveData.readDword(); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, HP_healRate); + obj.getVar("custom").setInt(13, decreaseMax); + obj.getVar("custom").setInt(14, range); + case 1://magiccircle + if(subtype == 1){ + sqrChr.getVar("ARIAOFREGENERATION_FLOOR").clear_obj_vector(); + sqrChr.getVar("ARIAOFREGENERATION_FLOOR").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5://effect + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(11, lifeTime); + case 2://effect + if(subtype == 2){ + sqrChr.getVar("ARIAOFREGENERATION_EFFECT").clear_obj_vector(); + sqrChr.getVar("ARIAOFREGENERATION_EFFECT").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 6://musicpaper + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(0, lifeTime, 1, false); + case 3://musicpaper + if(subtype == 3){ + sqrChr.getVar("ARIAOFREGENERATION_MUSIC").clear_obj_vector(); + sqrChr.getVar("ARIAOFREGENERATION_MUSIC").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_HOLYCIRCLET: + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local subTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, power_exp); + obj.getVar("custom").setInt(12, hitTime); + obj.getVar("custom").setInt(13, lifeTime); + obj.getVar("custom").setInt(14, subTime); + obj.getVar("custom").setInt(15, sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_THUNDEROFCLEANS: + switch(subtype){ + case 1: + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local createMax = receiveData.readDword(); + local createTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local minSizeRate = receiveData.readDword(); + local speed = receiveData.readDword(); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, power_exp); + obj.getVar("custom").setInt(12, createMax); + obj.getVar("custom").setInt(13, createTime); + obj.getVar("custom").setInt(14, sub); + obj.getVar("custom").setInt(15, minSizeRate); + if(createMax > 0){ + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att2_attackbox_ani.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 5, 1000); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.setTimeEvent(1, createTime, createMax, true); + if(minSizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = minSizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + } + else{ + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_magic_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speed.tofloat()); + local pAni = obj.getCurrentAnimation(); + obj.setTimeEvent(7, pAni.getDelaySum(false) / 2, 1, false); + } + break; + case 2: + local power = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, sizeRate); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_last_thunder_att_lightning.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(3, currentAni.getDelaySum(0,0), 1, false); + obj.setTimeEvent(4, currentAni.getDelaySum(0,1), 1, false); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local power = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, sizeRate); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att_lightning.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(5, currentAni.getDelaySum(0,0), 1, false); + obj.setTimeEvent(6, currentAni.getDelaySum(0,1), 1, false); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_GRANDCROSSCRASH: + switch(subtype){ + case 1: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atgrandcrosscrash/atgrandcrosscrash_smash_front.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local power = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + case 2: + local lifeTime = receiveData.readDword(); + local addTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, lifeTime); + obj.getVar("custom").setInt(11, addTime); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_CRUXOFVICTORIA: + switch(subtype){ + case 1: + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, power_exp); + obj.getVar("custom").setInt(12, hitTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetYPos(obj)); + obj.getVar("move").setInt(12, sq_GetZPos(obj)); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tat").clear_obj_vector(); + obj.getVar("tat").push_obj_vector(targetObj); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/cruxofvictoria/buffeff.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2, 10, 100, true); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local skillLevel = receiveData.readDword(); + local buffTime = receiveData.readDword(); + local phAttack = receiveData.readDword(); + local mgAttack = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local phDefense = receiveData.readDword(); + local mgDefense = receiveData.readDword(); + // print("skillLevel = "+skillLevel); + // print("buffTime = "+buffTime); + // print("phAttack = "+phAttack); + // print("mgAttack = "+mgAttack); + // print("attackSpeed = "+attackSpeed); + // print("moveSpeed = "+moveSpeed); + // print("phDefense = "+phDefense); + // print("mgDefense = "+mgDefense); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !sqrChr.isEnemy(object)) { + local sqrChr2 = sq_GetCNRDObjectToSQRCharacter(object); + if(sq_getJob(sqrChr2) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr2) == GROW_TYPE_CRUSADER) continue; + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGEBOOL)) continue; + + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_CRUXOFVICTORIA)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_CRUXOFVICTORIA); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_CRUXOFVICTORIA, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_BYKK_CRUXOFVICTORIA, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, sqrChr, true); + + local tiaozheng = 1; + if(isSameObject(sqrChr, activeObj)){ + tiaozheng = 0; + } + AddAppendage.getVar("custom").setInt(11, phAttack * tiaozheng); + AddAppendage.getVar("custom").setInt(12, mgAttack * tiaozheng); + AddAppendage.getVar("custom").setInt(13, attackSpeed); + AddAppendage.getVar("custom").setInt(14, moveSpeed); + AddAppendage.getVar("custom").setInt(15, phDefense); + AddAppendage.getVar("custom").setInt(16, mgDefense); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Cruxofvictoria"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Cruxofvictoria", activeObj, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + } + } + } + obj.setTimeEvent(3, 100, 1, false); + break; + } + break; + case SKILL_BYKK_PROTECTIONOFURIEL://power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate + local power = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local range = receiveData.readDword(); + local sizeRate = range * 100 / 820; + local attackSpeed = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local castSpeed = receiveData.readDword(); + local damageRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, hitTime); + obj.getVar("custom").setInt(13, sizeRate); + obj.getVar("custom").setInt(14, attackSpeed); + obj.getVar("custom").setInt(15, moveSpeed); + obj.getVar("custom").setInt(16, castSpeed); + obj.getVar("custom").setInt(17, damageRate); + obj.getVar("custom").setInt(18, range); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_BLESSOFANGEL: + switch(subtype){ + case 1: + local power = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, power); + obj.getVar("custom").setInt(11, lifeTime); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + targetObj = sq_GetCNRDObjectToActiveObject(targetObj); + // sqrChr.getVar("Blessofangel_eff").clear_obj_vector(); + sqrChr.getVar("Blessofangel_eff").push_obj_vector(obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + // local sqr = sq_GetCNRDObjectToSQRCharacter(targetObj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + // sq_moveWithParent(sqr, obj); + obj.setTimeEvent(0, 10, -1, true); + // obj.setTimeEvent(2, 20, -1, true); + obj.getVar("custom").setInt(12, sq_GetZPos(obj)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 2: + local power = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atblessofangel/blessofangel_phase3_sparkle02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,"passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atblessofangel/blessofangel_phase3_shockwave.ani", true, obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local pAni = pooledObj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + obj.sq_PlaySound("R_BREAK_SWORDDANCE_LIGHT"); + break; + } + break; + case SKILL_BYKK_MIRACLECHINE: + switch(subtype){ + case 1://targetMax,firstTargetXRange,firstTargetYRange,power,hitTime,hitMax,addRate,HP_healRate + local targetMax = receiveData.readDword(); + local firstTargetXRange = receiveData.readDword(); + local firstTargetYRange = receiveData.readDword(); + local power = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local addRate = receiveData.readDword(); + local HP_healRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, hitTime); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, HP_healRate); + obj.getVar("tar").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + if(object && !isSameObject(object, sqrChr) && object.isObjectType(OBJECTTYPE_ACTIVE) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= 500 && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= 300 && size + 1 < targetMax){ + obj.getVar("tar").push_obj_vector(object); + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_ATPriest_bykk(sqrChr,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,2,hitTime * hitMax,group,uniqueId,0,0,0,0,0); + } + } + else if(object && isFrontObject_apt(sqrChr, object) && !isSameObject(object, sqrChr) && object.isObjectType(OBJECTTYPE_ACTIVE) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= firstTargetXRange && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= firstTargetYRange){ + obj.getVar("tar").push_obj_vector(object); + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_ATPriest_bykk(sqrChr,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2 - 25,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,2,hitTime * hitMax,group,uniqueId,0,0,0,0,0); + } + } + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + if(obj.getVar("tar").get_obj_vector_size() == 1){ + power = power * (100 + addRate) / 100; + } + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/castsuccess_05.ani", 0, 0, 0); + sq_SetCurrentAttackInfo(sqrChr, sq_GetCustomAttackInfo(sqrChr, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(sqrChr), power); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/castfail_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.getVar().setBool(0, true); + } + break; + case 2: + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, lifeTime); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(3, 500, -1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local lifeTime = receiveData.readDword(); + //print("lifeTime = "+lifeTime); + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line01_userenemyloop01.ani", "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line02_userenemyloop02.ani", "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line03_userenemyloop02.ani", "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line04_userenemyloop02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sq_getRandom(0, 3)]); + obj.setCurrentAnimation(ani); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local hitMax = receiveData.readDword(); + obj.setTimeEvent(4, lifeTime * hitMax, 1, false); + obj.setTimeEvent(5, lifeTime, -1, true); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: + local lifeTime = receiveData.readDword(); + //print("lifeTime = "+lifeTime); + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line01_userenemyloop01.ani", "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line02_userenemyloop02.ani", "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line03_userenemyloop02.ani", "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/line04_userenemyloop02.ani"]; + local ani = sq_CreateAnimation("", aniPath[sq_getRandom(0, 3)]); + obj.setCurrentAnimation(ani); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local hitMax = receiveData.readDword(); + local group2 = receiveData.readDword(); + local uniqueId2 = receiveData.readDword(); + local targetObj2 = sq_GetObject(obj, group2, uniqueId2); + if(targetObj2){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj2); + sq_moveWithParent(activeObj, obj); + } + obj.setTimeEvent(4, lifeTime * hitMax, 1, false); + obj.setTimeEvent(5, lifeTime, -1, true); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 10: + local power = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local HP_healRate = receiveData.readDword(); + print(HP_healRate); + obj.getVar("custom").setInt(10, hitTime); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, HP_healRate / 10); + obj.getVar("custom").setInt(13, power); + // obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 11: + local hitTime = receiveData.readDword(); + local power = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/enemysingle01_loop19_atk.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.setTimeEvent(11, hitTime, -1, true); + obj.setTimeEvent(4, lifeTime, 1, false); + break; + } + break; + case SKILL_BYKK_BRIONAC: + switch(subtype){ + case 1: + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atbrionac/brionaclanceeff_eff27c.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(12, sq_GetZPos(obj)); + obj.getVar("custom").setInt(10, power_exp); + obj.setTimeEvent(1, delaySum / 50, 50, true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atbrionac/brionaclanceeff_eff20.ani", 0, 0, 0); + break; + case 2: + local power = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atbrionac/explosion/brionaclanceeff_eff01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 17)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.sq_PlaySound("BRUNAQ_EXP"); + break; + } + break; + case SKILL_BYKK_CRUXOFSHAPIEL: + sqrChr.getVar("cruxofshapiel_obj").push_obj_vector(obj); + switch(subtype){ + case 1: + local power_fall = receiveData.readDword(); + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, power_fall); + obj.getVar("custom").setInt(11, power); + obj.getVar("custom").setInt(12, power_exp); + obj.getVar("custom").setInt(13, hitTime); + obj.getVar("custom").setInt(14, hitTime * 21); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local power_fall = receiveData.readDword(); + local power = receiveData.readDword(); + local power_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, power_fall); + obj.getVar("custom").setInt(11, power); + obj.getVar("custom").setInt(12, power_exp); + obj.getVar("custom").setInt(13, hitTime); + obj.getVar("custom").setInt(14, hitTime * 21); + // sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sqrChr.getVar("cruxofshapiel_bool").setBool(0, true); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_BLESSOFCOURAGE: + local skillLevel = receiveData.readDword(); + local range = receiveData.readDword(); + local buffTime = receiveData.readDword(); + local phAttack = receiveData.readDword(); + local mgAttack = receiveData.readDword(); + local adtAttack = receiveData.readDword(); + local phlAttack = receiveData.readDword(); + local mglAttack = receiveData.readDword(); + local stuckRate = receiveData.readDword(); + print("skillLevel = "+skillLevel); + print("range = "+range); + print("buffTime = "+buffTime); + print("phAttack = "+phAttack); + print("mgAttack = "+mgAttack); + print("adtAttack = "+adtAttack); + print("phlAttack = "+phlAttack); + print("mglAttack = "+mglAttack); + print("stuckRate = "+stuckRate); + + //aaaa + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !sqrChr.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(sqrChr)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(sqrChr)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/priest/1crusader_bykk/ap_gloriousbless.nut")) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/priest/1crusader_bykk/ap_gloriousbless.nut"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFCOURAGE); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_BLESSOFCOURAGE, true); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(126); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_BYKK_BLESSOFCOURAGE, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, sqrChr, true); + + local tiaozheng = 1; + if(isSameObject(sqrChr, activeObj)){ + if(skillLevel > 20) tiaozheng = 0; + else setSkillBonusBate_Crusader_bykk(sqrChr); + } + + AddAppendage.getVar("custom").setInt(10, (phAttack * tiaozheng).tointeger()); + AddAppendage.getVar("custom").setInt(11, (mgAttack * tiaozheng).tointeger()); + AddAppendage.getVar("custom").setInt(12, (adtAttack * tiaozheng).tointeger()); + AddAppendage.getVar("custom").setInt(13, (phlAttack * tiaozheng).tointeger()); + AddAppendage.getVar("custom").setInt(14, (mglAttack * tiaozheng).tointeger()); + AddAppendage.getVar("custom").setInt(15, (stuckRate).tointeger()); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofcourage"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofcourage",activeObj, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack * tiaozheng).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); + } + } + obj.setTimeEvent(1, 100, 1, false); + } + break; + case SKILL_BYKK_BLESSOFPROTECTION: + local skillLevel = receiveData.readDword(); + local range = receiveData.readDword(); + local buffTime = receiveData.readDword(); + local hpMax = receiveData.readDword(); + local mpMax = receiveData.readDword(); + local phDefense = receiveData.readDword(); + local mgDefense = receiveData.readDword(); + local phlDefense = receiveData.readDword(); + local mglDefense = receiveData.readDword(); + local damageRate = receiveData.readDword(); + // print("skillLevel = "+skillLevel); + // print("range = "+range); + // print("buffTime = "+buffTime); + // print("hpMax = "+hpMax); + // print("mpMax = "+mpMax); + // print("phDefense = "+phDefense); + // print("mgDefense = "+mgDefense); + // print("phlDefense = "+phlDefense); + // print("mglDefense = "+mglDefense); + // print("damageRate = "+damageRate); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !sqrChr.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local sqrChr2 = sq_GetCNRDObjectToSQRCharacter(object); + if(sq_getJob(sqrChr2) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr2) == GROW_TYPE_CRUSADER) continue; + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFPROTECTION); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_BLESSOFPROTECTION, true); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setBuffIconImage(127); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_BYKK_BLESSOFPROTECTION, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, sqrChr, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + AddAppendage.getVar("source").clear_obj_vector(); + AddAppendage.getVar("source").push_obj_vector(sqrChr); + AddAppendage.getVar("custom").setInt(11, hpMax.tointeger()); + AddAppendage.getVar("custom").setInt(12, mpMax.tointeger()); + AddAppendage.getVar("custom").setInt(13, phDefense.tointeger()); + AddAppendage.getVar("custom").setInt(14, mgDefense.tointeger()); + AddAppendage.getVar("custom").setInt(15, phlDefense.tointeger()); + AddAppendage.getVar("custom").setInt(16, mglDefense.tointeger()); + + local pooledObj = sq_AddDrawOnlyAniFromParent(activeObj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/guard/guard_start.ani", 0, 0, sq_GetHeightObject(activeObj) / 2); + sq_moveWithParent(activeObj, pooledObj); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofprotection"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofprotection",activeObj, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); + } + } + } + break; + } + break; + case 2: + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_HOLYFLAME); + if(skillLevel > 0){ + local burnTime = sq_GetIntData(sqrChr, SKILL_BYKK_HOLYFLAME, 1); + local bonusRate = sq_GetLevelData(sqrChr, SKILL_BYKK_HOLYFLAME, 0, skillLevel); + obj.getVar("holyFlameInfoSet").setInt(0, burnTime); + obj.getVar("holyFlameInfoSet").setInt(1, bonusRate); + } + switch(skillIndex){ + case SKILL_BYKK_PATROLBOMB: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isFire = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isFire); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atpatrolbomb/atpetrolbomb_throwbottle_bottlenormal.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + local speed = 600.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed / 2); + break; + case 2: + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isFire = receiveData.readDword(); + obj.getVar("custom").setInt(2, isFire); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atpatrolbomb/atpetrolbomb_airexplosion_normal.ani"; + if(subtype == 3) aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atpatrolbomb/atpetrolbomb_explosionfloor_explosion_floor.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isFire > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + if(subtype == 2 && sqrChr && sqrChr.getState() != STATE_DIE){ + local epObj = sqrChr.getVar("EssenceofPhlegeObj").get_obj_vector(0); + if(epObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(sq_Abs(sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 75 && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 2, 100); + colObj.setTimeEvent(1, 1000, 1, true); + // sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local isFire = receiveData.readDword(); + obj.getVar("custom").setInt(2, isFire); + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atmalleusmaleficarum/2ndeff_eff01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isFire > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + break; + } + break; + case SKILL_BYKK_ESSENCEOFPHLEGE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local lifeTimeForTarget = receiveData.readDword(); + local lifeTimeForBurning = receiveData.readDword(); + local lifeTimeForLanding = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTimeForTarget); + obj.getVar("custom").setInt(2, lifeTimeForBurning); + obj.getVar("custom").setInt(3, lifeTimeForLanding); + obj.getVar("custom").setInt(4, sizeRate); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atessenceofphlege/phlegemove_03.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); + local speed = 600.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed / 2); + break; + case 2: + local totalDamage = receiveData.readDword(); + local lifeTimeForTarget = receiveData.readDword(); + local lifeTimeForBurning = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTimeForTarget); + obj.getVar("custom").setInt(2, lifeTimeForBurning); + obj.getVar("custom").setInt(3, 0); + obj.getVar("custom").setInt(4, sizeRate); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atpouressence/scatter_02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); + break; + case 3: + local totalDamage = receiveData.readDword(); + local lifeTimeForTarget = receiveData.readDword(); + local lifeTimeForBurning = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("EssenceofPhlege").push_obj_vector(obj); + sq_moveWithParent(activeObj, obj); + obj.getVar("custom").setInt(0, lifeTimeForBurning); + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atessenceofphlege/teardebuff_02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + obj.setTimeEvent(1, lifeTimeForTarget, 1, false); + } + break; + case 4: + sqrChr.getVar("EssenceofPhlegeObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local lifeTimeForTarget = receiveData.readDword(); + local lifeTimeForBurning = receiveData.readDword(); + local lifeTimeForLanding = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTimeForTarget); + obj.getVar("custom").setInt(2, lifeTimeForBurning); + obj.getVar("custom").setInt(3, 0); + obj.getVar("custom").setInt(4, sizeRate); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atessenceofphlege/bottom/essencebottom_03.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + obj.setTimeEvent(1, lifeTimeForLanding, 1, false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 5: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTimeForBurning = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atessenceofphlege/largeexp/largeboom_07.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atessenceofphlege/largeexp/largeboom2bottom_06.ani"; + createOnlyDrawObjectEX_ATPriest_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_HOLYFLAME: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atholyflame/holyflame_aeffect_anormal1.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_BYKK_JUDGMENTBLOW: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isFire = receiveData.readDword(); + obj.getVar("custom").setInt(1, isFire); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/atjudgmentblow_att1_12.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 69)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isFire > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isFire = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local addTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + obj.getVar("custom").setInt(1, isFire); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isFire > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.setTimeEvent(1, 2000 + addTime, 1, false); + obj.setTimeEvent(2, 100, 20 + hitMax, true); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + obj.setTimeEvent(1, 2000, 1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FLAMEOFBAPTISM: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atflameofbaptism/flameofbaptismfront_03.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_VORTEXOFHELLFIRE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atvortexofhellfire/atvortexofhellfireloop_holyframe.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + sq_moveWithParent(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + if(sqrChr.getRapidInputFrequency() > 0) speedRate = speedRate.tofloat() * 1.5; + else speedRate = speedRate.tofloat(); + currentAni.setSpeedRate(speedRate); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atvortexofhellfire/atvortexofhellfireend_holyframe.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_WHEELOFPUNISHMENT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage_Exp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_Exp); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, hitMax); + obj.getVar("custom").setInt(3, sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_ERADICATECROSS: + switch(subtype){ + case 1: + sqrChr.getVar("EradicateCrossObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(1, hitMax); + obj.getVar("custom").setInt(2, lifeTime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetAttackInfoForceHitStunTime(sq_GetCurrentAttackInfo(obj), 150); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/loopattackbox.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("effect").clear_obj_vector(); + local aniPath = ["passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossloop_1_00.ani","passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossloop_2_00.ani","passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossloop_bottom_00.ani","passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossloop_essence_1_00.ani","passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossloop_essence_2_00.ani","passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossloop_front_00.ani"]; + local drawlayer = [ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_BOTTOM,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL]; + local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj),direction, 150), yPos = sq_GetYPos(obj); + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,aniPath[i],false,direction,xPos,yPos,0,drawlayer[i]); + obj.getVar("effect").push_obj_vector(pooledObj); + } + obj.setTimeEvent(1, lifeTime / hitMax, -1, false); + break; + } + break; + case SKILL_BYKK_BURNATTHESTAKE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitTime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknUpForce(attackInfo, 10); + sq_SetCurrentAttackeDamageAct(attackInfo, 2); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/2_inquistor/animation/atburnatthestake/finishattackbox.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 4), 1, false); + break; + } + break; + case SKILL_BYKK_INFERNO: + switch(subtype){ + case 1: + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atinferno/1start/inferno_start2_ground.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local sub = 0, randomNum = sq_getRandom(1, 100); + if(randomNum > 67) sub = 2; + else if(randomNum > 33) sub = 1; + obj.getVar("custom").setInt(0, sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_PURIFICATION: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atpurification/atpurification_step2_explosion_smoke2.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 70)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0){ + totalDamage = totalDamage * obj.getVar("holyFlameInfoSet").getInt(1) / 1000; + obj.getVar("holyFlameBool").setBool(0, true); + obj.getVar("holyflameDamageSet").setInt(0, totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case 255: + switch(subtype){ + case 1: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("holyflameObj").clear_obj_vector(); + activeObj.getVar("holyflameObj").push_obj_vector(obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(activeObj); + sq_moveWithParent(activeObj, obj); + obj.getVar("custom").setInt(0, group); + obj.getVar("custom").setInt(1, uniqueId); + local count = time / 500; + obj.getVar("custom").setInt(2, count); + obj.getVar("time").setInt(0, time); + obj.getVar("damage").setInt(0, damage); + obj.getVar("damage").setInt(1, damage); + if(damage > 0){ + obj.setTimeEvent(1, 500, count, false); + } + } + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + local ani = sq_CreateAnimation("","common/commoneffect/animation/decreaseeffect/reactionburn_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2, 250, 1, false); + } + break;// + } + break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_PRIDEACCEL: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atprideaccel/attack_back.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/4_temptress/animation/atprideaccel/attack_front.ani", 0, 0, 0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case SKILL_BYKK_LUSTHAND: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atlusthand/lusthandatk01_c_01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case SKILL_BYKK_HANDAWAKENTOSIN: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_moveWithParent(targetObj, obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sqrChr.getVar("Handawakentosin_EXP").push_obj_vector(obj); + } + else { + sq_SendDestroyPacketPassiveObject(obj); + break; + } + obj.getVar("custom").setInt(10, totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_GREEDTHELURKER: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sizeRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, hitMax); + obj.getVar("custom").setInt(13, hitTime); + obj.getVar("custom").setInt(14, sub); + + if(sub > 0){ + local maxHit = receiveData.readDword(); + obj.getVar("custom").setInt(15, maxHit); + //print("maxHit - "+maxHit); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("tar").clear_obj_vector(); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_FLOWEROFPURIFICATION: + switch(subtype){ + case 0: + sqrChr.getVar("Flowerofpurification_river").clear_obj_vector(); + sqrChr.getVar("Flowerofpurification_river").push_obj_vector(obj); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local totalDamage = receiveData.readDword(); + local size = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/flower/delightflower_flower_explosion05.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + if(size > 0){ + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_a01.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_a02.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_a03.ani"),true); + currentAni.addLayerAnimation(4,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_a04.ani"),true); + } + else{ + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_b01.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_b02.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_body_b03.ani"),true); + } + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 2: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = receiveData.readDword(); + local time = receiveData.readDword(); + obj.getVar("custom").setInt(10, hitMax); + local hitTime = time / (hitMax + 1); + obj.setTimeEvent(1, hitTime, hitMax, true); + break; + } + break; + case SKILL_BYKK_ENVIOUSKISS: + switch(subtype){ + case 0: + local stunTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local ishold = receiveData.readDword(); + obj.getVar("custom").setInt(10, stunTime); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, ishold); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(0, lifeTime, 1, false); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + sq_sendSetActiveStatusPacket(targetObj, obj, ACTIVESTATUS_CONFUSE, 100.0, 100, true, lifeTime); + sq_moveWithParent(targetObj, obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_SECONDSOUL: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atsecondsoul/boom_18.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atsecondsoul/boombottom_06.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case SKILL_BYKK_GLUTTONYVOMIT: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgluttonyvomit/atgluttonyvomit_att_beam_normal.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case SKILL_BYKK_SLOTHBODY: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinattackfront_16.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_FIRSTPRANA: + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atfirstprana/firstprana_floor.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + sq_AddAttackBox(pAni, -300, -150, -10, 600, 300, 60); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + } +} diff --git a/user/116.205.165.25/2_atpriest_6.c b/user/116.205.165.25/2_atpriest_6.c new file mode 100644 index 0000000..eefaf5d --- /dev/null +++ b/user/116.205.165.25/2_atpriest_6.c @@ -0,0 +1,2264 @@ + +function setState_po_atpriest_bykk(obj, state, datas) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0, state); + + switch(job){ + case 0: + switch(skillIndex){ + case SKILL_BYKK_VIOLENTASSAULT: + break; + case SKILL_BYKK_HEAVYSIN: + break; + case SKILL_BYKK_TALISMANOFLIGHTNING: + break; + case SKILL_BYKK_HOLYFLASH: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/atholyflash/holyflash_ball01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + obj.setTimeEvent(0, 20, 30, true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/atholyflash/holyflash_explosion01.ani"); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + local totalDamage = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SPEAROFVICTORY: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atspearofvictory/spear.ani"; + if(obj.getVar("custom").getInt(13) > 0) aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atspearofvictory/spearchargeokshot.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + local power = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.setTimeEvent(0, 5, 30, true); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atspearofvictory/landspear.ani"; + if(obj.getVar("custom").getInt(13) > 0) aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atspearofvictory/spearchargeokhit.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atspearofvictory/landeffect.ani", 0, 0, 0); + obj.setTimeEvent(1, obj.getVar("custom").getInt(12), 1, false); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atspearofvictory/boom_normal.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + local power_exp = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power_exp); + break; + } + break; + case SKILL_BYKK_HOLYLIGHT: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/barrierstart.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/barrierloop.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0, obj.getVar("custom").getInt(11) - 1000, 1, false); + break; + case 22: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/barrierend_barrierend.ani", 0, 0, 0); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholylight/barrierend_explosion.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + local power = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + } + break; + case SKILL_BYKK_SAINTFLASH: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atsaintwall/saintwall_shield_dodge.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + local power = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(false); + obj.getVar("custom").setInt(12, delay); + obj.setTimeEvent(0, delay / 31, 30, true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atsaintwall/saintwall_shieldexpl.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + local power_exp = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power_exp); + sq_flashScreen(obj,80,0,0,25, sq_RGB(255,228,196), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetShake(obj, 4, 200); + break; + } + local sizeRate = obj.getVar("custom").getInt(13); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_ARIAOFCOURAGE: + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/floorstart_magicc_01.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/floorloop_magicc_01.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/floorend_magicc_01.ani"]; + if(subtype == 2 || subtype == 5) aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/lightstart_lineglow.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/lightloop_lineglow.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/lightend_lineglow.ani"]; + else if(subtype == 3 || subtype == 6) aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/musicpaper/line_red_in.ani"]; + else if(subtype == 4) aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/floorstart_magicc_01.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/floorloop_magicc_01atk.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/floor/floorend_magicc_01.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + if(subtype == 4 && state == 21){ + local power = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local hitTime = obj.getVar("custom").getInt(12); + local hitMax = obj.getVar("custom").getInt(13); + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.setTimeEvent(1, hitTime, -1, true); + local lifeTime = obj.getVar("custom").getInt(14); + obj.setTimeEvent(2, lifeTime, 1, false); + } + if(subtype == 5){ + local currentAni = obj.getCurrentAnimation(); + if(state == 21){ + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/michael/enemysingle01_loop19.ani"),true); + obj.setTimeEvent(2, obj.getVar("custom").getInt(11), 1, false); + } + else if(state == 22){ + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/michael/enemysingle02_end12.ani"),true); + } + } + local sizeRate = obj.getVar("custom").getInt(10); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_ARIAOFREGENERATION: + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/floor/floorstart_1.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/floor/floorloop_1.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/floor/floorend_1.ani"]; + if(subtype == 2 || subtype == 5) aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/floor/lightstart_lineglow_02.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/floor/lightloop_a1.ani", "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/floor/lightend_1.ani"]; + else if(subtype == 3 || subtype == 6) aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/musicpaper/line_red_in.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + if(subtype == 4 && state == 21){ + local lifeTime = obj.getVar("custom").getInt(11); + obj.setTimeEvent(2, lifeTime, 1, false); + obj.setTimeEvent(3, 1000, -1, true); + } + if(subtype == 5){ + local currentAni = obj.getCurrentAnimation(); + switch(state){ + case 20: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/uriel/urielstart_body.ani"),true); break; + case 21: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/uriel/urielloop_body.ani"),true); obj.setTimeEvent(2, obj.getVar("custom").getInt(11), 1, false); break; + case 22: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/uriel/urielend_body.ani"),true); break; + } + } + local sizeRate = obj.getVar("custom").getInt(10); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case SKILL_BYKK_HOLYCIRCLET: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholycirclet/holycirclet_a_godray.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholycirclet/holycirclet_a_back_ring03.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + local power = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.getVar("target").clear_obj_vector(); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholycirclet/holycirclet_b_hit.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholycirclet/holycirclet_b_back_ring01.ani"),true); + local lifeTime = obj.getVar("custom").getInt(13); + local subTime = obj.getVar("custom").getInt(14); + obj.setTimeEvent(1, subTime, 1, false);//subtime + obj.setTimeEvent(2, lifeTime, 1, false);//lifetime + local size = obj.getVar("target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("target").get_obj_vector(i); + if(targetObj){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj,APDPATH_HOLYCIRCLET); + if(AddAppendage){ + AddAppendage.sq_SetValidTime(lifeTime + 100); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, -20, sq_GetZPos(targetObj)-70, subTime, true, AddAppendage); + } + } + } + } + break; + case 22: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholycirclet/holycirclet_c_explosion02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atholycirclet/holycirclet_c_back_explosion02.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + local power = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + } + local sizeRate = obj.getVar("custom").getInt(15); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case SKILL_BYKK_GRANDCROSSCRASH: + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atgrandcrosscrash/atgrandcrosscrash_crack_ready.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atgrandcrosscrash/atgrandcrosscrash_crack_loop.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + obj.sq_SetMaxHitCounterPerObject(1); + local lifeTime = obj.getVar("custom").getInt(10); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, 1000, -1, true); + break; + case 22: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atgrandcrosscrash/atgrandcrosscrash_crack_finish.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_CRUXOFVICTORIA: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/cruxofvictoria/covnewfinishstart_cross_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + local power = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.setTimeEvent(1, obj.getVar("custom").getInt(12), -1, false); + obj.sq_PlaySound("CRUXVICTORIA_JUMP"); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/cruxofvictoria/covnewfinishloop_cross_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + obj.stopTimeEvent(1); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/cruxofvictoria/covnewfinishend_eff_23.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + local power = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + obj.sq_PlaySound("CRUXVICTORIA_END"); + break; + } + break; + } + break; + case SKILL_BYKK_PROTECTIONOFURIEL: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/protection/startfloor_magic.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/protection/loopfloor_magic.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(10) / 10); + obj.setTimeEvent(1, obj.getVar("custom").getInt(11), 1, false); + obj.setTimeEvent(2, obj.getVar("custom").getInt(12), -1, false); + obj.setTimeEvent(3, 1000, -1, false); + break; + case 22: + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/protection/endfloor_magic.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + + local sizeRate = obj.getVar("custom").getInt(13); + local currentAni = obj.getCurrentAnimation(); + switch(state){ + case 20: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/protection/startfront_orablock.ani"),true); break; + case 21: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/protection/loopfront_orablock_01.ani"),true); break; + case 22: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/protection/endfront_twing.ani"),true); break; + } + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + switch(state){ + case 20: currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/uriel/urielstart_body.ani"),true); break; + case 21: currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/uriel/urielloop_body.ani"),true); break; + case 22: currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atprotectionofuriel/uriel/urielend_body.ani"),true); break; + } + break; + case SKILL_BYKK_BLESSOFANGEL: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase2start_wingoutglow.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase2starteffect_shock.ani", 0, 0, 0); + break; + case 21: + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase2loop_angelbodyloopdodge.ani"); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(11); + obj.setTimeEvent(1, lifeTime, 1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase2end_endeffect.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_MIRACLECHINE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/userhealing01_loop06.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(10) * obj.getVar("custom").getInt(11), 1, false); + obj.setTimeEvent(2, obj.getVar("custom").getInt(10), obj.getVar("custom").getInt(11), true); + break; + case 21: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/userhealing02_end02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/enemyattack01_loop06.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/enemyattack02_end02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 10: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atmiracleshine/michael_start_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,"passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atmiracleshine/miracleshinelightarea.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + local sizeRate = 1.33; + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + obj.getVar("eff").clear_obj_vector(); + obj.getVar("eff").push_obj_vector(pooledObj); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atmiracleshine/michael_loop_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + // sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(13)); + obj.setTimeEvent(10, 3000, 1, false); + local hitTime = obj.getVar("custom").getInt(10); + local power = obj.getVar("custom").getInt(13); + obj.setTimeEvent(11, hitTime, -1, true); + createSkillPassive_ATPriest_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,11,hitTime,power,3000,0,0,0,0,0); + break; + case 22: + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atmiracleshine/michael_end_12.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local effectObj = obj.getVar("eff").get_obj_vector(0); + if(effectObj) effectObj.setValid(false); + break; + } + break; + } + break; + case SKILL_BYKK_CRUXOFSHAPIEL: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/ready/cruxofshapielcrossreadytop_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/fire/cruxofshapielcrossfiretop_00.ani"); + obj.setCurrentAnimation(ani); + local power_fall = obj.getVar("custom").getInt(10); + local power = obj.getVar("custom").getInt(11); + local power_exp = obj.getVar("custom").getInt(12); + local hitTime = obj.getVar("custom").getInt(13); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,2,power_fall,power,power_exp,hitTime,0,0,0,0); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/loop/cruxofshapielcrosslooptop_00.ani"); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(14); + obj.setTimeEvent(1, lifeTime, 1, false); + break; + case 23: + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/fire/cruxofshapielcrossfiretop_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cruxofshapielfall.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/fire/cruxofshapielcrossfire_00.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/fire/cruxofshapielcrossfireback_00.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/fire/cruxofshapielcrossfirefront_00.ani"),true); + currentAni.addLayerAnimation(-10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/fire/cruxofshapielcrossfirebottom_00.ani"),true); + local power = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + sq_SetMyShake(obj, 25, 200); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cruxofshapielmultihit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0, sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/loop/cruxofshapielcrossloop_00.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/loop/cruxofshapielcrossloopfront_00.ani"),true); + currentAni.addLayerAnimation(-10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/loop/cruxofshapielcrossloopbottom_00.ani"),true); + local lifeTime = obj.getVar("custom").getInt(14); + obj.setTimeEvent(2, lifeTime, 1, false); + local power = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + local hitTime = obj.getVar("custom").getInt(13); + obj.setTimeEvent(3, hitTime, 20, true); + break; + case 22: + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("", "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cruxofshapielexplosion.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/end/cruxofshapielend.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/end/cruxofshapielendback_00.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/end/cruxofshapielendfront_00.ani"),true); + currentAni.addLayerAnimation(-10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atcruxofshapiel/cross/end/cruxofshapielendbottom_00.ani"),true); + local power = obj.getVar("custom").getInt(12); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); + break; + } + break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_ESSENCEOFPHLEGE: + switch(subtype){ + case 3: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atessenceofphlege/incinerationloop_03.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atessenceofphlege/incinerationend_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_JUDGMENTBLOW: + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/fireconfession/startbottom_04.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/fireconfession/loopbottom_03.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/fireconfession/endbottom_02.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/fireconfession/start_03.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/fireconfession/loopfront_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atjudgmentblow/fireconfession/endfront_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_WHEELOFPUNISHMENT: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/wheel_start/wheelofpunishment_start_wheel.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/wheel/wheelloop_wheel.ani"; + if(obj.getVar("custom").getInt(3) > 0) aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/wheel_yellowfire/wheelloop_wheel.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local hitMax = obj.getVar("custom").getInt(2); + obj.setTimeEvent(1, hitMax * 100 + 300, 1, false); + obj.setTimeEvent(2, 100, -1, true); + obj.sq_PlaySound("WHEEL_PUNISHMENT_ROLL_LOOP", 2333); + break; + case 22: + obj.stopTimeEvent(2); + local aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/wheel/explosion/wheelendback_a.ani"; + if(obj.getVar("custom").getInt(3) > 0) aniPath = "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/wheel_yellowfire/wheelend_wheel.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + sq_SetShake(obj, 16, 900); + local direction = sq_GetDirection(obj); + sq_CreateParticle("passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/particle/wheelofpunishment.ptl", obj, direction==1?200:-200, 0, 50, true, 30, 0, 1); + if(obj.getVar("custom").getInt(3) > 0){ + sq_CreateParticle("passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/particle_yellow/wheel_yellow_particle.ptl", obj, 0, 0, 50, true, 30, 0, 1); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwheelofpunishment/wheel_yellowfire/explosion/yellowfireexplosion_1.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(1); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + obj.stopSound(2333); + obj.sq_PlaySound("WHEEL_PUNISHMENT_EXP"); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_INFERNO: + switch(subtype){ + case 2: + local sub = "a"; + if(obj.getVar("custom").getInt(0) == 1) sub = "b"; + if(obj.getVar("custom").getInt(0) == 2) sub = "c"; + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atinferno/hold/hold"+sub+"_start_stake.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atinferno/hold/hold"+sub+"_loop_stake.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atinferno/hold/hold"+sub+"_end_stake.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_HANDAWAKENTOSIN: + switch(state){ + case 20: + local randomNum = sq_getRandom(1, 7); + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/sin_0"+randomNum.tostring()+".ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = ["character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_explosion_a.ani", + "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_explosion_b.ani", + "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_explosion_c.ani"]; + local ani = sq_CreateAnimation("",aniPath[sq_getRandom(0, 2)]); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, 100, 1, false); + break; + } + break; + case SKILL_BYKK_GREEDTHELURKER: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/start.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/start/01greedatk_bg_00.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/start/02greedatk_h_c05.ani"),true); + obj.setTimeEvent(0, obj.getVar("custom").getInt(13), obj.getVar("custom").getInt(12), false); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/loop.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/loop/01greedatkholdloop_bg_00.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/loop/02greedatkholdloop_hc.ani"),true); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/enda.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10) * 65 / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/enda/01greedatkfinisha_bg_00.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/enda/02greedatkfinisha_smoke_05.ani"),true); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 3), 1, false); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/endb.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/endb/01greedatkfinishb_eff_01.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atgreedthelurker/endb/02greedatkfinishb_eff_02.ani"),true); + break; + } + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(11); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_FLOWEROFPURIFICATION: + switch(subtype){ + case 0: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/background/delightflower_bg_start_river.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/background/delightflower_bg_loop_river.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/background/delightflower_bg_end_black.ani"); + obj.setCurrentAnimation(ani); + break; + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(2.0, 1.2);//增加ani 宽度跟高度率 + // currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 + break; + } + break; + case SKILL_BYKK_ENVIOUSKISS: + switch(subtype){ + case 0: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atenviouskiss/heartstart_02.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(300.0); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atenviouskiss/heartfly_loop.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + // local attackInfo = sq_GetCurrentAttackInfo(obj); + // sq_SetAttackInfoForceHitStunTime(attackInfo, obj.getVar("custom").getInt(10)); + obj.sq_SetMoveParticle("particle/enviouskiss.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,300); + break; + case 22: + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("","passiveobject/atpriest_bykk/animation/4_temptress/animation/atenviouskiss/heartend_normal.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/buffstart_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/buffstartb_00.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/buffloop_01.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/buffend_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atenviouskiss/buffendb_00.ani"),true); + break; + } + break; + } + break; + } + break; + } +} + +function onEndCurrentAni_po_atpriest_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + switch(skillIndex){ + case SKILL_BYKK_VIOLENTASSAULT: + case SKILL_BYKK_HEAVYSIN: + case SKILL_BYKK_TALISMANOFLIGHTNING: + case SKILL_BYKK_HOLYFLASH: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SPEAROFVICTORY: + switch(state){ + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_HOLYLIGHT: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_LIGHTOFHAPTISM: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_SAINTFLASH: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_ARIAOFCOURAGE: + case SKILL_BYKK_ARIAOFREGENERATION: + case SKILL_BYKK_HOLYCIRCLET: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_THUNDEROFCLEANS: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_GRANDCROSSCRASH: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_CRUXOFVICTORIA: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_PROTECTIONOFURIEL: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_BLESSOFANGEL: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_MIRACLECHINE: + switch(subtype){ + case 1: + if(obj.getVar().getBool(0)){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + sq_SendDestroyPacketPassiveObject(obj); + } + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + case 10: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_BRIONAC: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_CRUXOFSHAPIEL: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_BLESSOFCOURAGE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_BLESSOFPROTECTION: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_PATROLBOMB: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_ESSENCEOFPHLEGE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_HOLYFLAME: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_JUDGMENTBLOW: + switch(subtype){ + case 2: + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); return; break; + } + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_FLAMEOFBAPTISM: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_VORTEXOFHELLFIRE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_WHEELOFPUNISHMENT: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); return; break; + } + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_BURNATTHESTAKE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_INFERNO: + if(subtype == 2 && state == 20){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_PURIFICATION: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_PRIDEACCEL: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_LUSTHAND: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_HANDAWAKENTOSIN: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_GREEDTHELURKER: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + case 23: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, GREEDTHELURKER_APDPATH); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_FLOWEROFPURIFICATION: + switch(subtype){ + case 0: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_ENVIOUSKISS: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_SECONDSOUL: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_GLUTTONYVOMIT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_SLOTHBODY: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_FIRSTPRANA: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } +} + +function onTimeEvent_po_atpriest_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + switch(skillIndex){ + case SKILL_BYKK_HEAVYSIN: + switch(timeEventIndex){ + case 0: sq_SetShake(obj,5,240); break; + } + break; + case SKILL_BYKK_HOLYFLASH: + switch(timeEventIndex){ + case 0: + local base_X = obj.getVar("custom").getInt(13); + local v = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(12), timeEventCount, 30); + local moveX = sq_GetDistancePos(base_X, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, moveX); + if(timeEventCount >= 30) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SPEAROFVICTORY: + switch(timeEventIndex){ + case 0: + local vx = sq_GetUniformVelocity(0, 400, timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(11), 0, timeEventCount, 30); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_BYKK_HOLYLIGHT: + switch(timeEventIndex){ + case 0: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/barrierloop_omen.ani"),true); + obj.setTimeEvent(1, 1000, 1, false); + break; + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 100: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + obj.getVar("custom").getInt(12)); + break; + } + break; + case SKILL_BYKK_LIGHTOFHAPTISM: + switch(timeEventIndex){ + case 0: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atlightofhaptism/atlightofhaptism_front.ani", 0, 7, 0); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atlightofhaptism/atlightofhaptism_back.ani", 0, -1, 0); + local pAni = pooledObj.getCurrentAnimation(); + local pAni2 = pooledObj2.getCurrentAnimation(); + if(obj.getVar("custom").getInt(10) > 100){ + local sizeRate = obj.getVar("custom").getInt(10) / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni2.setImageRateFromOriginal(sizeRate, sizeRate); + } + sq_SetShake(obj, 5, 200); + break; + } + break; + case SKILL_BYKK_SAINTFLASH: + switch(timeEventIndex){ + case 0: + local vx = sq_GetUniformVelocity(0, 300, timeEventCount, 20); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local tar = obj.getVar("tar").get_obj_vector(i); + if(tar){ + local activeObj = sq_GetCNRDObjectToActiveObject(tar); + if(activeObj.isMovablePos(dstX, sq_GetYPos(activeObj))) sq_setCurrentAxisPos(activeObj, 0, dstX); + } + } + } + if(timeEventCount >= 30) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_ARIAOFCOURAGE: + switch(timeEventIndex){ + case 0: sq_SendDestroyPacketPassiveObject(obj); break; + case 1: + obj.resetHitObjectList(); + local range = obj.getVar("custom").getInt(15); + local increaseRate = obj.getVar("custom").getInt(16); + local buffTime = obj.getVar("custom").getInt(17); + local power = obj.getVar("custom").getInt(11); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!obj.getVar("Ariaofcourage_Tar").is_obj_vector(activeObj)) obj.getVar("Ariaofcourage_Tar").push_obj_vector(activeObj); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF)){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF); + } + + if(obj.getVar("custom").getInt(30) > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, "character/demonicswordman/0_common/ap_prayerofheal.nut", true); + local change_appendage = appendage.sq_GetCNChangeHp("changehp"); + if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", activeObj, sqrChr, 0, power.tofloat(), 80); + appendage.sq_SetValidTime(100); + } + + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_ARIAOFCOURAGEBUFF, true); + AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_BYKK_ARIAOFCOURAGE, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ARIAOFCOURAGE)); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, sqrChr, true); + + AddAppendage.getVar("custom").setInt(16, buffTime); + AddAppendage.getVar("custom").setInt(17, range); + AddAppendage.getVar("bool").setBool(0, true); + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)) continue; + local AddAppendage2 = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE); + local phAttack = AddAppendage2.getVar("custom").getInt(10); + local mgAttack = AddAppendage2.getVar("custom").getInt(11); + local adtAttack = AddAppendage2.getVar("custom").getInt(12); + local phlAttack = AddAppendage2.getVar("custom").getInt(13); + local mglAttack = AddAppendage2.getVar("custom").getInt(14); + local stuckRate = AddAppendage2.getVar("custom").getInt(15); + // print("phAttack = "+phAttack+"; mgAttack ="+mgAttack+"; adtAttack ="+adtAttack+"; phlAttack ="+phlAttack+"; mglAttack ="+mglAttack+"; stuckRate ="+stuckRate); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_AriaofcourageBuff"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_AriaofcourageBuff",activeObj, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack * increaseRate / 100).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1 * increaseRate / 100).tofloat()); + } + } + } + break; + case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_BYKK_ARIAOFREGENERATION: + switch(timeEventIndex){ + case 0: sq_SendDestroyPacketPassiveObject(obj); break; + case 1: obj.resetHitObjectList(); break; + case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: + local HP_healRate = obj.getVar("custom").getInt(12); + local decreaseMax = obj.getVar("custom").getInt(13); + local range = obj.getVar("custom").getInt(14); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local hp = activeObj.getHp() * HP_healRate / 100; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_ARIAOFREGENERATIONBUFF, true); + local change_appendage = appendage.sq_GetCNChangeHp("changehp"); + if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", activeObj, sqrChr, 0, hp.tofloat(), 800); + appendage.sq_SetValidTime(500); + local activeStatus = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16]; + local count = 0; + for(local ui = 0; ui < activeStatus.len(); ui++){ + if (sq_IsValidActiveStatus(activeObj, activeStatus[ui])){ + if(count + 1 < decreaseMax){ + sq_ReleaseActiveStatus(activeObj, activeStatus[ui]); + count = count + 1; + } + } + } + } + } + break; + } + break; + case SKILL_BYKK_HOLYCIRCLET: + switch(timeEventIndex){ + case 1: obj.setTimeEvent(3, obj.getVar("custom").getInt(12), -1, true); break; + case 2: obj.stopTimeEvent(3); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_THUNDEROFCLEANS: + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + sq_SetShake(obj, 5, 140); + local aniPath = ["passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att_lightning.ani","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att2_lightning2.ani"]; + local aniPath2 = ["passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att_shockwave.ani","passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att2_shockwave2.ani"]; + local sub = 1; + local xPos = sq_getRandom(-150, 150), yPos = sq_getRandom(-30,30); + sq_AddDrawOnlyAniFromParent(obj, aniPath[sub], xPos, yPos, 0); + sq_AddDrawOnlyAniFromParent(obj, aniPath2[sub], xPos, yPos, 0); + if(sq_getRandom(1, 100) > 50){ + xPos = sq_getRandom(-150, 150); + yPos = sq_getRandom(-30,30); + sq_AddDrawOnlyAniFromParent(obj, aniPath[sub], xPos, yPos, 0); + sq_AddDrawOnlyAniFromParent(obj, aniPath2[sub], xPos, yPos, 0); + } + if(timeEventCount >= obj.getVar("custom").getInt(12)){ + obj.setTimeEvent(2, 500, 1, false); + } + break; + case 2: + local power = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(15); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,2,power,sizeRate,0,0,0,0,0,0); + break; + case 3: + sq_flashScreen(obj,0,60,0,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,"passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_last_thunder_att_shockwave.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + local sizeRate = obj.getVar("custom").getInt(10); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100; + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + break; + case 4: + sq_flashScreen(obj,0,120,0,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 10, 280); + break; + case 5: + sq_flashScreen(obj,0,60,0,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,"passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atthunderofcleans/atthunderofcleans_att_shockwave.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + local sizeRate = obj.getVar("custom").getInt(10); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100; + local pAni = sq_GetCurrentAnimation(pooledObj);//pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + break; + case 6: + sq_flashScreen(obj,0,120,0,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 10, 280); + break; + case 7: + local power = obj.getVar("custom").getInt(11); + local sizeRate = 125; + if(obj.getVar("custom").getInt(14) > 50){ + sizeRate = 188; + power = power * 150 / 100; + } + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,3,power,sizeRate,0,0,0,0,0,0); + break; + } + break; + case SKILL_BYKK_GRANDCROSSCRASH: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_CRUXOFVICTORIA: + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(timeEventCount >= 30) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local targetObj = obj.getVar("tat").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), sq_GetXPos(targetObj), timeEventCount, 100); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(targetObj) + 1, timeEventCount, 100); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), sq_GetZPos(targetObj) + sq_GetHeightObject(targetObj) / 2, timeEventCount, 100); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 100){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/buffeffect/buffstart_eff01.ani", 0, 0, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_PROTECTIONOFURIEL: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + case 3: + local attackSpeed = obj.getVar("custom").getInt(14); + local moveSpeed = obj.getVar("custom").getInt(15); + local castSpeed = obj.getVar("custom").getInt(16); + local damageRate = obj.getVar("custom").getInt(17); + local range = obj.getVar("custom").getInt(18); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_PROTECTIONOFURIEL)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_PROTECTIONOFURIEL); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_PROTECTIONOFURIEL, true); + AddAppendage.sq_SetValidTime(1000); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(sqrChr, SKILL_BYKK_PROTECTIONOFURIEL)); + CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, sqrChr, true); + AddAppendage.getVar("custom").setInt(10, damageRate); + + if(isSameObject(activeObj, sqrChr)) sq_SendMessage(activeObj, 0, 1, 0); + else activeObj.sq_SetSuperArmorUntilTime(sqrChr, 1000); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Protectionofuriel"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Protectionofuriel",activeObj, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); + } + } + } + break; + } + break; + case SKILL_BYKK_BLESSOFANGEL: + switch(timeEventIndex){ + case 0: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); + if(!loadSlot && state == 21){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + obj.getVar("custom").getInt(12)); + break; + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_BYKK_MIRACLECHINE: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + local HP_healRate = obj.getVar("custom").getInt(12); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(obj.isEnemy(activeObj)) sq_SendHitObjectPacket(sqrChr,activeObj,0,0,sq_GetObjectHeight(targetObj) / 2); + else{ + local HP_heal = activeObj.getHp() * HP_healRate / 100; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, -1, false, "character/demonicswordman/0_common/ap_prayerofheal.nut", true); + local change_appendage = appendage.sq_GetCNChangeHp("changehp"); + if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", targetObj, sqrChr, 0, HP_heal.tofloat(), 80); + appendage.sq_SetValidTime(100); + } + if(size >= 1){ + if(i == 0 && obj.getVar("bool").getBool(0) == false){ + obj.getVar("bool").setBool(0, true); + local colObj = sq_GetCNRDObjectToCollisionObject(obj); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_ATPriest_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,3,obj.getVar("custom").getInt(10),group,uniqueId,obj.getVar("custom").getInt(11),0,0,0,0); + } + else if(obj.getVar("bool").getBool(i) == false){ + obj.getVar("bool").setBool(i, true); + local targetObj2 = obj.getVar("tar").get_obj_vector(i - 1); + if(targetObj2){ + local activeObj2 = sq_GetCNRDObjectToActiveObject(targetObj2); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local group2 = sq_GetGroup(activeObj2); + local uniqueId2 = sq_GetUniqueId(activeObj2); + createSkillPassive_ATPriest_bykk(sqrChr,activeObj2,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj2) / 2,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,4,obj.getVar("custom").getInt(10),group,uniqueId,obj.getVar("custom").getInt(11),group2,uniqueId2,0,0); + } + } + } + } + } + } + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("tar").get_obj_vector(0)); + if(activeObj) setLightning_atp_Miraclechine_bykk(obj, obj, activeObj); + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 10: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 11: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_BRIONAC: + switch(timeEventIndex){ + case 1: + local v = sq_GetUniformVelocity(0, 100, timeEventCount, 50); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), 0, timeEventCount, 50); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 50){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atpriest_bykk/animation/1_atcrusader/animation/atbrionac/brionaclanceeff_end_eff27c.ani", 0, -1, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_CRUXOFSHAPIEL: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_BLESSOFCOURAGE: + case SKILL_BYKK_BLESSOFPROTECTION: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_ESSENCEOFPHLEGE: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_BYKK_JUDGMENTBLOW: + case SKILL_BYKK_WHEELOFPUNISHMENT: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_ERADICATECROSS: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_BURNATTHESTAKE: + switch(timeEventIndex){ + case 1: obj.setTimeEvent(2, obj.getVar("custom").getInt(0), -1, true); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case 255: + switch(timeEventIndex){ + case 1: + obj.getVar("custom").setInt(3, timeEventCount); + local allDamage = obj.getVar("damage").getInt(0); + local count = obj.getVar("custom").getInt(2); + local damage = allDamage / count; + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + // print("timeEventCount = "+timeEventCount); + // print("allDamage = "+allDamage+",,damage = "+damage); + if(activeObj && activeObj.getState() != STATE_DIE && activeObj.getHp() > 0){ + local group = obj.getVar("custom").getInt(0); + local uniqueId = obj.getVar("custom").getInt(1); + local height = sq_GetHeightObject(activeObj) / 2; + if(height > 75) height = 75; + // createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, height,sq_GetDirection(obj),3,255,2,group,uniqueId,damage,0,0,0,0,0); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,height,sq_GetDirection(obj),2,255,2,group,uniqueId,damage,0,0,0,0,0); + // obj.getVar("damage").setInt(0, allDamage - damage); + if(timeEventCount == 1){ + local time = obj.getVar("time").getInt(0); + sq_EffectLayerAppendage(activeObj,sq_RGB(0,0,0),195,0,0,time + 2000); + local apdPath = "character/demonicswordman/2_inquistor/ap_holyflame_debuff.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(time + 1000); + } + if(timeEventCount == count){ + obj.getVar("damage").setInt(0, 0); + obj.getVar("damage").setInt(1, 0); + } + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + return; + } + if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ + local newDamage = allDamage - damage * obj.getVar("custom").getInt(3); + // print("newDamage = "+newDamage); + if(newDamage < 0) newDamage = 0; + obj.getVar("damage").setInt(0, newDamage); + obj.getVar("damage").setInt(1, newDamage); + + obj.stopTimeEvent(1); + obj.setTimeEvent(1, 500, count, false); + } + break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj && activeObj.getState() != STATE_DIE && activeObj.getHp() > 0){ + local height = sq_GetObjectHeight(activeObj) / 2; + if(height > 75) height = 75; + sq_SendHitObjectPacket(obj,activeObj,0,0,height); + // obj.sq_PlaySound("BURN_VINE"); + } + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj && activeObj.getState() != STATE_DIE && activeObj.getHp() > 0){ + sq_EffectLayerAppendage(activeObj,sq_RGB(255,192,130),66,0,0,300); + local allDamage = obj.getVar("damage").getInt(0); + // print("PoisonDamageExp = "+allDamage); + local group = obj.getVar("custom").getInt(0); + local uniqueId = obj.getVar("custom").getInt(1); + local height = sq_GetHeightObject(activeObj) / 2; + if(height > 75) height = 75; + // createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, height,sq_GetDirection(obj),3,255,2,group,uniqueId,allDamage,0,0,0,0,0); + createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,height,sq_GetDirection(obj),2,255,2,group,uniqueId,allDamage,0,0,0,0,0); + } + break; + } + break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_HANDAWAKENTOSIN: + switch(timeEventIndex){ + case 0: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) break; + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + break; + } + break; + case SKILL_BYKK_GREEDTHELURKER: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + if(timeEventCount >= obj.getVar("custom").getInt(12)) obj.addSetStatePacket(23 - obj.getVar("custom").getInt(14), null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local pAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, pAni.getDelaySum(4, 32) / (obj.getVar("custom").getInt(15) + 1), obj.getVar("custom").getInt(15), true); + break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_BYKK_FLOWEROFPURIFICATION: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + local size = sqrChr.getVar("Flowerofpurification_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("Flowerofpurification_Tar").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + if(timeEventCount >= obj.getVar("custom").getInt(10)) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_ENVIOUSKISS: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + } +} + +function onAttack_po_atpriest_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + switch(skillIndex){ + case SKILL_BYKK_HOLYFLASH: + if(state == 20 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case SKILL_BYKK_HEAVYSIN: + if(isStuck) break; + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_getGrowType(sqrChr) != 4) break; + if(sq_GetLevelData(sqrChr, SKILL_BYKK_HEAVYSIN, 8, sq_GetSkillLevel(sqrChr, SKILL_BYKK_HEAVYSIN)) > 0) break; + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > 0){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_THESEVENDEADLYSINS); + local stunTime = sq_GetLevelData(sqrChr, SKILL_BYKK_THESEVENDEADLYSINS, 15, skillLevel); + if(loadnumber > 1) stunTime = stunTime + (loadnumber - 1) * sq_GetLevelData(sqrChr, SKILL_BYKK_THESEVENDEADLYSINS, 18, skillLevel); + //sq_SetAttackInfoForceHitStunTime(attackInfo, stunTime); + local holdAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, HEAVYSINHOLD_APDPATH, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , holdAppendage); + holdAppendage.sq_SetValidTime(stunTime); + } + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SPEAROFVICTORY: + switch(state){ + case 20: + if(isStuck) break; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_SPEAROFVICTORY)) break; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SPEAROFVICTORY, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + // if(!obj.getVar("tar").is_obj_vector(damager) && !sq_IsFixture(damager)) obj.getVar("tar").push_obj_vector(damager); + AddAppendage.sq_SetValidTime(obj.getVar("custom").getInt(12) + 300); + break; + } + break; + case SKILL_BYKK_SAINTFLASH: + switch(state){ + case 20: + if(isStuck) break; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_SAINTWALL)) break; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SAINTWALL, true); + if(!obj.getVar("tar").is_obj_vector(damager) && !sq_IsFixture(damager)){ + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + obj.getVar("tar").push_obj_vector(damager); + } + AddAppendage.sq_SetValidTime(obj.getVar("custom").getInt(12)); + break; + } + break; + case SKILL_BYKK_HOLYCIRCLET: + switch(state){ + case 20: + if(isStuck) break; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_HOLYCIRCLET)) break; + if(!obj.getVar("target").is_obj_vector(damager) && !sq_IsFixture(damager)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_HOLYCIRCLET, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + obj.getVar("target").push_obj_vector(damager); + } + break; + } + break; + case SKILL_BYKK_GRANDCROSSCRASH: + switch(subtype){ + case 2: + if(isStuck) break; + if(!damager.isObjectType(OBJECTTYPE_CHARACTER)) break; + local sqr = sq_GetCNRDObjectToSQRCharacter(damager); + local addTime = obj.getVar("custom").getInt(11); + local apdPath = [APDPATH_BLESSOFCOURAGE, APDPATH_BLESSOFPROTECTION, APDPATH_HOLYLIGHT, APDPATH_EDIFICATION]; + local skillIndex = [SKILL_BYKK_BLESSOFCOURAGE, SKILL_BYKK_BLESSOFPROTECTION, SKILL_BYKK_HOLYLIGHT, SKILL_BYKK_EDIFICATION]; + for(local i = 0; i < apdPath.len(); i++){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqr, apdPath[i])) continue; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(sqr, apdPath[i]); + if(AddAppendage){ + local useTime = AddAppendage.getTimer().Get(); + local validT = AddAppendage.getAppendageInfo().getValidTime(); + AddAppendage.sq_SetValidTime(validT + addTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), skillIndex[i], sq_GetSkillLevel(sqrChr, skillIndex[i])); + CNSquirrelAppendage.sq_Append(AddAppendage, sqr, sqrChr, true); + switch(i){ + case 0: + local phAttack = AddAppendage.getVar("custom").getInt(10); + local mgAttack = AddAppendage.getVar("custom").getInt(11); + local adtAttack = AddAppendage.getVar("custom").getInt(12); + local phlAttack = AddAppendage.getVar("custom").getInt(13); + local mglAttack = AddAppendage.getVar("custom").getInt(14); + local stuckRate = AddAppendage.getVar("custom").getInt(15); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofcourage"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofcourage",sqr, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); + } + break; + case 1: + local hpMax = AddAppendage.getVar("custom").getInt(11); + local mpMax = AddAppendage.getVar("custom").getInt(12); + local phDefense = AddAppendage.getVar("custom").getInt(13); + local mgDefense = AddAppendage.getVar("custom").getInt(14); + local phlDefense = AddAppendage.getVar("custom").getInt(15); + local mglDefense = AddAppendage.getVar("custom").getInt(16); + + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofprotection"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofprotection",sqr, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); + } + break; + case 2: + local effectObj = sqr.getVar("holyLight_eff").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.isExistTimeEvent(0)){ + colObj.stopTimeEvent(0); + colObj.setTimeEvent(0, validT + addTime - useTime, 1, false); + } + } + break; + case 3: + local moveSpeed = AddAppendage.getVar("custom").getInt(10); + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",sqr, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } + break; + case 4: + local phAttack = AddAppendage.getVar("custom").getInt(11); + local mhAttack = AddAppendage.getVar("custom").getInt(12); + local attackSpeed = AddAppendage.getVar("custom").getInt(13); + local moveSpeed = AddAppendage.getVar("custom").getInt(14); + local phDefense = AddAppendage.getVar("custom").getInt(15); + local mgDefense = AddAppendage.getVar("custom").getInt(16); + local change_appendage = AddAppendage.sq_getChangeStatus("AT_Cruxofvictoria"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Cruxofvictoria", sqr, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mhAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); + } + break; + } + } + } + break; + } + break; + case SKILL_BYKK_MIRACLECHINE: + switch(subtype){ + case 10: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local HP_healRate = obj.getVar("custom").getInt(12); + local HP_heal = activeObj.getHp() * HP_healRate / 100; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, "character/demonicswordman/0_common/ap_prayerofheal.nut", true); + local change_appendage = appendage.sq_GetCNChangeHp("changehp"); + if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", activeObj, sqrChr, 0, HP_heal.tofloat(), 80); + appendage.sq_SetValidTime(100); + break; + } + break; + } + break; + case 2: + if(isStuck) break; + switch(skillIndex){ + case SKILL_BYKK_PATROLBOMB: + switch(subtype){ + case 1: + if(obj.getVar().getBool(0) == false){//damager.isObjectType(OBJECTTYPE_ACTIVE) && + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local isFire = obj.getVar("custom").getInt(2); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,2,totalDamage,sizeRate,isFire,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: + case 3: + case 4: + if(obj.getVar("custom").getInt(2) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + break; + } + break; + case SKILL_BYKK_ESSENCEOFPHLEGE: + switch(subtype){ + case 1: + case 2: + case 4: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTimeForTarget = obj.getVar("custom").getInt(1); + local lifeTimeForBurning = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(2); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local aObj = damager.getVar("EssenceofPhlege").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getState() >= 20){ + if(subtype == 4) sq_SendDestroyPacketPassiveObject(obj); + break; + } + colObj.setTimeEvent(1, 1000, 1, true); + } + damager.getVar("EssenceofPhlege").clear_obj_vector(); + createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,1,sq_GetZPos(damager) + sq_GetHeightObject(damager) / 2 - sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,3,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,group,uniqueId,0,0); + if(subtype == 1){ + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atessenceofphlege/phlegeboomair_01.ani", 0, 0, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + else if(subtype == 4) sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_JUDGMENTBLOW: + if(obj.getVar("custom").getInt(1) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + break; + case SKILL_BYKK_FLAMEOFBAPTISM: + onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + break; + case SKILL_BYKK_VORTEXOFHELLFIRE: + if(obj.getVar("custom").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + break; + case SKILL_BYKK_WHEELOFPUNISHMENT: + if(obj.getVar("custom").getInt(3) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + break; + case SKILL_BYKK_ERADICATECROSS: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_radicatecross_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/demonicswordman/2_inquistor/ap_radicatecross_hold.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + break; + case SKILL_BYKK_PURIFICATION: onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); break; + } + + if(obj.getVar("holyFlameBool").getBool(0)){ + local burnDamage = obj.getVar("holyflameDamageSet").getInt(0); + local burnTime = obj.getVar("holyFlameInfoSet").getInt(0); + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(damager.getVar("holyflameObj").get_obj_vector_size() > 0){ + local holyflameObj = damager.getVar("holyflameObj").get_obj_vector(0); + if(holyflameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(holyflameObj); + // print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,sq_GetDirection(obj),2,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); + } + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_LUSTHAND://LUSTHAND_APDPATH + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr.getVar("lusthand_tar").is_obj_vector(damager)) sqrChr.getVar("lusthand_tar").push_obj_vector(damager); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, LUSTHAND_APDPATH)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, LUSTHAND_APDPATH, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + case SKILL_BYKK_GREEDTHELURKER: + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_GetLevelData(sqrChr, SKILL_BYKK_GREEDTHELURKER, 6, sq_GetSkillLevel(sqrChr, SKILL_BYKK_GREEDTHELURKER)) > 0) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, GREEDTHELURKER_APDPATH)){ + obj.getVar("tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, GREEDTHELURKER_APDPATH, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + case SKILL_BYKK_ENVIOUSKISS: + if(subtype != 0) break; + if(state != 21 || isStuck) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + sqrChr.getVar("Enviouskiss_Bool").setBool(0, true); + sqrChr.getVar("Enviouskiss_Tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, SKILL_BYKK_ENVIOUSKISS, false, ENVIOUSKISS_APDPATH, true); + local lifeTime = obj.getVar("custom").getInt(11); + AddAppendage.sq_SetValidTime(lifeTime); + if(obj.getVar("custom").getInt(12) < 1){ + local holdAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, ENVIOUSKISSHOLD_APDPATH, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , holdAppendage); + local holdTime = obj.getVar("custom").getInt(10); + holdAppendage.sq_SetValidTime(holdTime); + } + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + // if(sqrChr.isMyControlObject()) + createSkillPassive_ATPriest_bykk(sqrChr,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetZPos(damager) + 50,damager.getDirection(),4,SKILL_BYKK_ENVIOUSKISS,1,lifeTime,group,uniqueId,0,0,0,0,0); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } +} + +function onKeyFrameFlag_po_atpriest_bykk(obj, flagIndex) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + switch(skillIndex){ + case SKILL_BYKK_HEAVYSIN: + break; + case SKILL_BYKK_HOLYFLASH: + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_ARIAOFCOURAGE: + case SKILL_BYKK_ARIAOFREGENERATION: + switch(subtype){ + case 3: + local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/musicpaper/"; + if(skillIndex == SKILL_BYKK_ARIAOFREGENERATION) aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/musicpaper/"; + local aniPath2 = ["line_1.ani","line_2.ani","line_3.ani","line_4.ani","line_5.ani","line_6.ani","line_7.ani","line_8.ani","line_8_1.ani","line_9.ani"]; + local aniPath3 = ""; + switch(flagIndex){ + case 100: aniPath3 = aniPath + aniPath2[0]; break; + case 102: aniPath3 = aniPath + aniPath2[1]; break; + case 103: aniPath3 = aniPath + aniPath2[2]; break; + case 104: aniPath3 = aniPath + aniPath2[3]; break; + case 107: aniPath3 = aniPath + aniPath2[4]; break; + case 109: aniPath3 = aniPath + aniPath2[5]; break; + case 111: aniPath3 = aniPath + aniPath2[6]; break; + case 113: aniPath3 = aniPath + aniPath2[7]; break; + case 114: aniPath3 = aniPath + aniPath2[8]; break; + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath3, 0, -1, 0); + local currentAni = pooledObj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(10); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_CRUXOFSHAPIEL: + switch(subtype){ + case 2: + switch(flagIndex){ + case 301: + sq_SetMyShake(obj, 25, 200); + break; + } + break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_HANDAWAKENTOSIN: + break; + case SKILL_BYKK_GREEDTHELURKER: + break; + case SKILL_BYKK_FLOWEROFPURIFICATION: + switch(flagIndex){ + case 1000: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/4_temptress/animation/atdepravitysevensins/delightflower_flower_flarebg03.ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(1.8, 1.2); + pAni.setAutoLayerWorkAnimationAddSizeRate(1.8); + break; + case 1001: + sq_flashScreen(obj,0,0,240,255, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,10,320); + break; + case 1002: sq_SetMyShake(obj, 1, 240); break; + } + break; + } + break; + } + return true; +} + +function procAppend_po_atpriest_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_PATROLBOMB: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 10 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local epObj = sqrChr.getVar("EssenceofPhlegeObj").get_obj_vector(0); + if(epObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(epObj); + if(sq_Abs(sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 75 && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 165,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 2, 100); + colObj.setTimeEvent(1, 1000, 1, true); + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + } + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local isFire = obj.getVar("custom").getInt(2); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,3,totalDamage,sizeRate,isFire,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_ESSENCEOFPHLEGE: + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 10 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTimeForTarget = obj.getVar("custom").getInt(1); + local lifeTimeForBurning = obj.getVar("custom").getInt(2); + local lifeTimeForLanding = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(4); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,4,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atessenceofphlege/phlegeboombottom_01.ani", 0, 0, -sq_GetZPos(obj)); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE){ + sq_SendDestroyPacketPassiveObject(obj); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/demonicswordman/2_inquistor/passiveskill/ap_brandofheresy_debuff.nut")){ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_ESSENCEOFPHLEGE, 13); + createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 165,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); + onAttack_EssenceofPhlege_SetFireBomb(obj, targetObj, null); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_VORTEXOFHELLFIRE: + if(sqrChr.getState() != STATE_BYKK_VORTEXOFHELLFIRE) sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_ERADICATECROSS: + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(2) && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossend_00.ani", 150, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/burn_00.ani", 150, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossend_front_00.ani", 150, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/ateradicatecross/crossend_bottom_10.ani", 150, 0, 0); + for(local i = 0; i < 6; i++){ + local pooledObj = obj.getVar("effect").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case SKILL_BYKK_INFERNO: + switch(subtype){ + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/demonicswordman/2_inquistor/ap_inferno_hold.nut")){ + if(state != 22) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + } + break; + case 255: + switch(subtype){ + case 1: + if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ + if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 500, obj.getVar("time").getInt(0) / 500, true); + } + break; + } + break; + } + break; + case 3: + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_HANDAWAKENTOSIN: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_ENVIOUSKISS: + if(subtype != 1) break; + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } +} + +function isFrontObject_apt(obj,object) +{ + if((obj.getDirection() == ENUM_DIRECTION_RIGHT && sq_GetXPos(obj) > sq_GetXPos(object)) || (obj.getDirection() == ENUM_DIRECTION_LEFT && sq_GetXPos(obj) < sq_GetXPos(object))) return false; + return true; +} diff --git a/user/116.205.165.25/3_atswordman_1.c b/user/116.205.165.25/3_atswordman_1.c new file mode 100644 index 0000000..82f4e11 --- /dev/null +++ b/user/116.205.165.25/3_atswordman_1.c @@ -0,0 +1,2761 @@ + +// + + +function cearteSkillPassiveObj_AtSwordMan_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum) +{ + if(!obj || !passiveObj) return; + if(pushv1 == null) pushv1 = 0; + if(pushv2 == null) pushv2 = 0; + if(pushv3 == null) pushv3 = 0; + if(pushv4 == null) pushv4 = 0; + if(pushv5 == null) pushv5 = 0; + if(pushv6 == null) pushv6 = 0; + if(pushv7 == null) pushv7 = 0; + if(pushv8 == null) pushv8 = 0; + if(bonusnum > 0 && obj.isObjectType(OBJECTTYPE_CHARACTER)){ + local bonusRate = 1.0; + if(job == 4){ + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ + bonusRate = bonusRate + setpassiveObjbounsRate(obj, skillIndex, 1).tofloat() / 1000.0; + } + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION) > 0){ + bonusRate = bonusRate + setpassiveObjbounsRate(obj, skillIndex, 2).tofloat() / 1000.0; + } + } + else if(job == 2){ + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0 && skillIndex != SKILL_DEMONSLAYER_DARKSTRIKE && skillIndex != SKILL_DEMONSLAYER_WILDWHIP && skillIndex != SKILL_DEMONSLAYER_CLAWBLADE && skillIndex != SKILL_DEMONSLAYER_BLOODDANCE){ + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)).tofloat() / 1000.0; + } + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0 && skillIndex != SKILL_DEMONSLAYER_CLAWBLADE){ + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_QUEENOFMINE, 0, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE)).tofloat() / 1000.0; + } + } + + switch (bonusnum) { + case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; + case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; + case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; + case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; + case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; + case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; + case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; + case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; + } + } + + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + z = z - obj.getZPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + +function setpassiveObjbounsRate(obj, skillIndex, sub) +{ + switch(sub){ + case 1: + if(skillIndex == SKILL_DARKEMPLER_MADNESS) return 0; + else if(skillIndex == SKILL_DARKEMPLER_SHADOWHARVEST) return 0; + else if(skillIndex == SKILL_DARKEMPLER_BUCKSHOT) return 0; + else{ + local bonusRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 4, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS)); + return bonusRate; + } + break; + case 2: + if(skillIndex == SKILL_DARKEMPLER_SHADOWPUPPET) return 0; + else if(skillIndex == SKILL_DARKEMPLER_SHADOWHARVEST) return 0; + else{ + local bonusRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_INCARNATION, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION)); + return bonusRate; + } + break; + } +} + +function createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_AtSwordMan_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function isFrontObject(obj,object) +{ + if((obj.getDirection() == ENUM_DIRECTION_RIGHT && sq_GetXPos(obj) > sq_GetXPos(object)) || (obj.getDirection() == ENUM_DIRECTION_LEFT && sq_GetXPos(obj) < sq_GetXPos(object))) return false; + return true; +} + +function darkEmpler_Evolve(obj,increaseCount,decreaseCount) +{ + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(!loadSlot) return; + + if(increaseCount > 0){ + local maxCount = obj.sq_GetLevelData(SKILL_DARKEMPLER_EVOLVE, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE)); + //if(maxCount >= 99) maxCount = 99; + local soulnum = loadSlot.getRemainLoadNumber(); + if(soulnum >= maxCount) return; + if(maxCount - soulnum > increaseCount) loadSlot.increaseLoadCount(increaseCount); + else loadSlot.increaseLoadCount(maxCount - soulnum); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atevolve/absorb.ani", 0, -1, 0); + } + + if(decreaseCount > 0){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/doomsday/ap_doomsdaybuff.nut")) return; + loadSlot.decreaseLoadCount(decreaseCount); + } +} + +function getDamageRate_DarkTempler_bykk(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_EVOLVE, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_USIR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_USIR, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_USIR))) / 1000; + print("bonusRate2 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/congest/ap_congest.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_CONGEST, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST))) / 1000; + print("bonusRate3 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); +} + +function getDamageRate_VagaBond_bykk(obj) +{ + local bonusRate = 0; + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_THREEFLOWER, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER)); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_BUDCLIMB, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB)); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_ECSTASY, 6, sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY)); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD)); + return bonusRate; +} + +function setSkillDamageRate_VagaBond_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_THREEFLOWER, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_BUDCLIMB, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB))) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_ECSTASY, 6, sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY))) / 1000; + print("bonusRate4 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD))) / 1000; + print("bonusRate5 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function getDamageRate_Demonslayer_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/atfrenzy/ap_atfrenzy.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_DEMONSLAYER_ATFRENZY, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_CALLDAIMUS) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_DEMONSLAYER_CALLDAIMUS, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_CALLDAIMUS))) / 1000; + print("bonusRate2 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); +} + +function getDamageRate_Swordmaster_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoulbuff.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC))) / 1000; + print("bonusRate3 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/overdrive/ap_overdrive.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE))) / 1000; + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); + //return bonusRate; +} + +function procPassiveSkill_Darktempler_bykk(obj, skill_index, skill_level) +{ + switch(skill_index){ + case 65: + local apPath = "character/atswordman/4_darktempler/evolve/ap_evolve.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case 228: + local apPath = "character/atswordman/4_darktempler/incarnation/ap_incarnation.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case 77: + local apPath = "character/atswordman/4_darktempler/vespers/ap_vespers.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case 40: + local apPath = "character/atswordman/4_darktempler/loyalslave/ap_loyalslave.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + } +} + +function procPassiveSkill_Vagabond_bykk(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_VAGABOND_THREEFLOWER: + local apPath = "character/atswordman/3_vagabond/threeflower/ap_threeflower.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case SKILL_VAGABOND_EQUIPLIGHTSWORD: + local apPath = "character/atswordman/3_vagabond/equiplightsword/ap_equiplightsword.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + } +} + +function procPassiveSkill_Swordmaster_bykk(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP: + local apPath = "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case SKILL_SWORDMASTER_BYKK_INNERBLADE: + local apPath = "character/atswordman/1_swordmaster/ap_weaponmastery.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case SKILL_SWORDMASTER_BYKK_DRAWSWORD: + local apPath = "character/atswordman/1_swordmaster/drawsword/ap_drawsword.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL: + local apPath = "character/atswordman/1_swordmaster/bladesoul/ap_bladesoul.nut"; + if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); + break; + } +} + +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); + } + else if(job == 10){ + local CurSkill = AIMPOINT_ATSWORDMAN; + if(CurSkill == 69) ani = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); + else if(CurSkill == 82) ani = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); + } + 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; + } + } + else if(job == 10){ + local CurSkill = AIMPOINT_ATSWORDMAN; + if(CurSkill == 69){ + local ani1 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); + local ani2 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); + local ani3 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); + local ani4 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); + ani2.setLoop(false); + if(ani1 && ani2 && ani3 && ani4){ + obj.addCustomAnimation(ani1); + obj.addCustomAnimation(ani2); + obj.addCustomAnimation(ani3); + obj.addCustomAnimation(ani4); + return true; + } + } + else if(CurSkill == 82){ + local ani1 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); + local ani2 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); + local ani3 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); + local ani4 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); + if(ani1 && ani2 && ani3 && ani4){ + obj.addCustomAnimation(ani1); + obj.addCustomAnimation(ani2); + obj.addCustomAnimation(ani3); + obj.addCustomAnimation(ani4); + return true; + } + } + } + return false; +} + +function drawCustomSkillani_ATSwordman(obj) +{ + if(!obj.getVar("MoonlightslashDraw").getBool(0))//???????關 + return; + local Xpos = 0; + + Skill_DrawAni(obj,"Moonlightslash","etc/ultimateskillani/atsword_swordempress2nd.ani",1.0,1.0,255,Xpos, 50,"MoonlightslashDraw"); + + return; +} + +function Skill_DrawAni(obj,aniName,AniPath,Xrate,Yrate,alpaha,Xpos,Ypos,VarName) +{ + local sq_var = obj.getVar(); + local AniObj2 = sq_var.GetAnimationMap( aniName , AniPath ); + if(obj.getDirection() == 1){ + Xrate = -Xrate; + Xpos = Xpos + 800; + } + if(sq_IsEnd(AniObj2)){ + if(obj.getVar(VarName).getBool(1)){ + sq_Rewind(AniObj2); + obj.getVar(VarName).setBool(1,false); + } + else obj.getVar(VarName).setBool(0,false); + + } + else{ + sq_AnimationProc(AniObj2); + AniObj2.setImageRate(Xrate,Yrate); + AniObj2.setRGBA(255, 255, 255, alpaha); + sq_drawCurrentFrame(AniObj2, Xpos,Ypos, false); + obj.getVar(VarName).setBool(1,false); + } + +} + +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); + else if(job == 10) sq_IsMovablePosCollisionObject(parentObj, xPos, yPos); + + return true; +} + + +function onSetState_AtSwordman_Basic5_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + if(subState == 40){//進圖獲取攻擊屬性用 + obj.sq_SetCurrentAnimation(708); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + return; + } + local basicbonus = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 100; + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj), obj.getState()); + local aniIndex = subState; + local attackIndex = subState; + if(sq_getGrowType(obj) == 1 && sq_GetSkillLevel(obj, 3) > 0){ + aniIndex = SWORDMASTER_ANIINDEX[subState]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniIndex = SWORDMASTER_MAGIC_ANIINDEX[subState]; + attackIndex = SWORDMASTER_ATTACKINDEX[subState]; + changeSwordEffect_bykk(obj, "InnerBladeAttack" + (subState + 1).tostring(), 108); + } + else if(sq_getGrowType(obj) == 2 && sq_GetSkillLevel(obj, 202) > 0){ + local weaponType = getDualWeaponType(obj); + aniIndex = DUALWEAPON_ANIINDEX[weaponType * 3 + subState]; + attackIndex = DUALWEAPON_ATTACKINDEX[weaponType * 3 + subState]; + basicbonus = basicbonus * (100 + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON))) / 100; + if(weaponType == 3) basicbonus = basicbonus + basicbonus * sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 8, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON)) / 100; + } + else if(sq_getGrowType(obj) == 3 && sq_GetSkillLevel(obj, 148) > 0){ + aniIndex = DEMONSLAYER_ANIINDEX[subState]; + attackIndex = DEMONSLAYER_ATTACKINDEX[subState]; + BodyCalldaimus(obj, DEMONSLAYER_ATTACKEFFECTINDEX[subState]); + } + else if(sq_getGrowType(obj) == 4 && sq_GetSkillLevel(obj, 62) > 0){ + aniIndex = HIDDENBLADE_ANIINDEX[subState]; + attackIndex = HIDDENBLADE_ATTACKINDEX[subState]; + basicbonus = basicbonus * (100 + sq_GetLevelData(obj, SKILL_DARKEMPLER_HIDDENBLADE, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_HIDDENBLADE))) / 100; + } + + obj.sq_SetCurrentAnimation(aniIndex); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), basicbonus); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_getGrowType(obj) == 1){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); + } + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local element = colObj.getVar("custom").getInt(10); + local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); + } + } + obj.getVar("attackBool").setBool(10, false); + switch(subState){ + case 0: + obj.getVar("attackBool").setBool(12, false); + break; + case 1: + obj.getVar("attackBool").setBool(13, false); + break; + } +} + +function onProcCon_AtSwordman_Basic5_bykk(obj) +{ + if(!obj) return; + + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + } + + local subState = obj.getSkillSubState(); + + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + local speedRate = [0,0,0,300,20]; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: speedRate = [0,200,10,0,0]; break; + case 2: speedRate = [0,100,10,0,0]; break; + case 3: speedRate = [0,0,0,200,10]; break; + case 4: speedRate = [0,0,100,0,0]; break; + } + if((obj.getVar("attackBool").getBool(12) && subState >= 0) || (obj.getVar("attackBool").getBool(13) && subState >= 1)) break; + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ + if(obj.getVar("attackBool").getBool(12) == false) obj.getVar("attackBool").setBool(12, true); + if(obj.getVar("attackBool").getBool(13) == false) obj.getVar("attackBool").setBool(13, true); + speedRate = [0,0,0]; + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ + for(local i = 0; i < speedRate.len(); i++){ + speedRate[i] = speedRate[i] * 150 / 100; + } + } + obj.sq_StartWrite(); + obj.sq_WriteDword(obj.getDirection()); + obj.sq_WriteDword(speedRate[subState]); + sq_SendChangeSkillEffectPacket(obj, 108); + break; + } + + if(obj.getVar("attackBool").getBool(10)){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(108, STATE_PRIORITY_IGNORE_FORCE, true); + print("test"); + } + } +} + +function onChangeSkillEffect_AtSwordman_Basic5(obj, skillIndex, reciveData) +{ + if(!obj) return; + local direction = reciveData.readDword(); + local speedRate = reciveData.readDword(); + if(speedRate <= 0) return; + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate.tofloat()); + else if(direction == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -speedRate.tofloat()); +} + +function onKeyFrameFlag_AtSwordman_Basic5(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + print("substate = "+substate); + print("flagIndex = "+flagIndex); + print("set = "+obj.getVar("attackBool").getBool(10)); + local growType = sq_getGrowType(obj); + local stateMax = 4; + switch(growType){ + case 1: stateMax = 2; break; + case 2: stateMax = 2; break; + case 3: stateMax = 4; break; + case 4: stateMax = 2; break; + } + if(flagIndex == 1000 && substate < stateMax){ + print("test2"); + obj.getVar("attackBool").setBool(10, true); + } + return true; +} + +function onAttack_AtSwordman_Basic5_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + //local substate = obj.getSkillSubState(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } + //MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); +} + +function getDualWeaponType(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut"); + if(addAppendage){ + local weaponType = addAppendage.getVar().getInt(10); + return weaponType; + } + else return 0; +} + +function procSkill_vagabond_bykk(obj) +{ + if(!obj) return; + if(obj.getVar("rapid_step_enable").getBool(0) && !sq_GetSkill(obj, SKILL_VAGABOND_RAPIDSTEP).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_VAGABOND_RAPIDSTEP, true); + if(obj.sq_IsEnterSkill(SKILL_VAGABOND_RAPIDSTEP) != -1){ + obj.getVar("rapid_step_enable").setBool(0, false); + obj.getVar("EnableHermitTripleStep").setBool(0, false); + obj.startSkillCoolTime(SKILL_VAGABOND_RAPIDSTEP, sq_GetSkillLevel(obj, SKILL_VAGABOND_RAPIDSTEP), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + if(obj.getVar("EnableHermitTripleStep").getBool(0) && !sq_GetSkill(obj, SKILL_VAGABOND_HERMITTRIPLESTEP).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_VAGABOND_HERMITTRIPLESTEP, true); + if(obj.sq_IsEnterSkill(SKILL_VAGABOND_HERMITTRIPLESTEP) != -1){ + obj.getVar("rapid_step_enable").setBool(0, false); + obj.getVar("EnableHermitTripleStep").setBool(0, false); + obj.startSkillCoolTime(SKILL_VAGABOND_HERMITTRIPLESTEP, sq_GetSkillLevel(obj, SKILL_VAGABOND_HERMITTRIPLESTEP), -1); + obj.getVar("hermittriplestep").setBool(0, false); + obj.getVar("hermittriplestep_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("hermittriplestep_move").setInt(11, sq_GetYPos(obj)); + obj.getVar("hermittriplestep_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onAttack_ATSwordman(obj, damager, bounding_box, is_stuck) +{ + if(!obj || is_stuck) return false; + //enableClearDeadEnemies(obj, damager); + if(sq_getGrowType(obj) == 3 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + darkStrike_Attack(obj, damager); + } +} + +function onStartMap_Demonslayer_bykk(obj) +{ + local size = obj.getVar("predatorgaloaObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local predatorgaloaObj = obj.getVar("predatorgaloaObj").get_obj_vector(i); + if(predatorgaloaObj && predatorgaloaObj.getState() != 25){ + local colObj = sq_GetCNRDObjectToCollisionObject(predatorgaloaObj); + colObj.getVar().setBool(0, false); + colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } +} + +function onStartMap_Swordmaster_bykk(obj) +{ + return; +} + +function onStartMap_DarkTempler_bykk(obj) +{ + local apdPath = "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + return; +} + +function dungeonStart_ATSwordman_Swordmaster(obj) +{ + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + if(!loadSlot) obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 101, 0, sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9)); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0){ + obj.getVar("isMagicSwordUp").clear_ct_vector(); + obj.getVar("isMagicSwordUp").push_ct_vector(); + local timer = obj.getVar("isMagicSwordUp").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + obj.getVar("isReset").setInt(0, 1); + getDamageRate_Swordmaster_bykk(obj); +} + +function reset_AtSwordman_bykk(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"); + if(addAppendage) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + if(!loadSlot) obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 101, 0, sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9)); + } + if(sq_getGrowType(obj) == 1 && obj.getVar("isReset").getInt(0) == 0) getDamageRate_Swordmaster_bykk(obj); + if(obj.getVar("isReset").getInt(0) == 0){ + if(sq_getGrowType(obj) == 1) dungeonStart_ATSwordman_Swordmaster(obj); + else if(sq_getGrowType(obj) == 4) StartDungeon_AtSwordmanAddEvolve(obj) + else if(sq_getGrowType(obj) == 2){ + StartDungeon_AtSwordmanDualweapon(obj); + DungeonStart_ATSwordman_Ecstasy(obj); + setSkillDamageRate_VagaBond_bykk(obj); + } + } +} + + +//通用 + +function checkExecutableSkill_Liftslash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(86); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(86, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Liftslash(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == 0||state == 8||state == 14||state == 108) return true; + return true; +} + +function onSetState_Liftslash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(218); + changeSwordEffect_bykk(obj, "liftslash", 86); + } + else obj.sq_SetCurrentAnimation(6); + break; + case 3: + obj.sq_SetCurrentAnimation(392); + BodyCalldaimus(obj, "liftslash"); + break; + default: + obj.sq_SetCurrentAnimation(6); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_SetCurrentAttackInfo(5); + local bonus = obj.sq_GetBonusRateWithPassive(86, -1, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); + sq_SetCurrentAttacknUpForce(sq_GetCurrentAttackInfo(obj),sq_GetLevelData(obj,86, 2, sq_GetSkillLevel(obj, 86))); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + obj.sq_SetStaticMoveInfo(0, 120, 120, false); + obj.sq_PlaySound("R_SW_LIFTSLASH"); + break; + } +} + +function onEndCurrentAni_Liftslash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Liftslash(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + + + +function checkExecutableSkill_Darkslash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(143); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Darkslash(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == 0 || state == 14 || state == 108) return true; + return true; +} + +function onSetState_Darkslash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(209); + changeSwordEffect_bykk(obj, "darkslash1", 143); + } + else obj.sq_SetCurrentAnimation(7); + break; + case 3: + obj.sq_SetCurrentAnimation(383); + BodyCalldaimus(obj, "darkslash1"); + break; + default: + obj.sq_SetCurrentAnimation(7); + break; + } + obj.sq_PlaySound("SW_DARKSLASH"); + obj.sq_PlaySound("DARKSLASH_01"); + break; + case 1: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(210); + changeSwordEffect_bykk(obj, "darkslash2", 143); + } + else obj.sq_SetCurrentAnimation(8); + break; + case 3: + obj.sq_SetCurrentAnimation(384); + BodyCalldaimus(obj, "darkslash2"); + break; + default: + obj.sq_SetCurrentAnimation(8); + break; + } + obj.sq_PlaySound("DARKSLASH_02"); + obj.sq_PlaySound("DARKSLASH_02"); + break; + } + + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_SetCurrentAttackInfo(6 + subState); + local bonus = obj.sq_GetBonusRateWithPassive(143, -1, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); +} + +function onEndCurrentAni_Darkslash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Darkslash(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + + +function checkExecutableSkill_Gorecross(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(94); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(94, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Gorecross(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == 0 || state == 14 || state == 108) return true; + return true; +} + +function onSetState_Gorecross(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + print("subState = "+subState); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + obj.getVar("Gorecross").setBool(0,false); + obj.sq_PlaySound("SW_1ATK_02"); + obj.sq_PlaySound("TRIPLE_STEP_12"); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(214); + changeSwordEffect_bykk(obj, "gorecross", 94); + } + else obj.sq_SetCurrentAnimation(9); + break; + case 3: + obj.sq_SetCurrentAnimation(388); + BodyCalldaimus(obj, "gorecross"); + break; + default: + obj.sq_SetCurrentAnimation(9); + break; + } + break; + case 1: + obj.sq_PlaySound("HALFMOON"); + obj.sq_PlaySound("SW_DASHATK"); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(215); + changeSwordEffect_bykk(obj, "gorecross_finish", 94); + } + else obj.sq_SetCurrentAnimation(10); + break; + case 3: + obj.sq_SetCurrentAnimation(389); + BodyCalldaimus(obj, "gorecross_finish"); + break; + default: + obj.sq_SetCurrentAnimation(10); + break; + } + break; + } + + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_SetCurrentAttackInfo(8 + subState); + local bonus = obj.sq_GetBonusRateWithPassive(94, -1, 0, 1.0); + if(subState == 1) bonus = obj.sq_GetBonusRateWithPassive(94, -1, 4, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); +} + +function onEndCurrentAni_Gorecross(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_Gorecross(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("Gorecross").getBool(0) == false){ + obj.setSkillCommandEnable(94,true); + if(obj.sq_IsEnterSkill(94) != -1){ + obj.getVar("Gorecross").setBool(0, true); + } + } + break; + } + +} + +function onKeyFrameFlag_Gorecross(obj, flagIndex) +{ + if(!obj) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(flagIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(94, -1, 2, 1.0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,55,obj.getDirection(),0,94,1,totalDamage,0,0,0,0,0,0,0,1); + break; + case 1: + if(obj.getVar("Gorecross").getBool(0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(94, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } + break; + case 1: + switch(flagIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(94, -1, 6, 1.0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,55,obj.getDirection(),0,94,2,totalDamage,0,0,0,0,0,0,0,1); + break; + } + break; + } + return true; +} + +function onAttack_Gorecross(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + + +function checkExecutableSkill_Siryun(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(88); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(88, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Siryun(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == 0 || state == 14 || state == 108) return true; + return true; +} + +function onSetState_Siryun(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + obj.sq_PlaySound("SW_1ATK_02"); + obj.sq_PlaySound("TRIPLE_STEP_12"); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(222); + changeSwordEffect_bykk(obj, "Siryun", 94); + } + else obj.sq_SetCurrentAnimation(11); + break; + case 3: + obj.sq_SetCurrentAnimation(396); + BodyCalldaimus(obj, "Siryun"); + break; + default: + obj.sq_SetCurrentAnimation(11); + break; + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("SW_SIRYUN"); +} + +function onEndCurrentAni_Siryun(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_Siryun(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("SIRYUN_01"); + local totalDamage = obj.sq_GetBonusRateWithPassive(88, -1, 0, 1.0); + local hitMax = obj.sq_GetBonusRateWithPassive(88, -1, 2, 1.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,120,0,75,obj.getDirection(),0,88,1,totalDamage,hitMax,0,0,0,0,0,0,1); + break; + case 2: + obj.sq_PlaySound("SIRYUN_02"); + local totalDamage = obj.sq_GetBonusRateWithPassive(88, -1, 0, 1.0); + local hitMax = obj.sq_GetBonusRateWithPassive(88, -1, 2, 1.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,125,0,35,obj.getDirection(),0,88,1,totalDamage,hitMax,0,0,0,0,0,0,1); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + return true; +} + + +function checkExecutableSkill_Mountaincrash(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if(state == 6 || state == 147){ + if(sq_GetZPos(obj) < sq_GetIntData(obj, 87, 2)) return false; + } + local isUse = obj.sq_IsUseSkill(87); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(87, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Mountaincrash(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == 0 || state == 14 || state == 108){ + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) < 1) return false; + } + return true; +} + +function onSetState_Mountaincrash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + print("subState = "+subState); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(221); + changeSwordEffect_bykk(obj, "mountaincrashhold", 94); + } + else obj.sq_SetCurrentAnimation(13); + break; + case 3: + obj.sq_SetCurrentAnimation(395); + BodyCalldaimus(obj, "mountaincrashhold"); + break; + default: + obj.sq_SetCurrentAnimation(13); + break; + } + obj.getVar("MountaincrashSet").setInt(0, sq_GetZPos(obj)); + break; + case 1: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(219); + changeSwordEffect_bykk(obj, "mountaincrash", 94); + } + else obj.sq_SetCurrentAnimation(12); + break; + case 3: + obj.sq_SetCurrentAnimation(393); + BodyCalldaimus(obj, "mountaincrash"); + break; + default: + obj.sq_SetCurrentAnimation(12); + break; + } + break; + case 2: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(220); + changeSwordEffect_bykk(obj, "mountaincrashblunt", 94); + } + else obj.sq_SetCurrentAnimation(14); + break; + case 3: + obj.sq_SetCurrentAnimation(394); + BodyCalldaimus(obj, "mountaincrashblunt"); + break; + default: + obj.sq_SetCurrentAnimation(14); + break; + } + break; + } + + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState < 1) return; + obj.sq_SetCurrentAttackInfo(11); + local bonus = obj.sq_GetBonusRateWithPassive(87, -1, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); +} + +function onEndCurrentAni_Mountaincrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(87, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProc_Mountaincrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 1); + if(stateTime > delaySum){ + if(sq_GetZPos(obj) > 0) sq_setCurrentAxisPos(obj, 2, 0); + return; + } + local vz = sq_GetUniformVelocity(obj.getVar("MountaincrashSet").getInt(0), 0, stateTime, delaySum); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onKeyFrameFlag_Mountaincrash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(87, -1, 1, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(87, -1, 2, 1.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,120,0,-sq_GetZPos(obj),obj.getDirection(),0,87,1,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + } + return true; +} + +function onAttack_Mountaincrash(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + + +function checkExecutableSkill_Snakeshadow(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(91); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_getGrowType(obj) == 5) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(91, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Snakeshadow(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Snakeshadow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(224); + changeSwordEffect_bykk(obj, "SnakeShadow_Ready", 91); + } + else obj.sq_SetCurrentAnimation(20); + break; + case 3: + obj.sq_SetCurrentAnimation(398); + BodyCalldaimus(obj, "SnakeShadow_Ready"); + break; + default: + obj.sq_SetCurrentAnimation(20); + break; + } + obj.getVar("SnakeshadowSet").setInt(0, 0); + break; + case 1: + local sub = obj.getVar("SnakeshadowSet").getInt(0); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + switch(sub){ + case 0: + obj.sq_SetCurrentAnimation(225); + changeSwordEffect_bykk(obj, "SnakeShadow_Side_Body", 91); + break; + case 1: + obj.sq_SetCurrentAnimation(226); + changeSwordEffect_bykk(obj, "SnakeShadow_Up_Body", 91); + break; + case 2: + obj.sq_SetCurrentAnimation(223); + changeSwordEffect_bykk(obj, "SnakeShadow_Down_Body", 91); + break; + } + } + else{ + switch(sub){ + case 0: obj.sq_SetCurrentAnimation(18); break; + case 1: obj.sq_SetCurrentAnimation(17); break; + case 2: obj.sq_SetCurrentAnimation(19); break; + } + } + break; + case 3: + switch(sub){ + case 0: + obj.sq_SetCurrentAnimation(399); + BodyCalldaimus(obj, "mountaincrash"); + break; + case 1: + obj.sq_SetCurrentAnimation(400); + BodyCalldaimus(obj, "mountaincrash"); + break; + case 2: + obj.sq_SetCurrentAnimation(397); + BodyCalldaimus(obj, "mountaincrash"); + break; + } + break; + default: + switch(sub){ + case 0: obj.sq_SetCurrentAnimation(18); break; + case 1: obj.sq_SetCurrentAnimation(17); break; + case 2: obj.sq_SetCurrentAnimation(19); break; + } + break; + } + local atkIndex = [13, 12, 14]; + obj.sq_SetCurrentAttackInfo(atkIndex[sub]); + local bonus = obj.sq_GetBonusRateWithPassive(91, -1, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); + break; + case 2: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(220); + changeSwordEffect_bykk(obj, "mountaincrashblunt", 94); + } + else obj.sq_SetCurrentAnimation(17); + break; + case 3: + obj.sq_SetCurrentAnimation(394); + BodyCalldaimus(obj, "mountaincrashblunt"); + break; + default: + obj.sq_SetCurrentAnimation(17); + break; + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Snakeshadow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(91, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_Snakeshadow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("SnakeshadowSet").getInt(0) == 0){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_SendChangeSkillEffectPacket(obj, 91); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_SendChangeSkillEffectPacket(obj, 91); + } + } + break; + } +} + +function onChangeSkillEffect_Snakeshadow(obj, skillIndex, reciveData) +{ + if(!obj) return; + local sub = reciveData.readDword(); + obj.getVar("SnakeshadowSet").setInt(0, sub); +} + +function onAttack_Snakeshadow(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local sub = obj.getVar("SnakeshadowSet").getInt(0); + if(sub == 2){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local apdPath = "character/atswordman/snakeshadow/ap_snakeshadow.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(500); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 300, true, AddAppendage); + } + } + break; + } + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + +//索魂刺 +function checkExecutableSkill_AtExecution(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(34); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(134, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_AtExecution(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_AtExecution(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(213); + changeSwordEffect_bykk(obj, "Execution_body", 34); + } + else obj.sq_SetCurrentAnimation(23); + break; + case 3: + obj.sq_SetCurrentAnimation(387); + BodyCalldaimus(obj, "Execution_body"); + break; + default: + obj.sq_SetCurrentAnimation(23); + break; + } + obj.getVar("SnakeshadowSet").setInt(0, 0); + break; + case 1: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(212); + changeSwordEffect_bykk(obj, "ExecutionLoop_body", 34); + } + else obj.sq_SetCurrentAnimation(24); + break; + case 3: + obj.sq_SetCurrentAnimation(386); + BodyCalldaimus(obj, "ExecutionLoop_body"); + break; + default: + obj.sq_SetCurrentAnimation(24); + break; + } + break; + case 2: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(211); + changeSwordEffect_bykk(obj, "ExecutionAttack_body", 34); + } + else obj.sq_SetCurrentAnimation(25); + break; + case 3: + obj.sq_SetCurrentAnimation(385); + BodyCalldaimus(obj, "ExecutionAttack_body"); + break; + default: + obj.sq_SetCurrentAnimation(25); + break; + } + obj.sq_SetCurrentAttackInfo(19); + local bonus = obj.sq_GetBonusRateWithPassive(34, -1, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); + local size = obj.getVar("executionTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("executionTar").get_obj_vector(i); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/execution/ap_execution.nut"); + if(addAppendage){ + addAppendage.sq_SetValidTime(1000); + } + } + } + local effObj = obj.getVar("executionObj").get_obj_vector(0); + if(effObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effObj); + colObj.setTimeEvent(1, 1000, 1, true); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_AtExecution(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(134, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_AtExecution(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + obj.getVar("executionObj").clear_obj_vector(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,0,obj.getDirection(),0,34,1,0,0,0,0,0,0,0,0,1); + break; + } + return true; +} + +function onEndState_AtExecution(obj, newState) +{ + if(newState != 134){ + local size = obj.getVar("executionTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("executionTar").get_obj_vector(i); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/execution/ap_execution.nut"); + if(addAppendage){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/execution/ap_execution.nut"); + } + } + } + local effObj = obj.getVar("executionObj").get_obj_vector(0); + if(effObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effObj); + colObj.setTimeEvent(1, 1000, 1, true); + } + } +} + +function onAttack_AtExecution(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + + + +function checkExecutableSkill_Chainslash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(32); + if (isUse){ + obj.getVar("chainslashBool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Chainslash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Chainslash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local set = [[31, 32],[207, 208],["chainslashtp01_body", "chainslashtp02_body"],[381, 382], ["chainslashtp01_body", "chainslashtp02_body"],[6500, 6000]]; + local growType = sq_getGrowType(obj); + switch(subState){ + case 0: + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ + obj.sq_SetCurrentAnimation(set[1][obj.getVar("ChainslashSet").getInt(3)]); + changeSwordEffect_bykk(obj, set[2][obj.getVar("ChainslashSet").getInt(3)], 91); + } + else obj.sq_SetCurrentAnimation(set[0][obj.getVar("ChainslashSet").getInt(3)]); + break; + case 3: + obj.sq_SetCurrentAnimation(set[3][obj.getVar("ChainslashSet").getInt(3)]); + BodyCalldaimus(obj, set[4][obj.getVar("ChainslashSet").getInt(3)]); + break; + default: + obj.sq_SetCurrentAnimation(set[0][obj.getVar("ChainslashSet").getInt(3)]); + break; + } + if(obj.getVar("chainslashBool").getBool(0)){ + obj.getVar("chainslashBool").setBool(0, false); + local hitMax = obj.sq_GetBonusRateWithPassive(32, -1, 2, 1.0) + 100; + if(sq_GetSkillLevel(obj, 58) > 0) hitMax = hitMax + 2; + obj.getVar("ChainslashSet").setInt(0, hitMax); + obj.getVar("ChainslashSet").setInt(1, 1); + obj.getVar("ChainslashSet").setInt(2, 1); + } + break; + } + obj.getVar("chainslashBool").setBool(1, false); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_SetCurrentAttackInfo(20 + subState); + local bonus = obj.sq_GetBonusRateWithPassive(32, -1, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); + local currentAni = obj.getCurrentAnimation(); + local speedRate = (set[5][obj.getVar("ChainslashSet").getInt(3)] / currentAni.getDelaySum(0, 0)).tofloat(); + local speed = 4.0 * speedRate; + if(speedRate <= 150) speed = 6.0 * speedRate; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + if(obj.getVar("ChainslashSet").getInt(3) == 0) obj.getVar("ChainslashSet").setInt(3, 1); + else if(obj.getVar("ChainslashSet").getInt(3) == 1) obj.getVar("ChainslashSet").setInt(3, 0); +} + +function onEndCurrentAni_Chainslash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_Chainslash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("chainslashBool").getBool(1) == false){ + local hitMax = obj.getVar("ChainslashSet").getInt(0); + local hitCount = obj.getVar("ChainslashSet").getInt(1); + if(hitCount + 1 <= hitMax){ + obj.setSkillCommandEnable(32,true); + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(obj.sq_IsEnterSkill(32) != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + // print("hitCount = "+hitCount); + obj.getVar("chainslashBool").setBool(1, true); + } + } + } + else{ + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex >= 3){ + local hitCount = obj.getVar("ChainslashSet").getInt(1); + obj.getVar("ChainslashSet").setInt(1, hitCount + 1); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } +} + +function onKeyFrameFlag_Chainslash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + // obj.getVar("chainslashBool").setBool(1, true); + break; + } + return true; +} + +function onAttack_Chainslash(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local sub = obj.getVar("SnakeshadowSet").getInt(0); + if(sub == 2){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local apdPath = "character/atswordman/snakeshadow/ap_snakeshadow.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(500); + sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 300, true, AddAppendage); + } + } + break; + } + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + break; + case 2: + if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local weaponType = getDualWeaponType(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); + switch(weaponType){ + case 0://光 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 1://鈍 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + case 2://太 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); + break; + case 4://短 + local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + } + break; + case 3: + Calldaimus_onAttack(obj, damager, boundingBox, isStuck); + break; + } +} + + + +/* +function getCurrentModuleDamageRate_CreatorMage(obj) +{ + local rate = 0.0; + if (obj.sq_GetSkillLevel(15) > 0){ + rate = rate * (100 + sq_GetLevelData(obj, 15, 0, obj.sq_GetSkillLevel(15)) / 10) / 100; + } + if(sq_getGrowType(obj) == 4) rate += getDamageRate_DarkTempler_bykk(obj).tofloat(); + else if(sq_getGrowType(obj) == 2) rate += getDamageRate_VagaBond_bykk(obj).tofloat(); + else if(sq_getGrowType(obj) == 3) rate += getDamageRate_Demonslayer_bykk(obj).tofloat(); + if (obj.sq_GetSkillLevel(169) > 0) rate = rate * (100.0 + sq_GetLevelData(obj, 169, 0, obj.sq_GetSkillLevel(169)).tofloat() / 10.0) / 100.0; + if (obj.sq_GetSkillLevel(169) > 0) rate = rate * (100.0 + sq_GetLevelData(obj, 169, 1, obj.sq_GetSkillLevel(169)).tofloat() / 10.0) / 100.0; + return rate / 1000.0 + 1.0; +} +*/ + +function onSetState_ATSwordmanThrow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local skillIndex = obj.getThrowIndex() + local substate = obj.sq_GetVectorData(datas, 0) + obj.setSkillSubState(substate) + if(skillIndex == SKILL_SWORDMASTER_BYKK_CHANGESWORD){ + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(66); + break; + } + } +} + +function onAfterSetState_ATSwordmanThrow_bykk(obj, state, datas, isResetTimer) +{ + if(!obj.isMyControlObject()) return; + local skillIndex = obj.getThrowIndex(); + if(skillIndex == SKILL_SWORDMASTER_BYKK_CHANGESWORD){ + local throwState = obj.getThrowState(); + switch(throwState){ + case 0: + obj.setIsCustomSelectSkill(true); + break; + case 1: + local element = obj.getThrowElement(); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(100); + obj.sq_IntVectPush(element); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element2 = addAppendage.getVar("elementIndex").getInt(10); + if(element == element2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(100); + obj.sq_IntVectPush(element); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(100); + obj.sq_IntVectPush(element + 100); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(100); + obj.sq_IntVectPush(element); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } + } +} + +function onEndState_ATSwordmanThrow(obj, newState) +{ + if(newState == STATE_STAND){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local element = colObj.getVar("custom").getInt(10); + switch(element){ + case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; + case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; + case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; + case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; + } + colObj.setValid(false); + } + } +} + + +function changeSwordEffect_bykk(obj, AniName, skillIndex) +{ + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + local elementArr = [ + ["_fire_x.ani","_fire_a.ani","_fire_b.ani"], + ["_ice_x.ani","_ice_a.ani","_ice_b.ani"], + ["_dark_b1.ani","_dark_a.ani","_dark_a2.ani","_dark_b.ani","_dark_b2.ani"], + ["_light_x.ani","_light_a.ani","_light_b.ani"] + ]; + local aniPath = []; + for(local i = 0; i < elementArr[element].len(); ++i){ + aniPath.push("effect/animation/atchangeswordweapon/" + AniName + elementArr[element][i]); + } + + local drawLayer = 1; + if(skillIndex == 96) drawLayer = 1; + else if(skillIndex == 141) drawLayer = -1; + + foreach(key,path in aniPath){ + obj.sq_AddStateLayerAnimation(drawLayer,obj.sq_CreateCNRDAnimation(path), 0, 0); + } + +} + + + +function getStayAni_ATSwordman(obj) +{ + if(!obj) return null; + local sq_var = obj.getVar(); + local ani = obj.sq_GetStayAni(); + + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(194); break; + case 1: ani = obj.sq_GetCustomAni(193); break; + case 2: ani = obj.sq_GetCustomAni(196); break; + case 3: ani = obj.sq_GetCustomAni(195); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(361); + break; + } + return ani; +} + +function getRestAni_ATSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetRestAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(186); break; + case 1: ani = obj.sq_GetCustomAni(185); break; + case 2: ani = obj.sq_GetCustomAni(188); break; + case 3: ani = obj.sq_GetCustomAni(187); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(359); + break; + case 0: + if(sq_GetSkillLevel(obj, 127) > 0) ani = obj.sq_GetCustomAni(708); + break; + } + return ani; +} + +function getMoveAni_ATSwordman(obj) +{ + if(!obj) return null; + local sq_var = obj.getVar(); + local ani = obj.sq_GetMoveAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(178); break; + case 1: ani = obj.sq_GetCustomAni(177); break; + case 2: ani = obj.sq_GetCustomAni(180); break; + case 3: ani = obj.sq_GetCustomAni(179); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(357); + break; + } + return ani; +} + +function getSitAni_ATSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetSitAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(190); break; + case 1: ani = obj.sq_GetCustomAni(189); break; + case 2: ani = obj.sq_GetCustomAni(192); break; + case 3: ani = obj.sq_GetCustomAni(191); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(360); + break; + } + return ani; +} + +function getDamageAni_ATSwordman(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetDamageAni(index); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(index){ + case 0: + switch(element){ + case 0: ani = obj.sq_GetCustomAni(145); break; + case 1: ani = obj.sq_GetCustomAni(146); break; + case 2: ani = obj.sq_GetCustomAni(148); break; + case 3: ani = obj.sq_GetCustomAni(147); break; + } + break; + case 1: + switch(element){ + case 0: ani = obj.sq_GetCustomAni(149); break; + case 1: ani = obj.sq_GetCustomAni(150); break; + case 2: ani = obj.sq_GetCustomAni(152); break; + case 3: ani = obj.sq_GetCustomAni(151); break; + } + break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0){ + if(index == 0) ani = obj.sq_GetCustomAni(350); + else if(index == 1) ani = obj.sq_GetCustomAni(351); + } + break; + } + return ani; +} + +function getDownAni_ATSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDownAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(162); break; + case 1: ani = obj.sq_GetCustomAni(161); break; + case 2: ani = obj.sq_GetCustomAni(164); break; + case 3: ani = obj.sq_GetCustomAni(163); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(353); + break; + } + return ani; +} + +function getOverturnAni_ATSwordman(obj) +{ + if(!obj) return null; + local sq_var = obj.getVar(); + local ani = obj.sq_GetOverturnAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(182); break; + case 1: ani = obj.sq_GetCustomAni(181); break; + case 2: ani = obj.sq_GetCustomAni(184); break; + case 3: ani = obj.sq_GetCustomAni(183); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(358); + break; + } + return ani; +} + +function getJumpAni_ATSwordman(obj) +{ + if(!obj) return null; + local sq_var = obj.getVar(); + local ani = obj.sq_GetJumpAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(170); break; + case 1: ani = obj.sq_GetCustomAni(169); break; + case 2: ani = obj.sq_GetCustomAni(172); break; + case 3: ani = obj.sq_GetCustomAni(171); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(355); + break; + } + return ani; +} + +function getJumpAttackAni_ATSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAttackAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(174); break; + case 1: ani = obj.sq_GetCustomAni(173); break; + case 2: ani = obj.sq_GetCustomAni(176); break; + case 3: ani = obj.sq_GetCustomAni(175); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(356); + break; + case 4: + if(sq_GetSkillLevel(obj, 62) > 0) ani = obj.sq_GetCustomAni(513); + break; + case 0: + if(sq_GetSkillLevel(obj, 127) > 0) ani = obj.sq_GetCustomAni(630); + break; + } + return ani; +} + +function getDashAni_ATSwordman(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(154); break; + case 1: ani = obj.sq_GetCustomAni(153); break; + case 2: ani = obj.sq_GetCustomAni(156); break; + case 3: ani = obj.sq_GetCustomAni(155); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(352); + break; + } + return ani; +} + +function getGetItemAni_ATSwordman(obj) +{ + if(!obj) return null; + local sq_var = obj.getVar(); + local ani = obj.sq_GetGetItemAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: ani = obj.sq_GetCustomAni(166); break; + case 1: ani = obj.sq_GetCustomAni(165); break; + case 2: ani = obj.sq_GetCustomAni(168); break; + case 3: ani = obj.sq_GetCustomAni(167); break; + } + break; + case 3: + if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(354); + break; + } + return ani; +} + +function isChangeSword_Attack(obj,damager,bounding_box) +{ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return; + local timer = obj.getVar("isChangeSword").get_ct_vector(0); + if(!timer){ + obj.getVar("isChangeSword").clear_ct_vector(); + obj.getVar("isChangeSword").push_ct_vector(); + timer = obj.getVar("isChangeSword").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + local currentT = timer.Get(); + local coolTime = 300; + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY))) / 100; + if(currentT >= coolTime){ + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 2, 1.0); + switch(element){ + case 1: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 2, 1.0); break; + case 2: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 9, 1.0); break; + case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 6, 1.0); break; + } + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 9, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY))) / 100; + else if(obj.getVar("elementalsword").get_obj_vector_size() > 0) + totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0)) / 100; + local z = sq_GetCenterZPos(bounding_box); + if(element == 3) z = 0; + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut")){ + // if(obj.getWeaponSubType() == 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1); + // } + // else + cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1); + + local weaponType = obj.getWeaponSubType();//0短1太2钝3巨 + switch(weaponType){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) < 0) break; + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local element = colObj.getVar("custom").getInt(10); + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0) / 100; + if(element == 3) z = 0; + else if(z == 0 && element != 3) z = sq_GetCenterZPos(bounding_box); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1); + } + break; + case 1: + case 2: + case 3: + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local state = colObj.getState(); + switch(state % 10){ + case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; + case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; + case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; + case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; + } + colObj.setValid(false); + } + break; + } + } +} + +function isMagicSwordUp_Attack(obj,damager,bounding_box) +{ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut")) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return; + local timer = obj.getVar("isMagicSwordUp").get_ct_vector(0); + if(!timer){ + obj.getVar("isMagicSwordUp").clear_ct_vector(); + obj.getVar("isMagicSwordUp").push_ct_vector(); + timer = obj.getVar("isMagicSwordUp").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + local currentT = timer.Get(); + local coolTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4); + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY))) / 100; + print("coolTime = "+coolTime); + if(currentT >= coolTime){ + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + if(loadSlot && loadSlot.getRemainLoadNumber() < sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)) loadSlot.increaseLoadCount(1); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100, level = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 2, skill_level), prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 7, skill_level), time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 9, skill_level), damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 8, skill_level); + switch(element){ + case 1://冰 + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; + prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4, skill_level); + time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 3, skill_level); + break; + case 2://暗 + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; + prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 13, skill_level); + time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 11, skill_level); + break; + case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;//光 + } + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1)) / 1000; + local z = sq_GetCenterZPos(bounding_box); + local x = 0; + if(element == 1){x = 50;z = z - 30;} + cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,x,0,z + sq_getRandom(-10, 10),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDUP,element,totalDamage,level,prob,time,damage,0,0,0,1); + + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){ + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local element = colObj.getVar("custom").getInt(10); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100, level = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 2, skill_level), prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 7, skill_level), time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 9, skill_level), damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 8, skill_level); + switch(element){ + case 1://冰 + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; + prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4, skill_level); + time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 3, skill_level); + break; + case 2://暗 + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; + prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 13, skill_level); + time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 11, skill_level); + break; + case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;//光 + } + local x = 0; + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0) / 100; + if(element == 1){x = 50;z = z - 30;} + cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,x,0,z + sq_getRandom(-10, 10),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDUP,element,totalDamage,level,prob,time,damage,0,0,0,1); + } + } + } +} + +function setWeaponMaster_attackElement(obj) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + local element = addAppendage.getVar("elementIndex").getInt(10); + local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); + } + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local element = colObj.getVar("custom").getInt(10); + local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); + } +} + +function startSkillCoolTime_SwordMaster_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + if(obj.getVar("Drawsword_cooltime").getBool(0)){ + obj.getVar("Drawsword_cooltime").setBool(0, false); + local decreaseRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 1); + local coolTime = currentCoolTime * (100 - decreaseRate) / 100; + return coolTime; + } +} + +function SetAddskillLevel_bykk(obj) +{ + // + if(sq_GetSkillLevel(obj, 254) > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/gunner/latentability/ap_addskilllevel.nut", true); + } + /**/ +} + +function resetDungeonStart_bykk(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) +{ + // + // if(sq_GetSkillLevel(obj, 254) > 0){ + // if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/gunner/latentability/ap_addskilllevel.nut", true); + // else{ + // local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut"); + // if(addAppendage) addAppendage.getVar("value").setInt(0, 0); + // } + // } +} + +function proc_appendage_addskilllevelbykk(appendage) +{ + if(!appendage) return; + local obj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj); + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local t = appendage.getVar("time").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t && t.isOnEvent(currentT)){ + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_LATENTABILITY); + local value = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 50, skillLevel); //1-50級技能等級 + local sqrJob = sq_getJob(sqrChr); + if(ADD_SKILLLEVEL.rawget(sqrJob) && value > 0){ + // if(value != appendage.getVar("value").getInt(0)){ + // appendage.getVar("value").setInt(0, value); + foreach(sklindex in ADD_SKILLLEVEL.rawget(sqrJob)){ + addSkillLevelTime(sqrChr, sklindex, value, 3000); + } + return; + // } + } + } +} + +function onStart_appendage_addskilllevelbykk(appendage) +{ + if(!appendage) return; + appendage.getVar("time").clear_timer_vector(); + appendage.getVar("time").push_timer_vector(); + local t_01 = appendage.getVar("time").get_timer_vector(0); + t_01.setParameter(3000, -1); + t_01.resetInstant(0); + appendage.getVar("value").setInt(0, 0); + print("load"); +} + +function onEnd_appendage_addskilllevelbykk(appendage) +{ + if(!appendage) return; +} + diff --git a/user/116.205.165.25/3_atswordman_2.c b/user/116.205.165.25/3_atswordman_2.c new file mode 100644 index 0000000..d15d24d --- /dev/null +++ b/user/116.205.165.25/3_atswordman_2.c @@ -0,0 +1,2513 @@ + +function setCustomData_po_atswordman_bykk_kak(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("job").setInt(0,job); + obj.getVar("skillIndex").setInt(0,skillIndex); + obj.getVar("subtype").setInt(0,subtype); + + switch(job){ + case 0: + switch(skillIndex){ + case 94: + local aniPath = "passiveobject/atswordman_bykk/common/atgorecross/projectile_a_eff03.ani"; + if(subtype == 2) aniPath = "passiveobject/atswordman_bykk/common/atgorecross/projectile_b_eff03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 185 + subtype)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 88: + local aniPath = "passiveobject/atswordman_bykk/common/atsiryun/siryungum.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 188)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.setTimeEvent(1, 80, -1, false); + obj.sq_SetMoveParticle("particle/bloodseal_move.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj, 0, 600); + break; + case 87: + local aniPath = "passiveobject/atswordman_bykk/common/atmountaincrash/mountaincrashsub.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 189)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true) + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 34: + sqrChr.getVar("executionObj").push_obj_vector(obj); + local size = sqrChr.getVar("executionTar").get_obj_vector_size(); + if(size < 1) sqrChr.getVar("executionTar").clear_obj_vector(); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic1.ani"; + switch(subtype){ + case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic2.ani"; break; + case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic3.ani"; break; + case 4: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic3.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 122)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sizeRate = receiveData.readDword(); + local roate = receiveData.readDword(); + sq_SetCustomRotate(obj, sq_ToRadian(roate.tofloat())); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + local sub = receiveData.readDword(); + if(sub < 4){ + local level = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + local activeStatusSet = [ACTIVESTATUS_BURN,ACTIVESTATUS_FREEZE,ACTIVESTATUS_BLIND,ACTIVESTATUS_LIGHTNING]; + if(damage == 0) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, activeStatusSet[sub], prob, level, time); + else sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, activeStatusSet[sub], prob, level, time, damage); + } + obj.sq_SetMoveParticle("Particle/Flash.ptl", 0.0, 0.0); + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + local dis = sq_GetIntData(sqrChr, SKILL_SWORDMASTER_BYKK_ATFLASH, 1); + local speed = (dis.tofloat() / 0.4).tointeger(); + sq_SetSpeedToMoveParticle(obj,0,speed); + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + switch(subtype){ + case 1: + sqrChr.getVar("breakSwordDance_circle").clear_obj_vector(); + sqrChr.getVar("breakSwordDance_circle").push_obj_vector(obj); + obj.setTimeEvent(1, 1000, -1, true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + sqrChr.getVar("breakSwordDance_sword"+sub.tostring()).clear_obj_vector(); + sqrChr.getVar("breakSwordDance_sword"+sub.tostring()).push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 10: + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local atkIndex = [103,104,102,105,106]; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[element])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_mu.ani"; + switch(element){ + case 0: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_fire.ani"; break; + case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_ice.ani"; break; + case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_dark.ani"; break; + case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_light.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local sizeRate = receiveData.readDword(); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.setTimeEvent(2, 100, 1, true); + break; + case 11: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/finish/atbreaksworddance_finish_boom_7.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/finish/atbreaksworddance_finish_focus1.ani"),true); + local sizeRate = receiveData.readDword(); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 20: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/finish/atbreaksworddance_finish_boom_7.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 192)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + switch(subtype){ + case 0: + local element = receiveData.readDword(); + obj.getVar("custom").setInt(10, element); + sqrChr.getVar("elementalsword").clear_obj_vector(); + sqrChr.getVar("elementalsword").push_obj_vector(obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + obj.addSetStatePacket(element + 100, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/fire_fire_dodge.ani", attackIndex = 109; + switch(element){ + case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/ice_ice_dodge.ani";attackIndex = 111; break; + case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/dark_dark_normal.ani";attackIndex = 108; break; + case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/light_first.ani";attackIndex = 110; break; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(element == 2){ + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + obj.getVar("custom").clear_obj_vector(); + obj.getVar("custom").push_obj_vector(targetObj); + if(targetObj){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + sq_moveWithParent(targetObj, obj); + obj.setTimeEvent(1,180,1,false); + } + } + else if(element == 3){ + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/thunder_dodge.ani", 0, 0, 0); + obj.setTimeEvent(2,90,2,false); + } + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + switch(subtype){ + case 1: + sqrChr.getVar("devilSlash_atk").clear_obj_vector(); + sqrChr.getVar("devilSlash_atk").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local element = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, element); + obj.getVar("custom").setInt(13, 0); + obj.getVar("custom").setInt(14, sizeRate); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdevilslash/devilslashmultiattack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local atkIndex = 176; + if(element < 4) atkIndex = atkIndex + (element + 1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + sq_moveWithParent(sqrChr, obj); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local element = receiveData.readDword(); + local aniPath = ""; + switch(element){ + case 0: aniPath = "character/swordman/effect/animation/atdevilslash/fire/finish_normal.ani"; break; + case 1: aniPath = "character/swordman/effect/animation/atdevilslash/ice/finish_normal.ani"; break; + case 2: aniPath = "character/swordman/effect/animation/atdevilslash/dark/finish_normal.ani"; break; + case 3: aniPath = "character/swordman/effect/animation/atdevilslash/light/finish_normal.ani"; break; + case 4: aniPath = "character/swordman/effect/animation/atdevilslash/nothing/finish_normal.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local atkIndex = 181; + if(element < 4) atkIndex = 182 + element; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 10: + //totalDamage,speedRate,sizeRate,flagIndex + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local flagIndex = receiveData.readDword(); + local aniPath = ""; + switch(flagIndex){ + case 31: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_00.ani"; break; + case 32: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_01.ani"; break; + case 33: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_02.ani"; break; + case 34: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_03.ani"; break; + case 35: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_04.ani"; break; + case 36: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_05.ani"; break; + } + if(aniPath == "") sq_SendDestroyPacketPassiveObject(obj); + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 194)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 11: + //totalDamage,speedRate,sizeRate,flagIndex + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + // local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashchargefinisheffect_17.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 193)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + // pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, totalDamage2); + obj.getVar("custom").setInt(13, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 113)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(12, totalDamage2); + obj.getVar("custom").setInt(13, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/horizon/atdragonuptalismanswordeffect_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 5); + // obj.setTimeEvent(2, delay / hitMax, hitMax - 1, false); + sq_moveWithParent(sqrChr, obj); + break; + case 3: + sq_moveWithParent(sqrChr, obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 117)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/horizon/front_blast_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetShake(obj, 16, 200); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local time = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, element); + obj.getVar("custom").setInt(12, time); + obj.getVar("custom").setInt(13, totalDamage2); + obj.getVar("custom").setInt(14, sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 121)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/create_nova_b_attack.ani"; + if(sub > 0) aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/ex_blunt_nova.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(sub < 1){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/create_nova_b.ani"),true); + } + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 121)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/ex_blunt_shockwave1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local sizeRate = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sizeRate = 1.5 * sizeRate; + } + else sizeRate = 1.5 * sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 10: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atexcalibur/new/newatexcaliburceffect_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 198)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/newswordmaster/animation/atexcalibur/new/newatexcaliburcbottom_00.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 123)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladeexplosionfront_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local sizeRate = receiveData.readDword(); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + local aniPath2 = "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladeexplosionbottom_00.ani"; + createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 124)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladeswordattack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 3: + local element = receiveData.readDword(); + local delay = receiveData.readDword(); + local delay2 = receiveData.readDword(); + local angle = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10, element); + obj.getVar("custom").setInt(11, delay); + obj.getVar("custom").setInt(12, delay2); + obj.getVar("custom").setInt(13, totalDamage); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + obj.getVar("custom").setInt(20, sq_GetXPos(obj)); + obj.getVar("custom").setInt(21, sq_GetZPos(obj)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + switch(subtype){ + case 1://character/swordman/atanimation/halfmoon2_obj.ani + local aniPath = "character/swordman/atanimation/halfmoon2_obj.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + currentAni.setSpeedRate(speedRate.tofloat()); + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(false); + if(hitMax > 1) obj.setTimeEvent(1, delay / (hitMax + 1), hitMax - 1, false); + sq_moveWithParent(sqrChr, obj); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, sq_GetXPos(obj)); + obj.getVar("custom").setInt(13, 250); + obj.getVar("custom").setInt(14, 0); + obj.getVar("custom").setInt(15, speedRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, sq_GetXPos(obj)); + obj.getVar("custom").setInt(13, 250); + obj.getVar("custom").setInt(14, 0); + obj.getVar("custom").setInt(15, totalDamage2); + obj.getVar("custom").setInt(16, sizeRate); + obj.getVar("custom").setInt(17, speedRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/bluntmasterysub/illusionbladesub.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 127)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + switch(subtype){ + case 1://魔法陣 + sqrChr.getVar("jackCatch_circle").clear_obj_vector(); + sqrChr.getVar("jackCatch_circle").push_obj_vector(obj); + obj.setTimeEvent(4, 1000, -1, true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, speedRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://火冰暗光特效 + local element = receiveData.readDword(); + local VarName = ["jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark","jackCatch_circle_light"]; + sqrChr.getVar(VarName[element]).clear_obj_vector(); + sqrChr.getVar(VarName[element]).push_obj_vector(obj); + obj.getVar("custom").setInt(10, element); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, speedRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3://爆炸 + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/boom_crack_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 129)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sizeRate = receiveData.readDword(); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local time = receiveData.readDword(); + obj.getVar("custom").setInt(10, time); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5: + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local moveX = receiveData.readDword(); + local moveY = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, element); + obj.getVar("custom").setInt(12, moveX); + obj.getVar("custom").setInt(13, moveY); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + switch(subtype){ + case 1: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atlaevateinn/slash_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = receiveData.readDword(); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local delay = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, element); + obj.getVar("custom").setInt(12, totalDamage2); + obj.getVar("custom").setInt(13, hitMax); + obj.setTimeEvent(3, delay, 1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + switch(subtype){ + case 0: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_fire_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local level = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 143)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time, damage); + break; + case 1: + local totalDamage = receiveData.readDword(); + local level = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 145)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_dark_14.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local level = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 142)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); + break; + case 3: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 144)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + switch(subtype){ + case 1: + local aniPath = "character/swordman/effect/animation/atthunderslash/thunderslash_shockwave.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 149)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + print("sizeRate = "+sizeRate); + local aniPath = ""; + switch(element){ + case 0: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivefirefront_00.ani"; break; + case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivecoldfront_00.ani"; break; + case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivedarkfront_00.ani"; break; + case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivelightningfront_00.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local aniPath2 = ["passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivefirebottom_00.ani","passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivecoldbottom_00.ani","passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivedarkbottom_00.ani","passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivelightningbottom_00.ani"]; + createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2[element],true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + local atkSet = [147,150,146,148,149]; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[element])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //obj.setTimeEvent() + break; + } + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + switch(subtype){ + case 1: + sqrChr.getVar("timeslash_bottom").clear_obj_vector(); + sqrChr.getVar("timeslash_bottom").push_obj_vector(obj); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/attimeslash/attimeslashattackbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 151)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/attimeslash/attimeslashattackbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 152)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + switch(subtype){ + case 0://短劍 + local totalDamage = receiveData.readDword(); + local element = receiveData.readDword(); + local subState = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/slash_0"+(subState+1).tostring()+".ani"; + if(element < 4){ + switch(element){ + case 0: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/fireslash_0"+(subState+1).tostring()+".ani"; break; + case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/iceslash_0"+(subState+1).tostring()+".ani"; break; + case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/darkslash_0"+(subState+1).tostring()+"_slash.ani"; break; + case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/lightslash_0"+(subState+1).tostring()+".ani"; break; + } + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local atkSet = [[159,160,161,162],[163,164,165,166],[167,168,169,170],[155,156,157,158],[171,172,173,174]]; + + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[element][subState])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1://鈍器 + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/shock_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 153)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3://巨劍 + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/hit/hit_wind.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 153)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/hit/floor_shock.ani"; + local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local pAni = pooledObj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + } + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local delay = receiveData.readDword(); + sqrChr.getVar("blooddance_obj").clear_obj_vector(); + sqrChr.getVar("blooddance_obj").push_obj_vector(obj); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atblooddance/atblooddance_devilswordtechloop1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + local speedRate = 3000.0 / delay.tofloat(); + pAni.setSpeedRate(speedRate); + break; + case 2: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atblooddance/atblooddance_devilswordtechfinish2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword04_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 100)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 12); + obj.setTimeEvent(1, delaySum / (hitMax + 1), hitMax, true); + break; + case 2: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword01finisheffect_18.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 101)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + switch(subtype){ + case 1://發射 + local totalDamage = receiveData.readDword();//迦羅亞多段物理攻擊力 + local sizeRate = receiveData.readDword();//印痕大小比率 + local damageRate = receiveData.readDword();//印痕多段物理攻擊力百分比 + local damageRate2 = receiveData.readDword();//爆炸物理攻擊力百分比 + local lifeTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 2);//持續時間 + local hitTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 3);//迦羅亞多段攻擊間隔 + local createTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 0);//印痕掉落間隔 + local lifeTime2 = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 5);//印痕持續時間 + local hitTime2 = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 4);//印痕多段攻擊間隔 + local movespeedRate = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 1, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL));//減速率 + obj.getVar("custom").setInt(10, lifeTime); + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, damageRate); + obj.getVar("custom").setInt(13, damageRate2); + obj.getVar("custom").setInt(14, hitTime); + obj.getVar("custom").setInt(15, movespeedRate); + + obj.getVar("custom").setInt(20, createTime); + obj.getVar("custom").setInt(21, lifeTime2); + obj.getVar("custom").setInt(22, sizeRate); + obj.getVar("custom").setInt(23, hitTime2); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/bloodseal_bullet_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/bloodseal_move.ptl", 0.0, 0.0); + break; + case 2://黏住主體 + local lifeTime = receiveData.readDword();//持續時間 + local totalDamage = receiveData.readDword();//迦羅亞多段物理攻擊力 + local hitTime = receiveData.readDword();//迦羅亞多段攻擊間隔 + local createTime = receiveData.readDword();//印痕掉落間隔 + local lifeTime2 = receiveData.readDword();//印痕持續時間 + local sizeRate = receiveData.readDword();//印痕大小比率 + local damageRate = receiveData.readDword();//印痕多段物理攻擊力百分比 + local hitTime2 = receiveData.readDword();//印痕多段攻擊間隔 + local damageRate2 = receiveData.readDword();//爆炸物理攻擊力百分比 + local totalDamage2 = totalDamage * damageRate2 / 100;//爆炸物理攻擊力 + local powerDamage = totalDamage * damageRate / 100;//印痕多段物理攻擊力 + local id = receiveData.readDword(); + obj.getVar("custom").setInt(10, lifeTime); + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, totalDamage2); + obj.getVar("custom").setInt(13, hitTime); + + obj.getVar("custom").setInt(20, createTime); + obj.getVar("custom").setInt(21, lifeTime2); + obj.getVar("custom").setInt(22, powerDamage); + obj.getVar("custom").setInt(23, sizeRate); + obj.getVar("custom").setInt(24, hitTime2); + local targetObj = sq_GetObjectByObjectId(obj, id); + if(targetObj){ + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + } + else sq_SendDestroyPacketPassiveObject(obj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3://印痕 + local lifeTime2 = receiveData.readDword(); + local powerDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitTime2 = receiveData.readDword(); + obj.getVar("custom").setInt(21, lifeTime2); + obj.getVar("custom").setInt(22, powerDamage); + obj.getVar("custom").setInt(23, sizeRate); + obj.getVar("custom").setInt(24, hitTime2); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local aniPath = "character/swordman/effect/animation/atthunderslash/thunderslash_shockwave.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = receiveData.readDword(); + local id = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + local stateIndex = 20; + local object = sq_GetObjectByObjectId(obj, id); + if(!object) stateIndex = 21; + if(stateIndex == 20){ + obj.setTimeEvent(1, 500, hitMax - 1, false); + sq_moveWithParent(object, obj); + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(object); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(stateIndex, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + switch(subtype){ + case 1://totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local id = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, hitTime); + obj.getVar("custom").setInt(13, sizeRate); + obj.getVar("custom").setInt(14, sub); + obj.getVar("custom").setInt(15, totalDamage2); + if(id != 0){ + local object = sq_GetObjectByObjectId(obj, id); + if(object) sq_moveWithParent(object, obj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + sqrChr.getVar("darkStrike_Attack").clear_obj_vector(); + sqrChr.getVar("darkStrike_Attack").push_obj_vector(obj); + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(2, lifeTime, 1, false); + break; + } + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgigabladekelkusexp/gigablade_specialatk_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 73)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgigabladefinishexp/gigabladeexplosion_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/demonslayer/animation/atgigabladefinishexp/floor_06.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj, 0, 80, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj, 0, 10, 400, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgigaslash/atgigaslash_blow_ground_crack03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 74)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + switch(subtype){ + case 1://totalDamage, sub, id + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local id = receiveData.readDword(); + switch(sub){ + case 0: + local count = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0), isSub2 = 0; + if(sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){ + if(count < 6) count = 6; + isSub2 = 1; + } + local offsetX = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1), offsetY = 0, isSub = 0; + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DEVILSWORDTECH); + if(skill_level > 0){offsetY = 40; isSub = 1;} + obj.getVar("custom").setInt(20, count); + obj.getVar("custom").setInt(21, totalDamage); + obj.getVar("custom").setInt(22, isSub); + obj.getVar("custom").setInt(23, isSub2); + obj.getVar("custom").setInt(24, offsetX); + obj.getVar("custom").setInt(25, offsetY); + obj.getVar("custom").setInt(26, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); + break; + case 1: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 93)); break; + case 2: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); break; + case 3: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 97)); break; + case 4: + obj.getVar("custom").setInt(21, totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); + break; + } + obj.getVar("custom").setInt(11, sub); + local object = sq_GetObjectByObjectId(obj, id); + if(!object) sq_SendDestroyPacketPassiveObject(obj); + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(object); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetYPos(obj)); + if(sq_getRandom(1,100) > 50){ + obj.getVar("move").setInt(12, sq_GetDistancePos(sq_GetXPos(object), object.getDirection(), 150)); + obj.getVar("move").setInt(13, sq_GetOppositeDirection(object.getDirection())); + } + else{ + obj.getVar("move").setInt(12, sq_GetDistancePos(sq_GetXPos(object), object.getDirection(), -150)); + obj.getVar("move").setInt(13, object.getDirection()); + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(4, 200, 1, false); + break; + } + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + switch(subtype){ + case 1://totalDamage, hitMax, sizeRate, damageRate + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, totalDamage2); + obj.getVar("custom").setInt(12, hitMax); + obj.getVar("custom").setInt(13, sizeRate); + obj.getVar("custom").setInt(14, speedRate); + obj.getVar("custom").setInt(15, 0); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + switch(subtype){ + case 1://totalDamage, catchMax, hitMax, damageRate, lifeTime, hitTime, sub + if(sqrChr.getVar("predatorgaloaObj").get_obj_vector_size() > 0) sqrChr.getVar("predatorgaloaObj").push_obj_vector(obj); + else{ + sqrChr.getVar("predatorgaloaObj").clear_obj_vector(); + sqrChr.getVar("predatorgaloaObj").push_obj_vector(obj); + } + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + local totalDamage = receiveData.readDword(); + local catchMax = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local range = receiveData.readDword(); + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA); + local nor_hp = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA, 3, skill_level); + local exp_hp = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA, 4, skill_level); + local create_number = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA, 0); + local totalDamage2 = totalDamage * damageRate / 100; + obj.setTimeEvent(5, lifeTime, 1, false); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, totalDamage2); + obj.getVar("custom").setInt(12, catchMax); + obj.getVar("custom").setInt(13, hitMax); + obj.getVar("custom").setInt(14, lifeTime); + obj.getVar("custom").setInt(15, hitTime); + obj.getVar("custom").setInt(16, sub); + obj.getVar("custom").setInt(17, nor_hp); + obj.getVar("custom").setInt(18, exp_hp); + obj.getVar("custom").setInt(19, range); + obj.getVar("custom").setInt(20, 0); + obj.getVar("custom").setInt(21, create_number); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/attack/ratka_07.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 81)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(1,delaySum / (hitMax + 1), hitMax, true); + //sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, totalDamage2); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/attack/ratkb_10.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 3: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/attack/ratkfloor_38.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 10); + obj.setTimeEvent(1,delaySum / (hitMax + 1), hitMax, true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + switch(subtype){ + case 1:// + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/downeffect_dustf02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 85)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 150, 1, false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/finishdowneffect_dustf02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 84)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 150, 1, false); + break; + } + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local isSub = receiveData.readDword(); + local isSub2 = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atwhipswordbal/bal_swordattack.ani"; + if(isSub > 0) aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atwhipswordbal/devilswordtech/bal_swordattack_devils.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(isSub2 > 0){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 1.2; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local delay = receiveData.readDword(); + sqrChr.getVar("wildwhip_obj").clear_obj_vector(); + sqrChr.getVar("wildwhip_obj").push_obj_vector(obj); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atwildwhip/devilswordtech/wildwhip_deviltechswordloop1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 87)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speedRate = 8000.0 / delay.tofloat(); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + } + break; + } + break; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo && sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS) > 0){ + local bleedingProb = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 0, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); + local bleedingTime = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 1, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); + local bleedingDamage = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 2, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLEEDING,bleedingProb,sq_GetSkillLevel(sqrChr, 174) + 10, bleedingTime, bleedingDamage); + } + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + switch(subtype){ + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local dis = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local sub2 = receiveData.readDword(); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + obj.getVar("custom").setInt(20, totalDamage2); + obj.getVar("custom").setInt(10, sq_GetXPos(obj)); + obj.getVar("custom").setInt(11, sq_GetZPos(obj)); + obj.getVar("custom").setInt(12, dis); + print("dis = "+dis); + obj.getVar("custom").setInt(13, sizeRate); + obj.getVar("custom").setInt(14, sub2); + local attackIndex = 42, stateIndex = 20; + if(subtype == 2) attackIndex = 39; + if(sub > 0) stateIndex = 22; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(stateIndex, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_BLASTSWORD, 2, sizeRate, 0, 0, 0, 0, 0, 0, 0, 0); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atblastsword/boom_base.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atblastsword/boombottom_18.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + switch(subtype){ + case 1://totalDamage, sizeRate, dis, partl, angle, sub + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local dis = receiveData.readDword(); + local partl = receiveData.readDword(); + local angle = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, dis); + obj.getVar("custom").setInt(11, sq_GetXPos(obj)); + obj.getVar("custom").setInt(12, sq_GetZPos(obj)); + obj.getVar("custom").setInt(15, angle); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atcoalban/strongshooting_04.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local MoveZ = 100,angle = 45; + switch(partl){ + case 2: MoveZ = -100;angle = -45; break; + case 3: MoveZ = -10;angle = -5; break; + case 4: MoveZ = 30;angle = 10; break; + case 11: MoveZ = 50;angle = 45; break; + case 12: MoveZ = -50;angle = -45; break; + case 13: MoveZ = -5;angle = -5; break; + case 14: MoveZ = 15;angle = 10; break; + case 21: MoveZ = 150;angle = 45; break; + case 22: MoveZ = -150;angle = -45; break; + case 23: MoveZ = -15;angle = -5; break; + case 24: MoveZ = 45;angle = 10; break; + } + obj.getVar("custom").setInt(13, MoveZ); + obj.getVar("custom").setInt(14, angle); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 130.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(1, 100, -1, false); + break; + } + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local delaySum = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atcometblade/cometblade03atkb_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_moveWithParent(sqrChr, obj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + local speedRate = 4500.0 / delaySum.tofloat(); + currentAni.setSpeedRate(speedRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local sub = receiveData.readDword(); + local sizeRateMin = receiveData.readDword(); + local sizeRateMax = receiveData.readDword(); + local rotateSetMin = receiveData.readDword(); + local rotateSetMax = receiveData.readDword(); + local createMax = receiveData.readDword(); + local createFreq = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + obj.getVar("custom").setInt(11, sizeRateMin); + obj.getVar("custom").setInt(12, sizeRateMax); + obj.getVar("custom").setInt(13, rotateSetMin); + obj.getVar("custom").setInt(14, rotateSetMax); + obj.getVar("custom").setInt(15, createMax); + obj.setTimeEvent(1, createFreq * 5, createMax, false); + break; + case 3: + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local rotateSet = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atcometblade/leaf.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + sq_SetCustomRotate(obj, sq_ToRadian(rotateSet.tofloat())); + switch(sub){ + case 1: obj.sq_SetMoveParticle("particle/atcometbladefinishleaf.ptl", 0.0, 0.0); break; + case 2: obj.sq_SetMoveParticle("particle/atcometbladefinishmiddleleaf.ptl", 0.0, 0.0); break; + case 3: obj.sq_SetMoveParticle("particle/atcometbladefinishsmallleaf.ptl", 0.0, 0.0); break; + } + break; + } + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local delay = receiveData.readDword(); + local sizeRate = range.tofloat() / 130.0; + print(sizeRate); + local speedRate = 6000.0 / delay.tofloat(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atearthpressure/flooreffect.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -270,-54,-15,540,108,137); + currentAni.setSpeedRate(speedRate); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local delay = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfireb_21.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, hitMax); + local speedRate = 5400.0 / delay.tofloat(); + obj.getVar("custom").setInt(12, (speedRate * 100).tointeger()); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + break; + case 2: + local sub = receiveData.readDword(); + local speedRate = receiveData.readDword(); + speedRate = speedRate.tofloat() / 100.0; + local charAni = sq_GetCustomAni(sqrChr, sub); + sq_Rewind(charAni); + obj.setCurrentAnimation(charAni); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + break; + } + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, hitMax); + obj.getVar("custom").setInt(13, sub); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atfistofexplosion/shootfront_08.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/vagabond/animation/atfistofexplosion/shootback_04.ani"),true); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sub = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + if(!targetObj) sq_SendDestroyPacketPassiveObject(obj); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, hitMax); + obj.getVar("custom").setInt(13, sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage * 5 / 100); + sq_moveWithParent(targetObj, obj); + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(targetObj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + if(!targetObj) sq_SendDestroyPacketPassiveObject(obj); + local totalDamage2 = totalDamage * damageRate / 100; + //print(totalDamage+" && "+totalDamage2); + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, hitMax); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 62)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(hitMax > 1) obj.setTimeEvent(1, 150, hitMax, false); + else obj.setTimeEvent(2, 150, 1, true); + sq_moveWithParent(targetObj, obj); + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(targetObj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + switch(subtype){ + case 1: + local range = receiveData.readDword(); + local aniPath = "character/swordman/effect/animation/atinhalation/bounds_01bottom.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local sizeRate = range.tofloat() / 300.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + range = range / 2; + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && sq_GetZPos(activeObj) <= 100){ + if(sq_IsHoldable(obj,activeObj) && sq_IsGrabable(obj,activeObj) && !sq_IsFixture(activeObj)){ + sqrChr.getVar("inhalation_target").push_obj_vector(activeObj); + local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atinhalation/mon_00.ani", true, obj.getDirection(), sq_GetXPos(activeObj), sq_GetYPos(activeObj), sq_GetZPos(activeObj), ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(activeObj, pooledObj); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut", true); + // AddAppendage.sq_SetValidTime(600); + sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, 100, 500, true, AddAppendage); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + else if(sq_IsFixture(activeObj)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut", true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(2000); + } + } + } + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atinhalation/shockwave.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, 1.0, 1.0); + break; + } + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local sizeRate = range.tofloat() / 150.0; + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atnearblow/pierce_throw(d).ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "character/swordman/effect/animation/atspaceignite/explosion_ex.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -171, -40, -58, 344, 80, 110); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + switch(subtype){ + case 1://totalDamage,hitMax,sizeRate,damageRate + + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local delaySum = receiveData.readDword(); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, hitMax); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atoverblowslash/overblowslashneweffect_23.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54));//55 + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local speedRate = 3500.0 / delaySum.tofloat(); + currentAni.setSpeedRate(speedRate); + local delay = currentAni.getDelaySum(0,14); + local delay2 = currentAni.getDelaySum(0,19); + obj.setTimeEvent(1, delay, 1, false); + obj.setTimeEvent(3, delay2, 1, false); + break; + } + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atrapidstep/explosionarea_0"+(sub - 1).tostring()+".ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + currentAni.setSpeedRate(150.0); + break; + } + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atthreeside/threeside_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(250.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atthreeside/threeside_ex_threeside_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/threeside.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,500); + break; + } + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + switch(subtype){ + case 2: + sqrChr.getVar("zwei").clear_obj_vector(); + sqrChr.getVar("zwei").push_obj_vector(obj); + case 1: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local isStone = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(10, totalDamage2); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, isStone); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atzweivoltage/explosion/zweivoltage_finisheff_leaf_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + switch(subtype){ + case 1://totalDamage,passive_hp,damageRate,time,count,decreaseRate,speedRate + local totalDamage = receiveData.readDword(); + local passive_hp = receiveData.readDword(); + local time = receiveData.readDword(); + local count = receiveData.readDword(); + local decreaseRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, passive_hp); + obj.getVar("custom").setInt(3, time); + obj.getVar("custom").setInt(4, count); + obj.getVar("custom").setInt(5, decreaseRate); + obj.getVar("custom").setInt(6, speedRate); + obj.getVar("custom").setInt(7, totalDamage2); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atblackmirror/mirror_attackbox_dummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atblackmirror/bottom_00.ani",0,0,0); + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atblackmirror/bottom_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atblackmirror/move_shadow_bykk.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + obj.setTimeEvent(0,4460,1,false); + obj.setTimeEvent(2,300,1,false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.getVar("custom").setInt(1, totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10,totalDamage); + local sub = receiveData.readDword(); + local direction = receiveData.readDword(); + obj.getVar("custom").setInt(1,sub); + obj.getVar("custom").setInt(2,direction); + obj.getVar("custom").setInt(3,sq_GetXPos(obj)); + obj.getVar("custom").setInt(5,sq_GetZPos(obj)); + switch(sub){ + case 1: obj.getVar("custom").setFloat(0,0.1); break; + case 2: obj.getVar("custom").setFloat(0,0.15); break; + case 3: obj.getVar("custom").setFloat(0,0.2); break; + case 4: obj.getVar("custom").setFloat(0,0.25); break; + case 5: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.1); break; + case 6: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.15); break; + case 7: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.2); break; + case 8: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.25); break; + } + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + local create_number = receiveData.readDword(); + obj.getVar("custom").setInt(4,create_number); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_bulletshooter.ani",-30,0,0); + obj.setTimeEvent(1,240,1,false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local direction = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local create_number = receiveData.readDword(); + obj.getVar("custom").setInt(0,totalDamage); + obj.getVar("custom").setInt(1,sub); + obj.getVar("custom").setInt(2,direction); + obj.getVar("custom").setInt(3,group); + obj.getVar("custom").setInt(4,uniqueId); + obj.getVar("custom").setInt(5,create_number); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_bulletshooter.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 3: + local totalDamage = receiveData.readDword(); + local direction = receiveData.readDword(); + local createMin = receiveData.readDword(); + local createMax = receiveData.readDword(); + local enemyMax = receiveData.readDword(); + local soulnum = receiveData.readDword(); + totalDamage = totalDamage * soulnum; + obj.getVar("custom").setInt(0,totalDamage); + obj.getVar("custom").setInt(1,direction); + obj.getVar("custom").setInt(2,enemyMax); + obj.getVar("custom").setInt(3,soulnum); + + local boss_number = sqrChr.getVar("targetBoss").get_obj_vector_size(); + local named_number = sqrChr.getVar("targetNamed").get_obj_vector_size(); + local normal_number = sqrChr.getVar("targetNormal").get_obj_vector_size(); + + local loadSlot = sqrChr.sq_GetSkillLoad(65);//SKILL_DARKEMPLER_BUCKSHOT + if(!loadSlot) sq_SendDestroyPacketPassiveObject(obj); + local slotCount = loadSlot.getRemainLoadNumber(); + + if(slotCount < createMin * soulnum) sq_SendDestroyPacketPassiveObject(obj); + if(createMax * soulnum > slotCount) createMax = (slotCount / soulnum).tointeger(); + if((boss_number + named_number + normal_number) * enemyMax < createMax) createMax = (boss_number + named_number + normal_number) * enemyMax; + + obj.getVar("targetObj").clear_obj_vector(); + for(local i = 0; i < boss_number; i++){ + local bossObj = sqrChr.getVar("targetBoss").get_obj_vector(i); + if(bossObj) obj.getVar("targetObj").push_obj_vector(bossObj) + } + for(local i = 0; i < named_number; i++){ + local namedObj = sqrChr.getVar("targetNamed").get_obj_vector(i); + if(namedObj) obj.getVar("targetObj").push_obj_vector(namedObj) + } + for(local i = 0; i < normal_number; i++){ + local normalObj = sqrChr.getVar("targetNormal").get_obj_vector(i); + if(normalObj) obj.getVar("targetObj").push_obj_vector(normalObj) + } + + obj.setTimeEvent(10,30,createMax,true); + obj.setTimeEvent(11,40*createMax,1,false); + obj.getVar("custom").setInt(20,0); + + break; + } + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + switch(subtype){ + case 1: + sqrChr.getVar("deadlycape_effect").clear_obj_vector(); + sqrChr.getVar("deadlycape_effect").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeadlycape/ex_exp_normal_0.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_attackbox_dummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, 1.0, 1.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local delay = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, delay); + obj.getVar("custom").setInt(12, sq_GetXPos(obj)); + obj.getVar("custom").setInt(13, sq_GetZPos(obj)); + obj.getVar("custom").setInt(14, 300); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + switch(subtype){ + case 1: + sqrChr.getVar("deusexray").clear_obj_vector(); + sqrChr.getVar("deusexray").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/finishfront_23.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/finishback_03.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/finishfront1_talisman_finishfront_23.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/finishback_talisman_finishback_03.ani"),true); + pAni.setSpeedRate(200.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(10, hitMax); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/finishmoveeffect.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + sqrChr.getVar("doomsday_effect").clear_obj_vector(); + sqrChr.getVar("doomsday_effect").push_obj_vector(obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + sqrChr.getVar("doomsday_effect_b").clear_obj_vector(); + sqrChr.getVar("doomsday_effect_b").push_obj_vector(obj); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atimmolation/boom_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + sqrChr.getVar("immolation_magiccircle").clear_obj_vector(); + sqrChr.getVar("immolation_magiccircle").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, -1, false); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, 100, level, time, 0); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(10,totalDamage2); + obj.getVar("custom").setInt(11,lifeTime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, -1, false); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, 100, level, time, 0); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(10, totalDamage2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + switch(subtype){ + case 1: + local aniPath = "character/swordman/effect/animation/atlacerthorns/atlacerthornsboom_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 200, 1, false); + break; + case 2: + local aniPath = "character/swordman/effect/animation/atlacerthorns/atlacerthornsboom_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + switch(subtype){ + case 1: + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(10, lifeTime); + obj.getVar("custom").setInt(11, hitTime); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("loyalslave").clear_ct_vector(); + activeObj.getVar("loyalslave").push_ct_vector(); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + switch(subtype){ + case 1: + sqrChr.getVar("madness").clear_obj_vector(); + sqrChr.getVar("madness").push_obj_vector(obj); + local range = receiveData.readDword(); + local DelaySum = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atmadness/madness_magiccircle.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = range.tofloat() / 225.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && sq_GetZPos(activeObj) <= 100){ + if(sq_IsHoldable(obj,activeObj) && sq_IsGrabable(obj,activeObj) && !sq_IsFixture(activeObj)){ + sqrChr.getVar("madness_target").push_obj_vector(activeObj); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/4_darktempler/madness/ap_madness.nut", true); + AddAppendage.sq_SetValidTime(DelaySum + 300); + sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, 80, 300, true, AddAppendage); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + } + break; + case 2: + local speedRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local direction = receiveData.readDword(); + local baseX = receiveData.readDword(); + local baseY = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local isdamageSet = receiveData.readDword(); + local range = receiveData.readDword(); + obj.getVar("custom").setInt(10,speedRate); + obj.getVar("custom").setInt(11,sub); + obj.getVar("custom").setInt(12,direction); + obj.getVar("custom").setInt(13,sq_GetXPos(obj)); + obj.getVar("custom").setInt(14,sq_GetZPos(obj)); + obj.getVar("custom").setInt(15,baseX); + obj.getVar("custom").setInt(16,baseY); + obj.getVar("custom").setInt(20,isdamageSet); + obj.getVar("custom").setInt(21,range); + switch(sub){ + case 1: obj.getVar("custom").setFloat(0,0.1); break; + case 2: obj.getVar("custom").setFloat(0,0.15); break; + case 3: obj.getVar("custom").setFloat(0,0.2); break; + case 4: obj.getVar("custom").setFloat(0,0.25); break; + case 5: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.1); break; + case 6: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.15); break; + case 7: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.2); break; + case 8: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.25); break; + } + // sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local speedRate = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + obj.getVar("custom").setInt(10,speedRate); + obj.getVar("custom").setInt(11,totalDamage); + obj.getVar("custom").setInt(12,range); + obj.setTimeEvent(12, 240 / speedRate * 100, 1, false); + break; + } + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + switch(subtype){ + case 1: + sqrChr.getVar("punishment_attack3").clear_obj_vector(); + sqrChr.getVar("punishment_attack3").push_obj_vector(obj); + local range = receiveData.readDword() + 999; + local aniPath = "character/swordman/effect/animation/atpunishment/casting/atpunishment_magic_circle4.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local apdPath = "character/atswordman/4_darktempler/punishment/ap_punishment.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_DARKEMPLER_PUNISHMENT, false, apdPath, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL, AddAppendage); + sqrChr.getVar("punishment_target").push_obj_vector(activeObj); + } + } + break; + case 2: + sqrChr.getVar("punishment_attack").clear_obj_vector(); + sqrChr.getVar("punishment_attack").push_obj_vector(obj); + local aniPath = "character/swordman/atanimation/punishment_attack_motion2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.getVar("punishment_base").setInt(10, sq_GetXPos(obj)); + break; + case 3: + sqrChr.getVar("punishment_attack2").clear_obj_vector(); + sqrChr.getVar("punishment_attack2").push_obj_vector(obj); + local aniPath = "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_eff2_1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + break; + } + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage2); + obj.getVar("custom").setInt(2, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + switch(subtype){ + case 1: + sqrChr.getVar("bindingObj").clear_obj_vector(); + sqrChr.getVar("bindingObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage2); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, 160); + obj.getVar("custom").setInt(4, sq_GetXPos(obj)); + obj.getVar("custom").setInt(5, sq_GetYPos(obj)); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, uniqueId); + if(sqrChr.getVar("binding").get_obj_vector_size() <= 0) sqrChr.getVar("binding").clear_obj_vector(); + sqrChr.getVar("binding").push_obj_vector(obj); + local aniPath = "character/swordman/effect/animation/atshadowbinding/monster_shadowbinding_monster_front.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(4,400,-1,true); + break; + case 3: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowbinding/drill_eff_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + switch(subtype){ + case 1://武器 + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local range = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local isSeal = receiveData.readDword(); + local passive_level = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage2); + obj.getVar("custom").setInt(1, range); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, isSeal); + obj.getVar("custom").setInt(5, totalDamage); + obj.getVar("custom").setInt(10, passive_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://旋渦 + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local isSeal = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, range); + obj.getVar("custom").setInt(2, lifeTime); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, isSeal); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowlancer/05_shadow_sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local DelaySum = pAni.getDelaySum(false); + obj.setTimeEvent(1,DelaySum/(hitMax*2),hitMax,false); + sq_moveWithParent(sqrChr, obj); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + switch(subtype){ + case 1://邪光totalDamage,lifeTime,hitTime + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/object_shadowpuppet_finish_normal.ani"; + if(sub > 0) aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/lv95passive/shootingblade_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/shadowpuppet.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,500); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, hitTime, -1, false); + break; + case 2://幻影 + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local direction = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, direction); + obj.getVar("custom").setInt(4, sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/_puppetdash_shadowpuppet_dash.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.getVar("custom").setInt(0, sq_GetXPos(obj)); + break; + } + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + switch(subtype){ + case 1://幻影 + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local enemyMax = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local range = receiveData.readDword(); + local hitTime = receiveData.readDword(); + sqrChr.getVar("souldrain").push_obj_vector(obj); + local number = sqrChr.getVar("souldrain").get_obj_vector_size(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, enemyMax); + obj.getVar("custom").setInt(3, hitMax); + obj.getVar("custom").setInt(4, range); + obj.getVar("custom").setInt(5, hitTime); + obj.getVar("custom").setInt(6, number); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://攻擊特效START + case 3://攻擊特效LOOP + case 4://攻擊特效END + local totalDamage = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, uniqueId); + local aniPath1 = "character/swordman/effect/animation/atsouldrain/"; + local aniPath2 = "firstboom_01.ani"; + if(subtype == 3) aniPath2 = "loopboom_01.ani"; + if(subtype == 4) aniPath2 = "lastboom_02.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local attackIndex = 38; + if(subtype == 3) attackIndex = 37; + if(subtype == 4) attackIndex = 36; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(3, 80, 1, false); + break; + } + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + local boss_number = 0; + local named_number = 0; + obj.getVar("target").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2 && isFrontObject(obj,object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + boss_number = boss_number + 1; + obj.getVar("target").push_obj_vector(activeObj); + } + else if(sq_IsNamed(activeObj)){ + named_number = named_number + 1; + obj.getVar("target").push_obj_vector(activeObj); + } + } + } + if(boss_number < 1 && named_number < 1){ + local targetObj = obj.sq_FindFirstTarget(0, range, range / 2, range); + if(targetObj) obj.getVar("target").push_obj_vector(targetObj); + } + + if(obj.getVar("target").get_obj_vector_size() > 0) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else{ + local disX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),(sub-1) * 50); + sq_setCurrentAxisPos(obj, 0, disX); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} diff --git a/user/116.205.165.25/3_atswordman_3.c b/user/116.205.165.25/3_atswordman_3.c new file mode 100644 index 0000000..eeae2b8 --- /dev/null +++ b/user/116.205.165.25/3_atswordman_3.c @@ -0,0 +1,2387 @@ + +function setState_po_atswordman_bykk_kak(obj, state, datas) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0,state); + + switch(job){ + case 0: + switch(skillIndex){ + case 34: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/common/atexecution/start_md.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 190)); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/common/atexecution/haze_create_haze2.ani"),true); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/common/atexecution/loop_md.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/common/atexecution/haze_loop_haze2.ani"),true); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/common/atexecution/end_md.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/common/atexecution/haze_destroy_haze2.ani"),true); + break; + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/atbreaksworddance_magic_circle_3.ani"; + if(state == 21) aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/atbreaksworddance_magic_circle_end_1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + case 21: + local sub = obj.getVar("custom").getInt(10); + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/atbreaksworddance_casting_sword"+sub.tostring()+"_4.ani"; + if(state == 21) aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/atbreaksworddance_disappear.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(state == 20) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/atbreaksworddance_bottom_2.ani"),true); + else currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/atbreaksworddance_disappear_2.ani"),true); + break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + switch(subtype){ + case 0: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/thunder_dodge.ani";// + switch(state){ + case 100: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordstart_01.ani";obj.getVar("custom").setInt(10, 0); break; + case 110: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordloop_01.ani";obj.getVar("custom").setInt(10, 0); break; + case 101: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordstart_01.ani";obj.getVar("custom").setInt(10, 1); break; + case 111: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordloop_01.ani";obj.getVar("custom").setInt(10, 1); break; + case 102: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordstart_01.ani";obj.getVar("custom").setInt(10, 2); break; + case 112: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordloop_01.ani";obj.getVar("custom").setInt(10, 2); break; + case 103: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordstart_01.ani";obj.getVar("custom").setInt(10, 3); break; + case 113: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordloop_01.ani";obj.getVar("custom").setInt(10, 3); break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state == 110 || state == 111 || state == 112 || state == 113){ + if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 15, -1, true); + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/newdragonup/up_4sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 6); + obj.setTimeEvent(1, delay, 1, false); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/newdragonup/blast_blast_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetShake(obj, 16, 200); + local totalDamage = obj.getVar("custom").getInt(12); + local sizeRate = obj.getVar("custom").getInt(13); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 118)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case 3: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/casting_start_sword_0.ani"; + switch(state){ + case 21: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/casting_start_sword_1.ani"; break; + case 22: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/casting_start_sword_2.ani"; break; + case 23: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/casting_start_sword_disapear.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/sword_start_dust1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local element = obj.getVar("custom").getInt(11); + local currentAni = obj.getCurrentAnimation(); + switch(element){ + case 0: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_start_fire_fire_glow.ani"),true); break; + case 1: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_start_ice_ice_glow.ani"),true); break; + case 2: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_start_dark_dark_glow.ani"),true); break; + case 3: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_start_light_light_glow.ani"),true); break; + case 4: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_start_mu_mu_glow.ani"),true); break; + } + local totalDamage = obj.getVar("custom").getInt(13); + local sub = obj.getVar("custom").getInt(14); + local sizeRate = obj.getVar("custom").getInt(15); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,2,totalDamage,sub,sizeRate,0,0,0,0,0,1); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_loop_saberglowa.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local element = obj.getVar("custom").getInt(11); + local currentAni = obj.getCurrentAnimation(); + switch(element){ + case 0: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_loop_fire_fire_glow.ani"),true); break; + case 1: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_loop_ice_ice_glow.ani"),true); break; + case 2: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_loop_dark_dark_glow.ani"),true); break; + case 3: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_loop_light_light_glow.ani"),true); break; + case 4: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_loop_mu_mu_glow.ani"),true); break; + } + obj.setTimeEvent(1, obj.getVar("custom").getInt(12), 1, false); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_exp_attack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local element = obj.getVar("custom").getInt(11); + local currentAni = obj.getCurrentAnimation(); + switch(element){ + case 0: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_bottom_normal.ani"),true); currentAni.addLayerAnimation(1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_fire_ex_saberboom_fire.ani"),true); break; + case 1: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_bottom_normal.ani"),true); currentAni.addLayerAnimation(1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_ice_ex_saberboom_ice.ani"),true); break; + case 2: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_bottom_normal.ani"),true); currentAni.addLayerAnimation(1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_dark_ex_saberboom_dark.ani"),true); break; + case 3: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_bottom_normal.ani"),true); currentAni.addLayerAnimation(1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_light_ex_saberboom_light.ani"),true); break; + case 4: currentAni.addLayerAnimation(-1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_bottom_normal.ani"),true); currentAni.addLayerAnimation(1, sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/excalibur_sword_end_mu_ex_saberboom_mu.ani"),true); break; + } + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 119)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + sq_SetMyShake(obj, 4, delay); + local sizeRate = 1.5; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + switch(subtype){ + case 3: + local element = obj.getVar("custom").getInt(10); + local aniSet = [["passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonfirestart_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonicestart_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummondarkstart_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonlightningstart_00.ani"], + ["passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonfireloop_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummoniceloop_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummondarkloop_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonlightningloop_00.ani"], + ["passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonfireend_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummoniceend_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummondarkend_00.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladesummonlightningend_00.ani"]]; + local ani = sq_CreateAnimation("",aniSet[state - 20][element]); + obj.setCurrentAnimation(ani); + if(state == 20) obj.setTimeEvent(1, obj.getVar("custom").getInt(11), 1, false); + else if(state == 22){ + local totalDamage = obj.getVar("custom").getInt(13); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,75,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,2,totalDamage,0,0,0,0,0,0,0,1); + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + switch(subtype){ + case 1: + local aniPath = ""; + switch(state){ + case 20: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/illusion_move1.ani"; break; + case 21: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/illusion_attack1.ani"; break; + case 22: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/illusion_attack2.ani"; break; + case 23: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/illusion_attack3.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state > 20){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, state + 104)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(10)); + } + else obj.setTimeEvent(1, 10, 35, true); + local speedRate = obj.getVar("custom").getInt(15); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 2: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/illusion_move1.ani"; + if(state == 21) aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/illusion_attack3.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state == 21){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 127)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(10)); + } + else obj.setTimeEvent(1, 10, 35, true); + local speedRate = obj.getVar("custom").getInt(17); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + switch(subtype){ + case 1: + case 4: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/circle_start_circle1.ani"; + switch(state){ + case 21: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/circle_loop_circle2.ani"; break; + case 22: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/circle_end_circle2.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(subtype == 4 && state == 21){ + obj.setTimeEvent(1, obj.getVar("custom").getInt(10), 1, false); + } + if(state == 22) obj.stopTimeEvent(4); + if(subtype == 1 && state == 20){ + local pAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("custom").getInt(11); + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 2: + local aniPath1 = "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/";// + local aniPath2 = [["firesword_start_fire_appear_8.ani", + "icesword_start_ice_appear_8.ani", + "darksword_start_dark_appear_8.ani", + "lightsword_start_light_appear_8.ani"], + ["circleglow_loop_circle_fire.ani", + "circleglow_loop_circle_ice.ani", + "circleglow_loop_circle_dark.ani", + "circleglow_loop_circle_light.ani"], + ["circleglow_end_circle_fire.ani", + "circleglow_end_circle_ice.ani", + "circleglow_end_circle_dark.ani", + "circleglow_end_circle_light.ani"]] + local element = obj.getVar("custom").getInt(10); + local aniPath = aniPath1 + aniPath2[state - 20][element]; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state == 21){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setLoop(true); + local aniPath = ["passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/firesword_fire_sword_3.ani","passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/icesword_ice_sword3.ani","passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/darksword_dark_sword3.ani","passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/lightsword_light_sword3.ani"]; + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath[element]),true); + } + else if(state == 22){ + local currentAni = obj.getCurrentAnimation(); + local aniPath = ["passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/firesword_end_fire_sword_3.ani","passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/icesword_end_ice_sword3.ani","passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/darksword_end_dark_sword3.ani","passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/lightsword_end_light_sword3.ani"]; + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath[element]),true); + } + else if(state == 20){ + local pAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("custom").getInt(11); + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 5: + local aniPath = [["passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/firesword_start_fire_appear_8.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/icesword_start_ice_appear_8.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/darksword_start_dark_appear_8.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/lightsword_start_light_appear_8.ani"], + ["passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/fire/magicswordshot_shoot_loop_fire.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/ice/magicswordshot_shoot_loop_frozen.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/dark/magicswordshot_shoot_loop_shadow.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/light/magicswordshot_shoot_loop_light.ani"], + ["passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/fire/magicswordshot_explosion_fire.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/ice/magicswordshot_explosion_frozen.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/dark/magicswordshot_explosion_shadow.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/new_atjackcatch/light/magicswordshot_explosion_light.ani"]]; + local element = obj.getVar("custom").getInt(11); + local ani = sq_CreateAnimation("",aniPath[state - 20][element]); + obj.setCurrentAnimation(ani); + local delay = [1300,1600,1900,1000]; + switch(state){ + case 20: + obj.setTimeEvent(2, delay[element], 1, false); + local effPath = ["passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/firesword_fire_sword_3.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/icesword_ice_sword3.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/darksword_dark_sword3.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/lightsword_light_sword3.ani"]; + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",effPath[element]),true); + break; + case 21: + obj.setTimeEvent(3, 5, 20, false); + obj.getVar("custom").setInt(14, sq_GetXPos(obj)); + obj.getVar("custom").setInt(15, sq_GetYPos(obj)); + switch(element){ + case 0: sq_SetCustomRotate(obj, sq_ToRadian(90.0)); break; + case 1: sq_SetCustomRotate(obj, sq_ToRadian(180.0)); break; + case 3: sq_SetCustomRotate(obj, sq_ToRadian(270.0)); break; + } + break; + case 22: + local totalDamage = obj.getVar("custom").getInt(10); + local atkIndex = [131,132,130,133]; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[element])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 1.3; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + switch(subtype){ + case 1: + local element = obj.getVar("custom").getInt(11); + local aniPath = [["passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/fire/magicswordshot_shoot_loop_fire.ani","passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/ice/magicswordshot_shoot_loop_frozen.ani","passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/dark/magicswordshot_shoot_loop_shadow.ani","passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/light/magicswordshot_shoot_loop_light.ani"],["passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/fire/magicswordshot_explosion_fire.ani","passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/ice/magicswordshot_explosion_frozen.ani","passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/dark/magicswordshot_explosion_shadow.ani","passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordshoot/light/magicswordshot_explosion_light.ani"]]; + local atkIndex = [[136,138,134,140],[137,139,135,141]]; + local bonus = [10,12]; + local ani = sq_CreateAnimation("",aniPath[state - 20][element]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[state - 20][element])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(bonus[state - 20])); + if(state == 21){ + if(obj.getVar("move").getBool(0)) obj.sq_RemoveMoveParticle(); + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_ice_lance_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(300.0); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_ice_lance_end_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_light_on_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_light_expl.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/attimeslash/start_timeslash_ground.ani"; + if(state == 21) aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/attimeslash/slash_timeslash_ground.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + switch(subtype){ + case 2: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/bloodseal_deb_b_00.ani"; + switch(state){ + case 20: + obj.setTimeEvent(4, obj.getVar("custom").getInt(10), 1, false); + obj.setTimeEvent(5, obj.getVar("custom").getInt(13), 1, false); + obj.setTimeEvent(6, obj.getVar("custom").getInt(20), -1, false); + break; + case 21: + obj.removeAllTimeEvent(); + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/blood_finish_12.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 67)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(12)); + break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state == 20){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 2.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case 3: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/blood_drop_01.ani"; + switch(state){ + case 20: + obj.getVar("move").setInt(10, sq_GetZPos(obj)); + obj.setTimeEvent(1, 15, 20, false); + break; + case 21: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/blood_droptotile_blood_tile_00.ani"; break; + case 22: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/blood_tile_00.ani"; + obj.setTimeEvent(2, obj.getVar("custom").getInt(21), 1, false); + obj.setTimeEvent(3, obj.getVar("custom").getInt(24), -1, false); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(22)); + break; + case 23: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/blood_tile_off_00.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state != 20){ + local sizeRate = obj.getVar("custom").getInt(23).tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atclawblade/devilswordtech/atclawblade_devilswordtechforce.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atclawblade/devilswordtech/atclawblade_devilswordtechboom7.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(11) * 3; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 69)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atdarkstrike/create/2_daimus.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atdarkstrike/create/dust.ani", 0, 0, -sq_GetZPos(obj)); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atdarkstrike/loop/2_daimus_back.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1, sq_CreateAnimation("","passiveobject/atswordman_bykk/demonslayer/animation/atdarkstrike/loop/2_daimus.ani"), true); + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + local hitTime = obj.getVar("custom").getInt(12); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 70)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, hitTime, hitMax - 1, false); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atdarkstrike/end/2_daimus_back.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atswordman_bykk/demonslayer/animation/atdarkstrike/end/2_daimus.ani"), true); + local totalDamage = obj.getVar("custom").getInt(15); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(13).tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + switch(subtype){ + case 1: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/stay.ani"; + switch(state){ + case 20: + break; + case 21: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/dash.ani"; + break; + case 22: + switch(obj.getVar("custom").getInt(11)){ + case 0: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_whipswordbal/whipswordbal1.ani"; break; + case 1: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_snakedance/snakedance1.ani"; break; + case 2: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_pikesword/pikesword.ani"; break; + case 3: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_wildwhip/wildwhip1.ani"; break; + case 4: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_blooddance/blooddancestart.ani"; break; + } + break; + case 23: + switch(obj.getVar("custom").getInt(11)){ + case 0: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_whipswordbal/whipswordbal2.ani"; break; + case 1: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_snakedance/snakedance2.ani"; break; + case 2: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_pikesword/pikesworddrag.ani"; break; + case 3: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_wildwhip/wildwhip2.ani"; break; + case 4: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_blooddance/blooddanceloop.ani"; + obj.setTimeEvent(1, 1010, 1, false); + obj.setTimeEvent(2, 25, 40, true); + break; + } + break; + case 24: + switch(obj.getVar("custom").getInt(11)){ + case 0: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_whipswordbal/whipswordbal3.ani"; break; + case 1: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_snakedance/snakedance3.ani"; break; + case 2: break; + case 3: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_wildwhip/wildwhip3.ani"; break; + case 4: aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance_blooddance/blooddancefinish.ani"; break; + } + break; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(state == 21){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(150.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + obj.setTimeEvent(3, delaySum / 10, 8, false); + local drawObj = createOnlyDrawObject_AtSwordMan_bykk(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/dance_move_dodge.ani", true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + sq_moveWithParent(obj, drawObj); + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj) setGroupdance_AtSwordman_bykk(obj, drawObj, targetObj); + sq_SetCurrentDirection(obj, obj.getVar("move").getInt(13)); + } + break; + } + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + switch(subtype){ + case 1: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atphnom/boom1_phnom_smallboom_normal.ani"; + switch(state){ + case 21: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atphnom/boom2_phnom_smallboom_normal.ani"; + break; + case 22: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atphnom/boom3_phnom_smallboom_normal.ani"; + break; + case 23: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atphnom/boom4_phnom_smallboom_normal.ani"; + break; + case 24: + aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atphnom/finish_phnomexplosion.ani"; + break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("custom").getInt(14); + local pAni = obj.getCurrentAnimation(); + local totalDamage = obj.getVar("custom").getInt(10); + local attackIndex = 75; + if(state == 24){ + totalDamage = obj.getVar("custom").getInt(11); + attackIndex = 77; + local sizeRate = obj.getVar("custom").getInt(13).tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + } + pAni.setSpeedRate(speedRate.tofloat()); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + break; + } + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + switch(subtype){ + case 1: + switch(state){ + case 20://普通 + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_main_body.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.getVar("tar").clear_obj_vector(); + local sub = obj.getVar("custom").getInt(16); + obj.setTimeEvent(2, obj.getVar("custom").getInt(13) + sub * 100, 1, false); + break; + case 21://EAT01 + case 26: + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_eat_a_normal.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetYPos(obj)); + obj.getVar("move").setInt(12, sq_GetZPos(obj)); + break; + case 22://EAT02 + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_eat_b_normal.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 23://EAT03 + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_eat_c_normal.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 24://附上 + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_attach_body.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local targetObj = obj.getVar("tar").get_obj_vector(0); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj)); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 79)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitTime = obj.getVar("custom").getInt(15); + local hitMax = obj.getVar("custom").getInt(13); + obj.setTimeEvent(3, hitTime, hitMax, true); + break; + case 25://結束 + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_finish_29.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 80)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("tar").get_obj_vector(0)); + if(targetObj) targetObj.getVar("predatorgaloa").setBool(0, false); + break; + } + if(state == 21 || state == 22 || state == 23 || state == 26){ + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + } + break; + } + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo && sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS) > 0){ + local bleedingProb = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 0, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); + local bleedingTime = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 1, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); + local bleedingDamage = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 2, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLEEDING,bleedingProb,sq_GetSkillLevel(sqrChr, 174) + 10, bleedingTime, bleedingDamage); + } + break; + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + switch(subtype){ + case 1: + case 2: + local aniPath1 = "passiveobject/atswordman_bykk/vagabond/animation/atbigjang/skillcustomizing/"; + switch(state){ + case 20: + local aniPath = aniPath1 + "normal_throw_hand.ani"; + if(subtype == 2) aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atbigjang/jump_throw_hand.ani"; + print("aniPath = "+aniPath); + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + local timeIndex = 1; + if(subtype == 2){timeIndex = 2; delaySum = 150;} + obj.setTimeEvent(timeIndex, delaySum / 20, 20, false); + break; + case 21: + local aniPath = aniPath1 + "normal_throw_hand.ani"; + if(subtype == 2) aniPath = aniPath1 + "jump_bomb_hand.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + obj.removeAllTimeEvent(); + local aniPath = aniPath1 + "normal_bomb_d.ani"; + if(subtype == 2) aniPath = aniPath1 + "jump_bomb_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + + local totalDamage = obj.getVar("custom").getInt(20); + local attackIndex = 43; + if(subtype == 2) attackIndex = 41; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(13) / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/atfistofexplosion/hit01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/atfistofexplosion/hit02loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(11); + local hitMax = obj.getVar("custom").getInt(12); + obj.setTimeEvent(1, lifeTime, 1, false); + if(obj.getVar("custom").getInt(13) < 1) obj.setTimeEvent(2, lifeTime / (hitMax + 2), hitMax, false); + break; + case 22: + local aniPath = "character/swordman/effect/animation/atfistofexplosion/hit03explosion.ani"; + if(obj.getVar("custom").getInt(13) > 0) aniPath = "character/swordman/effect/animation/atfistofexplosion/talisman/atfistofexplosiontalismaneffect_04.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("custom").getInt(13) > 0){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 1.5; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + } + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/atgonewiththepetal/blockedforce.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/atgonewiththepetal/blockedforceend.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + // sq_setCurrentAxisPos(obj, 2, 0); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atgonewiththepetal/explosiona2_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atgonewiththepetal/explosionb_01.ani", 0, -2, 0); + local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atgonewiththepetal/explosionc_00.ani"; + createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + } + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + switch(subtype){ + case 1: + break; + case 2: + break; + } + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + switch(subtype){ + case 1: + case 2: + local aniPath1 = "passiveobject/atswordman_bykk/vagabond/animation/atzweivoltage/cross/"; + switch(state){ + case 20: + local aniPath = aniPath1 + "zweivoltage_cross_b_start_leaf_d.ani"; + if(subtype == 2) aniPath = aniPath1 + "zweivoltage_crossstart_leaf_d.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = aniPath1 + "zweivoltage_cross_b_loop_00.ani"; + if(subtype == 2) aniPath = aniPath1 + "zweivoltage_crossloop_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(subtype == 1) obj.setTimeEvent(1, obj.getVar("custom").getInt(11) / 2, 1, false); + if(obj.getVar("custom").getInt(12) > 0) obj.setTimeEvent(1, obj.getVar("custom").getInt(11), 1, false); + break; + case 22: + local aniPath = aniPath1 + "zweivoltage_cross_c_loop_00.ani"; + if(subtype == 2) aniPath = aniPath1 + "zweivoltage_cross_d_loop_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = aniPath1 + "zweivoltage_cross_b_end_d.ani"; + if(subtype == 2) aniPath = aniPath1 + "zweivoltage_crossend_d.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + switch(subtype){ + case 2: + local aniPath1 = "passiveobject/atswordman_bykk/darktempler/animation/atblackmirror/mirror0"; + local sub = obj.getVar("custom").getInt(0); + if(sub > 9) aniPath1 = "passiveobject/atswordman_bykk/darktempler/animation/atblackmirror/mirror"; + switch(state){ + case 20://start + local aniPath = aniPath1+sub.tostring()+"_start_09.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21://loop + local aniPath = aniPath1+sub.tostring()+"_loop_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1,500,1,false); + break; + case 22://attack + local aniPath = aniPath1+sub.tostring()+"_attack_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 23://end + local aniPath = aniPath1+sub.tostring()+"_end_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_bulletdummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3,10,-1,true); + obj.setTimeEvent(2,600,1,false); + break; + case 22: + obj.removeAllTimeEvent(); + local targetObj = obj.getVar().get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) + 1); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + local randomnumber = sq_getRandom(1,100),aniPath = ""; + if(randomnumber > 55) aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_expl_a_eff_01.ani"; + else if(randomnumber > 10 && randomnumber <= 55) aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_expl_b_eff_02.ani"; + else aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_expl_c_eff_08.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeadlycape/mass_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeadlycape/mass_loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeadlycape/mass_end.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeadlycape/mass_fail.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/exray/spherestart_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local delay = obj.getVar("custom").getInt(11); + local speedRate = 12000.0 / delay.tofloat(); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/exray/sphereloop1_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/exray/spherecharge1_06.ani",0,0,0); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/exray/exrayexplosoin_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/exray/exrayexplosoin.ani"),true); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetMyShake(obj, 5, 300); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/spherestart_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/sphereloop1_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/sphereloop2_09.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/spherecharge1_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/beginningup_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domeloopup_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domeboom_06.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/beginningdown_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domeloopdown_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "character/swordman/effect/animation/atimmolation/cast222_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/swordman/effect/animation/atimmolation/loop_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "character/swordman/effect/animation/atimmolation/end_magiccircle_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atimmolation/alter/start_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/atimmolation/cast222_05.ani"),true); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atimmolation/alter/loop_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/atimmolation/loop_02.ani"),true); + local lifeTime = obj.getVar("custom").getInt(11); + local delaySum = pAni.getDelaySum(false); + if(delaySum < lifeTime) sq_SetFrameDelayTime(pAni, 0, lifeTime); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atimmolation/alter/end_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/atimmolation/end_magiccircle_01.ani"),true); + local delaySum = pAni.getDelaySum(0,2); + obj.setTimeEvent(2, delaySum, 1, false); + // if(!sqrChr) break; + // CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_startmagiccircle_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_magiccircleloop_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,2,totalDamage,0,0,0,0,0,0,0,0); + break; + case 22: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_magiccircleend_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_setCurrentAxisPos(obj, 2, 350); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_attack_sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_flashScreen(obj, 0, 80, 480, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_setCurrentAxisPos(obj, 2, 0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(0,0); + obj.setTimeEvent(1, delaySum, 1, false); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atloyalslave/loyalservant_start_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atloyalslave/loyalservant_repeat_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(10); + local hitTime = obj.getVar("custom").getInt(11); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, hitTime, -1, true); + break; + case 22: + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atloyalslave/loyalservant_end_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atmadness/madness_laser_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(10, 3, -1, true); + obj.setTimeEvent(11, 240 / obj.getVar("custom").getInt(10) * 100, 1, false); + break; + case 21: + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atmadness/madness_explo_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atmadness/explosion.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(11)); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(12).tofloat() / 112.5; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + print("test = "+ obj.getVar("custom").getInt(11)); + print("test2 = "+ obj.getVar("custom").getInt(12)); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + local aniPath1 = "passiveobject/atswordman_bykk/darktempler/animation/atscaffold/"; + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = aniPath1 + "marble_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/scaffold.ptl", 0.0, 0.0); + // sq_SetSpeedToMoveParticle(obj,0,1200); + // sq_SetSpeedToMoveParticle(obj,2,-1200); + break; + case 21: + local aniPath = aniPath1 + "up_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = aniPath1 + "newcatchmarble_06.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(1); + obj.setTimeEvent(1, lifeTime, 1, false); + break; + case 21: + local aniPath = aniPath1 + "boom_11.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + switch(subtype){ + case 1: + local aniPath1 = "passiveobject/atswordman_bykk/darktempler/animation/atshadowbinding/"; + switch(state){ + case 20: + local aniPath = aniPath1+"casting_shadowbinding_shadow.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = aniPath1+"loop_shadowbinding_shadow.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(2); + obj.setTimeEvent(1,lifeTime,1,false); + + local totalDamage = obj.getVar("custom").getInt(0); + obj.getVar("targetObj").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= 15 && isFrontObject(obj,activeObj)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/4_darktempler/shadowbinding/ap_shadowbinding.nut", true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 20, ENUM_DIRECTION_NEUTRAL , AddAppendage); + local uniqueId = sq_GetObjectId(activeObj); + obj.getVar("targetObj").push_obj_vector(activeObj); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWBINDING,2,totalDamage,uniqueId,0,0,0,0,0,0,1); + } + } + } + break; + case 22: + local aniPath = aniPath1+"end_shadowbinding_shadow.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local pAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(3).tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, 1.0); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + local aniPath1 = "passiveobject/atswordman_bykk/darktempler/animation/atshadowharvest/"; + switch(subtype){ + case 1: + switch(state){ + case 20://fly + local aniPath = aniPath1+"flyingkal_shadowharvest_flyingkal_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/shadowharvest.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,1200); + sq_SetSpeedToMoveParticle(obj,2,-1200); + break; + case 21://start + sq_SetMyShake(obj,5,100); + obj.sq_RemoveMoveParticle(); + local aniPath = aniPath1+"startcircle_shadowharvestrenewal_sword.ani"; + if(obj.getVar("custom").getInt(10) > 0) aniPath = aniPath1+"lv95passive/startcircle_shadowharvestlv95passive_sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + local range = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + local isSeal = obj.getVar("custom").getInt(4); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,2,totalDamage,range,lifeTime,hitTime,isSeal,0,0,0,1); + obj.setTimeEvent(1, lifeTime, 1, false); + break; + case 22://loop + local aniPath = aniPath1+"loopcircle_shadowharvestrenewal_sword.ani"; + if(obj.getVar("custom").getInt(10) > 0) aniPath = aniPath1+"lv95passive/loopcircle_shadowharvestlv95passive_sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23://end + local aniPath = aniPath1+"endcircle_shadowharvestrenewal_sword.ani"; + if(obj.getVar("custom").getInt(10) > 0) aniPath = aniPath1+"lv95passive/endcircle_shadowharvestlv95passive_end_sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 24://explosion + local aniPath = aniPath1+"lv95passive/explosion_shadowharvestlv95passive_explosion.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(5); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case 2: + switch(state){ + case 20://start + local aniPath = aniPath1+"startcircle_shadowharvest_magiccircle_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21://loop + local aniPath = aniPath1+"loopcircle_shadowharvest_magiccircle_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, hitTime, -1, false); + local isSeal = obj.getVar("custom").getInt(4); + if(isSeal > 0){ + if(!sqrChr) break; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + local range = obj.getVar("custom").getInt(1); + if(auraAppendage) auraAppendage.setAttractionInfo(100, 100, range, 100); + } + } + break; + case 22://end + local aniPath = aniPath1+"endcircle_shadowharvest_magiccircle_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(!sqrChr) break; + CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"); + break; + } + local range = obj.getVar("custom").getInt(1); + local currentAni = obj.getCurrentAnimation();//得到當前ani + local sizeRate = range.tofloat() / 170.0;//轉換浮點數運算 + currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 寬度跟高度率 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻擊框,x y z比率 + break; + } + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/summon_shadowpuppet_puppet.ani"; + if(obj.getVar("custom").getInt(4) > 0) aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/lv95passive/shadowpuppetbody_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/puppetdash_shadowpuppet_puppet.ani"; + if(obj.getVar("custom").getInt(4) > 0) aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/lv95passive/shadowpuppetdisappear_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("custom").getInt(4) < 1){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/puppetdash_shadowpuppet_dash.ani",-250,0,20); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/puppetdash_shadowpuppet_dust.ani",0,0,0); + } + break; + } + break; + } + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + switch(subtype){ + case 1: + local aniPath1 = "passiveobject/atswordman_bykk/darktempler/animation/atsouldrain/"; + switch(state){ + case 20: + local aniPath = aniPath1 + "start_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = aniPath1 + "loop_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(5); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, hitTime, -1, true); + obj.getVar("targetObj").clear_obj_vector(); + break; + case 22: + obj.removeAllTimeEvent(); + local aniPath = aniPath1 + "end_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local size = obj.getVar("targetObj").get_obj_vector_size(); + local number = obj.getVar("custom").getInt(6); + if(size < 1) break; + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("targetObj").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("hit").setInt(number,0); + } + } + break; + } + break; + } + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atstarfall/rush_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj) obj.getVar("custom").setInt(12, sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj))); + obj.setTimeEvent(1,5,-1,false); + local pAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(pAni); + break; + case 21: + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atstarfall/floor.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onEndCurrentAni_po_atswordman_bykk_kak(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + switch(skillIndex){ + case 94: sq_SendDestroyPacketPassiveObject(obj); break; + case 87: sq_SendDestroyPacketPassiveObject(obj); break; + case 34: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + switch(subtype){ + case 1: + case 2: + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + case 10: sq_SendDestroyPacketPassiveObject(obj); break; + case 11: sq_SendDestroyPacketPassiveObject(obj); break; + case 20: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + switch(subtype){ + case 0: + switch(state){ + case 100: + case 101: + case 102: + case 103: + obj.addSetStatePacket(state + 10, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + case 4: + if(subtype == 2){ + local totalDamage = obj.getVar("custom").getInt(12); + local sizeRate = obj.getVar("custom").getInt(13); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,125,0,25,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,4,totalDamage,sizeRate,0,0,0,0,0,0,1); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 10: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: + case 22: + if(obj.getVar("custom").getInt(14) >= obj.getVar("custom").getInt(11) - 2){ + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + obj.getVar("custom").setInt(14, obj.getVar("custom").getInt(14) + 1); + local addstate = 22; + if(state == 22) addstate = 21; + obj.addSetStatePacket(addstate, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: + if(obj.getVar("custom").getInt(14) >= obj.getVar("custom").getInt(11) - 1) sq_SendDestroyPacketPassiveObject(obj); + else{ + obj.getVar("custom").setInt(14, obj.getVar("custom").getInt(14) + 1); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + switch(subtype){ + case 1: + case 4: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + switch(subtype){ + case 0: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + // switch(state){ + // case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + // case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + // case 22: sq_SendDestroyPacketPassiveObject(obj); break; + // } + // break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + switch(subtype){ + case 2: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + switch(subtype){ + case 1: + switch(state){ + case 20: + if(obj.getVar("custom").getInt(14) > 0)obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: + if(obj.getVar("custom").getInt(11) == 2){ + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/disappear_dance_fog.ani", 0, 0, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + else obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/disappear_dance_fog.ani", 0, 0, 0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + switch(subtype){ + case 1: + if(state < 24){ + if(obj.getVar("custom").getInt(15) + 1 == obj.getVar("custom").getInt(12)) obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + else{ + obj.getVar("custom").setInt(15, obj.getVar("custom").getInt(15) + 1); + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + } + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + break; + } + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + switch(subtype){ + case 1: + switch(state){ + case 21: obj.setTimeEvent(1, 10, 20, true); break; + case 22: + case 23: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 25: sq_SendDestroyPacketPassiveObject(obj); break; + case 26: obj.setTimeEvent(6, 10, 20, true); break; + + } + break; + } + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + switch(subtype){ + case 1: + switch(state){ + case 20: + //obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 20: + break; + case 21: + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + } + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + switch(subtype){ + case 1: + switch(state){ + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + if(subtype == 2){ + local size = sqrChr.getVar("zwei_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("zwei_tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut"); + local totalDamage = obj.getVar("custom").getInt(10); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, activeObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(activeObj) / 2, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 3, totalDamage, 0, 0, 0, 0, 0, 0, 0, 0); + } + } + } + } + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + local size = sqrChr.getVar("zwei_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("zwei_tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut"); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + switch(subtype){ + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + switch(subtype){ + case 1: + switch(state){ + case 22: sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + case 23: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + } + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + switch(subtype){ + case 1: + local hitMax = obj.getVar("custom").getInt(10); + obj.setTimeEvent(1,80,hitMax - 1, true); + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + break; + } + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + local targetObj = obj.getVar().get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local timer = activeObj.getVar("loyalslave").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + activeObj.getVar("loyalslave").setBool(0, false); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + switch(subtype){ + case 1: + case 2: + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); + if(activeObj){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/shadowbinding/ap_shadowbinding.nut"); + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: + if(obj.getVar("custom").getInt(10) > 0){obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");break;} + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + switch(subtype){ + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + case 3: + case 4: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + switch(subtype){ + case 1: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + } + break; + } +} diff --git a/user/116.205.165.25/3_atswordman_4.c b/user/116.205.165.25/3_atswordman_4.c new file mode 100644 index 0000000..36a890e --- /dev/null +++ b/user/116.205.165.25/3_atswordman_4.c @@ -0,0 +1,2419 @@ + +function onTimeEvent_po_atswordman_bykk_kak(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + switch(skillIndex){ + case 88: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case 34: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + switch(timeEventIndex){ + case 1: + local rangeX = 300, rangeY = 150;//距離 + local apdPath = "character/atswordman/1_swordmaster/breaksworddance/ap_breaksworddance.nut"; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= rangeY){ + local activeObj = sq_GetCNRDObjectToActiveObject(object);//活動類 + if(!sqrChr.getVar("breaksworddance_tar").is_obj_vector(activeObj)) sqrChr.getVar("breaksworddance_tar").push_obj_vector(activeObj); + // local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, apdPath, true); + // sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL ,AddAppendage); + } + } + break; + case 2: + local size = sqrChr.getVar("breaksworddance_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("breaksworddance_tar").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + switch(timeEventIndex){ + case 1: + local targetObj = obj.getVar("custom").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + break; + case 2: obj.resetHitObjectList(); break; + case 10://判斷距離 + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 30); + local direction = sqrChr.getDirection(); + if(obj.getDirection() != direction) obj.setDirection(direction); + if(disX > 10){ + local baseM = 30; + local moveX = disX / baseM + 2; + if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 10){ + local baseM = 30; + local moveY = disY / baseM + 1; + if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disZ > 5){ + local baseM = 30; + local moveZ = disZ / baseM + 1; + if(sq_GetZPos(obj) - 30 > sq_GetZPos(sqrChr)) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) - moveZ); + else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + moveZ); + } + if(disX <= 10 && disY <= 10 && disZ <= 5){ + obj.stopTimeEvent(10); + obj.setTimeEvent(11,300,-1,false); + } + break; + case 11://移動 + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 30); + if(disX > 10 || disY > 10 || disZ > 5){ + obj.stopTimeEvent(11); + obj.setTimeEvent(10,15,-1,false); + } + break; + case 100: + local element = obj.getVar("changeSword").getInt(11); + obj.addSetStatePacket(element + 100, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7, 17); + local hitMax = obj.getVar("custom").getInt(11); + obj.setTimeEvent(2, delay / hitMax, hitMax - 1, false); + break; + case 2: + obj.resetHitObjectList(); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + switch(timeEventIndex){ + case 1: + obj.setTimeEvent(2, obj.getVar("custom").getInt(12) / 30, 30, false); + break; + case 2: + local moveX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 250); + local v = sq_GetUniformVelocity(obj.getVar("custom").getInt(20), moveX, timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(21), 75, timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, v); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + switch(timeEventIndex){ + case 1: + local v = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(13), timeEventCount, 24); + local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(12), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: + local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(14), obj.getVar("custom").getInt(12), timeEventCount, 20); + local vy = sq_GetUniformVelocity(obj.getVar("custom").getInt(15), obj.getVar("custom").getInt(13), timeEventCount, 20); + local vz = sq_GetUniformVelocity(300, 60, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 20) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local rangeX = 250, rangeY = 75;//距離 + local apdPath = "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut"; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= rangeY && !CNSquirrelAppendage.sq_IsAppendAppendage(object, apdPath)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object);//活動類 + //if(sqrChr.getVar("jackCatch_tar").get_obj_vector_size() < 1) sqrChr.getVar("jackCatch_tar").clear_obj_vector(); + if(!sqrChr.getVar("jackCatch_tar").is_obj_vector(activeObj)) sqrChr.getVar("jackCatch_tar").push_obj_vector(activeObj); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, apdPath, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, 100, 300, true, AddAppendage); + } + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(timeEventCount >= obj.getVar("custom").getInt(13) - 1) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: sq_SetSpeedToMoveParticle(obj,0,30); break; + case 3: + obj.getVar("move").setBool(0, true); + obj.setTimeEvent(1, 100, obj.getVar("custom").getInt(13) - 1, false); + obj.sq_SetMoveParticle("particle/shadowpuppet.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj, 0, 300); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + switch(timeEventIndex){ + case 1: + local srcZ = obj.getVar("move").getInt(10); + local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: obj.resetHitObjectList(); break; + case 4: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 5: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 6: + local lifeTime2 = obj.getVar("custom").getInt(21); + local powerDamage = obj.getVar("custom").getInt(22); + local sizeRate = obj.getVar("custom").getInt(23); + local hitTime2 = obj.getVar("custom").getInt(24); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 1, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODSEAL, 3, lifeTime2, powerDamage, sizeRate, hitTime2, 0, 0, 0, 0, 0); + break; + } + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + switch(timeEventIndex){ + case 1: + local targetObj = obj.getVar("targetObj").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); + else sq_SendDestroyPacketPassiveObject(obj); + if(timeEventCount >= obj.getVar("custom").getInt(11) - 1) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(timeEventCount == obj.getVar("custom").getInt(11) - 1) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + obj.resetHitObjectList(); + if(timeEventCount == 40){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(21) * 3); + } + break; + case 3: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj){ + local movex = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(12), timeEventCount, 8); + local movey = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(targetObj), timeEventCount, 8); + sq_setCurrentAxisPos(obj, 0, movex); + sq_setCurrentAxisPos(obj, 1, movey); + // if(timeEventCount == 8){ + // if((sq_GetXPos(obj) > sq_GetXPos(targetObj) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_GetXPos(obj) < sq_GetXPos(targetObj) && obj.getDirection() == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + // } + } + break; + case 4: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + switch(timeEventIndex){ + case 1: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), sq_GetXPos(targetObj), timeEventCount, 20); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(targetObj), timeEventCount, 20); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + } + else{ + obj.stopTimeEvent(1); + obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + } + if(timeEventCount == 20) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + obj.getVar("predatorgaloa_boss").clear_obj_vector(); + obj.getVar("predatorgaloa_named").clear_obj_vector(); + obj.getVar("predatorgaloa_normal").clear_obj_vector(); + obj.getVar("predatorgaloa_target").clear_obj_vector(); + local range = obj.getVar("custom").getInt(19); + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!activeObj.getVar("predatorgaloa").getBool(0)){ + if(sq_IsBoss(activeObj)) obj.getVar("predatorgaloa_boss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("predatorgaloa_named").push_obj_vector(activeObj); + else obj.getVar("predatorgaloa_normal").push_obj_vector(activeObj); + } + } + } + if(obj.getVar("predatorgaloa_boss").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("predatorgaloa_boss").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("predatorgaloa_boss").get_obj_vector(i); + if(targetObj) obj.getVar("predatorgaloa_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("predatorgaloa_named").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("predatorgaloa_named").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("predatorgaloa_named").get_obj_vector(i); + if(targetObj) obj.getVar("predatorgaloa_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("predatorgaloa_normal").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("predatorgaloa_normal").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("predatorgaloa_normal").get_obj_vector(i); + if(targetObj) obj.getVar("predatorgaloa_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("predatorgaloa_target").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("predatorgaloa_target").get_obj_vector_size(); i++){ + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("predatorgaloa_target").get_obj_vector(i)); + if(targetObj){ + targetObj.getVar("predatorgaloa").setBool(0, true); + obj.getVar().setBool(0, true); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + } + } + else obj.setTimeEvent(2, obj.getVar("custom").getInt(13), 1, false); + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && obj.getVar().getBool(0)){ + sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); + local pooledObj = sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_atk_01.ani", 0, 0, sq_GetObjectHeight(targetObj) / 2); + sq_SetCustomRotate(pooledObj, sq_ToRadian(sq_getRandom(0,360).tofloat())); + } + if(timeEventCount == obj.getVar("custom").getInt(13)){ + if(obj.getVar("custom").getInt(20) == obj.getVar("custom").getInt(12)){ + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + else obj.getVar("custom").setInt(20, obj.getVar("custom").getInt(20) + 1); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj) activeObj.getVar("predatorgaloa").setBool(0, false); + obj.setTimeEvent(4, 300, 1, false); + } + break; + case 4: + obj.getVar().setBool(0, false); + obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5: + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 6: + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), sq_GetXPos(sqrChr), timeEventCount, 20); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(sqrChr), timeEventCount, 20); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), sq_GetZPos(sqrChr) + sq_GetObjectHeight(sqrChr) / 2, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount == 20) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local size = sqrChr.getVar("ragnarok_target").get_obj_vector_size(); + if(size > 0){ + local totalDamage = obj.getVar("custom").getInt(12); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("ragnarok_target").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); + } + } + } + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + switch(timeEventIndex){ + case 1: + switch(subtype){ + case 1: createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/downfloor_crack03.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); break; + case 2: createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/finishdownfloor_crack03.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); break; + } + break; + } + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + break; + } + break; + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + switch(timeEventIndex){ + case 1: + local srcX = obj.getVar("custom").getInt(10); + local MoveX = obj.getVar("custom").getInt(12); + local v = sq_GetUniformVelocity(0, MoveX, timeEventCount, 20); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + //print("test:"+timeEventCount); + if(timeEventCount >= 20) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + //if(timeEventCount >= 19 && obj.getVar("custom").getInt(14) > 0) sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + //print("test:"+timeEventCount); + local srcX = obj.getVar("custom").getInt(10); + local srcZ = obj.getVar("custom").getInt(11); + local MoveX = obj.getVar("custom").getInt(12); + local v = sq_GetUniformVelocity(0, MoveX, timeEventCount, 20); + local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 20); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + //if(timeEventCount >= 19) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + switch(timeEventIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atcoalban/tail.ani", 0, 0, 0); + break; + } + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + switch(timeEventIndex){ + case 1: + local sub = obj.getVar("custom").getInt(10); + local sizeRateMin = obj.getVar("custom").getInt(11); + local sizeRateMax = obj.getVar("custom").getInt(12); + local rotateSetMin = obj.getVar("custom").getInt(13); + local rotateSetMax = obj.getVar("custom").getInt(14); + local createMax = obj.getVar("custom").getInt(15); + local sizeRate = sq_getRandom(sizeRateMin, sizeRateMax), rotateSet = sq_getRandom(rotateSetMin, rotateSetMax); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, sq_getRandom(-450, 450), 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 3, sub, sizeRate, rotateSet, 0, 0, 0, 0, 0, 0); + if(timeEventCount >= createMax) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + local targetObj = obj.getVar("targetObj").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); + else sq_SendDestroyPacketPassiveObject(obj); + } + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + switch(timeEventIndex){ + case 1: + //print(timeEventCount); + local targetObj = obj.getVar("targetObj").get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + sq_SendHitObjectPacket(obj, activeObj, 0, 0, sq_GetObjectHeight(activeObj) / 2); + } + if(timeEventCount >= obj.getVar("custom").getInt(11)) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + switch(timeEventIndex){ + case 1: + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(15,19); + local hitMax = obj.getVar("custom").getInt(11); + obj.setTimeEvent(2, delaySum / (hitMax + 1), hitMax, true); + break; + case 2: obj.resetHitObjectList(); break; + case 3: + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + switch(subtype){ + case 1: + break; + case 2: + break; + } + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + switch(timeEventIndex){ + case 1: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local attackObj = sqrChr.getVar("zwei").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + switch(timeEventIndex){ + case 0: sq_SendDestroyPacketPassiveObject(obj); break; + case 1: + local count = obj.getVar().getInt(0); + if(obj.getVar().getInt(0) > 1) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else{ + obj.getVar().setInt(0,count + 1); + obj.resetHitObjectList(); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 2: + obj.setTimeEvent(3,20,3,true); + break; + case 3: + local offsetX = [],offsetY = []; + switch(timeEventCount){ + case 1: + offsetX = [-150,150]; + offsetY = [-10,-10]; + break; + case 2: + offsetX = [-200,200,-120,120,-45,45]; + offsetY = [5,5,35,35,-50,-50]; + break; + case 3: + offsetX = [-45,45,-90,90,0]; + offsetY = [50,50,10,10,1]; + break; + } + local totalDamage2 = obj.getVar("custom").getInt(7); + for(local i = 0; i < offsetX.len(); i++){ + local sub = obj.getVar("sub").getInt(0); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offsetX[i],offsetY[i],0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_BLACKMIRROR,2,totalDamage2,sub,0,0,0,0,0,0,1); + obj.getVar("sub").setInt(0, sub + 1); + } + if(timeEventCount == 3){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), 0); + obj.setTimeEvent(4,100,-1,false); + } + break; + case 4: + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(sqrChr)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); + if(disX <= 200 && disY <= 60 && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/blackmirror/ap_blackmirror.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, SKILL_DARKEMPLER_BLACKMIRROR, false, "character/atswordman/4_darktempler/blackmirror/ap_blackmirror.nut", true); + local time = obj.getVar("custom").getInt(3); + local count = obj.getVar("custom").getInt(4); + local decreaseRate = obj.getVar("custom").getInt(5); + AddAppendage.sq_SetValidTime(time); + AddAppendage.getVar("custom").setInt(0,decreaseRate); + AddAppendage.getVar("custom").setInt(1,count); + AddAppendage.getVar("custom").setInt(2,0); + } + break; + } + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: + //local id = obj.getVar("custom").getInt(0);print(id); + local targetObj = obj.getVar().get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + if(sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj)) <= 5 && sq_Abs(sq_GetYPos(targetObj) - sq_GetYPos(obj)) <= 5){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local currentT = 3 * timeEventCount; + + local currentSpeedRate = 1.0 ; + + local defaultRoundTime = 400; + + local radius = sq_GetUniformVelocity(sq_Abs(obj.getVar("custom").getInt(3) - sq_GetXPos(activeObj)), 0, currentT, defaultRoundTime / 4); + local base100Angle = 0; + if(obj.getVar("custom").getInt(1) < 5) base100Angle = 18000; + local baseX = activeObj.getXPos(); + local baseZ = activeObj.getYPos(); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, obj.getVar("custom").getInt(2), disMovLen.tointeger()); + + local balance = obj.getVar("custom").getFloat(0); + if(sq_Abs(obj.getVar("custom").getInt(3) - sq_GetXPos(activeObj)) <= 350) balance = balance * 700.0 / sq_Abs(obj.getVar("custom").getInt(3) - sq_GetXPos(activeObj)).tofloat(); + local axisMagnifyRate = radius * balance; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseZ + upMovLen.tointeger(); + local mov_z = sq_GetUniformVelocity(obj.getVar("custom").getInt(5), sq_GetZPos(activeObj) + sq_GetHeightObject(targetObj) / 2, currentT, defaultRoundTime / 4); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 2, mov_z); + + + local flash_xpos1 = sq_GetXPos(obj),flash_ypos1 = sq_GetYPos(obj),flash_zpos1 = sq_GetZPos(obj); + local flash_xpos2 = obj.getVar("Xpos").getInt(2),flash_ypos2 = obj.getVar("Ypos").getInt(2),flash_zpos2 = obj.getVar("Zpos").getInt(2); + local flash_xpos3 = obj.getVar("Xpos").getInt(3),flash_ypos3 = obj.getVar("Ypos").getInt(3),flash_zpos3 = obj.getVar("Zpos").getInt(3); + local flash_xpos4 = obj.getVar("Xpos").getInt(4),flash_ypos4 = obj.getVar("Ypos").getInt(4),flash_zpos4 = obj.getVar("Zpos").getInt(4); + local flash_xpos5 = obj.getVar("Xpos").getInt(5),flash_ypos5 = obj.getVar("Ypos").getInt(5),flash_zpos5 = obj.getVar("Zpos").getInt(5); + local flash_xpos6 = obj.getVar("Xpos").getInt(6),flash_ypos6 = obj.getVar("Ypos").getInt(6),flash_zpos6 = obj.getVar("Zpos").getInt(6); + local flash_xpos7 = obj.getVar("Xpos").getInt(7),flash_ypos7 = obj.getVar("Ypos").getInt(7),flash_zpos7 = obj.getVar("Zpos").getInt(7); + local flash_xpos8 = obj.getVar("Xpos").getInt(8),flash_ypos8 = obj.getVar("Ypos").getInt(8),flash_zpos8 = obj.getVar("Zpos").getInt(8); + local create_number = obj.getVar("custom").getInt(4); + if(timeEventCount >= 1 && create_number >= 1){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos1,flash_ypos1,flash_zpos1,ENUM_DRAWLAYER_NORMAL,120,120); + } + if(timeEventCount >= 2 && create_number >= 2){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos2,flash_ypos2,flash_zpos2,ENUM_DRAWLAYER_NORMAL,110,110); + } + if(timeEventCount >= 3 && create_number >= 3){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos3,flash_ypos3,flash_zpos3,ENUM_DRAWLAYER_NORMAL,100,100); + } + if(timeEventCount >= 4 && create_number >= 4){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos4,flash_ypos4,flash_zpos4,ENUM_DRAWLAYER_NORMAL,95,95); + } + if(timeEventCount >= 5 && create_number >= 5){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos5,flash_ypos5,flash_zpos5,ENUM_DRAWLAYER_NORMAL,90,90); + } + if(timeEventCount >= 6 && create_number >= 6){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos6,flash_ypos6,flash_zpos6,ENUM_DRAWLAYER_NORMAL,85,85); + } + if(timeEventCount >= 7 && create_number >= 7){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos7,flash_ypos7,flash_zpos7,ENUM_DRAWLAYER_NORMAL,80,80); + } + if(timeEventCount >= 8 && create_number >= 8){ + createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos8,flash_ypos8,flash_zpos8,ENUM_DRAWLAYER_NORMAL,75,75); + } + obj.getVar("Xpos").setInt(2,flash_xpos1);obj.getVar("Ypos").setInt(2,flash_ypos1);obj.getVar("Zpos").setInt(2,flash_zpos1); + obj.getVar("Xpos").setInt(3,flash_xpos2);obj.getVar("Ypos").setInt(3,flash_ypos2);obj.getVar("Zpos").setInt(3,flash_zpos2); + obj.getVar("Xpos").setInt(4,flash_xpos3);obj.getVar("Ypos").setInt(4,flash_ypos3);obj.getVar("Zpos").setInt(4,flash_zpos3); + obj.getVar("Xpos").setInt(5,flash_xpos4);obj.getVar("Ypos").setInt(5,flash_ypos4);obj.getVar("Zpos").setInt(5,flash_zpos4); + obj.getVar("Xpos").setInt(6,flash_xpos5);obj.getVar("Ypos").setInt(6,flash_ypos5);obj.getVar("Zpos").setInt(6,flash_zpos5); + obj.getVar("Xpos").setInt(7,flash_xpos6);obj.getVar("Ypos").setInt(7,flash_ypos6);obj.getVar("Zpos").setInt(7,flash_zpos6); + obj.getVar("Xpos").setInt(8,flash_xpos7);obj.getVar("Ypos").setInt(8,flash_ypos7);obj.getVar("Zpos").setInt(8,flash_zpos7); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 10: + local loadSlot = sqrChr.sq_GetSkillLoad(65);//SKILL_DARKEMPLER_BUCKSHOT + if(!loadSlot) return; + local enemyMax = obj.getVar("custom").getInt(2); + local soulnum = obj.getVar("custom").getInt(3); + local number = obj.getVar("custom").getInt(20); + local targetObj = obj.getVar("targetObj").get_obj_vector(number); + if(targetObj){ + local totalDamage = obj.getVar("custom").getInt(0); + local direction = obj.getVar("custom").getInt(1); + local group = sq_GetGroup(targetObj);//組 + local uniqueId = sq_GetUniqueId(targetObj);//唯一ID + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetZPos(sqrChr)+60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,1,totalDamage,sq_getRandom(1,6),direction,group,uniqueId,1,0,0,1); + darkEmpler_Evolve(sqrChr,0,soulnum); + } + if(timeEventCount % enemyMax == 0) obj.getVar("custom").setInt(20, number + 1); + break; + case 11: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + switch(timeEventIndex){ + case 1: + if(timeEventCount >= obj.getVar("custom").getInt(10) - 1) sq_SendDestroyPacketPassiveObject(obj); + obj.resetHitObjectList(); + break; + } + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local totalDamage = obj.getVar("custom").getInt(10); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,1,totalDamage,0,0,0,0,0,0,0,0); + break; + } + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + switch(timeEventIndex){ + case 1: + createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_attackground_crack.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), sq_GetZPos(obj), ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 11, 720); + break; + } + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + switch(timeEventIndex){ + case 1: + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_LACERTHORNS,2,0,0,0,0,0,0,0,0,0); + break; + } + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: darkEmpler_Evolve(sqrChr, 1, 0); break; + } + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + switch(timeEventIndex){ + case 10: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = 3 * timeEventCount;//當前時間 + + local currentSpeedRate = 1.0 ; + + local defaultRoundTime = 240 / obj.getVar("custom").getInt(10) * 100; + + local baseX = obj.getVar("custom").getInt(15); + local baseZ = obj.getVar("custom").getInt(16); + + local radius = sq_GetUniformVelocity(sq_Abs(obj.getVar("custom").getInt(13) - baseX), 0, currentT, defaultRoundTime / 4); + local base100Angle = 0; + if(obj.getVar("custom").getInt(11) < 5) base100Angle = 18000; + local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, obj.getVar("custom").getInt(12), disMovLen.tointeger()); + + local balance = obj.getVar("custom").getFloat(0); + if(sq_Abs(obj.getVar("custom").getInt(13) - baseX) <= 350) balance = balance * 700.0 / sq_Abs(obj.getVar("custom").getInt(13) - baseX).tofloat(); + local axisMagnifyRate = radius * balance; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseZ + upMovLen.tointeger(); + local mov_z = sq_GetUniformVelocity(obj.getVar("custom").getInt(14), 50, currentT, defaultRoundTime / 4); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 2, mov_z); + break; + case 11: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 12: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + switch(timeEventIndex){ + case 1: + local sizeRate = obj.getVar("custom").getInt(3); + local countMax = 220 * sizeRate / 100 / 50; + obj.setTimeEvent(3,30,countMax,true); + obj.setTimeEvent(2,30*countMax+300,1,false); + break; + case 2: + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); + if(activeObj){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/shadowbinding/ap_shadowbinding.nut"); + } + } + size = sqrChr.getVar("binding").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local colObj = sq_GetCNRDObjectToCollisionObject(sqrChr.getVar("binding").get_obj_vector(i)); + if(colObj) colObj.setValid(false); + } + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + //create obj + local totalDamage = obj.getVar("custom").getInt(2); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,timeEventCount * 50,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWBINDING,3,totalDamage,0,0,0,0,0,0,0,1); + break; + case 4: + local id = obj.getVar("custom").getInt(0); + local object = sq_GetObjectByObjectId(sqrChr, id); + if(object){sq_SendHitObjectPacket(obj,object,0,0,0);} + else{sq_SendDestroyPacketPassiveObject(obj);} + break; + case 5: + break; + case 6: + break; + } + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + if(timeEventIndex == 1) obj.resetHitObjectList(); + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + if(!sqrChr) break; + local totalDamage = obj.getVar("custom").getInt(1); + local hitMax = obj.getVar("custom").getInt(3); + local range = obj.getVar("custom").getInt(4); + local number = obj.getVar("custom").getInt(6); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2 && isFrontObject(obj,object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + obj.getVar("targetObj").push_obj_vector(activeObj); + local hitCount = activeObj.getVar("hit").getInt(number); + local uniqueId = sq_GetObjectId(activeObj); + if(hitCount >= hitMax) break; + if(hitCount == 0){ + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,2,totalDamage,uniqueId,0,0,0,0,0,0,0); + activeObj.getVar("hit").setInt(number, hitCount + 1); + } + else if(hitCount <= hitMax - 2){ + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,3,totalDamage,uniqueId,0,0,0,0,0,0,0); + activeObj.getVar("hit").setInt(number, hitCount + 1); + } + else{ + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,4,totalDamage,uniqueId,0,0,0,0,0,0,0); + activeObj.getVar("hit").setInt(number, hitCount + 1); + } + } + } + break; + case 3: + local uniqueId = obj.getVar("custom").getInt(0); + local object = sq_GetObjectByObjectId(obj, uniqueId); + if(object) sq_SendHitObjectPacket(obj,object,0,0,sq_GetObjectHeight(object) / 2); + break; + } + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + switch(timeEventIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atstarfall/stone3.ani",0,-1,0); + break; + } + break; + } + break; + } +} + +function onAttack_po_atswordman_bykk_kak(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + //enableClearDeadEnemies(obj, damager); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + if(job == 1 && obj.getVar("atkbool").getBool(0) == false){ + obj.getVar("atkbool").setBool(0, true); + if(sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE) && skillIndex != SKILL_SWORDMASTER_BYKK_CHANGESWORD && skillIndex != SKILL_SWORDMASTER_BYKK_MAGICSWORDUP){ + if(skillIndex == SKILL_SWORDMASTER_BYKK_WEAPONCOMBO) isChangeSword_Attack(sqrChr,damager,boundingBox); + else isMagicSwordUp_Attack(sqrChr,damager,boundingBox); + } + } + + + switch(job){ + case 0: + switch(skillIndex){ + case 34: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sqrChr.getVar("executionTar").push_obj_vector(damager); + local apdPath = "character/atswordman/execution/ap_execution.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + break; + } + break; + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + switch(subtype){ + case 3: + if(isStuck) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + local apdPath = "character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); + local bufftime = sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 14, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, obj, true); + } + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + switch(subtype){ + case 1: + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && state == 20){ + obj.stopTimeEvent(1); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 3: + if(isStuck) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + local apdPath = "character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); + local bufftime = sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 14, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, obj, true); + } + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + switch(subtype){ + case 1: + if(obj.getVar("move").getBool(0)){ + obj.getVar("move").setBool(0, false); + obj.setTimeEvent(2, 80, 1, false); + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + switch(subtype){ + case 1: + if(isStuck) break; + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.getWeaponSubType() == 2 && sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ + local apdPath = "character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); + local bufftime = sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 14, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, obj, true); + } + } + break; + } + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local movespeedRate = obj.getVar("custom").getInt(15); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, "character/atswordman/2_demonslayer/bloodseal/ap_bloodseal.nut", true); + AddAppendage.sq_SetValidTime(obj.getVar("custom").getInt(10)); + local change_appendage = AddAppendage.sq_getChangeStatus("bloodseal"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("bloodseal",damager, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -(movespeedRate).tofloat()); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(SKILL_DEMONSLAYER_BLOODSEAL); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(obj.getVar("custom").getInt(10)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(11)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(14)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(20)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(21)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(22)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(12)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(23)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(13)); + sq_BinaryWriteDword(sq_GetObjectId(damager)); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, sq_GetXPos(damager), sq_GetYPos(damager), sq_GetObjectHeight(damager) / 2); + sq_AddDrawOnlyAniFromParent(damager, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/bloodseal_bulletfinish_03.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + switch(subtype){ + case 1:// + case 2:// + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr.getVar("ragnarok_target").is_obj_vector(damager)) sqrChr.getVar("ragnarok_target").push_obj_vector(damager); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/2_demonslayer/ragnarok/ap_ragnarok.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/2_demonslayer/ragnarok/ap_ragnarok.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 400, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + } + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + break; + } + if(!sqrChr || sqrChr.getState == STATE_DIE) break; + if(skillIndex != SKILL_DEMONSLAYER_DARKSTRIKE){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + darkStrike_Attack(sqrChr, damager); + } + } + break; + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + //if(subtype == 1 && state == 20){ + // if(obj.getVar("custom").getInt(14) > 0) break; + // obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + //} + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "passiveobject/atswordman_bykk/vagabond/animation/atcoalban/ta_ta2.ani", 0, 0, sq_GetObjectHeight(damager) / 2); + } + break; + } + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local totalDamage = obj.getVar("custom").getInt(10); + local lifeTime = obj.getVar("custom").getInt(11); + local hitMax = obj.getVar("custom").getInt(12); + local sub = obj.getVar("custom").getInt(13); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, activeObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(activeObj) / 2, obj.getDirection(), 3, SKILL_VAGABOND_FISTOFEXPLOSION, 2, totalDamage, lifeTime, hitMax, sub, group, uniqueId, 0, 0, 0); + } + break; + } + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && subtype <= 2){ + if(!sqrChr) break; + sqrChr.getVar("zwei_tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager) && obj.isEnemy(damager)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/4_darktempler/blackmirror/ap_blackmirrortar.nut")) return; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/4_darktempler/blackmirror/ap_blackmirrortar.nut", true); + AddAppendage.sq_SetValidTime(4500); + sq_MoveToAppendageForce(activeObj, obj, obj, 0, 0, activeObj.getZPos(), 300, true, AddAppendage); + local change_appendage = AddAppendage.sq_getChangeStatus("movespeed"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("movespeed",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED , true, -200.0); + } + } + break; + } + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdoomsday/finishhiteffect.ani", 0, 1, sq_GetHeightObject(damager) / 3); + break; + } + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + switch(subtype){ + case 3: + switch(state){ + case 20: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE) || sq_IsFixture(damager)) break; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/4_darktempler/immolation/ap_immolation.nut")) break; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/4_darktempler/immolation/ap_immolation.nut", true); + sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 1000, true, appendage); + appendage.sq_SetValidTime(1200); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(1); + local lifeTime = obj.getVar("custom").getInt(2); + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SCAFFOLD,2,totalDamage,lifeTime,0,0,0,0,0,0,1); + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/4_darktempler/scaffold/ap_scaffold.nut", true); + // AddAppendage.sq_SetValidTime(lifeTime + 300); + AddAppendage.getAppendageInfo().setValidTime(lifeTime + 300); + sq_MoveToAppendageForce(damager, obj, obj, 20, -1, 65, 300, true, AddAppendage); + if(!sq_IsFixture(damager)) sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + break; + } + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + switch(subtype){ + case 1: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + } +} + +function onKeyFrameFlag_po_atswordman_bykk_kak(obj, flagIndex) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + switch(subtype){ + case 1: + obj.resetHitObjectList(); + local number = flagIndex; + local element = obj.getVar("custom").getInt(12); + local effSet = [["character/swordman/effect/animation/atdevilslash/"],["fire/","ice/","dark/","light/","nothing/"],["slash_"],["fire_","ice_","dark_n_","light_","mu_"]]; + // local pooledObj = sq_AddDrawOnlyAniFromParent(obj, effSet[0][0]+effSet[1][element]+effSet[2][0]+effSet[3][element]+number.tostring()+".ani", 0, 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atdevilslash/newatdevilslashchargeattackeffect_00.ani", 0, 0, 0); + local sizeRate = obj.getVar("custom").getInt(14); + print("sizeRate = "+sizeRate); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + obj.getVar("custom").setInt(13, obj.getVar("custom").getInt(13) + 1); + if(obj.getVar("custom").getInt(13) >= obj.getVar("custom").getInt(11)) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + if(subtype == 2 && state == 21){ + local totalDamage = obj.getVar("custom").getInt(15); + local sizeRate = obj.getVar("custom").getInt(16); + local speedRate = obj.getVar("custom").getInt(17); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,3,totalDamage,sizeRate,speedRate,0,0,0,0,0,1); + } + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + switch(subtype){ + case 1: + switch(flagIndex){ + case 101: + local count = obj.getVar("custom").getInt(20); + local totalDamage = obj.getVar("custom").getInt(21); + local isSub = obj.getVar("custom").getInt(22); + local isSub2 = obj.getVar("custom").getInt(23); + local offsetX = obj.getVar("custom").getInt(24); + local offsetY = obj.getVar("custom").getInt(25); + local skill_level = obj.getVar("custom").getInt(26); + if(skill_level > 0){ + totalDamage = totalDamage * 2; + offsetY = 0; + } + for (local i = 0; i < count ; i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, offsetY, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, isSub, isSub2, 0, 0, 0, 0, 0, 0); + // if(skill_level > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, -40, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, 1, isSub2, 0, 0, 0, 0, 0, 0); + } + break; + case 201: obj.resetHitObjectList(); break; + } + break; + } + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + switch(subtype){ + case 2: + switch(flagIndex){ + case 5000: + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, ENUM_DIRECTION_RIGHT, 2, SKILL_DEMONSLAYER_RAGNAROK, 3, totalDamage, hitMax, 0, 0, 0, 0, 0, 0, 1); + break; + case 6000: + for(local i = 0; i < 52; i++){ + local aniPath = i.tostring(); + if(i < 10) aniPath = "0" + i.tostring(); + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/attack/ratkc_"+aniPath+".ani",true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + } + obj.setTimeEvent(2, 100, 1, false); + break; + } + break; + } + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + switch(flagIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + } + break; + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + local hitMax = obj.getVar("custom").getInt(11); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(4,51); + obj.setTimeEvent(1, delaySum / hitMax, hitMax - 1, false); + break; + case 2: + sq_flashScreen(obj, 60, 60, 240, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + sq_flashScreen(obj, 0, 0, 180, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //`CreateEffectBody1` 0 1 0 + local speedRate = obj.getVar("custom").getInt(12); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 1, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY1, speedRate, 0, 0, 0, 0, 0, 0, 0); + break; + case 4: + //`CreateEffectBody2` 0 2 0 + local speedRate = obj.getVar("custom").getInt(12); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 2, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY2, speedRate, 0, 0, 0, 0, 0, 0, 0); + break; + case 5: + sq_flashScreen(obj, 0, 0, 120, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //`CreateEffectBody3` 0 3 0 + local speedRate = obj.getVar("custom").getInt(12); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 3, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY3, speedRate, 0, 0, 0, 0, 0, 0, 0); + break; + case 6: + //`CreateEffectBody4` 0 4 0 + //`CreateEffectBody5` 0 5 0 + local speedRate = obj.getVar("custom").getInt(12); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 4, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY4, speedRate, 0, 0, 0, 0, 0, 0, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 5, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY5, speedRate, 0, 0, 0, 0, 0, 0, 0); + break; + case 7: + sq_flashScreen(obj, 0, 0, 120, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 8: + sq_flashScreen(obj, 0, 60, 180, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 9: + sq_flashScreen(obj, 60, 60, 300, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 10: + obj.sq_PlaySound("FATAL_FLOWER_EXP"); + sq_SetMyShake(obj, 7, 600); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + switch(flagIndex){ + case 100: + if(obj.getVar("custom").getInt(10) == 9) sq_SetMyShake(obj, 2, 120); + else if(obj.getVar("custom").getInt(10) > 5) sq_SetMyShake(obj, 2, 180); + else sq_SetMyShake(obj, 3, 180); + break; + } + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + switch(subtype){ + case 1: + break; + case 2: + break; + } + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + if(subtype == 2 && flagIndex == 1){ + local totalDamage = obj.getVar("custom").getInt(0); + local sub = obj.getVar("custom").getInt(1); + local direction = obj.getVar("custom").getInt(2); + local group = obj.getVar("custom").getInt(3); + local uniqueId = obj.getVar("custom").getInt(4); + local create_number = obj.getVar("custom").getInt(5); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,1,totalDamage,sub,direction,group,uniqueId,create_number,0,0,1); + } + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + switch(subtype){ + case 2: + switch(flagIndex){ + case 22: + obj.getVar("punishment_move").setBool(1, true); + break; + case 40: + obj.getVar("punishment_move").setBool(2, true); + break; + case 51: + obj.getVar("punishment_move").setBool(3, true); + break; + case 60: + local dstX = obj.getVar("punishment_base").getInt(10); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + if(subtype == 2 && flagIndex == 1){ + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(2); + local direction = obj.getVar("custom").getInt(3); + local sub = obj.getVar("custom").getInt(4); + switch(sub){ + case 0: + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-275,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,3,totalDamage,lifeTime,hitTime,0,0,0,0,0,0); + break; + case 1: + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,70,direction,4,SKILL_DARKEMPLER_SHADOWPUPPET,1,totalDamage,lifeTime,hitTime,sub,0,0,0,0,0); + break; + } + } + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + break; + } + break; + } +} + +function procAppend_po_atswordman_bykk_kak(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 1: + switch(skillIndex){ + case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 + break; + case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) + break; + case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 + switch(subtype){ + case 0: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 + break; + case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 + break; + case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 + break; + case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 + break; + case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 + break; + case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 + break; + case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 + switch(subtype){ + case 2: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + if(sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE) > 0 && !sq_GetSkill(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE).isInCoolTime()){ + sqrChr.setSkillCommandEnable(SKILL_DEMONSLAYER_DARKSTRIKE,true); + local b_useskill = sqrChr.sq_IsEnterSkill(SKILL_DEMONSLAYER_DARKSTRIKE); + if(b_useskill != -1){ + sqrChr.startSkillCoolTime(SKILL_DEMONSLAYER_DARKSTRIKE, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE), -1); + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE); + local hitMax = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); + local hitTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 2); + local sizeRate = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 3); + local totalDamage = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); + local totalDamage2 = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); + local sub = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 6); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local size = sqrChr.getVar("darkstrike_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sq_GetCNRDObjectToActiveObject(sqrChr.getVar("darkstrike_tar").get_obj_vector(i)); + if(targetObj){ + local id = sq_GetObjectId(targetObj); + cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr, targetObj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2, sqrChr.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id, 0, 1); + break; + } + } + } + } + } + break; + } + break; + case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 + break; + case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 + break; + case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 + break; + case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 + break; + case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 + break; + case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 + break; + case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + sq_SendDestroyPacketPassiveObject(); + return; + } + switch(subtype){ + case 1: + switch(state){ + case 20: + local currentT = sq_GetObjectTime(obj); + local currentSpeedRate = 1.0 ; + local defaultRoundTime = 2400; + local radius = 50; + local base100Angle = 36000 / obj.getVar("custom").getInt(21) * obj.getVar("custom").getInt(16); + + local baseX = sqrChr.getXPos(); + local baseZ = sqrChr.getYPos(); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); + + local axisMagnifyRate = radius * 0.5; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseZ + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 2, sqrChr.getZPos() + 180); + break; + case 24: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE){ + obj.getVar().setBool(0, false); + obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj)); + break; + } + break; + } + break; + case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 + break; + case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 + break; + case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 + break; + case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 + break; + case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 + break; + } + break; + case 3://vagabond + switch(skillIndex){ + case SKILL_VAGABOND_BIGJANG://如來神掌 + switch(subtype){ + case 2: + switch(state){ + case 20: + //print("zpos = "+sq_GetZPos(obj)); + if(sq_GetZPos(obj) <= 0){ + local totalDamage = obj.getVar("custom").getInt(20); + local sizeRate = obj.getVar("custom").getInt(13); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DARKEMPLER, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 2,totalDamage,100,0,sizeRate,1,0,0,0,0); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 + break; + case SKILL_VAGABOND_COALBAN://遊龍掌 + switch(subtype){ + case 1: + local pAni = obj.getCurrentAnimation(); + local time = sq_GetCurrentTime(pAni); + local fireT = 300; + local srcX = obj.getVar("custom").getInt(11); + local srcZ = obj.getVar("custom").getInt(12); + local MoveX = obj.getVar("custom").getInt(10); + local MoveZ = obj.getVar("custom").getInt(13); + if(obj.getVar("custom").getInt(15) > 0) MoveX = srcZ * 3; + local angle = obj.getVar("custom").getInt(14); + local v = sq_GetUniformVelocity(0, MoveX, time, fireT); + local vz = sq_GetUniformVelocity(0, MoveZ, time, fireT / 4); + local angleSet = sq_GetUniformVelocity(angle, 0, time, fireT / 4); + if(time > fireT / 4 && time < fireT / 2){ + vz = sq_GetUniformVelocity(MoveZ, 0, time - fireT / 4, fireT / 4); + angleSet = sq_GetUniformVelocity(0, -angle, time - fireT / 4, fireT / 4); + } + else if(time > fireT / 2 && time < fireT / 4 * 3){ + vz = sq_GetUniformVelocity(0, -MoveZ, time - fireT / 2, fireT / 4); + angleSet = sq_GetUniformVelocity(-angle, 0, time - fireT / 2, fireT / 4); + } + else if(time > fireT / 4 * 3){ + vz = sq_GetUniformVelocity(-MoveZ, 0, time - fireT / 4 * 3, fireT / 4); + angleSet = sq_GetUniformVelocity(0, angle, time - fireT / 4 * 3, fireT / 4); + } + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);//根據方嚮運算當前數值 + if(obj.getVar("custom").getInt(15) > 0){ + srcZ = srcZ + sq_GetUniformVelocity(0, -srcZ, time, fireT); + angleSet = angleSet - 30; + } + sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 + sq_setCurrentAxisPos(obj, 2, srcZ + vz);//設置當前z坐標 + sq_SetCustomRotate(obj, sq_ToRadian(angleSet.tofloat())); + if(time >= fireT) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 + break; + case SKILL_VAGABOND_DUALWEAPON://兩儀功 + break; + case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 + break; + case SKILL_VAGABOND_FATALFLOWER://花開寒影 + break; + case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 + break; + case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 + break; + case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 + break; + case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 + break; + case SKILL_VAGABOND_INHALATION://四象引 + break; + case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 + break; + case SKILL_VAGABOND_NEARBLOW://圓舞斬 + break; + case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 + break; + case SKILL_VAGABOND_RAPIDSTEP://一花渡江 + break; + case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 + break; + case SKILL_VAGABOND_SOARCUT://櫻落斬 + break; + case SKILL_VAGABOND_THREESIDE://三連斬 + switch(subtype){ + case 1: + break; + case 2: + break; + } + break; + case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 + break; + case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 + break; + case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 + break; + case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 + switch(subtype){ + case 2: + switch(state){ + case 21: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcX = obj.getVar("custom").getInt(12); + local srcZ = obj.getVar("custom").getInt(13); + local MoveX = obj.getVar("custom").getInt(14); + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } + break; + } + break; + case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 + break; + case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 + switch(subtype){ + case 3: + if(sqrChr.getState() != SKILL_DARKEMPLER_DOOMSDAY) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_DARKEMPLER_EVOLVE://汲魂之力 + break; + case SKILL_DARKEMPLER_HIDDENBLADE://影刃 + break; + case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 + break; + case SKILL_DARKEMPLER_JIHAD://天罰之劍 + break; + case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 + break; + case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 + switch(subtype){ + case 1: + if(state != 22){ + local targetObj = obj.getVar().get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 + break; + case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 + switch(subtype){ + case 2: + if(obj.getVar("punishment_move").getBool(1)){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(0, 20); + local fireT = pAni.getDelaySum(21, 23); + if(currentT >= fireT){ + obj.getVar("punishment_move").setBool(1, false); + obj.getVar("punishment_base").setInt(11, sq_GetXPos(obj)); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + return; + } + local srcX = obj.getVar("punishment_base").getInt(10); + local MoveX = 350; + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + } + if(obj.getVar("punishment_move").getBool(2)){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(0, 39); + local fireT = pAni.getDelaySum(40, 42); + if(currentT >= fireT){ + obj.getVar("punishment_move").setBool(2, false); + obj.getVar("punishment_base").setInt(12, sq_GetXPos(obj)); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + return; + } + local srcX = obj.getVar("punishment_base").getInt(11); + local MoveX = 250; + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + } + if(obj.getVar("punishment_move").getBool(3)){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(0, 50); + local fireT = pAni.getDelaySum(51, 53); + if(currentT >= fireT){ + obj.getVar("punishment_move").setBool(3, false); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + return; + } + local srcX = obj.getVar("punishment_base").getInt(12); + local MoveX = 450; + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + } + break; + } + break; + case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 + if(subtype == 1 && state == 20 && sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + if(subtype == 2 && state == 20){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 300; + if(currentT > fireT) return; + local v = sq_GetUniformVelocity(0, 130, currentT, fireT); + sq_setCurrentAxisPos(obj, 2, v); + } + break; + case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 + switch(subtype){ + case 1: + switch(state){ + case 21: + local baseX = obj.getVar("custom").getInt(4),baseY = obj.getVar("custom").getInt(5); + local sqrX = sq_GetXPos(sqrChr),sqrY = sq_GetYPos(sqrChr); + + sq_setCurrentAxisPos(obj, 0, sqrX); + local disX = sq_Abs(baseX - sqrX); + local sizeRate = 0;//1.6 * (480 - disX).tofloat() / 480.0; + if((obj.getDirection() == ENUM_DIRECTION_RIGHT && sqrX > baseX) || (obj.getDirection() == ENUM_DIRECTION_LEFT && sqrX < baseX)) sizeRate = 1.6 * (480 - disX).tofloat() / 480.0; + else sizeRate = 1.6 * (480 + disX).tofloat() / 480.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, 1.0); + obj.getVar("custom").setInt(3, (sizeRate * 100.0).tointeger()); + + if(((sq_Abs(baseY - sqrY) >= 15 && sq_GetSkillLevel(sqrChr, 46) < 1) || sq_Abs(baseX - sqrX) >= 200) && obj.getVar().getBool(100) == false){ + obj.getVar().setBool(100, true); + obj.stopTimeEvent(1); + obj.setTimeEvent(1,100,1,true); + } + + break; + } + break; + } + break; + case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 + switch(subtype){ + case 1: + if(sq_GetZPos(obj) <= 0 && state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 + break; + case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 + if(subtype == 3){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcX = obj.getVar("custom").getInt(0); + local v = sq_GetUniformVelocity(0, 150, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), -v); + sq_setCurrentAxisPos(obj, 0, dstX); + } + break; + case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 + break; + case SKILL_DARKEMPLER_STARFALL://魔影轟殺 + switch(subtype){ + case 1: + switch(state){ + case 20: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj){ + if(sq_GetDistanceObject(obj, targetObj, false) < 10){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + local currentT = sq_GetObjectTime(obj); + local fireT = obj.getVar("custom").getInt(12); + local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, true); + local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, true); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + } + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + } + break; + } +} + + + +function getImmuneTypeDamageRate_appendage_BlackMirror_bykk(appendage, damageRate, attacker) +{ + if (!appendage) return damageRate; + local decreaseRate = appendage.getVar("custom").getInt(0); + return damageRate-decreaseRate; +} + +function onDamageParent_appendage_BlackMirror_bykk(appendage,attacker, boundingBox, isStuck) +{ + if(!appendage) return; + local countMax = appendage.getVar("custom").getInt(1); + local damagecount = appendage.getVar("custom").getInt(2); + appendage.getVar("custom").setInt(2, damagecount + 1); + if(damagecount >= countMax) appendage.setValid(false); +} + +function drawAppend_appendage_BlackMirror_bykk(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local var = appendage.getVar(); + local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atblackmirror/shelter.ani"); + if(Ani_01 && isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y, isFlip); + } +} + +function drawAppend_appendage_shadowbinding_bykk(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return; + } + + local var = appendage.getVar(); + local Ani_02 = var.GetAnimationMap("animation_02", "character/swordman/effect/animation/atshadowbinding/monster_shadowbinding_monster_back.ani"); + if(Ani_02 && !isOver){ + sq_AnimationProc(Ani_02); + sq_drawCurrentFrame(Ani_02, x, y, isFlip); + } +} + +function onAttackParent_appendage_evolve_bykk(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + local index = colObj.getCollisionObjectIndex(); + local skillIndex = colObj.getVar("skillIndex").getInt(0); + if(index == PASSIVEOBJECT_BYKK_DARKEMPLER && (skillIndex == SKILL_DARKEMPLER_BUCKSHOT || skillIndex == SKILL_DARKEMPLER_MADNESS)) return; + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE); + local prob = sq_GetLevelData(obj, SKILL_DARKEMPLER_EVOLVE, 2, skill_level); + if(!isStuck && sq_getRandom(1,100) > (100 - prob)){ + darkEmpler_Evolve(obj,1,0) + } +} + +function onStart_appendage_evolve_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} +} + +function drawAppend_appendage_madness_bykk(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local var = appendage.getVar(); + local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atmadness/hhtop_top_a.ani"); + local Ani_02 = var.GetAnimationMap("animation_02", "character/swordman/effect/animation/atmadness/hhbot_bot_a.ani"); + if(Ani_01 && isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y - 30, isFlip); + } + if(Ani_02 && !isOver){ + sq_AnimationProc(Ani_02); + sq_drawCurrentFrame(Ani_02, x, y - 30, isFlip); + } +} + +function drawAppend_appendage_punishment_bykk(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local var = appendage.getVar(); + local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atpunishment/casting/monhold_01.ani"); + if(Ani_01 && isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y - 30, isFlip); + } +} + +function drawAppend_appendage_lacerthorns_bykk(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local var = appendage.getVar(); + local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atlacerthorns/atlacerthornsaura_00.ani"); + local hight = sq_GetObjectHeight(parentObj) / 2 + if(Ani_01 && isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y - hight, isFlip); + } +} + +function drawAppend_appendage_Usir_bykk(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } +} + +function onAttackParent_appendage_Usir_bykk(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; +} + +function onStart_appendage_congest_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + getDamageRate_DarkTempler_bykk(parentObj); +} + +function onStart_appendage_incarnation_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} +} + +function onStart_appendage_vespers_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} +} + +function onStart_appendage_LoyalSlave_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = sq_GetSkillLevel(parentObj,SKILL_DARKEMPLER_LOYALSLAVE); + local value1 = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 4, skillLevel); + local value2 = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 3, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("loyalslave"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("loyalslave",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, true, (value2 * 0.1).tofloat()); + } +} + +function onAttackParent_appendage_LoyalSlave_bykk(appendage, realAttacker, damager,boundingBox, isStuck) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + local skillLevel = sq_GetSkillLevel(parentObj, SKILL_DARKEMPLER_LOYALSLAVE); + local prob = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 0, skillLevel); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(activeObj.getVar("loyalslave").getBool(0) == false && activeObj.getVar("loyalslave").get_ct_vector(0)){ + local timer = activeObj.getVar("loyalslave").get_ct_vector(0) + local currentT = timer.Get(); + local resetTime = sq_GetIntData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 0); + if(currentT >= resetTime && sq_getRandom(1, 100) < prob){ + activeObj.getVar("loyalslave").setBool(0, true); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local lifeTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 1, skillLevel); + local hitTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 2, skillLevel); + cearteSkillPassiveObj_AtSwordMan_bykk(parentObj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetHeightObject(activeObj),parentObj.getDirection(),4,SKILL_DARKEMPLER_LOYALSLAVE,1,lifeTime,hitTime,group,uniqueId,0,0,0,0,0); + } + } + else if(activeObj.getVar("loyalslave").getBool(0) == false && sq_getRandom(1, 100) < prob){ + activeObj.getVar("loyalslave").setBool(0, true); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local lifeTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 1, skillLevel); + local hitTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 2, skillLevel); + cearteSkillPassiveObj_AtSwordMan_bykk(parentObj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetHeightObject(activeObj),parentObj.getDirection(),4,SKILL_DARKEMPLER_LOYALSLAVE,1,lifeTime,hitTime,group,uniqueId,0,0,0,0,0); + } + } +} + diff --git a/user/116.205.165.25/3_atswordman_5.c b/user/116.205.165.25/3_atswordman_5.c new file mode 100644 index 0000000..9c32eb3 --- /dev/null +++ b/user/116.205.165.25/3_atswordman_5.c @@ -0,0 +1,3839 @@ + +//BlackMirror +function checkExecutableSkill_BlackMirror_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_BLACKMIRROR); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_BLACKMIRROR, STATE_PRIORITY_IGNORE_FORCE, true); + AIMPOINT_ATSWORDMAN = 69; + return 1; + } + return 0; +} + +function onSetState_BlackMirror_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_BLACKMIRRORCAST); + obj.sq_PlaySound("SW_BLACK_MIRROR"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local DelaySum = sq_GetDelaySum(obj.getCurrentAnimation()); + sq_StartDrawCastGauge(obj, DelaySum, true); + local timeRate = 104000 / DelaySum; + + local offsetX = 100; + offsetX = obj.sq_GetDistancePos(obj.getXPos(), obj.sq_GetDirection(), offsetX); + local vX = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2) * timeRate / 100; + local vY = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2) / 2 * timeRate / 100; + obj.sq_AddAimPointMark(offsetX, obj.getYPos(), vX, vY); + + break; + } +} + +function onEndCurrentAni_BlackMirror_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local Xpos = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false) - sq_GetXPos(obj); + local Ypos = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false) - sq_GetYPos(obj); + local offsetX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false); + local offsetY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false); + obj.sq_RemoveAimPointMark(); + + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BLACKMIRROR); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 0, skill_level); + local passive_hp = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 3, skill_level); + local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 4, skill_level); + local count = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 5, skill_level); + local decreaseRate = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 0); + local speedRate = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 79); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,Xpos,Ypos,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_BLACKMIRROR,1,totalDamage,passive_hp,time,count,decreaseRate,speedRate,damageRate,0,1); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_BlackMirror_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_BlackMirror_bykk(obj, newState) +{ + if(!obj) return; + sq_EndDrawCastGauge(obj); + obj.sq_RemoveAimPointMark(); +} + +function onProc_BlackMirror_bykk(obj) +{ + if(!obj) return; +} + +function onProcCon_BlackMirror_bykk(obj) +{ + if(!obj) return; +} + +function getScrollBasisPos_BlackMirror_bykk(obj) +{ + if (!obj) return false; + local subState = obj.getSkillSubState(); + if (!obj.isMyControlObject()) return false; + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + obj.sq_SetCameraScrollPosition(posX, posY, 0); + return true; +} + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//BuckShot + +function checkExecutableSkill_BuckShot_bykk(obj) +{ + if (!obj) return 0; + + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOT); + local createMin = sq_GetLevelData(obj, SKILL_DARKEMPLER_BUCKSHOT, 0, skill_level); + local createMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_BUCKSHOT, 1, skill_level); + local enemyMax = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 13); + local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 3); + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOTEX) > 0) soulnum = soulnum - 1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_BUCKSHOT, SKILL_DARKEMPLER_BUCKSHOT, 2, 1.0); + + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + local slotCount = loadSlot.getRemainLoadNumber(); + + if(!loadSlot || slotCount < soulnum) return 0; + + local range = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 1); + obj.getVar("targetBoss").clear_obj_vector(); + obj.getVar("targetNamed").clear_obj_vector(); + obj.getVar("targetNormal").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && isFrontObject(obj,activeObj)){ + if(sq_IsBoss(activeObj)) obj.getVar("targetBoss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("targetNamed").push_obj_vector(activeObj); + else obj.getVar("targetNormal").push_obj_vector(activeObj); + } + } + } + local boss_number = obj.getVar("targetBoss").get_obj_vector_size(); + local named_number = obj.getVar("targetNamed").get_obj_vector_size(); + local normal_number = obj.getVar("targetNormal").get_obj_vector_size(); + local all_number = boss_number + named_number + normal_number; + if(all_number < 0) return 0; + + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_BUCKSHOT); + if (isUse){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-80,0,sq_GetZPos(obj)+60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,3,totalDamage,obj.getDirection(),createMin,createMax,enemyMax,soulnum,0,0,0); + } + + return 0; +} + +function checkCommandEnable_BuckShot_bykk(obj) +{ + if (!obj) return 0; + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(!loadSlot) return 0; + local count = loadSlot.getRemainLoadNumber(); + local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 3); + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOTEX) > 0) soulnum = soulnum - 1; + if(count < soulnum) return 0; + return 1; +} + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//congest + +function checkExecutableSkill_Congest_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_CONGEST); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(102, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_Congest_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Congest_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_CONGEST_ON_BODY); + obj.sq_PlaySound("SW_SHADOW_BINDING"); + local castTime = sq_GetCastTime(obj, SKILL_DARKEMPLER_CONGEST, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)); + sq_StartDrawCastGauge(obj, castTime, true); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = delaySum.tofloat() / castTime.tofloat() * 100.0; + currentAni.setSpeedRate(speedRate); + break; + } +} + +function onEndCurrentAni_Congest_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local apPath = "character/atswordman/4_darktempler/congest/ap_congest.nut"; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DARKEMPLER_CONGEST, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)); + appendage.setEnableIsBuff(true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + local bonusRate = sq_GetLevelData(obj,SKILL_DARKEMPLER_CONGEST, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)) / 10; + obj.getVar("apGetSetbyKK").setInt(0, bonusRate); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEndState_Congest_bykk(obj, new_state) +{ + if(new_state != 102){ + sq_EndDrawCastGauge(obj); + } +} + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//DeadlyCape + +function startSkillCoolTime_atSwordman_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + local state = obj.getState(); + if(state == SKILL_DARKEMPLER_DEADLYCAPE && skillIndex == SKILL_DARKEMPLER_BUCKSHOT){ + local newCoolTime = currentCoolTime * (100 - sq_GetLevelData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DEADLYCAPE))) / 100; + return newCoolTime; + } + return currentCoolTime; +} + +function checkExecutableSkill_DeadlyCape_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DEADLYCAPE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_DeadlyCape_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_DeadlyCape_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECAST); + obj.sq_PlaySound("SW_DEDLY_CAPE"); + obj.sq_SetCurrentAttackInfo(125); + local bonus = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DEADLYCAPE, SKILL_DARKEMPLER_DEADLYCAPE, 0, 1.0); + obj.sq_SetCurrentAttackBonusRate(bonus); + obj.getVar("deadlycape_target").clear_obj_vector(); + local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 0) * 5; + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 6) > 0) hitMax = hitMax - 9;//护石 + + obj.getVar("DeadlyCapeCount").clear_vector(); + obj.getVar("DeadlyCapeCount").push_vector(0); + obj.getVar("DeadlyCapeCount").push_vector(hitMax); + obj.sq_SetXScrollStart(150, 100); + break; + case 1://多段1 + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK1); + obj.resetHitObjectList(); + obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK2); + obj.resetHitObjectList(); + obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK3); + obj.resetHitObjectList(); + obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK4); + obj.resetHitObjectList(); + obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); + break; + case 5://多段5 + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK5); + obj.resetHitObjectList(); + obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); + break; + case 6: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPELASTCAST); + local effectObj = obj.getVar("deadlycape_effect").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 7: + if(obj.isMyControlObject()) sq_SetMyShake(obj,8,500); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPELASTEXPLOSION); + break; + } + local speedRate = 1.0; + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 6) > 0) speedRate = 1.2; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); +} + +function onEndCurrentAni_DeadlyCape_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("deadlycape_target").get_obj_vector_size() < 1){ + local effectObj = obj.getVar("deadlycape_effect").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_SetXScrollStop(100); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + case 3: + case 4: + case 5: + if(obj.getVar("DeadlyCapeCount").get_vector(0) > obj.getVar("DeadlyCapeCount").get_vector(1)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(6); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + obj.sq_IntVectClear(); + if(subState == 5) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 6: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(7); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 7: + obj.sq_SetXScrollStop(100); + local size = obj.getVar("deadlycape_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("deadlycape_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut"); + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_DeadlyCape_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 3: + case 4: + case 5: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_SetXScrollStop(100); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(6); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onKeyFrameFlag_DeadlyCape_bykk(obj, flagIndex) +{ + local subState = obj.getSkillSubState(); + switch(flagIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DEADLYCAPE, SKILL_DARKEMPLER_DEADLYCAPE, 1, 1.0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,137,0,68,obj.getDirection(),4,SKILL_DARKEMPLER_DEADLYCAPE,2,totalDamage,0,0,0,0,0,0,0,1); + break; + case 1: + sq_SetMyShake(obj,3,50); + switch(subState){ + case 1: + case 2: + case 3: + case 4: + case 5: + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeadlycape/att/loop/att"+subState+"_glow.ani",137,-1,68); + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeadlycape/att/loop/att_back_black1.ani",137,-1,68); + break; + } + break; + case 10: + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,137,0,68,obj.getDirection(),4,SKILL_DARKEMPLER_DEADLYCAPE,1,0,0,0,0,0,0,0,0,1); + break; + } +} + +function onAttack_DeadlyCape_bykk(obj, damager, boundingBox, isStuck) +{ + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + obj.getVar("deadlycape_target").push_obj_vector(damager); + if(!sq_IsFixture(damager)){// && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) + local apdPath = "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + } +} + +function onEndState_DeadlyCape(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DARKEMPLER_DEADLYCAPE){ + obj.sq_SetXScrollStop(0); + local size = obj.getVar("deadlycape_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("deadlycape_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut"); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Destroyer + + + + +function checkExecutableSkill_Destroyer_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DESTROYER); + if(isUse){ + obj.sq_IntVectClear(); + if(obj.getState() == 6) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); + + obj.getVar("DestroyerCount").setInt(10,0); + local countMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 1); + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) countMax = countMax * 2;//护石 + obj.getVar("DestroyerCount").setInt(11,countMax); + return 1; + } + return 0; +} + +function checkCommandEnable_Destroyer_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Destroyer_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERJUMP); + sq_GetCurrentAnimation(obj).setSpeedRate(300.0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERSTART); + obj.setTimeEvent(1,60,-1,false); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERLOOP); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY); + break; + case 5: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY); + break; + } + if(subState != 0){ + local speedRate = 1.0; + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) speedRate = 2.0; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + } + else{ + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.sq_SetXScrollStart(350, delaySum); + } + if(subState == 3){ + local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DESTROYER, -1, 1, 1.0).tofloat() * 2.25 + 759).tointeger(); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0,0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,75,0,sq_GetZPos(obj) - 130,obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,2,totalDamage,delay,0,0,0,0,0,0,1); + } +} + +function onTimeEvent_Destroyer_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: + local sizeRate = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 2).tofloat() / 120.0; + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_00_07.ani",sq_getRandom(100,(600.0 * sizeRate).tointeger()),sq_getRandom(-50,20),-sq_GetZPos(obj)); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_00_07.ani",sq_getRandom(100,(600.0 * sizeRate).tointeger()),sq_getRandom(0,50),-sq_GetZPos(obj)); + break; + } + +} + +function onProcCon_Destroyer_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local CelXpos = sq_GetAccel(obj.getZPos(), 200, obj.sq_GetStateTimer(), delaySum, false); + sq_setCurrentAxisPos(obj, 2, CelXpos); + break; + } +} + +function onEndCurrentAni_Destroyer_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 5: + obj.sq_SetXScrollStop(200); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + + local increaseCount = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 36); + darkEmpler_Evolve(obj,increaseCount,0); + return; + } +} + +function onKeyFrameFlag_Destroyer_bykk(obj, flagIndex) +{ + if (!obj) return; + local count = obj.getVar("DestroyerCount").getInt(10); + if(count >= obj.getVar("DestroyerCount").getInt(11)){ + obj.removeAllTimeEvent(); + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + obj.sq_SetXScrollStop(200); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + + local increaseCount = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 36); + darkEmpler_Evolve(obj,increaseCount,0); + return; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DESTROYER, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 2).tofloat() / 120.0; + switch(flagIndex){ + case 0: + case 2: + case 4: + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) totalDamage = totalDamage / 2; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,1,totalDamage,(sizeRate*100).tointeger(),0,0,0,0,0,0,1); + obj.getVar("DestroyerCount").setInt(10, count + 1); + break; + case 1: + case 3: + case 5: + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0){ + totalDamage = totalDamage / 2; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,1,totalDamage,(sizeRate*100).tointeger(),0,0,0,0,0,0,1); + obj.getVar("DestroyerCount").setInt(10, count + 1); + } + break; + } +} + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//DeusExray + + + +function checkExecutableSkill_DeusExray_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DEUSEXRAY); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_DEUSEXRAY); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_DeusExray_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_DeusExray_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY1); + obj.sq_PlaySound("SW_EXRAY_01"); + obj.getVar("deuexray_count").setInt(10,0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,180,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,1,0,0,0,0,0,0,0,0,0); + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){ + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/spirit_talisman_spirit_04a.ani", 180, 0, 70); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY2);//蓄氣動作 + obj.getVar("deusexrayb").setBool(0, true); + local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 0); + local soulMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 1); + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(!loadSlot) return; + local soulnum = loadSlot.getRemainLoadNumber(); + if(soulnum < soulMax) soulMax = soulnum; + obj.setTimeEvent(1,interval,soulMax,false); + break; + case 2: + // if(obj.isMyControlObject()) sq_SetMyShake(obj,8,400); + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY3);//引爆 + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DEUSEXRAY); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 0, skill_level); + local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 3, skill_level) * 10 / 100; + local deuexray_count = obj.getVar("deuexray_count").getInt(10); + if(deuexray_count > 0) totalDamage = totalDamage * (100 + deuexray_count * addRate) / 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,180,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,2,totalDamage,0,0,0,0,0,0,0,1); + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,-30,120,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,30,120,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,-30,20,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,30,20,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_DeusExray_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 0: + if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){ + local chargeObj = obj.getVar("deusexray").get_obj_vector(0); + if(chargeObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chargeObj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); + local soulMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 1); + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(!loadSlot) break; + local soulnum = loadSlot.getRemainLoadNumber(); + if(soulnum < soulMax) soulMax = soulnum; + darkEmpler_Evolve(obj, 0, soulMax); + obj.getVar("deuexray_count").setInt(10, soulMax); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_DeusExray_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 1){ + local bDownKey = obj.isDownSkillLastKey() + if(!bDownKey){ + local chargeObj = obj.getVar("deusexray").get_obj_vector(0); + if(chargeObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chargeObj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onKeyFrameFlag_DeusExray_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 1: + sq_flashScreen(obj,0, 80, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_flashScreen(obj,0, 0, 160,255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + break; + } +} + +function onTimeEvent_DeusExray_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local count = timeEventCount; + if(timeEventCount > 10) count = timeEventCount % 10; + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+timeEventCount.tostring()+"b.ani",180,0,70); + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+(timeEventCount+10).tostring()+"b.ani",180,0,70); + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+(timeEventCount+20).tostring()+"b.ani",180,0,70); + darkEmpler_Evolve(obj,0,1); + obj.getVar("deuexray_count").setInt(10,obj.getVar("deuexray_count").getInt(10) + 1); + break; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Doomsday + + +function checkExecutableSkill_Doomsday_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DOOMSDAY); + if(isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DOOMSDAY, STATE_PRIORITY_IGNORE_FORCE, true); + + obj.getVar("DoomsdayEnermy").clear_vector(); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); + if(skill_level >= 3){ + local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 5, skill_level); + local hitrate = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 4, skill_level)/10; + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, hitrate.tofloat(), 0); + if(ap){ + ap.getAppendageInfo().setValidTime(time); + ap.sq_Append(obj, obj); + } + } + return 1; + } + + return 0; +} + +function checkCommandEnable_Doomsday_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Doomsday_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYCASTATTACK); + obj.sq_PlaySound("SW_DOOMSDAY"); + local bonusRate = 1.0; + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); + if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 119)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); + obj.getVar("doomsday_move").setInt(11,100); + local appendage = sq_AttractToMe(obj, 1500, 100, 1000); + obj.getVar("doomsday").setAppendage(0,appendage);//设置ap + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK1_BODY); + local bonusRate = 1.0; + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); + if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 1, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 120)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK2_BODY); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK3_BODY); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYREADYFINISHATTACK); + break; + case 5: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHFIRST_BODY); + break; + case 6: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHSECOND_BODY); + break; + case 7: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHLAST_BODY); + local bonusRate = 1.0; + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); + if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 9, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 123)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); + obj.getVar("doomsday_move").setInt(11,500); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Doomsday_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DOOMSDAY, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 7: + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY) >= 9){ + local aptime = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 8, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY)); + local apdPath = "character/atswordman/4_darktempler/doomsday/ap_doomsdaybuff.nut"; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath , false); + appendage.sq_SetValidTime(aptime); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DARKEMPLER_DOOMSDAY, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY)); + appendage.setEnableIsBuff(true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Doomsday_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 10: + local addRate = 0; + if(sq_GetSkillLevel(obj, 74)>5) addRate = obj.sq_GetLevelData(74, 10, sq_GetSkillLevel(obj, 74))/100.0; + sq_SetMyShake(obj,6,500); + sq_flashScreen(obj, 10, 50, 10, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_StartWrite(); + obj.sq_WriteDword(74); + obj.sq_WriteDword(0); + obj.sq_WriteDword(obj.sq_GetBonusRateWithPassive(74, -1, 0, getATSwordmanBonus(obj,1.0,74)+addRate)); + obj.sq_WriteDword(obj.sq_GetBonusRateWithPassive(74, -1, 9, getATSwordmanBonus(obj,1.0,74)+addRate)); + obj.sq_SendCreatePassiveObjectPacket(24381, 0, 200, 0, 74); + break; + case 11: + local addRate = 0; + if(sq_GetSkillLevel(obj, 74)>5) + addRate = obj.sq_GetLevelData(74, 10, sq_GetSkillLevel(obj, 74))/100.0; + + obj.sq_SetCurrentAttackBonusRate(obj.sq_GetBonusRateWithPassive(74, -1, 3, getATSwordmanBonus(obj,1.0,74)+addRate)); + + for(local i = 0; i < obj.getVar("DoomsdayEnermy").size_vector(); i++) + { + local object = sq_GetObjectByObjectId(obj, obj.getVar("DoomsdayEnermy").get_vector(i)); + local z = object.getZPos() + object.getObjectHeight()/2; + local aniPPath = "character/swordman/effect/animation/atsouldrain/loopboom_01.ani"; + DarktemplerCreateAniPooledObj(object,aniPPath,true,true,object.getXPos(), object.getYPos(),z, 1.0); + sq_SendHitObjectPacket(obj,object,0,0,z); + } + break; + } + +} + +function onProc_Doomsday_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT1 = pAni.getDelaySum(0, 8); + local fireT2 = pAni.getDelaySum(9, 11); + if(currentT <= fireT1) return; + local appendage = obj.getVar("doomsday").getAppendage(0); + if(appendage) appendage.setValid(false); + if(currentT > fireT1 + fireT2) return; + local srcX = obj.getVar("doomsday_move").getInt(10); + local MoveX = obj.getVar("doomsday_move").getInt(11); + local v = sq_GetUniformVelocity(0, MoveX, currentT - fireT1, fireT2); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); + obj.getVar("doomsday_move").setInt(11,0); + } + break; + case 7: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(0,5); + local srcX = obj.getVar("doomsday_move").getInt(10); + local MoveX = obj.getVar("doomsday_move").getInt(11); + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); + obj.getVar("doomsday_move").setInt(11,0); + } + break; + } +} + +function onAttack_Doomsday_bykk(obj, damager, boundingBox, isStuck) +{ + if (!obj) return false; + local subState = obj.getSkillSubState(); + if (!obj.isMyControlObject()) return false; + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager)){ + local apdPath = "character/atswordman/4_darktempler/doomsday/ap_doomsday.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_DARKEMPLER_DOOMSDAY, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + sq_MoveToAppendageForce(damager, obj, obj, 526, 0, 0, 300, true, AddAppendage); + AddAppendage.sq_SetValidTime(3000); + } + break; + case 7: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdoomsday/finishhiteffect.ani", 0, 1, sq_GetHeightObject(damager) / 3); + break; + } +} + +function onKeyFrameFlag_Doomsday_bykk(obj, flagIndex) +{ + switch(flagIndex){ + case 10: + sq_flashScreen(obj, 30, 10, 70, 100, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,2,100); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(8,13); + obj.sq_SetXScrollStart(200, delaySum); + break; + case 11: sq_SetMyShake(obj,2,100); break; + case 12: + //[OFFSET] `forward` 0 0 0 + break; + case 13: + sq_flashScreen(obj, 10, 20, 30, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,10,100); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,326,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,2,0,0,0,0,0,0,0,0,1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,326,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,3,0,0,0,0,0,0,0,0,1); + //[OFFSET] `boom` 201 0 73 + break; + case 14: sq_SetMyShake(obj,1,700); break; + case 15: sq_SetMyShake(obj,10,100); break; + case 16: + //[OFFSET] `backward` 0 0 0 + break; + case 21: + obj.sq_SetXScrollStop(100); + sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj,5,100); + //[OFFSET] `attack boom` 21 0 2 + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domehit01_01.ani",41,-1,73); + break; + case 31: + obj.resetHitObjectList(); + sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj,5,100); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domehit02_03.ani",41,-1,73); + //[OFFSET] `attack boom` 0 0 -11 + break; + case 41: + obj.resetHitObjectList(); + sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj,5,100); + //[OFFSET] `finish attack boom` 1 0 -9 + break; + case 51: + sq_flashScreen(obj, 0, 180, 200, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local bonusRate = 1.0; + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); + if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 3, bonusRate); + local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DOOMSDAY, 20); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,5,1,5,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,1,totalDamage,hitMax,0,0,0,0,0,0,1); + local effectObj = obj.getVar("doomsday_effect").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + local effectObj2 = obj.getVar("doomsday_effect_b").get_obj_vector(0); + if(effectObj2){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj2); + colObj.setValid(false); + } + //[OFFSET] `finish boom` 5 0 5 + //[OFFSET] `finish attack boom` 2 0 -19 + break; + } +} + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Immolation + + + +function checkExecutableSkill_Immolation_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_IMMOLATION); + if (isUse){ + if(sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 9) > 0 || IMMOLATION_STONE > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_IMMOLATION); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_Immolation_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Immolation_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONCAST); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 0, skill_level); + local level = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 1, skill_level); + local time = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 1); + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 3); + local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); + if(vespers_level > 0){ + local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); + hitTime = (hitTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,2,totalDamage,hitTime,level,time,0,0,0,0,1); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONLOOP); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONEND); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0,0); + obj.setTimeEvent(2, delay, 1, false); + sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atimmolation/end_magiccircle_01.ani",0,0,0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONFIXINGCAST); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 3, skill_level); + if(sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 9) > 0 || IMMOLATION_STONE > 0){ + totalDamage2 = (totalDamage2.tofloat() * 1.27 * 1.19).tointeger() + } + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local level = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 1, skill_level); + local time = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 1); + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 3); + local lifeTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 6); + local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); + if(vespers_level > 0){ + local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); + hitTime = (hitTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); + lifeTime = (lifeTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,250,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,3,totalDamage,hitTime,level,time,damageRate,lifeTime,0,0,1); + break; + } + local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); + if(vespers_level > 0 && subState != 2){ + local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + local speedRate = 10000.0 / (100 + decreaseRate).tofloat(); + currentAni.setSpeedRate(speedRate); + local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + } + } +} + +function onProcCon_Immolation_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local stateTime = obj.sq_GetStateTimer(); + local minTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 6); + local MaxTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 2); + local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); + if(vespers_level > 0){ + local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); + minTime = (minTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); + MaxTime = (MaxTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); + } + if(stateTime < minTime) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey || stateTime >= MaxTime){ + if(stateTime >= MaxTime) obj.getVar("immolation").setBool(0, true); + local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onAttack_Immolation_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local level = obj.sq_GetLevelData(168, 1, sq_GetSkillLevel(obj, 168)); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_SLOW, 100.0, level, false, sq_GetIntData(obj, 168, 1)); + local path = "character/atswordman/4_darktempler/immolation/ap_immolation.nut"; + local forceap = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); + if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager)) + if(forceap){ + sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 3000, true, forceap,true); + local appendageInfo = forceap.getAppendageInfo(); + appendageInfo.setValidTime(600); + } +} + +function onTimeEvent_Immolation_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 2, skill_level); + if(obj.getVar("immolation").getBool(0)) totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 3, skill_level); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,1,totalDamage,0,0,0,0,0,0,0,1); + break; + } +} + +function onEndCurrentAni_Immolation_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + case 3: + obj.getVar("immolation").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Jihad + + + +function checkExecutableSkill_Jihad_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_JIHAD); + if (isUse){ + AIMPOINT_ATSWORDMAN = SKILL_DARKEMPLER_JIHAD; + obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_JIHAD); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_Jihad_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Jihad_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_START_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("SW_JIHAD"); + obj.getVar("jihad_count").setInt(10,0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_CASTING_BODY); + + local offsetX = 100; + offsetX = obj.sq_GetDistancePos(obj.getXPos(), obj.sq_GetDirection(), offsetX); + local vX = 500; + local vY = 250; + obj.sq_AddAimPointMark(offsetX, obj.getYPos(), vX, vY); + + local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 0); + local soulMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(!loadSlot) break; + local soulnum = loadSlot.getRemainLoadNumber(); + if(soulnum < soulMax) soulMax = soulnum; + obj.setTimeEvent(1,interval,soulMax,false); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_CASTINGEND_BODY); + sq_flashScreen(obj, 400, 0, 0, 191, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local isStone = obj.sq_GetVectorData(datas, 1); + if(isStone > 0){ + obj.getVar("targetBoss").clear_obj_vector(); + obj.getVar("targetNamed").clear_obj_vector(); + obj.getVar("targetNormal").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)) obj.getVar("targetBoss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("targetNamed").push_obj_vector(activeObj); + else obj.getVar("targetNormal").push_obj_vector(activeObj); + } + } + local offset_x = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 250); + local offset_y = sq_GetYPos(obj); + if(obj.getVar("targetBoss").get_obj_vector_size() > 0){ + local targetObj = obj.getVar("targetBoss").get_obj_vector(0); + if(targetObj){ + offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj); + offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); + } + } + else if(obj.getVar("targetNamed").get_obj_vector_size() > 0){ + local targetObj = obj.getVar("targetNamed").get_obj_vector(0); + if(targetObj){ + offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj); + offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); + } + } + else if(obj.getVar("targetNormal").get_obj_vector_size() > 0){ + local targetObj = obj.getVar("targetNormal").get_obj_vector(0); + if(targetObj){ + offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj); + offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); + } + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 1, 1.0) + 100; + local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)) / 10; + local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 0); + local soulMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)); + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(loadSlot){ + local soulnum = loadSlot.getRemainLoadNumber(); + if(soulnum < soulMax) soulMax = soulnum; + if(soulMax > 0){ + darkEmpler_Evolve(obj,0,soulMax); + totalDamage = (totalDamage.tofloat() * (100 + soulMax * addRate).tofloat() / 100.0).tointeger(); + totalDamage2 = (totalDamage2.tofloat() * (100 + soulMax * addRate).tofloat() / 100.0).tointeger(); + } + } + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offset_x,offset_y,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,1,totalDamage,damageRate,0,0,0,0,0,0,1); + createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_magiccirclea.ani",true,ENUM_DIRECTION_RIGHT,offset_x + sq_GetXPos(obj),offset_y + sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + } + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_ATTACKBODY_A); + break; + } + +} + +function onEndState_Jihad_bykk(obj, new_state) +{ + if(!obj) return; + + if(new_state != SKILL_DARKEMPLER_JIHAD){ + sq_EndDrawCastGauge(obj); + obj.sq_RemoveAimPointMark(); + } +} + +function onProc_Jihad_bykk(obj) +{ + if(!obj) return; + local SubState = obj.getSkillSubState(); + switch(SubState){ + case 1: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); + + local Xpos = obj.sq_GetAimPosX(sq_GetXPos(obj), sq_GetYPos(obj), false) - sq_GetXPos(obj); + local Ypos = obj.sq_GetAimPosY(sq_GetXPos(obj), sq_GetYPos(obj), false) - sq_GetYPos(obj); + obj.sq_RemoveAimPointMark(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 1, 1.0) + 100; + local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)) / 10; + local jihad_count = obj.getVar("jihad_count").getInt(10); + if(jihad_count > 0){ + totalDamage = (totalDamage.tofloat() * (100 + jihad_count * addRate).tofloat() / 100.0).tointeger(); + totalDamage2 = (totalDamage2.tofloat() * (100 + jihad_count * addRate).tofloat() / 100.0).tointeger(); + } + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,Xpos,Ypos,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,1,totalDamage,damageRate,0,0,0,0,0,0,1); + createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_magiccirclea.ani",true,ENUM_DIRECTION_RIGHT,Xpos + sq_GetXPos(obj),Ypos + sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + } + break; + } +} + +function onEndCurrentAni_Jihad_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 2: + if(subState == 0 && (JIHAD_STONE > 0)){//sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 5) > 0 || + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Jihad_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + darkEmpler_Evolve(obj,0,1); + obj.getVar("jihad_count").setInt(10,obj.getVar("jihad_count").getInt(10) + 1); + break; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Lacerthorns + +function checkExecutableSkill_Lacerthorns_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_LACERTHORNS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_Lacerthorns_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Lacerthorns_bykk(obj, state, datas, isResetTimer) +{ + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSCASTING_BODY); + obj.getVar("target_Lacerthorns").clear_obj_vector(); + obj.sq_PlaySound("LACERTHORNS_CAST"); + obj.sq_PlaySound("SW_LACERTHORNS_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSSTARTMOTION_BODY); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_LACERTHORNS); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_LACERTHORNS, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 232)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsdash_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsstartfront_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsstartback_00.ani", 0, -1, -1); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSFINISH_BODY); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_LACERTHORNS); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_LACERTHORNS, 1, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 231)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 100, 1, false); + obj.sq_PlaySound("LACERTHORNS_SUCCESS"); + obj.sq_PlaySound("R_SW_LACERTHORNS_02"); + sq_flashScreen(obj,0,0,30,191, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + if(obj.isMyControlObject()) sq_flashScreen(obj,0,0,30,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 20, 400); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSFAIL_BODY); + break; + } +} + +function onEndCurrentAni_Lacerthorns_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + if(obj.getVar("target_Lacerthorns").get_obj_vector_size() > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + case 3: + if(subState == 2){ + local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_LACERTHORNS, 11); + darkEmpler_Evolve(obj, soulnum, 0); + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEndState_Lacerthorns_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_DARKEMPLER_LACERTHORNS){ + // + } +} + +function onEnterFrame_Lacerthorns(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + switch(frameIndex){ + case 3: + if(obj.isMyControlObject()) sq_flashScreen(obj,100,1000,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + break; + case 4: + sq_SetMyShake(obj, 15, 120); + break; + } + break; + } +} + +function onTimeEvent_Lacerthorns_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local size = obj.getVar("target_Lacerthorns").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = obj.getVar("target_Lacerthorns").get_obj_vector(i); + if(activeObj){ + sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/lacerthorns/ap_lacerthorns.nut"); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_LACERTHORNS,1,0,0,0,0,0,0,0,0,0); + } + } + break; + } +} + +function onAttack_Lacerthorns_bykk(obj, damager, boundingBox, isStuck) +{ + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + obj.getVar("target_Lacerthorns").push_obj_vector(damager); + local apdPath = "character/atswordman/4_darktempler/lacerthorns/ap_lacerthorns.nut"; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atlacerthorns/atlacerthornsshot_00.ani", 0, 0, sq_GetObjectHeight(damager) / 2); + } + break; + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Madness + + +function checkExecutableSkill_Madness_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_MADNESS); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_MADNESS, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + + return 0; +} + +function checkCommandEnable_Madness_bykk(obj) +{ + if (!obj) return 0; + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + if(!loadSlot) return 0; + local count = loadSlot.getRemainLoadNumber(); + local mincount = obj.sq_GetLevelData(SKILL_DARKEMPLER_MADNESS, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_MADNESS)); + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ + local decase = obj.sq_GetLevelData(SKILL_DARKEMPLER_VESPERS, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS)); + mincount = (mincount*(100.0 - decase.tofloat()) / 100.0).tointeger(); + } + if(count < mincount) return 0; + return 1; +} + +function onSetState_Madness_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_MADNESS_BODY); + obj.sq_PlaySound("SW_MADNESS"); + local currentAni = obj.getCurrentAnimation(); + local DelaySum = currentAni.getDelaySum(false); + local castSum = currentAni.getDelaySum(0,7); + local expSum = currentAni.getDelaySum(0,7); + obj.sq_SetXScroll(300, castSum, DelaySum - castSum - expSum, expSum); + obj.getVar("madness_target").clear_obj_vector(); + local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); + local mincount = obj.sq_GetLevelData(SKILL_DARKEMPLER_MADNESS, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_MADNESS)); + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ + local decase = obj.sq_GetLevelData(SKILL_DARKEMPLER_VESPERS, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS)); + mincount = (mincount*(100.0 - decase.tofloat()) / 100.0).tointeger(); + } + loadSlot.decreaseLoadCount(mincount); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Madness_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_Madness_bykk(obj, flagIndex) +{ + if (!obj) return false; + switch(flagIndex){ + case 0://生成阵 + sq_flashScreen(obj, 0, 60, 60, 204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 120); + local range = sq_GetIntData(obj, SKILL_DARKEMPLER_MADNESS, 0); + local currentAni = obj.getCurrentAnimation(); + local DelaySum = currentAni.getDelaySum(8,22); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_MADNESS, SKILL_DARKEMPLER_MADNESS, 1, 1.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,300,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,1,range,DelaySum,totalDamage,0,0,0,0,0,1); + break; + case 1://发射激光 + local currentAni = obj.getCurrentAnimation(); + local DelaySum = currentAni.getDelaySum(15,15); + local speedRate = 6000 / DelaySum; + + local offsetX = [-30,25,85,120,80,-30,25,85,120,80]; + local offsetZ = [150,145,112,60,30,150,145,112,60,30]; + local disX = [580,560,490,440,375,340,290,330,280,260]; + local disY = [15,-10,30,20,-20,-30,25,10,-15,-25]; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_MADNESS, SKILL_DARKEMPLER_MADNESS, 1, 1.0) + 100; + local range = sq_GetIntData(obj, SKILL_DARKEMPLER_MADNESS, 0); + + for(local i = 0; i < 10; i++){ + local disPosX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),disX[i] - 150); + local disPosY = sq_GetYPos(obj) + disY[i]; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offsetX[i],0,offsetZ[i],obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,2,speedRate,sq_getRandom(1,8),obj.getDirection(),disPosX,disPosY,0,0,0,1); + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,300,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,3,speedRate,totalDamage,range,0,0,0,0,0,1); + break; + case 3: + local attackObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("madness").get_obj_vector(0)); + local size = obj.getVar("madness_target").get_obj_vector_size(); + break; + } + return true; +} + +function onEndState_Madness_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_DARKEMPLER_MADNESS){ + local attackObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("madness").get_obj_vector(0)); + if(attackObj) attackObj.setValid(false); + local size = obj.getVar("madness_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = obj.getVar("madness_target").get_obj_vector(i); + if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/madness/ap_madness.nut"); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Punishment + +function checkExecutableSkill_Punishment_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_PUNISHMENT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_Punishment_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Punishment_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_CASTING_BODY1); + obj.sq_PlaySound("SW_PUNISHMENT"); + obj.sq_SetXScrollStart(400, 500); + obj.getVar("punishment_quick").setBool(0,false); + obj.getVar("punishment_base").setInt(10, sq_GetXPos(obj)); + obj.getVar("punishment_target").clear_obj_vector(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + obj.getVar("punishment_speed").setInt(0, speedRate); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_ATTACK_MOTION1); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_PUNISHMENT); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_PUNISHMENT, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 115)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,2,0,0,0,0,0,0,0,0,0); + obj.setTimeEvent(3,150,1,false); + break; + case 2: + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_FINISH_MOTION_BODY1); + obj.sq_PlaySound("SW_PUNISHMENT_FIN"); + local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atpunishment/finish/atpunishment_finish_bottom1.ani",true,obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 350),sq_GetYPos(obj), 100, ENUM_DRAWLAYER_BOTTOM); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(3.0, 1.2); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0,5); + obj.setTimeEvent(1, delaySum, 1, false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_PUNISHMENT); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_PUNISHMENT, 1, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2, 1800, 1, false); + break; + } +} + +function onTimeEvent_Punishment_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 0: + //sq_flashScreen(obj, 200, 100, 100, 255, sq_RGB(255,255,255), GRAPHICEFFECT_SPACE_DISTORT, ENUM_DRAWLAYER_CONTACT); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/finish/atpunishment_finish_top_eff2_dodge.ani", 350, 1, 100); + break; + case 2: + attack_Punishment_bykk(obj); + sq_SetMyShake(obj, 15, 500); + break; + case 3: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 5; + local gapByInputMin = sq_GetIntData(obj,SKILL_DARKEMPLER_PUNISHMENT,4); + local gapByInputMax = sq_GetIntData(obj,SKILL_DARKEMPLER_PUNISHMENT,5); + + if(inputConut >= inputMax){ + obj.setTimeEvent(3, gapByInputMin, 1,false); + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("punishment_speed").getInt(0) * 2; + currentAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("punishment_quick").setBool(0,true); + local passiveObj = obj.getVar("punishment_attack").get_obj_vector(0); + if(passiveObj){ + local pAni = passiveObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local passiveObj2 = obj.getVar("punishment_attack2").get_obj_vector(0); + if(passiveObj2){ + local pAni = passiveObj2.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local passiveObj3 = obj.getVar("punishment_attack3").get_obj_vector(0); + if(passiveObj3){ + local pAni = passiveObj3.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + } + else{ + obj.setTimeEvent(3, gapByInputMax, 1,false); + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("punishment_speed").getInt(0); + currentAni.setSpeedRate(speedRate.tofloat()); + local passiveObj = obj.getVar("punishment_attack").get_obj_vector(0); + if(passiveObj){ + local pAni = passiveObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local passiveObj2 = obj.getVar("punishment_attack2").get_obj_vector(0); + if(passiveObj2){ + local pAni = passiveObj2.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local passiveObj3 = obj.getVar("punishment_attack3").get_obj_vector(0); + if(passiveObj3){ + local pAni = passiveObj3.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + } + break; + } +} + +function onProc_Punishment_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + } + +} + +function onEndCurrentAni_Punishment_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_SetXScrollStop(200); + local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0); + if(flashScreenObj) flashScreenObj.setValid(false); + local size = obj.getVar("punishment_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = obj.getVar("punishment_target").get_obj_vector(i); + if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/punishment/ap_punishment.nut"); + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_Punishment_bykk(obj, flagIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(flagIndex){ + case 0: + switch(subState){ + case 0: + local range = sq_GetIntData(obj, SKILL_DARKEMPLER_PUNISHMENT, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,350,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,1,range,0,0,0,0,0,0,0,0); + local flashScreenObj = sq_flashScreen(obj, 800, 99990, 0, 255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("flashobj").clear_obj_vector(); + obj.getVar("flashobj").push_obj_vector(flashScreenObj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + case 30: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_eff1.ani", 350, 1, 100); + attack_Punishment_bykk(obj); + break; + case 36: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_slash_eff.ani", 350, 1, 100); + attack_Punishment_bykk(obj); + break; + case 40: + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,350,0,100,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,3,0,0,0,0,0,0,0,0,0); + break; + case 66: + // if(obj.getVar("punishment_quick").getBool(0)) + //sendAwakeCutinInfo(obj,35); + case 41: + case 48: + case 57: + case 76: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_slash_eff.ani", sq_getRandom(150,350), 1, sq_getRandom(0,100)); + attack_Punishment_bykk(obj); + break; + } +} + +function attack_Punishment_bykk(obj) +{ + local size = obj.getVar("punishment_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = obj.getVar("punishment_target").get_obj_vector(i); + if(activeObj) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); + } +} + +function onEndState_Punishment_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DARKEMPLER_PUNISHMENT){ + obj.sq_SetXScrollStop(0); + local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0); + if(flashScreenObj) flashScreenObj.setValid(false); + local size = obj.getVar("punishment_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = obj.getVar("punishment_target").get_obj_vector(i); + if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/punishment/ap_punishment.nut"); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Scaffold + +function checkExecutableSkill_Scaffold_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SCAFFOLD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SCAFFOLD, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + + return 0; +} + +function checkCommandEnable_Scaffold_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_Scaffold_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SCAFFOLD); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_00_cast.ani", 0, -3, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_01_cast.ani", 0, -2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_02_cast.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_03_cast.ani", 0, -1, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Scaffold_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_Scaffold_bykk(obj, flagIndex) +{ + switch(flagIndex){ + case 0: + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SCAFFOLD); + local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 0, skill_level); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 1, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 2, skill_level); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,50,0,90,obj.getDirection(),4,SKILL_DARKEMPLER_SCAFFOLD,1,totalDamage,totalDamage2,lifeTime,0,0,0,0,0,1); + break; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//ShadowBinding + + +function checkExecutableSkill_ShadowBinding_bykk(obj) +{ + if (!obj) return 0; + + if(obj.getVar("bindingObj").get_obj_vector_size() > 0 && obj.getVar("ShadowBindingBool").getBool(0)){ + local bindingObj = obj.getVar("bindingObj").get_obj_vector(0); + if(bindingObj){ + obj.getVar("ShadowBindingBool").setBool(0, false); + local colObj = sq_GetCNRDObjectToCollisionObject(bindingObj); + colObj.getVar().setBool(100, true); + colObj.stopTimeEvent(1); + colObj.setTimeEvent(1,100,1,true); + } + return 0; + } + + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWBINDING); + if(isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWBINDING, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + + return 0; +} + +function checkCommandEnable_ShadowBinding_bykk(obj) +{ + if (!obj) return 0; + return 1; + +} + +function onSetState_ShadowBinding_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + + switch(subState){ + case 0: + obj.sq_PlaySound("SW_SHADOW_BINDING"); + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWBINDING); + + obj.getVar("ShadowBindingBool").setBool(0, true); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWBINDING); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 1, skill_level); + local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 2, skill_level); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWBINDING,1,totalDamage,totalDamage2,lifeTime,0,0,0,0,0,1); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_ShadowBinding_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_ShadowBinding_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + break; + } +} + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//ShadowHarvest + +function checkExecutableSkill_ShadowHarvest_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(64); + if(isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHARVEST, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_ShadowHarvest_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_ShadowHarvest_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHARVESTSHOOTGROUND); + break; + case 1: + obj.sq_StopMove(); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHARVESTSHOOT); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(200.0); + break; + } +} + +function onEndCurrentAni_ShadowHarvest_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_ShadowHarvest_bykk(obj, flagIndex) +{ + if (!obj) return false; + switch(flagIndex){ + case 0: + local isSeal = 0,skill = sq_GetSkill(obj, SKILL_DARKEMPLER_SHADOWHARVEST),skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHARVEST); + if(!skill.isSealFunction()) isSeal = 1; + local passive_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHARVEST); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 6, skill_level); + local range = 170 + 170 * sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 1, skill_level) / 2 / 100; + local lifeTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 4); + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 5); + switch(obj.getSkillSubState()){ + case 0: + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,80,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,1,totalDamage,totalDamage2,range,lifeTime,hitTime,isSeal,passive_level,0,1); + break; + case 1: + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,30,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,1,totalDamage,totalDamage2,range,lifeTime,hitTime,isSeal,passive_level,0,1); + break; + } + break; + } + return true; +} + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//ShadowHiding + +function checkExecutableSkill_ShadowHiding_bykk(obj) +{ + if (!obj) return 0; + + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWHIDING); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); + + obj.getVar("ShadowHiding").clear_vector(); + obj.getVar("ShadowHiding").push_vector(obj.getXPos()); + obj.getVar("ShadowHiding").push_vector(obj.getYPos()); + obj.getVar("ShadowHiding").push_vector(obj.getXPos()); + obj.getVar("ShadowHiding").push_vector(obj.getYPos()); + + return 1; + } + return 0; +} + +function checkCommandEnable_ShadowHiding_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_ShadowHiding_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGCAST); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGMOVE); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHIDING); + local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHIDING, 0, skill_level); + obj.setTimeEvent(0, time, 1, false); + obj.setTimeEvent(1, 25, -1, false); + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_DARKEMPLER_SHADOWHIDING, false, "character/atswordman/4_darktempler/shadowhiding/ap_shadowhiding.nut", true); + break; + case 2: + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGEND); + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/4_darktempler/shadowhiding/ap_shadowhiding.nut"); + break; + } +} + +function onEndCurrentAni_ShadowHiding_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_ShadowHiding_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + obj.setSkillCommandEnable(SKILL_DARKEMPLER_SHADOWHIDING, true); + if(obj.sq_IsEnterSkill(SKILL_DARKEMPLER_SHADOWHIDING) != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onTimeEvent_ShadowHiding_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 5)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - 5); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 5)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + 5); + } + + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - 10,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 10); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + 10,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 10); + } + break; + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//ShadowLancer + +function checkExecutableSkill_ShadowLancer_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(63); + + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWLANCER, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + + return 0; +} + +function checkCommandEnable_ShadowLancer_bykk(obj) +{ + if (!obj) return 0; + return 1; + +} + +function onSetState_ShadowLancer_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWLANCERREADY); + obj.sq_PlaySound("SW_SHADOW_LANCER"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWLANCER); + + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, 135); + + local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWLANCER, 4); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_SHADOWLANCER, SKILL_DARKEMPLER_SHADOWLANCER, 0, 1.0) + 100; + local currentAni = obj.getCurrentAnimation(); + local DelaySum = currentAni.getDelaySum(false); + local speedRate = 36000 / DelaySum; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,60,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWLANCER,1,totalDamage,hitMax,speedRate,0,0,0,0,0,1); + local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atshadowlancer/13_dust.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(obj, pooledObj); + + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_ShadowLancer_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWLANCER, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProc_ShadowLancer_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local baseX = obj.getVar("move").getInt(0); + local moveX = obj.getVar("move").getInt(1); + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local DelaySum = currentAni.getDelaySum(false); + local CelXpos = sq_GetAccel(0, moveX, stateTime, DelaySum, true); + local destX = sq_GetDistancePos(baseX, obj.getDirection(), CelXpos); + if(obj.isMovablePos(destX,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, destX); + else obj.getVar("move").setInt(1, 0); + break; + } +} + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//ShadowPuppet + + +function checkExecutableSkill_ShadowPuppet_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWPUPPET); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_ShadowPuppet_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_ShadowPuppet_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCASTING); + obj.sq_PlaySound("SW_SHADOW_PUPPET"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCHARGESTART); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCHARGELOOP); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETFINISH); + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level); + local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1); + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ + totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 0, skill_level); + hitTime = hitTime / 2; + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,1,totalDamage,lifeTime,hitTime,0,0,0,0,0,1); + break; + } +} + +function onEndCurrentAni_ShadowPuppet_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_ShadowPuppet_bykk(obj, flagIndex) +{ + local subState = obj.getSkillSubState(); + if(subState == 0 && flagIndex == 0){ + if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION) > 0){ + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level); + local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level) / 2; + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1) / 2; + local balance = 20; + totalDamage = totalDamage * balance / 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,400,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,2,totalDamage,lifeTime,hitTime,sq_GetOppositeDirection(obj.getDirection()),1,0,0,0,0); + obj.setTimeEvent(1,100,1,false); + } + else if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level); + local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,400,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,2,totalDamage,lifeTime,hitTime,sq_GetOppositeDirection(obj.getDirection()),0,0,0,0,0); + } + } +} + +function onTimeEvent_ShadowPuppet_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//SoulDrain + +function checkExecutableSkill_SoulDrain_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(59); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SOULDRAIN, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_SoulDrain_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function onSetState_SoulDrain_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SOULDRAIN); + + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SOULDRAIN); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 3, skill_level); + local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 0, skill_level); + local enemyMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 4, skill_level); + local hitMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 2, skill_level); + local range = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 1, skill_level) * 2; + local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SOULDRAIN, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,1,totalDamage,lifeTime,enemyMax,hitMax,range,hitTime,0,0,1); + if(obj.getVar("souldrain").get_obj_vector_size() < 1) obj.getVar("souldrain").clear_obj_vector(); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_SoulDrain_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//StarFall + +function checkExecutableSkill_StarFall_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_STARFALL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_STARFALL, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function checkCommandEnable_StarFall_bykk(obj) +{ + if (!obj) return 0; + return 1; + +} + +function onSetState_StarFall_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_STARFALL); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_StarFall_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onKeyFrameFlag_StarFall_bykk(obj, flagIndex) +{ + if (!obj) return false; + switch(flagIndex){ + case 1: + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_STARFALL); + local create_number = sq_GetLevelData(obj, SKILL_DARKEMPLER_STARFALL, 0, skill_level); + obj.setTimeEvent(1,50,create_number,true); + break; + } + return true; +} + +function onTimeEvent_StarFall_bykk(obj, timeEventIndex, timeEventCount) +{ + local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_STARFALL); + local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_STARFALL, 1, skill_level); + local range = sq_GetIntData(obj, SKILL_DARKEMPLER_STARFALL, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,100,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_STARFALL,1,totalDamage,range,timeEventCount,0,0,0,0,0,1); +} + + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Whipswordbal_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WHIPSWORDBAL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WHIPSWORDBAL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Whipswordbal_bykk(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + else return false; +} + +function onSetState_Whipswordbal_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_PlaySound("SW_WHIPSWORDBAL"); + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL1_DEVIL); + else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL1); + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("effect/animation/atwhipswordbal/bal_cast.ani"), 0, 0); + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WHIPSWORDBAL, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0, bonusRate) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL2); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL3); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Whipswordbal_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WHIPSWORDBAL, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Whipswordbal_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + // Calldaimus_onAttack(obj,damager, boundingBox, isStuck); +} + +function onEnterFrame_Whipswordbal_bykk(obj, frameIndex) +{ + if(!obj) return; + switch(frameIndex){ + case 4: + local count = sq_GetIntData(obj,SKILL_DEMONSLAYER_WHIPSWORDBAL, 0), isSub2 = 0; + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){ + if(count < 6) count = 6; + isSub2 = 1; + } + local offsetX = sq_GetIntData(obj,SKILL_DEMONSLAYER_WHIPSWORDBAL, 1), offsetY = 0, isSub = 0; + local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH); + if(skill_level > 0){offsetY = 40; isSub = 1;} + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WHIPSWORDBAL, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0, bonusRate) + 100; + for (local i = 0; i < count ; i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, offsetY, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, isSub, isSub2, 0, 0, 0, 0, 0, 1); + if(skill_level > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, -40, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, 1, isSub2, 0, 0, 0, 0, 0, 1); + } + break; + } +} + +function onEndState_Whipswordbal_bykk(obj, newState) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Whipswordbal_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Whipswordbal_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Snakedance_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_SNAKEDANCE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_SNAKEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Snakedance_bykk(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + else return false; +} + +function onSetState_Snakedance_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE1); + obj.sq_PlaySound("SW_SNAKEDANCE_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE2); + obj.sq_PlaySound("SW_SNAKEDANCE_02"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE3); + obj.sq_PlaySound("SW_SNAKEDANCE_03"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 2, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_SNAKEDANCE, SKILL_DEMONSLAYER_SNAKEDANCE, subState, bonusRate) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112 + subState)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onEndCurrentAni_Snakedance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_SNAKEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Snakedance_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onEnterFrame_Snakedance_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Snakedance_bykk(obj, newState) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Clawblade_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_CLAWBLADE); + if (isUse){ + obj.getVar("Clawblade").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Clawblade_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Clawblade_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE1); + obj.sq_PlaySound("SW_CLAWBLADE"); + obj.getVar("clawblade_target").clear_obj_vector(); + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, SKILL_DEMONSLAYER_CLAWBLADE, 0, bonusRate) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE2); + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, SKILL_DEMONSLAYER_CLAWBLADE, 1, bonusRate) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 91)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE3); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADEENDATTACK_BODY); + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 0, bonusRate) + obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 1, bonusRate) + 200; + local damageRate = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_QUEENOFMINE, -1, 0, 1.0) + 100; + local totalDamage2 = totalDamage * damageRate / 1000; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage2); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(150.0); + } +} + +function onEndCurrentAni_Clawblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Clawblade_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local subState = obj.getSkillSubState(); + //Calldaimus_onAttack(obj,damager, boundingBox, isStuck); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){ + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 0, bonusRate) + 100) * (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_DEVILSWORDTECH, -1, 5, bonusRate) + 100 ) / 100; + local id = sq_GetObjectId(damager); + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 3); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, sq_GetObjectHeight(damager) / 2, obj.getDirection(), 2, SKILL_DEMONSLAYER_CLAWBLADE, 2, totalDamage, id, hitMax, 0, 0, 0, 0, 0, 1); + } + if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ + obj.getVar("clawblade_target").push_obj_vector(damager); + local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + if(addAppendage){ + sq_HoldAndDelayDie(damager, obj, true, true, false, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage); + sq_MoveToAppendageForce(damager, obj, obj, 200, 0, 0, delaySum - stateTime, true, addAppendage); + } + } + } + break; + } +} + +function onEnterFrame_Clawblade_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + switch(frameIndex){ + case 0: + local size = obj.getVar("clawblade_target").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; + for(local i = 0; i < size; i++){ + local damager = obj.getVar("clawblade_target").get_obj_vector(i); + if(damager){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, apdPath); + sq_MoveToAppendageForce(damager, obj, obj, 150, 0, 100, delaySum, true, addAppendage); + } + } + } + break; + case 3: + case 5: + case 7: + obj.resetHitObjectList(); + break; + } + case 2: + switch(frameIndex){ + case 0: + local size = obj.getVar("clawblade_target").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0,2); + local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; + for(local i = 0; i < size; i++){ + local damager = obj.getVar("clawblade_target").get_obj_vector(i); + if(damager){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, apdPath); + sq_MoveToAppendageForce(damager, obj, obj, 180, 0, 0, delaySum, true, addAppendage); + } + } + } + break; + case 3: + local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; + local size = obj.getVar("clawblade_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local damager = obj.getVar("clawblade_target").get_obj_vector(i); + if(damager){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 1, 1.0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_CLAWBLADE, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); + CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath); + } + } + } + break; + } + } +} + +function onEndState_Clawblade_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_CLAWBLADE){ + local size = obj.getVar("clawblade_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("clawblade_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"); + } + } + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Pikesword_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PIKESWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PIKESWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Pikesword_bykk(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + else return false; +} + +function onSetState_Pikesword_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD_START_BODY); + else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PIKESWORD, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD_END_BODY); + else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORDDRAG); + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 3, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PIKESWORD, -1, 1, bonusRate) + 100; + local attackIndex = 87; + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) attackIndex = 88; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Pikesword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PIKESWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Pikesword_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onEnterFrame_Pikesword_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Pikesword_bykk(obj, newState) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Wildwhip_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WILDWHIP); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WILDWHIP, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Wildwhip_bykk(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + else return false; +} + +function onSetState_Wildwhip_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + // BodyCalldaimus(obj, "wildwhip1"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP1); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + // BodyCalldaimus(obj, "wildwhip2"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP2); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("WILDWHIP_SPIRAL_LOOP", 2021); + obj.setTimeEvent(1, 100, 1, false); + + local bonusRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WILDWHIP, -1, 1, bonusRate) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){ + totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 3, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WILDWHIP, 1, totalDamage, delay, 0, 0, 0, 0, 0, 0, 1); + } + break; + case 2: + obj.stopSound(2021); + obj.removeAllTimeEvent(); + obj.sq_PlaySound("WILDWHIP_SPIRAL_FINISH"); + // BodyCalldaimus(obj, "wildwhip3"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP3); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Wildwhip_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WILDWHIP, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Wildwhip_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 100; + + local inputMax = 2; + if(inputConut >= inputMax){ + speedRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_WILDWHIP, 0); + obj.getVar("wildwhip").setBool(0, true); + } + else obj.getVar("wildwhip").setBool(0, false); + currentAni.setSpeedRate(speedRate.tofloat()); + local attackObj = obj.getVar("wildwhip_obj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + + obj.setTimeEvent(1, 100, 1, false); + break; + } +} + +function onAttack_Wildwhip_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onEnterFrame_Wildwhip_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(frameIndex % 3 == 0){ + if(obj.isMyControlObject()) obj.sq_SetShake(obj, 2, 85); + } + break; + } +} + +function onEndState_Wildwhip_bykk(obj, newState) +{ + if(!obj) return; + if(newState != 153){ + obj.stopSound(2021); + local attackObj = obj.getVar("wildwhip_obj").get_obj_vector(0); + if(attackObj) attackObj.setValid(false); + } +} + +function onProcCon_Wildwhip_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } +} + +function onKeyFrameFlag_Wildwhip_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + if(obj.getVar("wildwhip").getBool(0)) obj.resetHitObjectList(); + break; + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Blooddance_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODDANCE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Blooddance_bykk(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + else return false; +} + +function onSetState_Blooddance_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_PlaySound("SW_BLOODDANCE_01"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCESTART); + obj.getVar("blooddance_count").setInt(10, 1); + break; + case 1: + obj.sq_PlaySound("BLOODDANCE_LOOP", 2022); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCELOOP); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 0, 1.0) + 100; + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 56 / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 100, 1, false); + + break; + case 2: + obj.stopSound(2022); + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCEFINISH); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 5, 1.0) + 100; + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){ + if(subState == 1){ + local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 0, 1.0) + 100) * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100; + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 56 / 100; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODDANCE, 1, totalDamage, delay, 0, 0, 0, 0, 0, 0, 1); + } + else if(subState == 2){ + local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0); + if(attackObj) attackObj.setValid(false); + local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 5, 1.0) + 100) * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100; + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODDANCE, 2, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); + } + } +} + +function onEndCurrentAni_Blooddance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Blooddance_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 100; + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 1); + + local inputMax = 2; + if(inputConut >= inputMax){ + hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 2); + speedRate = 180; + } + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) hitMax = hitMax * 2; + + if(obj.getVar("blooddance_count").getInt(10) + 1 > hitMax){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + else{ + obj.getVar("blooddance_count").setInt(10, obj.getVar("blooddance_count").getInt(10) + 1) + } + + currentAni.setSpeedRate(speedRate.tofloat()); + local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + colObj.resetHitObjectList(); + } + + obj.resetHitObjectList(); + obj.setTimeEvent(1, 100, 1, false); + break; + } +} + +function onAttack_Blooddance_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return ; +} + +function onEnterFrame_Blooddance_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Blooddance_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_BLOODDANCE){ + obj.stopSound(2022); + local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0); + if(attackObj) attackObj.setValid(false); + } +} + +function onProc_Blooddance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } +} + +function onKeyFrameFlag_Blooddance_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 1: + if(obj.getSkillSubState() == 2){ + obj.sq_PlaySound("BLOODDANCE_02"); + obj.sq_PlaySound("SW_BLOODDANCE_02"); + } + break; + } +} + +function onProcCon_Blooddance_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function checkExecutableSkill_BloodSeal_bykk(obj) +{ + if(!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODSEAL); + if(isUse){ + obj.sq_AddSetStatePacket(84, STATE_PRIORITY_USER, false); + return true; + } + return false; + +} + +function checkCommandEnable_BloodSeal_bykk(obj) +{ + if(!obj) return false; + local hp = obj.getHp(); + local hpMin = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL)); + if(hp < hpMin) return false; + return true; +} + +function onSetState_BloodSeal_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODSEAL); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local hp = obj.getHp(); + local hpMin = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL)); + obj.sq_SendSetHpPacket(hp - hpMin, true, obj); +} + +function onKeyFrameFlag_BloodSeal_bykk(obj, flagIndex) +{ + if(!obj) return; + if(flagIndex == 1){ + local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL); + local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 0, skill_level);//迦羅亞多段物理攻擊力 + local totalDamage2 = obj.sq_GetPowerWithPassive(SKILL_DEMONSLAYER_BLOODSEAL, SKILL_DEMONSLAYER_BLOODSEAL, 2, -1, 1.0);//印痕多段物理攻擊力 + local totalDamage3 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 3, skill_level);//爆炸物理攻擊力 + local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 7) * 10;//印痕大小比率 + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();//印痕多段物理攻擊力百分比 + local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger();//爆炸物理攻擊力百分比 + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 50, 0, 75, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODSEAL, 1, totalDamage, sizeRate, damageRate, damageRate2, 0, 0, 0, 0, 1); + } +} + +function onEndCurrentAni_BloodSeal_bykk(obj) +{ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Groupdance_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GROUPDANCE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GROUPDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Groupdance_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Groupdance_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + // BodyCalldaimus(obj, "groupdance"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GROUPDANCE); + obj.sq_PlaySound("DANCE_APPEAR"); + obj.sq_PlaySound("SW_DANCE"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Groupdance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Groupdance_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onEnterFrame_Groupdance_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + obj.getVar("groupdance_boss").clear_obj_vector(); + obj.getVar("groupdance_named").clear_obj_vector(); + obj.getVar("groupdance_normal").clear_obj_vector(); + obj.getVar("groupdance_target").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + local range = sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 0); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) < range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) < range / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)) obj.getVar("groupdance_boss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("groupdance_named").push_obj_vector(activeObj); + else obj.getVar("groupdance_normal").push_obj_vector(activeObj); + } + } + if(obj.getVar("groupdance_boss").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("groupdance_boss").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("groupdance_boss").get_obj_vector(i); + if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("groupdance_named").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("groupdance_named").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("groupdance_named").get_obj_vector(i); + if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("groupdance_normal").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("groupdance_normal").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("groupdance_normal").get_obj_vector(i); + if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj); + } + } + break; + case 6: + local target_number = obj.getVar("groupdance_target").get_obj_vector_size(); + local create_number = sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 1); + local targetMax = 5; + obj.getVar("groupdance_sub").setInt(10, 0); + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 14) > 10 || GROUPDANCE_STONE > 0){targetMax = 10; create_number = create_number + 10;} + local baseangle = sq_getRandom(0,60); + if(target_number > 0){ + for(local ui = 0; ui < target_number; ui++){ + local targetObj = obj.getVar("groupdance_target").get_obj_vector(ui); + if(targetObj){ + local id = sq_GetObjectId(targetObj); + for(local i = 0; i < targetMax; i++){ + if(obj.getVar("groupdance_sub").getInt(10) >= create_number) return; + obj.getVar("groupdance_sub").setInt(10, obj.getVar("groupdance_sub").getInt(10) + 1); + local angle = 360 / targetMax * i + baseangle; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 150.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + local sub = i % 5;//2;// + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 14) > 10 || GROUPDANCE_STONE > 0) sub = i % 5; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 0, 1.0) + 100;//破 + switch(sub){ + case 1: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 1, 1.0) + 100; break;//舞 + case 2: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 2, 1.0) + 100; break;//刺 + case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 3, 1.0) + 100; break;//滅 + case 4: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 4, 1.0) + 100; break;//血飲狂舞 + } + // print("sub = "+sub+" , totalDamage = "+totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/appear_dance_fog.ani", x, y, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, x, y, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GROUPDANCE, 1, totalDamage, sub, id, 0, 0, 0, 0, 0, 1); + } + } + } + } + break; + } + break; + } +} + +function onEndState_Groupdance_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProc_Groupdance_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Groupdance_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Groupdance_bykk(obj) +{ + if(!obj) return; +} + +function setGroupdance_AtSwordman_bykk(obj, drawObj, targetObj) +{ + if(!obj) return; + + local X = drawObj.getXPos(); + local Y = drawObj.getYPos(); + + local posX = obj.getVar("move").getInt(12); + local posY = targetObj.getYPos(); + + local offsetX = sq_Abs(X - posX); + local offsetY = Y - posY; + local atan = sq_Atan2(offsetX.tofloat(), offsetY.tofloat()) + 1.57; + if((X < posX && obj.getDirection() == ENUM_DIRECTION_LEFT) || (X > posX && obj.getDirection() == ENUM_DIRECTION_RIGHT)){ + if(Y < posY) atan = atan + 2.355; + else atan = atan - 1.57; + } + local pAni = drawObj.getCurrentAnimation(); + sq_SetfRotateAngle(pAni, -atan); +} + diff --git a/user/116.205.165.25/3_atswordman_6.c b/user/116.205.165.25/3_atswordman_6.c new file mode 100644 index 0000000..8119449 --- /dev/null +++ b/user/116.205.165.25/3_atswordman_6.c @@ -0,0 +1,3324 @@ + + + +function checkExecutableSkill_Darkstrike_bykk(obj) +{ + if (!obj) return false; + if(obj.getVar("darkstrike_tar").get_obj_vector_size() > 0) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_DARKSTRIKE); + if (isUse){ + obj.getVar("Darkstrike").setBool(0, false); + obj.getVar("darkstrike_bool").setBool(0, false); + obj.getVar("Darkstrike_Target").clear_obj_vector(); + obj.sq_IntVectClear(); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.sq_IntVectPush(1); + else if(obj.sq_GetState() == 6) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Darkstrike_bykk(obj) +{ + if (!obj) return false; + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 8) > 0 || DARKSTRIKE_STONE > 0) return false; + return true; +} + +function onSetState_Darkstrike_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKELANDATTAK_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKEJUMP); + obj.sq_PlaySound("SUMMONDAIMUS_JUMP"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKEFLYING); + obj.getVar("darkstrike_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("darkstrike_move").setInt(11, sq_GetZPos(obj)); + obj.setTimeEvent(2, 5, 60, false); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKELANDING); + obj.sq_PlaySound("SUMMONDAIMUS_LANDING"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdarkstrike/slash_floor_dust.ani", 0, 1, 0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(false) / 11, 10, false); + if(obj.getVar("darkstrike_bool").getBool(0) == false){ + local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DARKSTRIKE); + local hitMax = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2); + local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 3); + local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); + local sub = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 6); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, -175, -1, 70, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, 0, 0, 1); + } + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKEATTACK); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("SUMMONDAIMUS_SWISH"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0 || subState == 4){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_DARKSTRIKE, -1, 3, 1.0) + 100; + //if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100; + if(subState == 0) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 99)); + else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 100)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } +} + +function onEndCurrentAni_Darkstrike_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Darkstrike_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 9); + sq_setCurrentAxisPos(obj, 0, offsetX); + break; + case 2: + local baseX = obj.getVar("darkstrike_move").getInt(10); + local moveX = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0) / 60; + local moveZ = sq_GetAccel(obj.getVar("darkstrike_move").getInt(11), 100, timeEventCount, 30, true); + if(timeEventCount > 30) moveZ = sq_GetAccel(100, 0, timeEventCount - 30, 30, false); + local offsetX = sq_GetDistancePos(baseX, obj.getDirection(), moveX * timeEventCount); + if(obj.isMovablePos(offsetX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, offsetX); + sq_setCurrentAxisPos(obj, 2, moveZ); + if(timeEventCount == 60){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onAttack_Darkstrike_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdarkstrike/hit1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + if(!obj.getVar("Darkstrike_Target").is_obj_vector(damager)) obj.getVar("Darkstrike_Target").push_obj_vector(damager); + } + break; + case 4: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdarkstrike/hit1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + if(obj.getVar("darkstrike_bool").getBool(0) == false){ + obj.getVar("darkstrike_bool").setBool(0, true); + local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DARKSTRIKE); + local hitMax = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2); + local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 3); + local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); + local sub = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 6); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local id = sq_GetObjectId(damager); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, sq_GetZPos(damager) + sq_GetObjectHeight(damager) / 2, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id, 0, 1); + } + } + break; + } +} + +function onEnterFrame_Darkstrike_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 4: + obj.sq_PlaySound("CLAWBLADE_01"); + if(obj.isMyControlObject()){ + sq_flashScreen(obj, 1, 30, 40, 63, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 200); + } + break; + case 6: + //`MakeForceDaimus` 175 -1 70 + local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DARKSTRIKE); + local hitMax = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2); + local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 3); + local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); + local sub = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 6); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local offsetX = 175, offsetZ = 70, id = 0, offsetObj = obj; + if(obj.getVar("Darkstrike_Target").get_obj_vector_size() > 0){ + local targetObj = obj.getVar("Darkstrike_Target").get_obj_vector(0); + if(targetObj){ + offsetX = 0; offsetZ = sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2; offsetObj = targetObj; + id = sq_GetObjectId(targetObj); + } + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj, offsetObj, PASSIVEOBJECT_BYKK_DEMONSLAYER, offsetX, -1, offsetZ, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id, 0, 1); + break; + } + break; + } +} + +function onEndState_Darkstrike_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProc_Darkstrike_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Darkstrike_bykk(obj, flagIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(flagIndex == 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onProcCon_Darkstrike_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(obj.getVar("Darkstrike").getBool(0) == false){ + obj.setSkillCommandEnable(SKILL_DEMONSLAYER_DARKSTRIKE, true); + local EnterSkill = obj.sq_IsEnterSkill(SKILL_DEMONSLAYER_DARKSTRIKE); + if(EnterSkill != -1){ + obj.getVar("Darkstrike").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } +} + +function darkStrike_Attack(obj, damager) +{ + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 8) < 1 && DARKSTRIKE_STONE < 1) return; + if(obj.getVar("darkstrike_tar").get_obj_vector_size() > 0){ + if(obj.getVar("darkstrike_tar").is_obj_vector(damager)) obj.getVar("darkstrike_tar").push_obj_vector(damager); + } + else{ + obj.getVar("darkstrike_tar").clear_obj_vector(); + obj.getVar("darkstrike_tar").push_obj_vector(damager); + } + if(obj.getVar("darkStrike_Attack").get_obj_vector_size() < 1){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 2, 100, 0, 0, 0, 0, 0, 0, 0, 0); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Phnom_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PHNOM); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 8) > 0 || PHNUM_STONE > 0) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PHNOM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Phnom_bykk(obj) +{ + if (!obj) return false; + if(obj.getHp() < sq_GetLevelData(obj, SKILL_DEMONSLAYER_PHNOM, 0, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_PHNOM))) return false; + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + return false; +} + +function onSetState_Phnom_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMCAST); + sq_SetCustomDamageType(obj, true, 1); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMKELKUS); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PHNOM, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMDAIMUS); + break; + case 3: + obj.stopTimeEvent(4); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMEXPLOSION); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMFIXINGCAST); + sq_SetCustomDamageType(obj, true, 1); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 1){ + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 7); + obj.setTimeEvent(1, delaySum, 1, false); + } +} + +function onEndCurrentAni_Phnom_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PHNOM, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Phnom_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; +} + +function onTimeEvent_Phnom_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(8, 31); + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 1); + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 4) > 0){ + hitMax = hitMax + 7; + } + obj.setTimeEvent(2, delaySum / hitMax, hitMax -1, false); + break; + case 2: + obj.resetHitObjectList(); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PHNOM, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atphnom/daimus1_phnom_daimus.ani", 0, -1, 0); + local speedRate = obj.getVar("phnomSet").getInt(10); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } +} + +function onEnterFrame_Phnom_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Phnom_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_PHNOM){ + sq_SetCustomDamageType(obj, true, 0); + } +} + +function onProc_Phnom_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Phnom_bykk(obj, flagIndex) +{ + if (!obj) return false; + switch(flagIndex){ + case 1000: + //`SUMMONDAIMUS_APPEAR` + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(37, 37); + local speedRate = 6000 / delay; + obj.getVar("phnomSet").setInt(10, speedRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PHNOM, -1, 2, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PHNOM, -1, 4, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sizeRate = 100; + if(sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 4) > 0){ + sizeRate = sizeRate + 30; + hitMax = hitMax + 3; + } + obj.setTimeEvent(3, delay / 30 * 200 * hitMax, 1, false); + obj.setTimeEvent(4, delay / 30 * 200, hitMax, false); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 1, 70, obj.getDirection(), 2, SKILL_DEMONSLAYER_PHNOM, 1, totalDamage, hitMax, sizeRate, damageRate, speedRate, 0, 0, 0, 1); + break; + } + return true; +} + +function onProcCon_Phnom_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Blooddemonsword_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODDEMONSWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDEMONSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Blooddemonsword_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Blooddemonsword_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + + switch(subState){ + case 0: + obj.sq_PlaySound("DL_QUICKPUNTO"); + + //BodyCalldaimus(obj, "blooddemonswordcast_body"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDEMONSWORDCAST_BODY); + // local dago = obj.sq_CreateCNRDAnimation("effect/animation/atblooddemonsword/daimus/daimuscast_body.ani"); + // obj.sq_AddStateLayerAnimation(-1,dago, 0, 0); + break; + case 1: + //BodyCalldaimus(obj, "blooddemonswordhit_body"); + obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_05"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDEMONSWORDHIT_BODY); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDEMONSWORD, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 110)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local appath = [ + "effect/animation/atblooddemonsword/daimus/daimushitback_00.ani", + "effect/animation/atblooddemonsword/hitback_dust.ani", + "effect/animation/atblooddemonsword/hitfront_07.ani", + "effect/animation/atblooddemonsword/daimus/daimushit_body.ani" + ]; + foreach(path in appath) + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(path), 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Blooddemonsword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDEMONSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + local aniPath = "character/swordman/effect/animation/atblooddemonsword/daimus/daimusdisappear_body.ani"; + sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Blooddemonsword_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; +} + +function onEnterFrame_Blooddemonsword_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + switch(frameIndex){ + case 1: + sq_SetMyShake(obj,7,200); + sq_flashScreen(obj,0,120,400,204,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_CLOSEBACK); + break; + } + } +} + +function onEndState_Blooddemonsword_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProc_Blooddemonsword_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Blooddemonsword_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Blooddemonsword_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Gigaslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GIGASLASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGASLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Gigaslash_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Gigaslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGASLASHREADY); + obj.getVar("gigaslashmove").setInt(11, sq_GetXPos(obj)); + obj.getVar("gigaslashBool").setBool(0, false); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGASLASHSTART); + obj.sq_PlaySound("SW_GIGASLASH"); + obj.sq_PlaySound("GIGASLASH_JUMP"); + sq_flashScreen(obj, 200, 550, 100, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGASLASHBLOW); + obj.sq_PlaySound("GIGASLASH_SMASH"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 3); + obj.setTimeEvent(1, delaySum / 10, 10, true); + obj.setTimeEvent(3, delaySum, 1, false); + break; + } + +} + +function onEndCurrentAni_Gigaslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGASLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Gigaslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + //Calldaimus_onAttack(obj,damager, boundingBox, isStuck); +} + +function onEnterFrame_Gigaslash_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(frameIndex == 1){ + sq_SetMyShake(obj, 8, 200); + sq_flashScreen(obj, 40, 100, 0, 155, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + else if(frameIndex == 2){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGASLASH, -1, 0, 1.0) + 100; + local xpos = 0; + if(obj.getVar("gigaslashBool").getBool(0)) xpos = 30; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, xpos, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GIGASLASH, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgigaslash/atgigaslash_blow_front_crack02.ani", 0, 1, 0); + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atgigaslash/screeneffect/atgigaslash_screen01.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); + } + break; + } +} + +function onEndState_Gigaslash_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProc_Gigaslash_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Gigaslash_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onTimeEvent_Gigaslash_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local z = sq_GetUniformVelocity(0, 180, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, z); + if(obj.getVar("gigaslashBool").getBool(0)){ + local x = sq_GetUniformVelocity(0, obj.getVar("gigaslashmove").getInt(10) / 2, timeEventCount, 10); + local xpos = sq_GetDistancePos(obj.getVar("gigaslashmove").getInt(11), obj.getDirection(), x); + if(obj.isMovablePos(xpos, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, xpos); + } + if(timeEventCount >= 10) obj.getVar("gigaslashmove").setInt(11, sq_GetXPos(obj)); + break; + case 2: + local z = sq_GetUniformVelocity(180, 0, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, z); + if(obj.getVar("gigaslashBool").getBool(0)){ + local x = sq_GetUniformVelocity(0, obj.getVar("gigaslashmove").getInt(10) / 2, timeEventCount, 10); + local xpos = sq_GetDistancePos(obj.getVar("gigaslashmove").getInt(11), obj.getDirection(), x); + if(obj.isMovablePos(xpos, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, xpos); + } + break; + case 3: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(4, 6); + obj.setTimeEvent(2, delaySum / 10, 10, true); + break; + } +} + +function onProcCon_Gigaslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("gigaslashBool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP , ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("gigaslashmove").setInt(10, 300); + obj.getVar("gigaslashBool").setBool(0, true); + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT , ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT , ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)){ + obj.getVar("gigaslashmove").setInt(10, 200); + obj.getVar("gigaslashBool").setBool(0, true); + } + } + + break; + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Ultimateblade_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_ULTIMATEBLADE); + if (isUse){ + obj.getVar("Ultimateblade_target").clear_obj_vector(); + obj.getVar("Ultimateblade_fixtarget").clear_obj_vector(); + obj.getVar("Ultimateblade_bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ULTIMATEBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Ultimateblade_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Ultimateblade_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + + switch(subState){ + case 0://640 + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_START_GRAB); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 111)); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 64000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_grab_clawn02.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_grab_floor01.ani", 0, 0, 0); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni2.setSpeedRate(speedRate); + break; + case 1://320 + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_START_PULL); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 32000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_pull_floorn01.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_pull_clawn02.ani", 0, 0, 0); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni2.setSpeedRate(speedRate); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK01); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 24000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack01_clawn03.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK02); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 24000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack02_clawn03.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 4: + // BodyCalldaimus(obj, "ultimateblade_basic_attack03"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK03); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 24000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack03_clawn03.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 5: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK04); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 24000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack02_clawn03.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 6: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_FINISH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local speedRate = 76000.0 / delaySum.tofloat(); + if(speedRate > 150) speedRate = 150.0; + currentAni.setSpeedRate(speedRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/finish/finish_floorn01.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/finish/finish_dust02.ani", 0, 0, 0); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni2.setSpeedRate(speedRate); + break; + case 10: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_FAIL_FINISH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Ultimateblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(),sub = 10; + if(obj.getVar("Ultimateblade_fixtarget").get_obj_vector_size() > 0) sub = 1; + else if(size > 0) sub = 1; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sub); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ULTIMATEBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + case 3: + case 4: + case 5: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ULTIMATEBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 6: + case 10: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Ultimateblade_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + // if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ + if(!obj.getVar("Ultimateblade_target").is_obj_vector(damager)) obj.getVar("Ultimateblade_target").push_obj_vector(damager); + local apPath = "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 300, ENUM_DIRECTION_NEUTRAL, addAppendage); + // } + // else if(sq_IsFixture(damager)){ + // if(!obj.getVar("Ultimateblade_fixtarget").is_obj_vector(damager)) obj.getVar("Ultimateblade_fixtarget").push_obj_vector(damager); + // } + } + break; + } +} + +function onEnterFrame_Ultimateblade_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("SW_ULTIMATE_BLADE_01"); + sq_flashScreen(obj, 160, 0, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + obj.sq_PlaySound("ULTIMATE_BLADE_WALE"); + sq_flashScreen(obj, 0, 0, 160, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: obj.sq_PlaySound("ULTIMATE_BLADE_WALE"); break; + case 4: + sq_SetMyShake(obj, 4, 160); + sq_flashScreen(obj, 0, 0, 160, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case 1: + switch(frameIndex){ + case 0: sq_SetMyShake(obj, 3, 40); break; + case 1: sq_SetMyShake(obj, 2, 80); break; + case 2: sq_SetMyShake(obj, 1, 180); break; + case 3: + case 4: + local sub = 0; + if(frameIndex == 4) sub = 1; + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); + Ultimateblade_bykk_pulltarget(obj,sub,delaySum); + break; + } + break; + case 2: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("SW_ULTIMATE_BLADE_02"); + obj.sq_PlaySound("ULTIMATE_BLADE_LASHING"); + sq_flashScreen(obj, 0, 0, 40, 25, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 40); + Ultimateblade_bykk_rotate(obj, 1, -36, 0, 41); + break; + case 1: + case 2: + local sub = 2; + if(frameIndex == 2) sub = 3; + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); + Ultimateblade_bykk_pulltarget(obj,sub,delaySum); + break; + } + break; + case 3: + case 4: + case 5: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("ULTIMATE_BLADE_LASHING"); + sq_flashScreen(obj, 0, 0, 40, 25, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 40); + switch(subState){ + case 3: Ultimateblade_bykk_rotate(obj, 1, 124, 0, 49); break; + case 4: Ultimateblade_bykk_rotate(obj, 1, -88, 0, 43); break; + case 5: Ultimateblade_bykk_rotate(obj, 1, 116, 0, 45); break; + } + break; + case 1: + case 2: + local sub = 4 + (subState - 3) * 2; + if(frameIndex == 2) sub = 5 + (subState - 3) * 2; + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); + Ultimateblade_bykk_pulltarget(obj,sub,delaySum); + break; + } + break; + case 6: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("SW_ULTIMATE_BLADE_03"); + sq_flashScreen(obj, 160, 0, 0, 153, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 0); + Ultimateblade_bykk_pulltarget(obj, 10, delaySum); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); + Ultimateblade_bykk_pulltarget(obj,11,delaySum); + break; + case 2: + obj.sq_PlaySound("ULTIMATE_BLADE_FINISH"); + sq_flashScreen(obj, 0, 0, 160, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 240); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 0); + Ultimateblade_bykk_pulltarget(obj, 12, delaySum); + Ultimateblade_bykk_rotate(obj, 2, 204, 0, 41); + break; + case 5: + local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Ultimateblade_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"); + } + } + break; + } + break; + } +} + +function onChangeSkillEffect_Ultimateblade_bykk(obj, skillIndex, receiveData) +{ + if(!obj || skillIndex != 165) return; +} + +function onEndState_Ultimateblade_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_ULTIMATEBLADE){ + local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Ultimateblade_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"); + } + } + } +} + +function onProc_Ultimateblade_bykk(obj) +{ + if(!obj) return; + if(obj.isMyControlObject()){ + if(obj.getVar("Ultimateblade_bool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT , ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("Ultimateblade_dir").setInt(10, ENUM_DIRECTION_LEFT); + obj.getVar("Ultimateblade_bool").setBool(0, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT ,ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("Ultimateblade_dir").setInt(10, ENUM_DIRECTION_RIGHT); + obj.getVar("Ultimateblade_bool").setBool(0, true); + } + } + } +} + +function onKeyFrameFlag_Ultimateblade_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onBeforeAttack_Ultimateblade_bykk(obj,damager,boundingBox,isStuck) +{ + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_IsFixture(damager)){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 1, 1.0) + 100; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + else{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + break; + } +} + +function Ultimateblade_bykk_pulltarget(obj,sub,time) +{ + local xpos = [-37,-27,133,156,-87,-132,155,149,-90,-127,-47,-25,228]; + local zpos = [148,182,130,197,166,171,124,171,168,170,-224,242,10]; + local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Ultimateblade_target").get_obj_vector(i); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"); + if(activeObj && addAppendage && !sq_IsFixture(activeObj)){ + sq_MoveToAppendageForce(activeObj, obj, obj, xpos[sub], 0, zpos[sub], time / 4, true, addAppendage); + } + } + } +} + +function Ultimateblade_bykk_rotate(obj,sub,x,y,z) +{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 2, 1.0) + 100; + if(sub > 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 4, 1.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, x, y, z, obj.getDirection(), 2, SKILL_DEMONSLAYER_ULTIMATEBLADE, sub, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Bloodoctopussword_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Bloodoctopussword_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Bloodoctopussword_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODOCTOPUSSWORDBODY_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Bloodoctopussword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Bloodoctopussword_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; +} + +function onEnterFrame_Bloodoctopussword_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 1: + obj.sq_PlaySound("BLOOD_OCTOPUSSWORD_START"); + obj.sq_PlaySound("R_SW_BLOOD_OCTOPUSSWORD_01"); + break; + case 12: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(12, 14); + obj.sq_SetXScrollStart(400, delaySum); + break; + case 13: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(13, 13); + local speedRate = 4000.0 / delaySum.tofloat(); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopusswordbottom_21.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 14: + sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 200); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(14, 14); + local speedRate = 4000.0 / delaySum.tofloat(); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword02_00.ani", 0, 50, 0); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword03_13.ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + pAni2.setSpeedRate(speedRate); + break; + case 15: + //`createSwordObject` 0 -1 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, -1, 0, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, 1); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(15, 15); + local speedRate = (4000.0 / delaySum.tofloat()).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, 1, totalDamage, hitMax, speedRate, 0, 0, 0, 0, 0, 1); + //`createBackSwordEffect` 0 -90 0 + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopusswordbottom_21.ani", 0, -90, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 16: sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 19: sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 35: sq_SetMyShake(obj, 2, 280); + case 42: + obj.sq_PlaySound("R_SW_BLOOD_OCTOPUSSWORD_02"); + obj.sq_PlaySound("BLOOD_OCTOPUSSWORD_FIN"); + sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 12, 300); + //`createExpObject` 0 51 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, -1, 1, 1.0) + 100; + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(42, 42); + local speedRate = (4000.0 / delaySum.tofloat()).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 51, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, 2, totalDamage, speedRate, 0, 0, 0, 0, 0, 0, 1); + break; + case 43: obj.sq_SetXScrollStop(0); break; + case 44: + sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //`EnableWhipSwordBal` + break; + } + break; + } +} + +function onEndState_Bloodoctopussword_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD) obj.sq_SetXScrollStop(0); +} + +function onProc_Bloodoctopussword_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Bloodoctopussword_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Bloodoctopussword_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Gigablade_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GIGABLADE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGABLADE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Gigablade_bykk(obj) +{ + if (!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) < 1){ + local state = obj.sq_GetState(); + if(state == 0 || state == 108 || state == 14) return true; + else return false; + } + return true; + +} + +function onSetState_Gigablade_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local add_bonus = 1.0; + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 3) add_bonus = 1.1; + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADEGATE); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 4, add_bonus) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 104)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADEDASH); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 0, add_bonus) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 102)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + obj.getVar("gigablade_mive").setInt(10, sq_GetXPos(obj)); + obj.getVar("gigablade_mive").setInt(11, 250); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADERETURNSWORD); + + obj.getVar("gigablade_mive").setInt(10, sq_GetXPos(obj)); + obj.getVar("gigablade_mive").setInt(11, -250); + + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgigablade/gigablade_dash_eff_d.ani", 0, 1, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADEPOWERSLASH); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 1, add_bonus) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 105)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 1 || subState == 2){ + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(2, delaySum / 10, 9, false); + } + +} + +function onEndCurrentAni_Gigablade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGABLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Gigablade_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + break; + case 2: + local srcX = obj.getVar("gigablade_mive").getInt(10); + local moveX = obj.getVar("gigablade_mive").getInt(11); + local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 9); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onAttack_Gigablade_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + //Calldaimus_onAttack(obj,damager, boundingBox, isStuck); + local add_bonus = 1.0; + if(sq_GetSkillLevel(obj, 160) >= 3) add_bonus = 1.1; + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 6){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + //creat_exp_obj + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 7, add_bonus) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, sq_GetObjectHeight(damager) / 2 + sq_getRandom(-20, 20), obj.getDirection(), 2, SKILL_DEMONSLAYER_GIGABLADE, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); + } + } + break; + } + +} + +function onEnterFrame_Gigablade_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local add_bonus = 1.0; + if(sq_GetSkillLevel(obj, 160) > 2) add_bonus = 1.1; + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("SW_GIGA"); + obj.sq_PlaySound("GIGA_GATE_PUT"); + break; + case 10: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(10, 28); + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_GIGABLADE, 9); + obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); + sq_CreateParticle("character/swordman/particle/atgigabladegate.ptl", obj, -50, 0, 100, true, 10, 0, 30); + break; + case 29: obj.sq_PlaySound("GIGA_EVIL"); break; + } + break; + case 1: + switch(frameIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgigablade/gigablade_dash_smoke_a.ani", 0, 1, 0); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 5); + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_GIGABLADE, 5); + obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); + break; + } + break; + case 2: + if(frameIndex == 0) obj.sq_PlaySound("GIGA_BACKSTEP"); + break; + case 3: + switch(frameIndex){ + case 1: obj.sq_PlaySound("GIGA_SWORD_UP"); break; + case 5: obj.sq_PlaySound("GIGA_SWORD_DOWN"); break; + } + break; + } +} + +function onEndState_Gigablade_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_GIGABLADE) sq_SimpleMoveToNearMovablePos(obj,200); +} + +function onProc_Gigablade_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Gigablade_bykk(obj, flagIndex) +{ + if (!obj) return false; + switch(flagIndex){ + case 1: + if(obj.getSkillSubState() == 3){ + //create EXP + local sizeRate = 100, add_bonus = 1.0; + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 6) add_bonus = 1.1; + if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 9) sizeRate = 200; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 7, add_bonus) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 150, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GIGABLADE, 2, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1); + sq_SetMyShake(obj, 10, 100); + } + break; + } + return true; +} + +function onProcCon_Gigablade_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Ragnarok_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_RAGNAROK); + if (isUse){ + obj.getVar("ragnarok_target").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_RAGNAROK, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Ragnarok_bykk(obj) +{ + if (!obj) return false; + + return true; + +} + +function onSetState_Ragnarok_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZYCAST); + obj.sq_PlaySound("SW_RAGNAROK_01"); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 3); + obj.setTimeEvent(2, delaySum, 1, false); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/start/rstartmaina_00.ani", 0, 0, 0); + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/start/rstartfloor_11.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atragnarok/start/rstartmainc_10.ani", 0, -1, 0); + sq_SetCustomDamageType(obj, true, 2); + break; + case 1: + sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZY); + + local flashScreenObj = obj.getVar("Ragnarok_flashobj").get_obj_vector(0); + if(flashScreenObj){ + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + } + sq_flashScreen(obj, 0, 0, 200, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } +} + +function onEndCurrentAni_Ragnarok_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + sq_setCurrentAxisPos(obj, 2, 500); + local flashScreenObj = sq_flashScreen(obj, 80, 99990, 300, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Ragnarok_flashobj").clear_obj_vector(); + obj.getVar("Ragnarok_flashobj").push_obj_vector(flashScreenObj); + obj.setTimeEvent(1, 4000, 1, false);//持續時間 + obj.setTimeEvent(3, 500, 1, false);//轉變揮刀 + obj.setTimeEvent(4, 1500, 1, false);//亂舞 + obj.setTimeEvent(5, 2500, 1, false);//巨劍衝擊 + obj.setTimeEvent(6, 3500, 1, false);//地面最後一擊 + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Ragnarok_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; +} + +function onEnterFrame_Ragnarok_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Ragnarok_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_RAGNAROK){ + sq_SetCustomDamageType(obj, true, 0); + local size = obj.getVar("ragnarok_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ragnarok_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/ragnarok/ap_ragnarok.nut"); + } + } + } + +} + +function onProc_Ragnarok_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Ragnarok_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onTimeEvent_Ragnarok_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_RAGNAROK, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(4, 5); + sq_flashScreen(obj, 0, 0, delaySum, 255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + obj.sq_PlaySound("SW_RAGNAROK_02"); + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/transformation/rtransformation_body.ani",true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj) - 400,sq_GetYPos(obj),500,ENUM_DRAWLAYER_COVER); + break; + case 4: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 0, 1.0) + 100; + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 1, 1.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, -500, ENUM_DIRECTION_RIGHT, 2, SKILL_DEMONSLAYER_RAGNAROK, 1, totalDamage, hitMax, 0, 0, 0, 0, 0, 0, 1); + obj.setTimeEvent(10, 60, hitMax, true); + break; + case 5: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 2, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 3, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_RAGNAROK, 1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, -500, ENUM_DIRECTION_RIGHT, 2, SKILL_DEMONSLAYER_RAGNAROK, 2, totalDamage, hitMax, totalDamage2, 0, 0, 0, 0, 0, 1); + break; + case 6: + createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/attack/ratkc_finisheffect.ani",true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + break; + case 10: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atragnarok/rrhiteff_01.ani", sq_getRandom(-250,250), 0, sq_getRandom(-500,-250)); + break; + } +} + +function onProcCon_Ragnarok_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_PredatorGaloa_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PREDATORGALOA); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(89, STATE_PRIORITY_IGNORE_FORCE, true); + obj.startSkillCoolTime(SKILL_DEMONSLAYER_PREDATORGALOA, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_PREDATORGALOA), -1); + return true; + } + return false; +} + +function checkCommandEnable_PredatorGaloa_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PredatorGaloa_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PREDATORGALOA); + break; + } +} + +function onEndCurrentAni_PredatorGaloa_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_PredatorGaloa_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; +} + +function onEnterFrame_PredatorGaloa_bykk(obj, frameIndex) +{ + if(!obj) return; + switch(frameIndex){ + case 3: obj.sq_PlaySound("PREDATOR_READY"); break; + case 12: obj.sq_PlaySound("SW_PREDATOR"); break; + } +} + +function onEndState_PredatorGaloa_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProc_PredatorGaloa_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PredatorGaloa_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 1: + local create_number = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 0); + local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_PREDATORGALOA); + local lifeTime = sq_GetLevelData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 0, skill_level); + local catchMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 6); + local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 4); + local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 5); + local range = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 3); + local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 1, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 2, skill_level); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + for(local i = 0; i < create_number; i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 180, obj.getDirection(), 2, SKILL_DEMONSLAYER_PREDATORGALOA, 1, totalDamage, catchMax, hitMax, damageRate, lifeTime, hitTime, i, range, 1); + } + break; + } +} + +function onProcCon_PredatorGaloa_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Atfrenzy_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_ATFRENZY); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ATFRENZY, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Atfrenzy_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Atfrenzy_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + + switch(subState){ + case 0: + obj.sq_StopMove(); + obj.sq_PlaySound("FRENZY_CAST"); + local castTime = sq_GetCastTime(obj, 150, sq_GetSkillLevel(obj, 150)); + local animation = sq_GetCurrentAnimation(obj); + local aniSumTime = sq_GetDelaySum(animation); + local speedRate = aniSumTime.tofloat() / castTime.tofloat(); + sq_StartDrawCastGauge(obj, castTime, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + BodyCalldaimus(obj, "frenzycast"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZYCAST); + break; + case 1: + BodyCalldaimus(obj, "frenzy"); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local bufftmime = sq_GetLevelData(obj,150, 2, sq_GetSkillLevel(obj, 150)); + local append = "character/atswordman/2_demonslayer/atfrenzy/ap_atfrenzy.nut"; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, append, false); + if(bufftmime > 0) appendage.sq_SetValidTime(bufftmime); + appendage.setEnableIsBuff(true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DEMONSLAYER_ATFRENZY, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY)); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + appendage.setBuffIconImage(146); + local bonusRate = sq_GetLevelData(obj, SKILL_DEMONSLAYER_ATFRENZY, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY)) / 10; + obj.getVar("apGetSetbyKK").setInt(0, bonusRate); + break; + } + +} + +function onEndCurrentAni_Atfrenzy_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ATFRENZY, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Atfrenzy_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onEnterFrame_Atfrenzy_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Atfrenzy_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_DEMONSLAYER_ATFRENZY){ + sq_EndDrawCastGauge(obj); + } +} + +function onProc_Atfrenzy_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Atfrenzy_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Atfrenzy_bykk(obj) +{ + if(!obj) return; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_WillPower_bykk(obj) +{ + if(!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WILLPOWER); + if(isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(200, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } +} + +function checkCommandEnable_WillPower_bykk(obj) +{ + if(!obj) return false; + return true; +} + +function onSetState_WillPower_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILLPOWER); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onKeyFrameFlag_WillPower_bykk(obj, flagIndex) +{ + if(!obj) return; + if(flagIndex == 1){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 252, false, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut", true); + local skillLevel = sq_GetSkillLevel(obj, 252); + local validTime = sq_GetLevelData(obj, 252, 0, skillLevel); + + appendage.setBuffIconImage(152); + appendage.setEnableIsBuff(true); + + appendage.sq_SetValidTime(validTime); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 252, skillLevel); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + } +} + +function onEndCurrentAni_WillPower_bykk(obj) +{ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function onStart_appendage_weaponmastery_bykk(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponType = obj.getWeaponSubType(); + if(weaponType == -1) return; + local skillIndex = [SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, + SKILL_SWORDMASTER_BYKK_BLADEMASTERY, + SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, + SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY]; + local bonus = [4, 7, 8, 9]; + local skill_level = sq_GetSkillLevel(obj, skillIndex[weaponType]); + if(skill_level > 0){ + local bonusRate = sq_GetLevelData(obj, skillIndex[weaponType], bonus[weaponType], skill_level); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_PROMISEOFANTIQUITY) > 0){ + local bonus = [0, 2, 4, 6]; + local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_PROMISEOFANTIQUITY); + bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_PROMISEOFANTIQUITY, bonus[weaponType], skillLevel); + } + local change_appendage = appendage.sq_getChangeStatus("weaponMastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("weaponMastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, bonusRate); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (bonusRate * 0.1).tofloat()); + } + } + local apdPath = []; + switch(weaponType){ + case 0: + apdPath = ["character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut","character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; + break; + case 1: + apdPath = ["character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; + break; + case 2: + apdPath = ["character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; + break; + case 3: + apdPath = ["character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut"]; + break; + } + for(local i = 0; i < apdPath.len(); i++){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath[i])) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath[i]); + } + if(weaponType != 0){ + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local state = colObj.getState(); + switch(state % 10){ + case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; + case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; + case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; + case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; + } + colObj.setValid(false); + } + } +} + +function proc_appendage_weaponmastery_bykk(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} +} + +function onAttackParent_appendage_Bladesoul_bykk(appendage, realAttacker, damager,boundingBox, isStuck) +{ + if(isStuck) return; + print("test"); + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoultar.nut")){ + print("test2"); + CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoultar.nut") + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL) + local bufftime = sq_GetLevelData(obj,SKILL_SWORDMASTER_BYKK_BLADESOUL, 1, skill_level); + + local apdPath = "character/atswordman/1_swordmaster/bladesoul/ap_bladesoulbuff.nut"; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, apdPath); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + getDamageRate_Swordmaster_bykk(obj); + } + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 15, sq_GetSkillLevel(obj, 15)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + } +} + +function onEnd_appendage_weaponmastery_bykk(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){ + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + } +} + +function onAttackParent_appendage_Drawsword_bykk(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(isStuck) return; + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ + local timer = appendage.getVar("drawsword_time").get_ct_vector(0); + local currentT = timer.Get(); + if(currentT <= 300){ + timer.Reset(); + timer.Start(10000,0); + if(appendage.getVar("drawsword_ap").getInt(10) >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 3)){ + appendage.getVar("drawsword_ap").setInt(10, 0); + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); + if(!loadSlot) return; + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD); + local maxCount = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 0, skill_level); + if(loadSlot.getRemainLoadNumber() < maxCount) loadSlot.increaseLoadCount(1); + } + else appendage.getVar("drawsword_ap").setInt(10, appendage.getVar("drawsword_ap").getInt(10) + 1); + } + else appendage.getVar("drawsword_ap").setInt(10, 0); + } +} + +function onStart_appendage_Drawsword_bykk(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + appendage.getVar("drawsword_ap").setInt(10, 0); + appendage.getVar("drawsword_time").clear_ct_vector(); + appendage.getVar("drawsword_time").push_ct_vector(); +} + +function proc_appendage_Drawsword_bykk(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD); + local maxCount = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 0, skill_level); + local coolTime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 1, skill_level); + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ + local bladeLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY); + maxCount = maxCount + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 6, bladeLevel); + coolTime = coolTime - sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 2); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0){ + maxCount = maxCount + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 0) + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD); + if(!loadSlot.isCooling()){ + if(loadnumber < maxCount){ + loadSlot.increaseLoadCount(1); + if(loadSlot.getRemainLoadNumber() < maxCount) loadSlot.setStartCool(); + } + else if(loadnumber > maxCount) loadSlot.decreaseLoadCount(loadnumber - maxCount); + } + if(loadnumber > 0){ + local sqrState = obj.getState(); + local excludeState = [0,8,2,3,4,5,6,7,9,108,13,14,115,SKILL_SWORDMASTER_BYKK_OVERDRIVE,SKILL_SWORDMASTER_BYKK_CHANGESWORD]; + for(local i = 0; i < excludeState.len(); i++){ + if(sqrState == excludeState[i]) return; + } + // if(sqrState == 0 || sqrState == 8 || sqrState == 2 || sqrState == 3 || sqrState == 4 || sqrState == 5 || sqrState == 108 || sqrState == 6 || sqrState == 7 || sqrState == 14 || sqrState == 115 || sqrState == SKILL_SWORDMASTER_BYKK_OVERDRIVE || sqrState == SKILL_SWORDMASTER_BYKK_CHANGESWORD) return; + if(sqrState == SKILL_SWORDMASTER_BYKK_JACKCATCH && obj.getSkillSubState() > 0 && obj.getSkillSubState() < 7){ + for(local i = 0; i < 255; i++){ + obj.setSkillCommandEnable(i, false); + } + return; + } + local skillIndex = [SKILL_SWORDMASTER_BYKK_ATFLASH, + SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, + SKILL_SWORDMASTER_BYKK_COUNTERSLASH, + SKILL_SWORDMASTER_BYKK_DEVILSLASH, + SKILL_SWORDMASTER_BYKK_DRAGONUPEX, + SKILL_SWORDMASTER_BYKK_EXCALIBUR, + SKILL_SWORDMASTER_BYKK_FUSIONBLADE, + SKILL_SWORDMASTER_BYKK_HALFMOON, + SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, + SKILL_SWORDMASTER_BYKK_JACKCATCH, + SKILL_SWORDMASTER_BYKK_LAEVATEINN, + SKILL_SWORDMASTER_BYKK_THUNDERSLASH, + SKILL_SWORDMASTER_BYKK_TIMESLASH, + SKILL_SWORDMASTER_BYKK_UPPERSLASH, + 32,143,86,145]; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) skillIndex.push(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + for(local i = 0; i < skillIndex.len(); i++){ + if(!sq_GetSkill(obj, skillIndex[i]).isInCoolTime()){ + obj.setSkillCommandEnable(skillIndex[i], true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + if(obj.getState() == 132) { + if(skillIndex[i] == 32){ + obj.getVar("DrawswordSet").setBool(0, true); + return; + } + else{ + obj.getVar("DrawswordSet").setBool(0, false); + print("set here"); + } + } + print("test : "+obj.getVar("DrawswordSet").getBool(0)); + if(loadnumber == maxCount && obj.getVar("DrawswordSet").getBool(0) == false){ + loadSlot.decreaseLoadCount(1); + print("set decreaseLoadCount"); + loadSlot.setStartCool(); + } + else if(obj.getVar("DrawswordSet").getBool(0) == false){ + loadSlot.decreaseLoadCount(1); + print("set decreaseLoadCount"); + loadSlot.setStartCool(); + } + local skillbonusRate = 1; + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ + obj.getVar("Drawsword_cooltime").setBool(0, true); + obj.getVar("Drawsword_skill").setBool(0, true); + } + local skill_level = sq_GetSkillLevel(obj, skillIndex[i]); + obj.startSkillCoolTime(skillIndex[i], skill_level, -1); + switch(sqrState){ + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://所有魔剑同时爆炸。 + // sq_setCurrentAxisPos(obj, 2, 0); + // local subState = obj.getSkillSubState(); + // local circleObj = obj.getVar("breakSwordDance_circle").get_obj_vector(0); + // if(circleObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(circleObj); + // colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + // } + // for(local i = subState; i < 9; i++){ + // local swrodObj = obj.getVar("breakSwordDance_sword"+i.tostring()).get_obj_vector(0); + // if(swrodObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); + // colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + // } + // } + // local x = [0,210,147,99,153,142,234,250,250], y = [0,0,0,0,0,0,0,0,0], z = [0,61,156,47,94,75,12,55,0]; + // local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 3, 1.0) + 100; + // local element = 4; + // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + // if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + // local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 8); + // if(obj.getVar("breaksworddance_stone").getBool(0)){ + // totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, 1.0) + 100; + // totalDamage = totalDamage * 250 / 100; + // sizeRate = sizeRate + 30; + // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[8],y[8] + 1,z[8]-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,11,totalDamage,sizeRate,0,0,0,0,0,0,1); + + // } + // else{ + // for(local i = 1; i < 9; i++){ + // if(i >= 1 && i <= 7) + // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[i],y[i],z[i],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,10,totalDamage,element,sizeRate,0,0,0,0,0,1); + // else{ + // totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, 1.0) + 100; + // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[i],y[i] + 1,z[i]-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,11,totalDamage,sizeRate,0,0,0,0,0,0,1); + // } + // } + // } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 9); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,375,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,20,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH://释放最后爆炸 + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 16) > 0 || DEVILSALSH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 31) > 0){ + local attackObj = obj.getVar("devilSlash_atk").get_obj_vector(0); + if(attackObj) attackObj.setValid(false); + local element = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18) + 30; + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; + sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1); + } + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://直接释放 + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH: + sq_SimpleMoveToNearMovablePos(obj,400); + local size = obj.getVar("jackCatch_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut"); + } + } + local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + local VarName = ["jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"]; + for(local i = 0; i < VarName.len(); i++){ + local effectObj = obj.getVar(VarName[i]).get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setValid(false); + } + } + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN: + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH: + obj.sq_SetXScrollStop(0); + local flashScreenObj = obj.getVar("flashobj").getObject(0); + if(flashScreenObj){ + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)) sq_SetCustomDamageType(obj, true, 0); + break; + } + switch(skillIndex[i]){ + case SKILL_SWORDMASTER_BYKK_ATFLASH: + obj.sq_IntVectClear(); + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_ATFLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE: + // obj.getVar("breaksworddance_tar").clear_obj_vector(); + // if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 7) > 0 || BREAKSWORDDANCE_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 34) > 0) obj.getVar("breaksworddance_stone").setBool(0, true); + // else obj.getVar("breaksworddance_stone").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_COUNTERSLASH: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(144, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_DEVILSLASH: + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ + obj.getVar("charge_devilslash").setInt(10, 2); + obj.getVar("chargeatk_devilslash").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + } + else{ + obj.getVar("charge_devilslash").setInt(10, 0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_DEVILSLASH); + obj.getVar("chargeatk_devilslash").setBool(0, false); + obj.getVar("isDash_devilslash").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + } + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_DRAGONUPEX: + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 20) > 0 || DRAGONUPEX_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 32) > 0) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_EXCALIBUR: + obj.sq_IntVectClear(); + if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_FUSIONBLADE: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_HALFMOON: + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ATFLASH, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 0); + local sub = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) sub = AddAppendage.getVar("elementIndex").getInt(10); + sizeRate = sizeRate * 150 / 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ATFLASH,3,totalDamage,sizeRate,-30,sub,0,0,0,0,1); + obj.getVar("halfmoon_max").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.getVar("halfmoon_max").setBool(0, false); + obj.getVar("halfmoon_bool").setBool(0, false); + obj.getVar("halfmoon_bool").setBool(1, false); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_HALFMOON); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_JACKCATCH: + obj.getVar("jackCatch_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 11) > 0 || JACKCATCH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 33) > 0) obj.sq_IntVectPush(7); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_LAEVATEINN: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_LAEVATEINN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT: + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) < 1 || MAGICSWORDSHOOT_STONE < 1) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_THUNDERSLASH: + obj.getVar("thunderslash_target").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_TIMESLASH: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_SWORDMASTER_BYKK_UPPERSLASH: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 86: + CheckUseAddloadDrawsword(obj,143,{[0] = true,[108] = true,[14] = true},0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(86, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 143: + CheckUseAddloadDrawsword(obj,143,{[0] = true,[108] = true,[14] = true},0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 32: + CheckUseAddloadDrawsword(obj,143,{[0] = true,[108] = true,[14] = true},0); + obj.sq_StopMove(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true); + local excount = 0; + if(sq_GetSkillLevel(obj, 58) > 0) excount = 2; + obj.getVar("Chainslash").clear_vector(); + obj.getVar("Chainslash").push_vector(sq_GetLevelData(obj,32, 2, sq_GetSkillLevel(obj, 32))-1 + excount); + break; + case 145: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(145, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + } + } + } + } + else obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD, 50, maxCount, coolTime); +} + +function onEnd_appendage_Drawsword_bykk(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD)) obj.sq_RemoveSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); +} + +function onStart_appendage_Overdrive_bykk(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + getDamageRate_Swordmaster_bykk(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE); + local CRITICAL_HIT_RATE = obj.sq_GetLevelData(SKILL_SWORDMASTER_BYKK_OVERDRIVE, 2, skill_level); + local CRITICAL_DAMAGE_RATE = obj.sq_GetLevelData(SKILL_SWORDMASTER_BYKK_OVERDRIVE, 1, skill_level); + local change_appendage = appendage.sq_getChangeStatus("Overdrive"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Overdrive",obj, obj, 0, 15, false, CRITICAL_HIT_RATE); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, CRITICAL_HIT_RATE.tofloat()); + //change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (CRITICAL_DAMAGE_RATE * 0.1 / 0.667).tofloat()); + } +} + +function getSkillbounsRate_bykk(obj, skillIndex2) +{ + local skillbonusRate = 100; + local weaponType = obj.getWeaponSubType(); + if(weaponType == 0 && obj.getVar("elementalsword").get_obj_vector_size() > 0){ + skillbonusRate = 100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 5, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY)) / 10; + print("skillbonusRate = "+skillbonusRate); + return skillbonusRate; + } + local apdPath = ["","character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut","character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; + local skillIndex = [-1,SKILL_SWORDMASTER_BYKK_BLADEMASTERY, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY]; + local buffnumber = [0,5,13,12]; + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath[weaponType])){ + if(weaponType == 1) skillbonusRate = 100 + sq_GetLevelData(obj, skillIndex[weaponType], buffnumber[weaponType], sq_GetSkillLevel(obj, skillIndex[weaponType])); + else skillbonusRate = 100 + sq_GetLevelData(obj, skillIndex[weaponType], buffnumber[weaponType], sq_GetSkillLevel(obj, skillIndex[weaponType])) / 10; + } + print("skillbonusRate = "+skillbonusRate); + return skillbonusRate; +} + + +function blademastery_buff(obj) +{ + local apdPath = "character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut"; + if(obj.getVar("Drawsword_skill").getBool(0)){ + obj.getVar("Drawsword_skill").setBool(0, false); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_BLADEMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + obj.getVar("Drawsword_skill").setBool(0, false); + } + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + } +} + +function checkExecutableSkill_Atflash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_ATFLASH); + if(isUse){ + obj.sq_IntVectClear(); + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_ATFLASH, STATE_PRIORITY_IGNORE_FORCE, true); + obj.startSkillCoolTime(SKILL_SWORDMASTER_BYKK_ATFLASH, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ATFLASH), -1); + return true; + } + return false; +} + +function checkCommandEnable_Atflash_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Atflash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [93,94,95]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [279,280,281]; + local effSet = ["flash1","flash2","flash3_flash2"]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_ATFLASH); + if(subState == 0){ + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 1); + } + else obj.sq_PlaySound("SW_FLASH"); +} + +function onEndCurrentAni_Atflash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_ATFLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Atflash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_Atflash_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Atflash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != STATE_SWORDMASTER_BYKK_ATFLASH){ + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0 && obj.getWeaponSubType() == 3) sq_SetCustomDamageType(obj, true, 0); + blademastery_buff(obj); + } +} + +function onKeyFrameFlag_Atflash_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 1: + case 2: + case 3: + case 4: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ATFLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ATFLASH).tofloat() / 100.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 0); + local sub = 4, level = sq_GetSkillLevel(obj, 174) + 5,prob = 0, time = 0, damage = 0; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) sub = AddAppendage.getVar("elementIndex").getInt(10); + if(sub < 4){ + local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ATFLASH); + switch(sub){ + case 0: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 3, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 5, skill_level); damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 4, skill_level); break; + case 1: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 7, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 9, skill_level); damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 8, skill_level); break; + case 2: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 15, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 17, skill_level); break; + case 3: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 11, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 13, skill_level); damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 12, skill_level); break; + } + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY); + prob = prob * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 2, skillLevel)) / 100; + damage = damage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 3, skillLevel)) / 100; + } + } + local roate = 0; + if(flagIndex == 4){sizeRate = sizeRate * 130 / 100; roate = 10}; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ATFLASH,flagIndex,totalDamage,sizeRate,roate,sub,level,prob,time,damage,1); + break; + } +} + +function onTimeEvent_Atflash_bykk(obj, timeEventIndex, timeEventCount) +{} + +function onProcCon_Atflash_bykk(obj) +{ + if(!obj) return; +} + +function onProc_Atflash_bykk(obj) +{ + if(!obj) return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Atspeedslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(145); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(145, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Atspeedslash_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Atspeedslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + + switch(subState){ + case 0: + obj.sq_StopMove(); + local aniSet = [73]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [317]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local effSet = ["SpeedSlash"]; + changeSwordEffect_bykk(obj, effSet[subState], 145); + obj.sq_SetCurrentAttackInfo(59); + local bonus = obj.sq_GetBonusRateWithPassive(145, -1, 0, 1.0) + 100; + obj.sq_SetCurrentAttackBonusRate(bonus); + local posX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), sq_GetLevelData(obj,145, 1, sq_GetSkillLevel(obj, 145))); + obj.getVar("Atspeedslash").clear_vector(); + obj.getVar("Atspeedslash").push_vector(posX); + obj.getVar("Atspeedslash").setBool(0,false); + setWeaponMaster_attackElement(obj); + break; + } +} + +function onEndCurrentAni_Atspeedslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Atspeedslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + MagicswordupOccur(obj, damager, boundingBox, isStuck); + //MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); + local path = "character/atswordman/1_swordmaster/atspeedslash/ap_atspeedslash.nut"; + local forceap = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); + if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)) + if(forceap){ + sq_HoldAndDelayDie(damager, obj, true, false, true, 200, 150, ENUM_DIRECTION_NEUTRAL, forceap); + local appendageInfo = forceap.getAppendageInfo(); + appendageInfo.setValidTime(500); + } + break; + } +} + +function onEnterFrame_Atspeedslash_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 3: + + break; + case 4: + + break; + } +} + +function onEndState_Atspeedslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != 145) + blademastery_buff(obj); +} + +function onChangeSkillEffect_Atspeedslash_bykk(obj, skillIndex, reciveData) +{ + if(!obj || skillIndex != 145) return; + if(obj.getVar("Atspeedslash").getBool(0)) + return; + obj.getVar("Atspeedslash").setBool(0,true); + local curani = obj.getCurrentAnimation(); + sq_SetAnimationCurrentTimeByFrame(curani, 5, true); +} + +function onKeyFrameFlag_Atspeedslash_bykk(obj, flagIndex) +{} + +function onTimeEvent_Atspeedslash_bykk(obj, timeEventIndex, timeEventCount) +{} + +function onProcCon_Atspeedslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 0: + if(obj.getVar("Atspeedslash").getBool(0)) + return; + + local curani = obj.getCurrentAnimation(); + local poleFrmIndex = obj.sq_GetCurrentFrameIndex(curani); + obj.setSkillCommandEnable(145, true); + if(obj.sq_IsEnterSkill(145) != -1 && poleFrmIndex < 4) + { + sq_BinaryStartWrite(); + sq_SendChangeSkillEffectPacket(obj, 145); + } + + + break; + } +} + +function onProc_Atspeedslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 0: + if(obj.getVar("Atspeedslash").getBool(0)) + break; + + local XPOS = obj.getVar("Atspeedslash").get_vector(0); + local curani = obj.getCurrentAnimation(); + + local aniSumTime = sq_GetDelaySum(curani); + local ststeTime = obj.sq_GetStateTimer(); + local CelXpos = sq_GetAccel(obj.getXPos(), XPOS, ststeTime, aniSumTime, false); + if(obj.isMovablePos(CelXpos, obj.getYPos())) + sq_setCurrentAxisPos(obj, 0, CelXpos); + + break; + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Breaksworddance_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE); + if (isUse){ + // obj.getVar("breaksworddance_tar").clear_obj_vector(); + // if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 7) > 0 || BREAKSWORDDANCE_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 34) > 0) obj.getVar("breaksworddance_stone").setBool(0, true); + // else obj.getVar("breaksworddance_stone").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Breaksworddance_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Breaksworddance_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + + obj.sq_StopMove(); + obj.sq_ZStop(); + if(subState >= 10){ + switch(subState){ + case 10: + obj.sq_SetCurrentAnimation(754); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + obj.getVar("breaksworddanceSet").setInt(0, speedRate); + local aniPath = ["passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/newatbreaksworddancefront_00.ani","passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/newatbreaksworddanceback_00.ani","passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/newatbreaksworddancebottom_00.ani"] + for(local i = 0; i < 3; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 375, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + } + obj.sq_SetXScrollStart(375, 200); + break; + case 11: + obj.sq_SetCurrentAnimation(752); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atbreaksworddance/newatbreaksworddancestarteffect_00.ani", -750, 0, 0); + sq_flashScreen(obj, 40, 120, 40, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj, 0, 600, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 120); + //[OFFSET] `EffectPos` 88 0 63 + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atbreaksworddance/newatbreaksworddancedasheffect_00.ani", 88, 0, 0); + obj.sq_SetCurrentAttackInfo(238); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 12: + obj.sq_SetCurrentAnimation(753); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + //[OFFSET] `EffectPos` 0 0 -47 + local speedRate = obj.getVar("breaksworddanceSet").getInt(0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atbreaksworddance/newatbreaksworddanceendeffect_00.ani", 0, 0, -47); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + sq_SetMyShake(obj, 5, 120); + obj.sq_SetCurrentAttackInfo(239); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 2); + obj.setTimeEvent(10, delay / 10, 8, true); + break; + } + return; + } + + local aniSet = [135,136,137,138,139,140,141,142,143]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [256,249,250,251,252,253,254,255,257]; + local effSet = ["breaksworddance_cast","breaksworddance_attack1","breaksworddance_attack2","breaksworddance_attack3","breaksworddance_attack4","breaksworddance_attack5","breaksworddance_attack6","breaksworddance_attack7","breaksworddance_finishattack"]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE); + local currentAni = obj.getCurrentAnimation(); + if(subState > 1){ + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + if(inputConut > 2) currentAni.setSpeedRate(180.0); + } + switch(subState){ + case 0: + local baseX = sq_GetXPos(obj); + local baseY = sq_GetYPos(obj); + local direction = obj.getDirection(); + local moveX = [0,600,200,390,400,220,600,0], moveY = [0,0,65,-65,65,-65,0,0]; + for(local i = 1; i < 8; i++){ + obj.getVar("breakSwordDance_move").setInt(20 + i, sq_GetDistancePos(baseX ,direction, moveX[i])); + obj.getVar("breakSwordDance_move").setInt(30 + i, baseY + moveY[i]); + } + obj.getVar("breakSwordDance_move").setInt(100, sq_GetXPos(obj)); + obj.getVar("breakSwordDance_move").setInt(101, sq_GetYPos(obj)); + local x = [100,100,200,200,300,400,400,500], y = [-25,15,-55,45,0,-55,45,0], sub = [7,8,5,2,1,3,4,6]; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,300,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,1,0,0,0,0,0,0,0,0,0); + for(local i = 0; i < x.len(); i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[i],y[i],0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,2,sub[i],0,0,0,0,0,0,0,0); + } + local flashObj = sq_flashScreen(obj,100,999999,0,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("breakSwordDance_flash").clear_obj_vector(); + obj.getVar("breakSwordDance_flash").push_obj_vector(flashObj); + break; + case 1: + obj.getVar("breakSwordDance_move").setInt(1, sq_GetXPos(obj)); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0,1); + obj.setTimeEvent(1, delaySum / 11, 10, false); + break; + case 8: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0,2); + obj.setTimeEvent(2, delaySum, 1, false); + local circleObj = obj.getVar("breakSwordDance_circle").get_obj_vector(0); + if(circleObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(circleObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + break; + } + if(subState > 1 && subState < 8){ + local moveX = obj.getVar("breakSwordDance_move").getInt(20 + subState); + local moveY = obj.getVar("breakSwordDance_move").getInt(30 + subState); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 1, moveY); + if(subState % 2 == 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbreaksworddance/atbreaksworddance_dash_dust.ani", 0, 0, 0); + else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbreaksworddance/atbreaksworddance_dash_dust2.ani", 0, 0, 0); + } + if(subState > 0 && subState <= 8){ + local swrodObj = obj.getVar("breakSwordDance_sword"+subState.tostring()).get_obj_vector(0); + if(swrodObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } +} + +function onEndCurrentAni_Breaksworddance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 10: + case 11: + if(subState == 7) sq_setCurrentAxisPos(obj, 2, 200); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 12: + case 8: + sq_SimpleMoveToNearMovablePos(obj, 1200); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Breaksworddance_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_Breaksworddance_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("BREAK_SWORDDANCE_CAST"); + obj.sq_PlaySound("SW_BREAK_SWORDDANCE_01"); + break; + } + break; + case 1: + switch(frameIndex){ + case 0: obj.sq_PlaySound("BREAK_SWORDDANCE_MOVE"); break; + } + break; + case 8: + switch(frameIndex){ + case 0: obj.sq_PlaySound("SW_BREAK_SWORDDANCE_02"); break; + } + break; + } +} + +function onEndState_Breaksworddance_bykk(obj, newState) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + + if(newState != SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE){ + obj.sq_SetXScrollStop(100); + local flashScreenObj = obj.getVar("breakSwordDance_flash").get_obj_vector(0); + if(flashScreenObj){ + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + } + sq_flashScreen(obj,0,0,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + blademastery_buff(obj); + local includeState = [2,3,4,5,9]; + for(local i = 0; i < includeState.len(); i++){ + if(newState == includeState[i]){ + local subState = 0; + local circleObj = obj.getVar("breakSwordDance_circle").get_obj_vector(0); + if(circleObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(circleObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + for(local i = subState; i < 9; i++){ + local swrodObj = obj.getVar("breakSwordDance_sword"+i.tostring()).get_obj_vector(0); + if(swrodObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + } + } + } +} + +function onProc_Breaksworddance_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Breaksworddance_bykk(obj, flagIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(flagIndex){ + case 1: + obj.sq_PlaySound("R_SW_BREAK_SWORDDANCE_ATK"); + local shekepower = [0,5,5,16,5,16,5,5,5], sheketime = [0,300,300,120,300,120,300,360,360], flash_alpha = [0,76,102,76,102,76,102,76,178]; + sq_flashScreen(obj, 0, 60, 0, flash_alpha[subState], sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + if(subState >= 1 && subState < 6) sq_SetMyShake(obj, shekepower[subState], sheketime[subState]); + else if(subState >= 6 && subState < 8) sq_SetShake(obj, shekepower[subState], sheketime[subState]); + local x = [0,-210,147,-99,-153,142,-234,250,250], y = [0,0,0,0,0,0,0,0,0], z = [0,61,156,-47,94,-75,12,55,0]; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0) + 100; + local element = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 8); + if(subState >= 1 && subState <= 7) + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[subState],y[subState],z[subState],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,10,totalDamage,element,sizeRate,0,0,0,0,0,1); + else if(subState == 8){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, 1.0) + 100; + if(obj.getVar("breaksworddance_stone").getBool(0)){ + totalDamage = totalDamage * 250 / 100; + sizeRate = sizeRate + 30; + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[subState],y[subState] + 1,z[subState]-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,11,totalDamage,sizeRate,0,0,0,0,0,0,1); + } + break; + case 11: + sq_flashScreen(obj, 300, 300, 100, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 6, 240); + break; + case 12: + local xPos = sq_GetXPos(obj); + obj.getVar("breakSwordDance_setmove").setInt(0, xPos); + local dstX = sq_GetDistancePos(xPos, sq_GetDirection(obj), 750); + sq_setCurrentAxisPos(obj, 0, dstX); + obj.sq_SetCurrentAttackInfo(237); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("SWORDMASTER_BREAK_SWORDDANCE_DASH_OUT"); + obj.sq_PlaySound("SW_BREAK_SWORDDANCE_02"); + break; + case 21: + sq_flashScreen(obj, 40, 120, 50, 102, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local xPos = obj.getVar("breakSwordDance_setmove").getInt(0); + sq_setCurrentAxisPos(obj, 0, xPos); + break; + } +} + +function onTimeEvent_Breaksworddance_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local v = sq_GetUniformVelocity(obj.getVar("breakSwordDance_move").getInt(1), obj.getVar("breakSwordDance_move").getInt(21), timeEventCount, 10); + sq_setCurrentAxisPos(obj, 0, v); + if(timeEventCount >= 10 && obj.getVar("breaksworddance_stone").getBool(0)){ + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbreaksworddance/atbreaksworddance_jump_dust.ani", 0, 0, 0); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50)); + sq_setCurrentAxisPos(obj, 2, 200); + obj.setTimeEvent(4, 600, 1, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(8); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(3,3); + obj.getVar("breakSwordDance_move").setInt(3, sq_GetZPos(obj)); + obj.setTimeEvent(3, delaySum / 20, 20, false); + break; + case 3: + local v = sq_GetUniformVelocity(obj.getVar("breakSwordDance_move").getInt(3), 0, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 4: + for(local i = 1; i < 9; i++){ + local swrodObj = obj.getVar("breakSwordDance_sword"+i.tostring()).get_obj_vector(0); + if(swrodObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + break; + case 10: obj.resetHitObjectList(); break; + } +} + +function onProcCon_Breaksworddance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState <= 7){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Changesword_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_CHANGESWORD); + + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_SWORDMASTER_BYKK_CHANGESWORD); + obj.sq_IntVectPush(sq_GetCastTime(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD))); + obj.sq_IntVectPush(500); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(4); + obj.sq_IntVectPush(4); + obj.sq_IntVectPush(1000); + obj.sq_IntVectPush(1000); + obj.sq_IntVectPush(-1); + obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true); + + obj.sq_PlaySound("R_SW_CHANGESWORD"); + return true; + } + return false; +} + +function checkCommandEnable_Changesword_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Changesword_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + + switch(subState){ + case 100: + local throwIndex = obj.sq_GetVectorData(datas, 1); + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(!AddAppendage){ + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD, false, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut", true); + } + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_CHANGESWORD, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD)); + AddAppendage.setEnableIsBuff(true); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + AddAppendage.setBuffIconImage(58); + if(throwIndex < 100){//0短1太2钝3巨 + AddAppendage.getVar("elementIndex").setInt(10, throwIndex); + } + else{ + local element = AddAppendage.getVar("elementIndex").getInt(10); + AddAppendage.getVar("elementIndex").setInt(10, throwIndex - 100); + if(obj.getVar("elementalsword").get_obj_vector_size() < 1){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-50,0,30,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,0,element,0,0,0,0,0,0,0,0); + } + else{ + if(throwIndex - 100 == element) break; + local effectObj = obj.getVar("elementalsword").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.getVar("changeSword").setInt(11,element); + switch(element){ + case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; + case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; + case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; + case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; + } + colObj.setTimeEvent(100, 200, 1, false); + } + } + + } + switch(throwIndex){ + case 0: obj.sq_SetCurrentAnimation(68);changeSwordEffect_bykk(obj, "ChangeSwordFire", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 1: obj.sq_SetCurrentAnimation(69);changeSwordEffect_bykk(obj, "ChangeSwordIce", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 2: obj.sq_SetCurrentAnimation(70);changeSwordEffect_bykk(obj, "ChangeSwordDark", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 3: obj.sq_SetCurrentAnimation(71);changeSwordEffect_bykk(obj, "ChangeSwordLight", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 100: obj.sq_SetCurrentAnimation(261);changeSwordEffect_bykk(obj, "ChangeSwordFire", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 101: obj.sq_SetCurrentAnimation(262);changeSwordEffect_bykk(obj, "ChangeSwordIce", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 102: obj.sq_SetCurrentAnimation(260);changeSwordEffect_bykk(obj, "ChangeSwordDark", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + case 103: obj.sq_SetCurrentAnimation(263);changeSwordEffect_bykk(obj, "ChangeSwordLight", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; + } + local timer = obj.getVar("isChangeSword").get_ct_vector(0); + if(!timer){ + obj.getVar("isChangeSword").clear_ct_vector(); + obj.getVar("isChangeSword").push_ct_vector(); + timer = obj.getVar("isChangeSword").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + break; + case 101: + obj.sq_SetCurrentAnimation(347); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Changesword_bykk(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Changesword_bykk(obj) +{ + if(!obj) return; +} + +function drawChangeswordCommon_bykk(obj) +{ + local index = obj.getVar("ChangeswordCurId").getInt(0); + local obj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(index == 0 || obj.getWeaponSubType() != 0 || sq_GetSkillLevel(obj, 4) < 1) + return; + + local drawpath = [ + "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordloop_01.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordloop_01.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordloop_01.ani", + "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordloop_01.ani" + ]; + local aniarr = ["ChangeswordFire","ChangeswordIce","ChangeswordDark","ChangeswordLight"]; + + local add = 1; + if(obj.getDirection() == 1) + add = -1; + local width = sq_GetWidthObject(obj); + local height = sq_GetHeightObject(obj); + local screenX = sq_GetScreenXPos(obj) + add*50;// - (width / 2); + local screenY = sq_GetScreenYPos(obj) - 50; + + local sq_var = obj.getVar(); + local AniObj2 = sq_var.GetAnimationMap(aniarr[index - 1], drawpath[index - 1]); + sq_AnimationProc(AniObj2); + sq_drawCurrentFrame(AniObj2, screenX,screenY, false); + + return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Counterslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(144); + + if (isUse) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(144, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Counterslash_bykk(obj) +{ + if (!obj) return false; + local apPath = "character/atswordman/1_swordmaster/counterslash/ap_counterslash.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apPath)) + return true; + return false; + +} + +function onSetState_Counterslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + + switch(subState) + { + case 0: + obj.sq_StopMove(); + BodyMagicSword(obj, "CounterSlash"); + if(MagicSword_IsAppebd(obj)) + obj.sq_SetCurrentAnimation(264); + else + obj.sq_SetCurrentAnimation(72); + obj.sq_SetCurrentAttackInfo(0); + local bonus = obj.sq_GetBonusRateWithPassive(144, -1, 0,getATSwordmanBonus(obj,1.0,144)); + obj.sq_SetCurrentAttackBonusRate(bonus); + setWeaponMaster_attackElement(obj); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Counterslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Counterslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + local subState = obj.getSkillSubState(); + MagicswordupOccur(obj, damager, boundingBox, isStuck); + MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); + +} + +function onProc_Counterslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); +} + +function onEnterFrame_Counterslash_bykk_bykk(obj, frameIndex) +{} + +function onEndState_Counterslash_bykk(obj, newState) +{} + +function onKeyFrameFlag_Counterslash_bykk(obj, flagIndex) +{} + +function onTimeEvent_Counterslash_bykk(obj, timeEventIndex, timeEventCount) +{} + +function onProcCon_Counterslash_bykk(obj) +{} diff --git a/user/116.205.165.25/3_atswordman_7.c b/user/116.205.165.25/3_atswordman_7.c new file mode 100644 index 0000000..323cd75 --- /dev/null +++ b/user/116.205.165.25/3_atswordman_7.c @@ -0,0 +1,3300 @@ + + +function checkExecutableSkill_Devilslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_DEVILSLASH); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_DEVILSLASH); + obj.getVar("chargeatk_devilslash").setBool(0, false); + obj.getVar("isDash_devilslash").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Devilslash_bykk(obj) +{ + if (!obj) return false; + return true; + +} + +function onSetState_Devilslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [99,100,101,102,103,756,755]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [267,268,269,270,271,758,757]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + if(subState >= 3) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local element = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + local effSet = [["effect/animation/atdevilslash/"],["nothing/","nothing/","nothing/","nothing/","nothing/","fire/","ice/","dark/","light/","nothing/"],["charge_body_1.ani","charge_body_2.ani","charge_body_3.ani","charge_body_1.ani","dash_body.ani"]]; + local effectSet = ["devilslashcharge1","devilslashcharge2","devilslashcharge3","devilslashdash","devilslashmultiattack","newatdevilslashnormalfinish","newatdevilslashchargefinishbody"]; + changeSwordEffect_bykk(obj, effectSet[subState], SKILL_SWORDMASTER_BYKK_DEVILSLASH); + + if(subState <= 4){ + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(effSet[0][0]+effSet[1][element]+effSet[2][subState]), 0, 0); + } + switch(subState){ + case 0: + obj.sq_PlaySound("SW_COUNTERSLASH"); + break; + case 3: + obj.getVar("devilslash").setInt(10, sq_GetXPos(obj)); + obj.getVar("devilslash").setInt(11, 200); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + obj.setTimeEvent(10, delay / 5, 15, true); + break; + case 4: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + if(inputConut > 2) obj.getVar("chargeatk_devilslash").setBool(0, true); + obj.sq_PlaySound("SW_DEVILSLASH"); + obj.sq_PlaySound("DEVILSLASH_LOOP",2000); + local dam = 0, min = 4, max = 5; + switch(obj.getVar("charge_devilslash").getInt(10)){ + case 1: dam = 1; min = 6; max = 7; break; + case 2: dam = 2; min = 8; max = 9; break; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, dam, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, min); + if(obj.getVar("chargeatk_devilslash").getBool(0)) hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, max); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 17); + if(obj.getVar("charge_devilslash").getInt(10) == 2 && obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; + sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; + local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2); + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + obj.sq_SetSuperArmorUntilTime(obj, bufftime); + } + } + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + obj.getVar("develslash_multi").setInt(0, totalDamage); + obj.getVar("develslash_multi").setInt(1, hitMax); + obj.getVar("develslash_multi").setInt(2, sizeRate); + obj.getVar("develslash_multi").setInt(3, speedRate); + obj.getVar("develslash_multi").setInt(4, 0); + // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,1,totalDamage,hitMax,4,speedRate,sizeRate,0,0,0,1); + break; + case 5: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 3, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100; + if(obj.getVar("charge_devilslash").getInt(10) > 0) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 4, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + // local effectSet = [["effect/animation/atdevilslash/fire/finish2_mu.ani","effect/animation/atdevilslash/fire/finish2_slash_fire.ani"],["effect/animation/atdevilslash/ice/finish2_ice.ani","effect/animation/atdevilslash/ice/finish2_slash_ice.ani"],["effect/animation/atdevilslash/dark/finish2_dark_n.ani","effect/animation/atdevilslash/dark/finish2_dark.ani","effect/animation/atdevilslash/dark/finish2_slash_dark.ani"],["effect/animation/atdevilslash/light/finish2_light.ani","effect/animation/atdevilslash/light/finish2_slash_light.ani"],["effect/animation/atdevilslash/nothing/finish2_mu.ani","effect/animation/atdevilslash/nothing/finish2_slash_mu.ani"]]; + // for(local i = 0; i < effectSet[4].len(); i++){ + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectSet[4][i]), 0, 0); + // } + break; + case 6: + // local effectSet = ["effect/animation/atdevilslash/fire/napdo_body_mu.ani","effect/animation/atdevilslash/ice/napdo_body_mu.ani","effect/animation/atdevilslash/dark/napdo_body_mu.ani","effect/animation/atdevilslash/light/napdo_body_mu.ani","effect/animation/atdevilslash/nothing/napdo_body_mu.ani"]; + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectSet[4]), 0, 0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 7); + local delay2 = currentAni.getDelaySum(8, 15); + local delay3 = currentAni.getDelaySum(16, 19); + sq_flashScreen(obj, delay, 100, delay2, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } +} + +function onEndCurrentAni_Devilslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.getVar("charge_devilslash").setInt(10, 2); + obj.getVar("chargeatk_devilslash").setBool(0, true); + obj.sq_IntVectClear(); + if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 4: + switch(obj.getVar("charge_devilslash").getInt(10)){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(6); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + case 5: + case 6: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + + } +} + +function onChangeSkillEffect_Devilslash_bykk(obj, skillIndex, receiveData) +{ + if(!obj || skillIndex != 136) return; +} + +function onEnterFrame_Devilslash_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 6: + switch(frameIndex){ + case 8: + // obj.stopSound(2000); + // obj.sq_PlaySound("SW_DEVILSLASH_FIN"); + // obj.sq_PlaySound("DEVILSLASH_EXP"); + // sq_SetMyShake(obj, 8, 300); + // local element = 4; + // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + // if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + // local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100; + // local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18); + // if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ + // totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; + // sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; + // } + // // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1); + // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,11,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + } + break; + } +} + +function onAttack_Devilslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; +} + +function onEndState_Devilslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_DEVILSLASH){ + sq_SimpleMoveToNearMovablePos(obj,1600); + obj.stopSound(2000); + blademastery_buff(obj); + } +} + +function onProcCon_Devilslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local stateTime = obj.sq_GetStateTimer(); + local bDownKey = obj.isDownSkillLastKey(); + local currentAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(currentAni); + switch(subState){ + case 0: + case 1: + case 2: + if(obj.getVar("isDash_devilslash").getBool(0) == false){ + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ + obj.getVar("isDash_devilslash").setBool(0, true); + } + } + + if(!bDownKey && stateTime >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 14)){ + obj.getVar("charge_devilslash").setInt(10, subState); + local delaySum = currentAni.getDelaySum(false); + //if(currentT >= delaySum * 70 / 100) obj.getVar("chargeatk_devilslash").setBool(0, true); + obj.sq_IntVectClear(); + if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + else{ + if((subState == 0 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 0)) || (subState == 1 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 1))|| (subState == 2 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 2) * 430)){ + if(subState == 2){ + obj.getVar("charge_devilslash").setInt(10, 2); + //obj.getVar("chargeatk_devilslash").setBool(0, true); + obj.sq_IntVectClear(); + if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + case 3: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + } +} + +function onProc_Devilslash_bykk(obj) +{ + if(!obj) return; +} + +function onTimeEvent_Devilslash_bykk(obj, timeEventIndex, timeEventCount) +{ + if (!obj) return false; + switch(timeEventIndex){ + case 10: + local v = sq_GetUniformVelocity(0, obj.getVar("devilslash").getInt(11), timeEventCount, 15); + local dstX = sq_GetDistancePos(obj.getVar("devilslash").getInt(10), obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + case 11: + switch(obj.getVar("charge_devilslash").getInt(10)){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(6); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } + return true; +} + +function onKeyFrameFlag_Devilslash_bykk(obj, flagIndex) +{ + if (!obj) return false; + switch(flagIndex){ + case 11: + sq_flashScreen(obj, 0, 30, 270, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 7, 240); + break; + case 21: + //[OFFSET] `Create Finish` 43 0 103 + obj.stopSound(2000); + obj.sq_PlaySound("SW_DEVILSLASH_FIN"); + obj.sq_PlaySound("DEVILSLASH_EXP"); + sq_SetMyShake(obj, 8, 300); + // local element = 4; + // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + // if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18); + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; + sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; + } + local speedRate = obj.getVar("develslash_multi").getInt(3); + // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,43,0,103,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,11,totalDamage,sizeRate,speedRate,0,0,0,0,0,1); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atdevilslash/newatdevilslashchargeattackeffect_00.ani", 43, 0, 103); + break; + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + local hitCount = obj.getVar("develslash_multi").getInt(4); + local totalDamage = obj.getVar("develslash_multi").getInt(0); + local hitMax = obj.getVar("develslash_multi").getInt(1); + print("hitCount = "+hitCount+",,hitMax = "+hitMax); + if(hitCount + 1 >= hitMax){ + obj.setTimeEvent(11, 100, 1, true); + break; + } + else obj.getVar("develslash_multi").setInt(4, hitCount + 1); + local sizeRate = obj.getVar("develslash_multi").getInt(2); + local speedRate = obj.getVar("develslash_multi").getInt(3); + local offSet = [[51,0,56],[80,0,86],[51,0,46],[100,0,85],[61,0,56],[68,0,50]]; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,offSet[flagIndex - 31][0],offSet[flagIndex - 31][1],offSet[flagIndex - 31][2],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,10,totalDamage,speedRate,sizeRate,flagIndex,0,0,0,0,1); + break; + } + return true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Dragonupex_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_DRAGONUPEX); + if (isUse){ + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX); + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 20) > 0 || DRAGONUPEX_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 32) > 0 || skill.isSealFunction()) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Dragonupex_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Dragonupex_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [111,112,113,114]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [272,274,273,275]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + local effSet = ["dragonupexcasting","dragonupexdash","dragonupexcutting","dragonupexfrontdash"]; + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_DRAGONUPEX); + if(subState == 1 || subState == 3){ + obj.getVar("dragonupex_move").setInt(10, sq_GetXPos(obj)); + local timeEventMax = 10, moveMax = 200; + if(subState == 3){timeEventMax = 30, moveMax = 300;} + obj.setTimeEvent(10, 10, timeEventMax, true); + obj.getVar("dragonupex_move").setInt(11, moveMax); + obj.getVar("dragonupex_move").setInt(12, timeEventMax); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 234)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/dragonupexfrontdash_dust.ani", 0, 0, 0); + } + if(subState == 3){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 0); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 17) + 30; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,75,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,2,totalDamage,hitMax,totalDamage2,sizeRate,0,0,0,0,1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,15,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,3,0,0,0,0,0,0,0,0,0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/atdragonuptalismanhandeffect_00.ani", 0, 0, 0); + sq_moveWithParent(obj, pooledObj); + for(local i = 1; i < 7; i++){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/atdragonuptalismanbody_0"+i.tostring()+".ani", 0, 0, 0); + } + } +} + +function onEndCurrentAni_Dragonupex_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Dragonupex_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + local subState = obj.getSkillSubState(); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.isExistTimeEvent(10)) obj.stopTimeEvent(10); + if(subState == 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onEnterFrame_Dragonupex_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Dragonupex_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_DRAGONUPEX){ + blademastery_buff(obj); + sq_SimpleMoveToNearMovablePos(obj,300); + } +} + +function onKeyFrameFlag_Dragonupex_bykk(obj, flagIndex) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(flagIndex == 1000){ + obj.sq_PlaySound("SW_SPOUT"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 0); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 17); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,1,totalDamage,hitMax,totalDamage2,sizeRate,0,0,0,0,1); + } + break; + } +} + +function onTimeEvent_Dragonupex_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 10: + local v = sq_GetUniformVelocity(0, obj.getVar("dragonupex_move").getInt(11), timeEventCount, obj.getVar("dragonupex_move").getInt(12)); + local dstX = sq_GetDistancePos(obj.getVar("dragonupex_move").getInt(10), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= obj.getVar("dragonupex_move").getInt(12) && obj.getVar("dragonupex_move").getInt(12) < 30){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onProcCon_Dragonupex_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState) + { + case 1: + if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) + obj.sq_SetStaticMoveInfo(0, 0, 0, false); + else if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) + obj.sq_SetStaticMoveInfo(0, 0, 0, false); + if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) + obj.sq_SetStaticMoveInfo(0, 3800, -1000, false); + else if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) + obj.sq_SetStaticMoveInfo(0, 3800, -1000, false); + break; + } +} + +function onProc_Dragonupex_bykk(obj) +{ + if(!obj) return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Excalibur_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_EXCALIBUR); + if (isUse){ + obj.sq_IntVectClear(); + if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Excalibur_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Excalibur_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + if(subState >= 10){ + switch(subState){ + case 10: + obj.sq_SetCurrentAnimation(750); + obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation("effect/animation/10_atswordman_bykk/atexcalibur/newatexcaliburbeffect_00.ani"), 0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atexcalibur/newatexcaliburbbottom_00.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + obj.sq_SetCurrentAttackInfo(241); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 11: + obj.sq_SetCurrentAnimation(751); + obj.sq_SetCurrentAttackInfo(243); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("SW_EXCALIBUR"); + break; + } + return; + } + obj.sq_SetStaticMoveInfo(0, 20 * (3 - subState), 30 * (3 - subState), false); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + local aniSet = [96,97,98]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [276,277,278]; + local atkSet = [66,67,68]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_SetCurrentAttackInfo(atkSet[subState]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + + local effSet = [["effect/animation/atexcalibur/excalibur1_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur1_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur1_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur1_light_slash_light.ani","effect/animation/atexcalibur/excalibur1_mu_slash_mu.ani"],["effect/animation/atexcalibur/excalibur2_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur2_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur2_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur2_light_slash_light.ani","effect/animation/atexcalibur/excalibur2_mu_slash_mu.ani"],["effect/animation/atexcalibur/excalibur3_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur3_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur3_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur3_light_slash_light.ani","effect/animation/atexcalibur/excalibur3_mu_slash_mu.ani"]]; + local element = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation(effSet[subState][element]), 0, 0); + //if(subState == 2) obj.sq_PlaySound("SW_EXCALIBUR"); +} + +function onEndCurrentAni_Excalibur_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + case 11: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Excalibur_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_Excalibur_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Excalibur_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_EXCALIBUR){ + blademastery_buff(obj); + } +} + +function onProcCon_Excalibur_bykk(obj) +{ + if(!obj) return; + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)) obj.sq_SetStaticMoveInfo(0, 0, 0, false); +} + +function onProc_Excalibur_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); +} + +function onKeyFrameFlag_Excalibur_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100; + local element = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + local baseX = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 2) - 50; + local randomX = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 3), randomY = 35; + local createMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 4); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 9); + + local sub = 0, baseT = 0; + if(createMax > 8) baseT = baseT * 8 / createMax; + if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ + sub = 1 + local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY); + randomX = randomX * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 12, skillLevel)) / 100; + randomY = randomY * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 12, skillLevel)) / 100; + sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 3, skillLevel) / 100; + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 6, skillLevel)) / 100; + totalDamage2 = totalDamage2 * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 6, skillLevel)) / 100; + baseT = 0; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0 - sizeRate,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,3,totalDamage2,sizeRate,0,0,0,0,0,0,1); + } + for(local i = 0; i < createMax; i++){ + local x = baseX + sq_getRandom(-randomX, randomX), y = sq_getRandom(-randomY, randomY); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x,y,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,1,totalDamage,element,(i + 1) * baseT,totalDamage2,sub,0,0,0,1); + } + break; + case 11: sq_SetMyShake(obj, 5, 120); break; + case 12: + obj.sq_SetCurrentAttackInfo(242); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 21: + sq_SetMyShake(obj, 8, 240); + //[OFFSET] `create explosion` 150 0 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 9); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,10,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + case 22: + sq_flashScreen(obj, 0, 40, 320, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } +} + +function onTimeEvent_Excalibur_bykk(obj, timeEventIndex, timeEventCount) +{} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Halfmoon_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_HALFMOON); + if (isUse){ + obj.getVar("halfmoon_max").setBool(0, false); + obj.getVar("halfmoon_bool").setBool(0, false); + obj.getVar("halfmoon_bool").setBool(1, false); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_HALFMOON); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Halfmoon_bykk(obj) +{ + if (!obj) return false; + return true; + +} + +function onSetState_Halfmoon_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [90,92,91]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [282,284,283]; + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(aniSet[subState]); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athalfmoon/attack_dust.ani", 0, -1, 0); + changeSwordEffect_bykk(obj, "halfmoon1", SKILL_SWORDMASTER_BYKK_HALFMOON); + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 1); + obj.getVar("halfmoonBool").setBool(0, false); + obj.getVar("halfmoonBool").setBool(1, false); + break; + case 1: + obj.sq_SetCurrentAnimation(aniSet[subState]); + changeSwordEffect_bykk(obj, "halfmoon3", SKILL_SWORDMASTER_BYKK_HALFMOON); + break; + case 2: + obj.sq_SetCurrentAnimation(aniSet[subState]); + changeSwordEffect_bykk(obj, "halfmoon2", SKILL_SWORDMASTER_BYKK_HALFMOON); + obj.sq_PlaySound("HALFMOON"); + obj.sq_PlaySound("SW_HALFMOON"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_HALFMOON, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_HALFMOON).tofloat() / 100.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 10); + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 3); + if(obj.getVar("halfmoon_max").getBool(0)){ + totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 5)) / 100; + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; + totalDamage = totalDamage * hitMax; + hitMax = 1; + sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; + local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2); + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + obj.sq_SetSuperArmorUntilTime(obj, bufftime); + } + } + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 1); + local speedRate = 6000 / delay; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_HALFMOON,1,totalDamage,sizeRate,speedRate,hitMax,0,0,0,0,1); + local movespeed = 500; + if(obj.getVar("halfmoon_max").getBool(0)) movespeed = 600; + obj.getVar("halfmoon_move").setInt(10, movespeed); + if(obj.getVar("halfmoonBool").getBool(1)) break; + obj.sq_SetStaticMoveInfo(0, movespeed, movespeed, false); + obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_NEUTRAL); + break; + } +} + +function onEndCurrentAni_Halfmoon_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Halfmoon_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + // local subState = obj.getSkillSubState(); + // MagicswordupOccur(obj, damager, boundingBox, isStuck); + // MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); +} + +function onEnterFrame_Halfmoon_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onEndState_Halfmoon_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_HALFMOON){ + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 0); + blademastery_buff(obj); + } +} + +function onProcCon_Halfmoon_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(obj.getVar("halfmoonBool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("halfmoonBool").setBool(0, true); + obj.getVar("halfmoonBool").setBool(1, true); + } + } + local bDownKey = obj.isDownSkillLastKey(); + local stateTime = obj.sq_GetStateTimer(); + local minTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 4); + if(!bDownKey && stateTime > minTime){ + local maxTime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HALFMOON)); + if(subState == 1) maxTime = 0; + if(stateTime > maxTime){ + obj.getVar("halfmoon_max").setBool(0, true); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onProc_Halfmoon_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(obj.getVar("halfmoonBool").getBool(1)) break; + if(obj.getVar("halfmoon_bool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + local movespeed = obj.getVar("halfmoon_move").getInt(10) * 2 / 5; + obj.sq_SetStaticMoveInfo(1, movespeed, movespeed, false); + obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_UP); + obj.getVar("halfmoon_bool").setBool(0, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + local movespeed = obj.getVar("halfmoon_move").getInt(10) * 2 / 5; + obj.sq_SetStaticMoveInfo(1, movespeed, movespeed, false); + obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_DOWN); + obj.getVar("halfmoon_bool").setBool(0, true); + } + } + + if(obj.getVar("halfmoon_bool").getBool(1) == false){ + if ((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)){ + obj.getVar("halfmoon_bool").setBool(1, true); + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)){ + local movespeed = obj.getVar("halfmoon_move").getInt(10); + obj.sq_SetStaticMoveInfo(0, -movespeed, -movespeed, false); + obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_NEUTRAL); + obj.getVar("halfmoon_bool").setBool(1, true); + } + } + break; + } +} + +function onKeyFrameFlag_Halfmoon_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onTimeEvent_Halfmoon_bykk(obj, timeEventIndex, timeEventCount) +{} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_fusionblade_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_FUSIONBLADE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_fusionblade_bykk(obj) +{ + if (!obj) return false; + return true; + +} + +function onSetState_fusionblade_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [740,741]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + switch(subState){ + case 0:// + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/atfusionblade/atfusionbladepiercingfront_00.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atfusionblade/atfusionbladehitwavefront_00.ani", 250, 0, 75); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 10); + obj.getVar("fusionblade").setInt(10, sq_GetXPos(obj)); + obj.setTimeEvent(1, delay, 1, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 235)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + sq_flashScreen(obj, 720, 600, 200, 216, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + local appendage = obj.getVar().getAppendage(0); + if(appendage) appendage.setValid(false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE, 12); + sq_SetMyShake(obj, 15, 60); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,262,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,1,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + } +} + +function onEndCurrentAni_fusionblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_fusionblade_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_fusionblade_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 4: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100; + local angle = [0,-5,-10,-15]; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 10); + local delay2 = currentAni.getDelaySum(11, 13); + for(local i = 0; i < 4; i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-50,0,(i+1)*50,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,3,i,delay,i*delay2,angle[i],totalDamage,0,0,0,1); + } + break; + case 12: + sq_SetMyShake(obj, 5, 200); + local appendage = sq_AttractToMe(obj, 500, 262, 1000); + obj.getVar().setAppendage(0,appendage);//设置ap + break; + case 14: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atfusionblade/atfusionbladestartaurafront_00.ani", 250, 0, 75); + break; + } + break; + } +} + +function onEndState_fusionblade_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_FUSIONBLADE){ + local appendage = obj.getVar().getAppendage(0); + if(appendage) appendage.setValid(false); + blademastery_buff(obj); + } +} + +function onProcCon_fusionblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex < 11 && obj.getVar("fusionblade").getBool(0) == false){ + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection()== ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("fusionblade").setBool(0, true); + } + break; + } +} + +function onProc_fusionblade_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_fusionblade_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onTimeEvent_fusionblade_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(11, 15); + obj.setTimeEvent(2, delay / 20, 20, false); + break; + case 2: + local moveX = 100; + if(obj.getVar("fusionblade").getBool(0)) moveX = 180; + local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20); + local dstX = sq_GetDistancePos(obj.getVar("fusionblade").getInt(10), obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Illusionblade_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Illusionblade_bykk(obj) +{ + if (!obj) return false; + return true; + +} + +function onSetState_Illusionblade_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [82,83]; + local effSet = ["illusionblade","illusionblade2"]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [285,286]; + + obj.sq_SetCurrentAnimation(aniSet[subState]); + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Illusionblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE).tofloat() / 100.0) + 100; + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 1, 1.0) + 100; + local speedRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, 1); + if(obj.getWeaponSubType() == 2){ + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE).tofloat() / 100.0) + 100; + totalDamage2 = totalDamage2 * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 5, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, 1) * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 2, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)) / 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,2,totalDamage,hitMax,totalDamage2,sizeRate,speedRate,0,0,0,1); + } + else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,1,totalDamage,hitMax,speedRate,0,0,0,0,0,1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + blademastery_buff(obj); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Illusionblade_bykk(obj, timeEventIndex, timeEventCount) +{} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Jackcatch_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_JACKCATCH); + if (isUse){ + obj.getVar("jackCatch_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 11) > 0 || JACKCATCH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 33) > 0) obj.sq_IntVectPush(7); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Jackcatch_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Jackcatch_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local aniSet = [133,134,128,129,130,131,132,127]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [293,294,300,298,299,295,297,292]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + local effSet = ["jackcatchcast","jackcatchslash","jackcatch_light","jackcatch_fire","jackcatch_ice","jackcatch_dark","jackcatch_finish","jackcatch"]; + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_JACKCATCH); + local soundSet = ["","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","","SW_REQUIEM"]; + if(soundSet[subState] != "") obj.sq_PlaySound(soundSet[subState]); + obj.getVar("jackcatch_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("jackcatch_move").setInt(11, sq_GetYPos(obj)); + obj.getVar("jackcatch_move").setInt(12, sq_GetZPos(obj)); + if(subState > 1 && subState <= 6){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0,0); + local speedRate = 80.0 / delay.tofloat(); + local time = (10.0 / speedRate).tointeger(); + obj.setTimeEvent(1, time, 10, true); + } + switch(subState){ + case 0: + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0,0); + local speedRate = 10000 / delay; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,1,speedRate,0,0,0,0,0,0,0,0); + local baseX = [0,65,-65,0], baseY = [0,60,-60,0]; + for(local i = 0; i < 4; i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250 + baseX[i],baseY[i],0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,2,i,speedRate,0,0,0,0,0,0,0); + } + break; + case 1: + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + local size = obj.getVar("jackCatch_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + if(inputConut > 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(180.0); + } + break; + case 7: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100; + totalDamage = totalDamage / 2; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,4,1600,0,0,0,0,0,0,0,0); + local baseX = [0,65,-65,0], baseY = [0,60,-60,0], moveX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 250), moveY = sq_GetYPos(obj); + for(local i = 0; i < 4; i++){ + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,300,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,5,totalDamage,i,moveX,moveY,0,0,0,0,1); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Jackcatch_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 6: + local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Jackcatch_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_Jackcatch_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 6: + if(frameIndex == 7){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 3); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,1,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,3,totalDamage,sizeRate,0,0,0,0,0,0,1); + sq_SetMyShake(obj, 6, 200); + } + break; + } +} + +function onEndState_Jackcatch_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_JACKCATCH){ + blademastery_buff(obj); + sq_SimpleMoveToNearMovablePos(obj,1600); + local size = obj.getVar("jackCatch_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut"); + } + } + local VarName = ["jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"]; + for(local i = 0; i < VarName.len(); i++){ + local effectObj = obj.getVar(VarName[i]).get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.setValid(false); + } + } + local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } +} + +function onProc_Jackcatch_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Jackcatch_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_Jackcatch_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local baseX = obj.getVar("jackcatch_move").getInt(10), baseY = obj.getVar("jackcatch_move").getInt(11); + local moveX = [0,0,480,-445,275,-110,78], moveY = [0,0,-20,40,40,-120,60], moveZ = 150; + local subState = obj.getSkillSubState(); + local vx = sq_GetUniformVelocity(0, moveX[subState], timeEventCount, 10); + local vy = sq_GetUniformVelocity(0, moveY[subState], timeEventCount, 10); + if(subState == 6) moveZ = 0; + local vz = sq_GetUniformVelocity(sq_GetZPos(obj), moveZ, timeEventCount, 10); + local dstX = sq_GetDistancePos(baseX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, baseY + vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 10){ + local VarName = ["","","jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"]; + switch(subState){ + case 2: + case 3: + case 4: + case 5: + local effectObj = obj.getVar(VarName[subState]).get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + break; + } + } + break; + case 2: + local vz = sq_GetUniformVelocity(obj.getVar("jackcatch_move").getInt(12), 0, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onProcCon_Jackcatch_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Laevateinn_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_LAEVATEINN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_LAEVATEINN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Laevateinn_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Laevateinn_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_PlaySound("SW_LAEVATEINN"); + obj.sq_PlaySound("LAEVATEINN_CAST"); + local aniSet = 144; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = 229; + obj.sq_SetCurrentAnimation(aniSet); + changeSwordEffect_bykk(obj, "atlaevateinn", SKILL_SWORDMASTER_BYKK_LAEVATEINN); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_LAEVATEINN, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_LAEVATEINN).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 78)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/atlaevateinn/back_02.ani"), 0, 0); + + obj.getVar("Laevateinn_target").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut"; + local holdTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_LAEVATEINN, 0) * 10; + for(local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= 1200 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 400){ + if(!obj.getVar("Laevateinn_target").is_obj_vector(object)) obj.getVar("Laevateinn_target").push_obj_vector(object); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(object, obj, true, true, true, 200, 300, ENUM_DIRECTION_NEUTRAL, addAppendage); + addAppendage.sq_SetValidTime(holdTime); + } + } + sq_SendMessage(obj, 0, 1, 0); + break; + } +} + +function onEndCurrentAni_Laevateinn_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Laevateinn_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; +} + +function onEndState_Laevateinn_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_LAEVATEINN){ + // local flashScreenObj = obj.getVar().getObject(0); + // if(flashScreenObj){ + // local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + // if(pflashScreen) pflashScreen.fadeOut(); + // } + blademastery_buff(obj); + // local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut"; + // local size = obj.getVar("Laevateinn_target").get_obj_vector_size(); + // if(size > 0){ + // for(local i = 0; i < size; i++){ + // local targetObj = obj.getVar("Laevateinn_target").get_obj_vector(i); + // if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, apdPath); + // } + // } + sq_SendMessage(obj, 0, 0, 0); + } +} + +function onEnterFrame_Laevateinn_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(frameIndex){ + case 0: + sq_SetMyShake(obj, 2, 150); + break; + case 1: + // `create wave` -2 0 -1 + break; + case 5: sq_SetMyShake(obj,2,1500); break; + case 10: sq_flashScreen(obj,0,80,0,127,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; + case 18: sq_SetMyShake(obj,10,100); break; + } +} + +function onKeyFrameFlag_Laevateinn_bykk(obj, flagIndex) +{ + if (!obj) return; + if(flagIndex == 1){ + obj.sq_PlaySound("R_SW_LAEVATEINN_FIN"); + obj.sq_PlaySound("LAEVATEINN"); + sq_flashScreen(obj,0,100,0,255,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 10, 350); + // `attack` 23 0 -31 + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(26,26); + local speedRate = 12000 / delay; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-2,0,-1,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_LAEVATEINN,1,speedRate,0,0,0,0,0,0,0,0); + + local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut"; + local size = obj.getVar("Laevateinn_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("Laevateinn_target").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + } +} + +function onTimeEvent_Laevateinn_bykk(obj, timeEventIndex, timeEventCount) +{} + +function onProcCon_Laevateinn_bykk(obj) +{ + if(!obj) return; +} + +function onProc_Laevateinn_bykk(obj) +{ + if(!obj) return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Magicswordshoot_bykk(obj) +{ + if(!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + if(isUse){ + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) < 1 || MAGICSWORDSHOOT_STONE < 1) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Magicswordshoot_bykk(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return false; + return true; +} + +function onSetState_Magicswordshoot_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local element = 4; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); + local aniSet = [[115,116,117],[118,119,120],[121,122,123],[124,125,126]]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [[306,304,305],[309,307,308],[303,301,302],[312,311,310]]; + obj.sq_SetCurrentAnimation(aniSet[element][subState]); + local effSet = [["magicswordshot_"],["fire","ice","dark","light"],["_start","_loop","_shoot"]]; + changeSwordEffect_bykk(obj, effSet[0]+effSet[1][element]+effSet[2][subState], SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + local effSet_front = [ + ["effect/animation/atmagicswordshoot/fire/01_ready/magicswordshot_ready_fire_body.ani", + "effect/animation/atmagicswordshoot/ice/01_ready/magicswordshot_ready_frozen_body.ani", + "effect/animation/atmagicswordshoot/dark/01_ready/magicswordshot_ready_shadow_body.ani", + "effect/animation/atmagicswordshoot/light/01_ready/magicswordshot_ready_light_body.ani"], + ["effect/animation/atmagicswordshoot/fire/02_chargeloop/magicswordshot_ready_loop_fire_front.ani", + "effect/animation/atmagicswordshoot/ice/02_chargeloop/magicswordshot_ready_loop_frozen_front.ani", + "effect/animation/atmagicswordshoot/dark/02_chargeloop/magicswordshot_ready_loop_shadow_front.ani", + "effect/animation/atmagicswordshoot/light/02_chargeloop/magicswordshot_ready_loop_light_front.ani"], + ["effect/animation/atmagicswordshoot/fire/03_shoot/magicswordshot_shoot_fire.ani", + "effect/animation/atmagicswordshoot/ice/03_shoot/magicswordshot_shoot_frozen.ani", + "effect/animation/atmagicswordshoot/dark/03_shoot/magicswordshot_shoot_shadow.ani", + "effect/animation/atmagicswordshoot/light/03_shoot/magicswordshot_shoot_light.ani"] + ]; + local effSet_back = ["effect/animation/atmagicswordshoot/fire/02_chargeloop/magicswordshot_ready_loop_fire_back.ani", + "effect/animation/atmagicswordshoot/ice/02_chargeloop/magicswordshot_ready_loop_frozen_back.ani", + "effect/animation/atmagicswordshoot/dark/02_chargeloop/magicswordshot_ready_loop_shadow_back.ani", + "effect/animation/atmagicswordshoot/light/02_chargeloop/magicswordshot_ready_loop_light_back.ani"]; + switch(subState){ + case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); break; + case 1: + obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(effSet_back[element]), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100; + local atkIndex = [116,119,125,122]; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[element])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + obj.setTimeEvent(1, 100, -1, false); + break; + case 2: + obj.removeAllTimeEvent(); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 2); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 4, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100; + switch(element){ + case 0: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100; break; + case 1: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; break; + case 2: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; break; + case 3: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break; + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); + if(loadSlot){ + local loadnumber = loadSlot.getRemainLoadNumber(); + if(loadnumber > 0){ + totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 1) * loadnumber) / 100; + totalDamage2 = totalDamage2 * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 1) * loadnumber) / 100; + if(loadnumber < sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)) loadSlot.decreaseLoadCount(loadnumber); + else loadSlot.decreaseLoadCount(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)); + } + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0,2); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,1,totalDamage,element,hitMax,totalDamage2,delay,0,0,0,1); + break; + } +} + +function onEndCurrentAni_Magicswordshoot_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Magicswordshoot_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; +} + +function onEnterFrame_Magicswordshoot_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("SW_SWORDSHOOT_01"); + local element = 4; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: obj.sq_PlaySound("SWORDSHOOT_CAST_FIRE"); break; + case 1: obj.sq_PlaySound("SWORDSHOOT_CAST_ICE"); break; + case 2: obj.sq_PlaySound("SWORDSHOOT_CAST_DARK"); break; + case 3: obj.sq_PlaySound("SWORDSHOOT_CAST_LIGHT"); break; + } + break; + case 1: + local element = 4; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); + switch(element){ + case 0: sq_flashScreen(obj,1,1,50,76,sq_RGB(255,69,0),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; + case 1: sq_flashScreen(obj,1,1,50,76,sq_RGB(65,105,225),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; + case 2: sq_flashScreen(obj,1,1,50,76,sq_RGB(192,192,192),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; + case 3: sq_flashScreen(obj,1,1,50,76,sq_RGB(255,255,224),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; + } + sq_SetMyShake(obj, 2, 360); + break; + } + break; + case 1: + sq_SetMyShake(obj, 2, 240) + break; + } +} + +function onEndState_Magicswordshoot_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT){ + blademastery_buff(obj); + } +} + +function onKeyFrameFlag_Magicswordshoot_bykk(obj, flagIndex) +{ + if (!obj) return; + if(obj.getSkillSubState() == 2 && flagIndex == 1){ + obj.sq_PlaySound("SW_SWORDSHOOT_02"); + obj.sq_PlaySound("SWORDSHOOT"); + sq_SetMyShake(obj, 4, 200); + } +} + +function onTimeEvent_Magicswordshoot_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } +} + +function onProcCon_Magicswordshoot_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + + switch(subState){ + case 1: + if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) > 0 || MAGICSWORDSHOOT_STONE > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + local bDownKey = obj.isDownSkillLastKey(); + local currentAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(currentAni); + local MaxTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9); + if(!bDownKey || currentT >= MaxTime){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onProc_Magicswordshoot_bykk(obj) +{ + if(!obj) return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Overdrive_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_OVERDRIVE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_OVERDRIVE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Overdrive_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Overdrive_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local aniSet = [81]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [313]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + local effSet = ["overdrive_on_body"]; + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_OVERDRIVE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delay, true); + obj.sq_PlaySound("SW_OVERDRIVE"); + break; + } +} + +function onEndCurrentAni_Overdrive_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_Overdrive_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(frameIndex){ + case 4: + local bufftmime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE, 0, sq_GetSkillLevel(obj, 146)); + local apdPath = "character/atswordman/1_swordmaster/overdrive/ap_overdrive.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); + appendage.sq_SetValidTime(bufftmime); + appendage.setEnableIsBuff(true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_OVERDRIVE, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE)); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + appendage.setBuffIconImage(56); + break; + } +} + +function onEndState_Overdrive_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProcCon_Overdrive_bykk(obj) +{ + if(!obj) return; +} + +function onProc_Overdrive_bykk(obj) +{ + if(!obj) return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Thunderslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + if (isUse){ + obj.getVar("thunderslash_target").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thunderslash_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Thunderslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local aniSet = [84,86,88,89,85,87]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [318,322,319,323,320,321]; + + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(aniSet[subState]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + changeSwordEffect_bykk(obj, "thunderslash1", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + obj.sq_PlaySound("THUNDERSLASH"); + break; + case 1: + obj.sq_SetCurrentAnimation(aniSet[subState]); + obj.getVar("thunderslash_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("thunderslash_move").setInt(11, 50); + obj.setTimeEvent(10, 2, 35, false); + changeSwordEffect_bykk(obj, "thunderslashjump2", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + break; + case 2: + obj.sq_SetCurrentAnimation(aniSet[subState]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(11, delaySum / (hitMax + 1), hitMax, false); + changeSwordEffect_bykk(obj, "thunderslashair3", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + break; + case 3: + obj.sq_SetCurrentAnimation(aniSet[subState]); + if(sq_GetZPos(obj) > 0) obj.setTimeEvent(12, 100 , 1, true); + changeSwordEffect_bykk(obj, "thunderslash_air_finish_body", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + break; + case 11: + obj.sq_SetCurrentAnimation(aniSet[subState - 7]); + obj.setTimeEvent(15, 100, 1, false); + changeSwordEffect_bykk(obj, "thunderslashdash2", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + obj.sq_PlaySound("THUNDERSLASH"); + break; + case 12: + obj.sq_SetCurrentAnimation(aniSet[subState - 7]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(11, delaySum / (hitMax + 1), hitMax, false); + changeSwordEffect_bykk(obj, "thunderslashground3", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); + break; + } +} + +function onEndCurrentAni_Thunderslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local size = obj.getVar("thunderslash_target").get_obj_vector_size(); + if(size > 0){ + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) obj.sq_IntVectPush(11); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case 1: + case 2: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 12: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 3, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; + local element = 4; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); + local sizeRate = 100; + if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; + } + if(element < 4) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,2,totalDamage,element,sizeRate,0,0,0,0,0,1); + else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,1,totalDamage,sizeRate,0,0,0,0,0,0,1); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Thunderslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local apdPath = "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + if(addAppendage){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ + sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) < 1) sq_MoveToAppendageForce(damager, obj, obj, 100, 0, 150, 200, true, addAppendage,true); + else sq_MoveToAppendageForce(damager, obj, obj, 100, 0, 0, 200, true, addAppendage,true); + if(!obj.getVar("thunderslash_target").is_obj_vector(damager)) obj.getVar("thunderslash_target").push_obj_vector(damager); + } + else if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0){ + sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage); + if(!obj.getVar("thunderslash_target").is_obj_vector(damager)) obj.getVar("thunderslash_target").push_obj_vector(damager); + } + } + } + break; + } +} + +function onTimeEvent_Thunderslash_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(timeEventIndex){ + case 10: + local baseX = obj.getVar("thunderslash_move").getInt(10); + local v = sq_GetUniformVelocity(0, obj.getVar("thunderslash_move").getInt(11), timeEventCount, 35); + local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 35); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 35) obj.setTimeEvent(15, 100, 1, true); + break; + case 11: + local size = obj.getVar("thunderslash_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + break; + case 12: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false) / 2; + local size = obj.getVar("thunderslash_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"); + if(addAppendage){ + sq_MoveToAppendageForce(activeObj, obj, obj, 50, 0, -sq_GetZPos(obj), 30, true, addAppendage); + } + } + } + } + obj.setTimeEvent(13, 30, 1, false); + obj.setTimeEvent(14, 50, 1, false); + break; + case 13: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; + local sizeRate = 100; + if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,50,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,1,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + case 14: + local size = obj.getVar("thunderslash_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"); + } + } + break; + case 15: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_Thunderslash_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(frameIndex == 3) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthunderslash/start_thunderslash_updust.ani", 0, 1, 0); + break; + case 1: + if(frameIndex == 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthunderslash/thunderslash_dust.ani", 0, 1, 0); + break; + } +} + +function onEndState_Thunderslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != STATE_SWORDMASTER_BYKK_THUNDERSLASH){ + obj.sq_SetXScrollStop(0); + blademastery_buff(obj); + local size = obj.getVar("thunderslash_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"); + } + } + } +} + +function onProcCon_Thunderslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + case 12: + local pAni = obj.getCurrentAnimation(); + local frameIndex = sq_GetAnimationFrameIndex(pAni); + if(frameIndex >= 4){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } +} + +function onProc_Thunderslash_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Thunderslash_bykk(obj, flagIndex) +{ + if (!obj) return; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Timeslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_TIMESLASH); + if (isUse){ + // obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_TIMESLASH); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Timeslash_bykk(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Timeslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 3) sq_SendMessage(obj, 0, 1, 0); + local aniSet = [106,108,107,109,110]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [328,324,325,327,326]; + obj.sq_SetCurrentAnimation(aniSet[subState]); + local effSet = ["timeslashstart","timeslashcharge","timeslashchargeloop","timeslashslash","timeslashexp"]; + changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_TIMESLASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 0: + if(obj.isMyControlObject()) obj.sq_SetXScrollStart(200, 300); + break; + case 1: + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,1,0,0,0,0,0,0,0,0,0); + break; + case 3: + local flashScreenObj = sq_flashScreen(obj,100,999999,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("flashobj").clear_obj_vector(); + obj.getVar("flashobj").push_obj_vector(flashScreenObj); + break; + case 4: + local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0); + if(flashScreenObj){ + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + pflashScreen.fadeOut(); + } + sq_flashScreen(obj,0,1000,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.setTimeEvent(1, 1000, 1, false); + obj.setTimeEvent(2, 100, 1, true); + if(obj.isMyControlObject()) obj.sq_SetXScrollStop(200); + break; + } +} + +function onEndCurrentAni_Timeslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Timeslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return false; +} + +function onEnterFrame_Timeslash_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 4) return; +} + +function onEndState_Timeslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_TIMESLASH){ + obj.sq_SetXScrollStop(0) + blademastery_buff(obj); + local flashScreenObj = obj.getVar("flashobj").getObject(0); + if(flashScreenObj){ + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + } + sq_SendMessage(obj, 0, 0, 0); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 6){ + local addLevel = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); + local time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); + // print("addLevel = "+addLevel); + // print("time = "+time); + addSkillLevelTime(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, addLevel, time); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 9){ + local bufftmime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); + local apdPath = "character/atswordman/1_swordmaster/timeslash/ap_timeslash.nut"; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); + appendage.sq_SetValidTime(bufftmime); + appendage.setEnableIsBuff(true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_TIMESLASH, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + + local change_appendage = appendage.sq_getChangeStatus("timeslash"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("timeslash", obj, obj, 0, 15, false, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -10.0); + } + } + } +} + +function onKeyFrameFlag_Timeslash_bykk(obj, flagIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 3: + switch(flagIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_TIMESLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH).tofloat() / 100.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,2,totalDamage,0,0,0,0,0,0,0,1); + sq_SetMyShake(obj, 5, 200); + break; + } + break; + case 4: + switch(flagIndex){ + case 2: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_TIMESLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH).tofloat() / 100.0) + 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,3,totalDamage,0,0,0,0,0,0,0,1); + sq_SetMyShake(obj, 20, 400); + break; + } + break; + } +} + +function onTimeEvent_Timeslash_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local bottomObj = obj.getVar("timeslash_bottom").get_obj_vector(0); + if(bottomObj) bottomObj.setValid(false); + break; + case 2: + if(obj.isMyControlObject()){ + sq_CreateParticle("character/swordman/effect/particle/timeslash_glass.ptl", obj, 0, 1, 0, true, 5, 0, 5); + sq_setFullScreenEffect(obj, "character/swordman/effect/animation/attimeslash/finish_timeslash_crack.ani"); + } + break; + } +} + +function onProcCon_Timeslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 2){ + local bDownKey = obj.isDownSkillLastKey(); + local stateTime = obj.sq_GetStateTimer(); + if(stateTime >= 1000 && !bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onProc_Timeslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Upperslash_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_UPPERSLASH); + if (isUse){ + //CheckUseAddloadDrawsword(obj,128,{[0] = true,[108] = true,[14] = true},0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Upperslash_bykk(obj) +{ + if (!obj) return false; + //if(obj.getZPos() > 10) return false; + return true; + +} + +function onSetState_Upperslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local aniSet = [77,78,80]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [329,330,331]; + + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(aniSet[subState]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + changeSwordEffect_bykk(obj, "UpperSlash1", SKILL_SWORDMASTER_BYKK_UPPERSLASH); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + obj.sq_SetStaticMoveInfo(0, 400, -1000, false); + obj.sq_PlaySound("SW_UPPERSLASH"); + break; + case 1: + obj.sq_SetCurrentAnimation(aniSet[subState]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + changeSwordEffect_bykk(obj, "UpperSlash2", SKILL_SWORDMASTER_BYKK_UPPERSLASH); + break; + case 2://95 + obj.sq_SetCurrentAnimation(aniSet[subState]); + local totalDamage1 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; + local bonusRate = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE)); + local totalDamage = (totalDamage1 + totalDamage2) * bonusRate / 1000; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + changeSwordEffect_bykk(obj, "UpperSlash2Lv95Passive_Body", SKILL_SWORDMASTER_BYKK_UPPERSLASH); + //obj.sq_PlaySound("SW_UPPERSLASH"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Upperslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Upperslash_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } +} + +function onAttack_Upperslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_Upperslash_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 1: + local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH, 3); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(1, 5); + obj.setTimeEvent(0,delaySum/(hitMax + 1), hitMax, true); + break; + } + break; + } +} + +function onEndState_Upperslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_SWORDMASTER_BYKK_UPPERSLASH){ + blademastery_buff(obj); + } +} + +function onKeyFrameFlag_Upperslash_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Upperslash_bykk(obj) +{ + if(!obj) return; +} + +function onProc_Upperslash_bykk(obj) +{ + if(!obj) return; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Weaponcombo_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); + if (isUse){ + obj.getVar("weaponCombo_bool").setBool(0, false); + obj.getVar("weaponCombo_bool").setBool(1, false); + obj.getVar("weaponCombo_bool").setBool(2, false); + obj.getVar("weaponCombo_bool").setBool(3, false); + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Weaponcombo_bykk(obj) +{ + if (!obj) return false; + if(obj.getZPos() > 10) return false; + return true; +} + +function onSetState_Weaponcombo_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + local weaponType = obj.getWeaponSubType(); + local aniSet = [[33,34,35,36], [39,40,41], [42,43,44], [37,45,38]]; + local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [[341,342,343,344], [338,339,340], [332,333,334], [335,336,337]]; + local atkSet = [[30,31,32,33],[24,25,26],[27,28,29],[22,23,23]]; + local effSet = [["WeaponComboShortSword1","WeaponComboShortSword2","WeaponComboShortSword3","WeaponComboShortSword4"], + ["WeaponComboKatana1_body","WeaponComboKatana2_body","WeaponComboKatana3_body"], + ["WeaponComboClub1_body","WeaponComboClub2_body","WeaponComboClub3_body"], + ["WeaponComboHeavy1_body","WeaponComboHeavy2Charge_body","WeaponComboHeavy2_body"]]; + obj.sq_SetCurrentAnimation(aniSet[weaponType][subState]); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[weaponType][subState])); + changeSwordEffect_bykk(obj, effSet[weaponType][subState], SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); + setWeaponMaster_attackElement(obj); + local soundSet = [["","","","R_SW_LIFTSLASH"], + ["R_FENCING_SWDA","R_FENCING_SWDA","R_FENCING_SWDA"], + ["FENCING_BLUNT_01","FENCING_BLUNT_02","FENCING_BLUNT_03"], + ["FENCING_SWDC_01","","FENCING_SWDC_02"]]; + if(soundSet[weaponType][subState] != "") obj.sq_PlaySound(soundSet[weaponType][subState]); + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 200; + if(weaponType == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 8, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY))) / 1000; + else if(weaponType == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 10, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 1000; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + setWeaponMaster_attackElement(obj); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(weaponType < 3) obj.sq_SetStaticMoveInfo(0, 2 * subState, 2 * subState, false); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); +} + +function onEndCurrentAni_Weaponcombo_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + +} + +function onAttack_Weaponcombo_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isChangeSword_Attack(obj,damager,boundingBox); + } + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + isMagicSwordUp_Attack(obj,damager,boundingBox); + } +} + +function onEnterFrame_Weaponcombo_bykk(obj, frameIndex) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Weaponcombo_bykk(obj, flagIndex) +{ + if(flagIndex != 1) return; + local subState = obj.getSkillSubState(); + local weaponType = obj.getWeaponSubType(); + local element = 4; + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); + if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 200; + switch(weaponType){ + case 0://短劍 + totalDamage = totalDamage / 10; + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,0,totalDamage,element,subState,0,0,0,0,0,1); + break; + case 2://鈍器 + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,1,totalDamage,0,0,0,0,0,0,0,1); + break; + case 3://巨劍 + if(subState != 2) break; + local sizeRate = 100; + if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ + totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 10, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 1000; + sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; + local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2); + addAppendage.sq_SetValidTime(bufftime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + obj.sq_SetSuperArmorUntilTime(obj, bufftime); + } + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,3,totalDamage,sizeRate,0,0,0,0,0,0,1); + break; + } +} + +function onProc_Weaponcombo_bykk(obj) +{ + if(!obj) return; + if(!obj.isMyControlObject()) return; + + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + } + + local subState = obj.getSkillSubState(); + local weaponType = obj.getWeaponSubType(); + local subState_Max = [3,2,2,2]; + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + if(weaponType == 3){ + switch(subState){ + case 0: + local bDownKey = obj.isDownSkillLastKey(); + if(bDownKey){ + if(stateTime >= delaySum * 90 / 100){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case 1: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey || stateTime >= 1200){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } + } + + if(obj.getVar("weaponCombo_bool").getBool(subState) == false && weaponType < 3){ + if(subState < subState_Max[weaponType]){ + obj.setSkillCommandEnable(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); + if(b_useskill != -1) obj.getVar("weaponCombo_bool").setBool(subState, true); + } + } + + if(stateTime >= delaySum * 75 / 100 && obj.getVar("weaponCombo_bool").getBool(subState) && subState < subState_Max[weaponType] && weaponType < 3){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function onStart_appendage_Dualweapon_bykk(appendage) +{ + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + local stuckRate = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 16, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON)); + local change_appendage = appendage.sq_getChangeStatus("dualweapon"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("dualweapon", obj, obj, 0, 15, false, stuckRate); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, -(stuckRate * 0.1).tofloat()); + } + appendage.getVar().setInt(10, 0); +} + +function onStart_appendage_Threeflower_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + + local skillLevel = sq_GetSkillLevel(parentObj, SKILL_VAGABOND_THREEFLOWER); + local value1 = sq_GetLevelData(parentObj, SKILL_VAGABOND_THREEFLOWER, 0, skillLevel); + local value2 = sq_GetLevelData(parentObj, SKILL_VAGABOND_THREEFLOWER, 1, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("threeflower"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("threeflower",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + //change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (value2 * 0.1).tofloat()); + } +} + +function onStart_appendage_Budclimb_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); +} + +function onStart_appendage_Ecstasy_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); +} + +function onStart_appendage_Goddessofsword_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); +} + +function onStart_appendage_Equiplightsword_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(parentObj.getWeaponSubType() == 0 || parentObj.getWeaponSubType() == 1 || parentObj.getWeaponSubType() == 5){ + local value1 = sq_GetIntData(parentObj, SKILL_VAGABOND_EQUIPLIGHTSWORD, 0); + local value2 = sq_GetIntData(parentObj, SKILL_VAGABOND_EQUIPLIGHTSWORD, 1); + + local change_appendage = appendage.sq_getChangeStatus("threeflower"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("threeflower",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage && parentObj.getWeaponSubType() == 5){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -(value1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value2).tofloat()); + } + } +} + + + + +function checkExecutableSkill_Bigjang_bykk(obj) +{ + if (!obj) return 0; + local state = obj.sq_GetState(); + + local minZpos = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 2); + if(state == 6 && obj.getZPos() < minZpos) return 0; + + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_BIGJANG); + if(isUse){ + local dis = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 3); + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)) obj.getVar("bigjang").setInt(0, dis * 75 / 100); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("bigjang").setInt(0, dis * 150 / 100); + else obj.getVar("bigjang").setInt(0, dis); + + obj.sq_IntVectClear(); + if(state == 6) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_BIGJANG, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Bigjang_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_NORMAL_START_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_JUMP_START_BODY); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_JUMP_THROW_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Bigjang_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_BIGJANG, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Bigjang_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Bigjang_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local sizerate = sq_GetIntData(obj,223, 0); + switch(subState){ + case 0: + switch(frameIndex){ + case 1: obj.sq_PlaySound("SW_FIST_HUNDRED"); break; + case 2: + obj.sq_PlaySound("FIST_HUNDRED_HAND"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbigjang/normal_start_ready.ani", 25, 0, 63); + break; + case 9: + obj.sq_PlaySound("FIST_HUNDRED_SWISH"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 1, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 0); + local dis = obj.getVar("bigjang").getInt(0); + local sub = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 16); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 65, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 1, totalDamage, damageRate, dis, sizeRate, 0, sub, 0, 0, 1); + // `EnableHermitTripleStep` 0 0 0 + // `rapid step enable` 0 0 0 + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + break; + case 1: + switch(frameIndex){ + case 6: + obj.sq_PlaySound("FIST_HUNDRED_HAND"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbigjang/jump_start_hand.ani", 8, 0, 80); + break; + } + break; + case 2: + switch(frameIndex){ + case 1: + obj.sq_PlaySound("FIST_HUNDRED_EXP"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 1, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 0) / 3 * 2; + local dis = obj.getVar("bigjang").getInt(0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 9, 0, 81, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 2, totalDamage, damageRate, dis * 75 / 100, sizeRate, 0, 0, 0, 0, 1); + //sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atbigjang/jump_throw_hand.ani", 200, 0, 0); + break; + } + break; + } +} + +function onEndState_Bigjang_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_BIGJANG){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Bigjang_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Bigjang_bykk(obj) +{ + if(!obj) return; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Blastsword_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_BLASTSWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Blastsword_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDSELECTSWORD); + obj.sq_PlaySound("SW_BLAST_SWORD"); + obj.getVar("blastsword").setBool(0, false); + obj.getVar("blastsword").setBool(1, false); + if(sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 10) > 0){ + obj.getVar("blastsword").setBool(0, true); + obj.getVar("blastsword").setBool(1, true); + } + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDSTART); + obj.getVar("blastsword_move").setInt(10, sq_GetXPos(obj)); + if(obj.getVar("blastsword").getBool(1) == false) obj.getVar("blastsword_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 2)); + break; + case 2: + // obj.getVar("Blastsword").setInt(1, 3); + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDLOOP); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 2, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 163)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 4); + local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 6); + obj.setTimeEvent(1, hitTime, hitMax, true); + local lifeTime = (hitTime + 20) * (hitMax - 1); + obj.getVar("blastsword_move").setInt(12, lifeTime); + obj.setTimeEvent(2, lifeTime, 1, false); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atblastsword/dust_03.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atblastsword/loop_leaf_00.ani", 0, 0, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDEND); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 163)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + obj.sq_PlaySound("BLAST_SWORD_EXP"); + obj.sq_PlaySound("SW_BLAST_SWORD"); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDONEHAND); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 162)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onTimeEvent_Blastsword_bykk(obj, timeEventIndex, timeEventCount) +{ + if (!obj) return; + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEndCurrentAni_Blastsword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + if(obj.getVar("blastsword").getBool(0)) obj.sq_IntVectPush(4); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Blastsword_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + break; + case 1: + break; + } + +} + +function onEnterFrame_Blastsword_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + if((frameIndex == 1 && subState == 3) || (frameIndex == 3 && subState == 4)){ + //[OFFSET] `two hand finish` 206 0 3 + //[OFFSET] `one hand finish` 237 0 5 + local offsetX = 206, offsetZ = 3; + if(subState == 4){offsetX = 207; offsetZ = 5;} + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 1, skill_level); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_BLASTSWORD, 1, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1); + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + } + if(frameIndex == 2 && subState == 4){ + obj.sq_PlaySound("SW_BLAST_SWORD"); + obj.sq_PlaySound("BLAST_SWORD_EXP"); + } +} + +function onEndState_Blastsword_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_BLASTSWORD){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + sq_SimpleMoveToNearMovablePos(obj,300); + } +} + +function onKeyFrameFlag_Blastsword_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Blastsword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("blastsword").getBool(0) == false){ + obj.setSkillCommandEnable(SKILL_VAGABOND_BLASTSWORD, true); + if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_BLASTSWORD) != -1 || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)) obj.getVar("blastsword").setBool(0, true); + } + case 1: + if(obj.getVar("blastsword").getBool(1) == false){ + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("blastsword").setBool(1, true); + obj.getVar("blastsword_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 3)); + } + } + break; + case 2: + local stateTime = obj.sq_GetStateTimer(); + local fireT = obj.getVar("blastsword_move").getInt(12); + local srcX = obj.getVar("blastsword_move").getInt(10); + local MoveX = obj.getVar("blastsword_move").getInt(11); + local v = sq_GetAccel(0, MoveX, stateTime, fireT, false); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Coalban_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(216); + if (isUse){ + obj.sq_IntVectClear(); + if(obj.sq_GetState() == 6) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Coalban_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + case 10: + if(subState == 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANCAST); + else if(subState == 10){ + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANCASTJUMP); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("SW_COAL_BAN"); + local countMax = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 0) * 3 / 2 - 1; + obj.getVar("coalban").setInt(10, countMax); + obj.getVar("coalban").setInt(11, 0); + break; + case 1: + case 2: + case 11: + case 12: + local pooledObj; + if(subState == 11 || subState == 12) obj.sq_ZStop(); + if(subState == 1){ + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANLEFT); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/left/leftleaf_00.ani", 0, 1, 0); + } + else if(subState == 2){ + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANRIGHT); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/right/rightleaf_00.ani", 0, 1, 0); + } + else if(subState == 11){ + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANLEFTJUMP); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/left/leftleafjump_00.ani", 0, 1, 0); + } + else if(subState == 12){ + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANRIGHTJUMP); + pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/right/rightleafjump_00.ani", 0, 1, 0); + } + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local interval = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 3); + local speedRate = delaySum.tofloat() / interval.tofloat() * 250.0; + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) speedRate = speedRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 4).tofloat() / 100.0; + currentAni.setSpeedRate(speedRate); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + } +} + +function onEndCurrentAni_Coalban_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + if(obj.getVar("coalban").getInt(10) <= 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.getVar("coalban").setInt(10, obj.getVar("coalban").getInt(10) - 1); + obj.sq_IntVectClear(); + if(subState == 1) obj.sq_IntVectPush(2); + else if(subState == 2) obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case 11: + case 12: + if(obj.getVar("coalban").getInt(10) <= 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.getVar("coalban").setInt(10, obj.getVar("coalban").getInt(10) - 1); + obj.sq_IntVectClear(); + if(subState == 11) obj.sq_IntVectPush(12); + else if(subState == 12) obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function onEnterFrame_Coalban_bykk(obj, frameIndex) +{ + if(!obj) return; + + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("coalban").setInt(11, 1); + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)) obj.getVar("coalban").setInt(11, 2); + else obj.getVar("coalban").setInt(11, 0); +} + +function onEndState_Coalban_bykk(obj, newState) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Coalban_bykk(obj, flagIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(flagIndex){ + case 1: + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COALBAN); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COALBAN, 0, skill_level); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 13); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 3) / 100; + local dis = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 1); + local sub = obj.getVar("coalban").getInt(11); + local offsetX = 50, offsetZ = 73, angle = 0, partl = sub * 10 + 1; + if(subState == 2){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 2;} + if(subState == 11){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 1;} + if(subState == 12){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 2;} + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_COALBAN, 1, totalDamage, sizeRate, dis, partl, angle, sub, 0, 0, 1); + break; + case 2: + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COALBAN); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COALBAN, 0, skill_level); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 13); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 3) / 100; + print(sizeRate); + local dis = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 1); + local sub = obj.getVar("coalban").getInt(11); + local offsetX = 50, offsetZ = 73, angle = 0, partl = sub * 10 + 1; + if(subState == 1){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 3;} + if(subState == 2){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 4;} + if(subState == 11){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 3;} + if(subState == 12){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 4;} + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_COALBAN, 1, totalDamage, sizeRate, dis, partl, angle, sub, 0, 0, 1); + break; + } +} + +function onProcCon_Coalban_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 11: + case 12: + if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + if(subState < 10){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + diff --git a/user/116.205.165.25/3_atswordman_8.c b/user/116.205.165.25/3_atswordman_8.c new file mode 100644 index 0000000..fc9a4eb --- /dev/null +++ b/user/116.205.165.25/3_atswordman_8.c @@ -0,0 +1,3622 @@ + + +function checkExecutableSkill_Cometblade_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_COMETBLADE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Cometblade_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE03ATKB_BODY); + obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX + obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ + obj.getVar("cometblade_move").setInt(12, 400);//moveX + obj.getVar("cometblade_move").setInt(13, 0);//moveZ + obj.getVar("cometblade").setBool(0, false); + obj.sq_PlaySound("COMET_BLADE_DASH"); + + + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + local delay = currentAni.getDelaySum(0, 0); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 1, skill_level); + local sizeRate = 100; + local isStone = sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9); + if((isStone > 0 && isStone != 50) || COMETBLADE_STONE > 0){ + totalDamage = totalDamage * 2; sizeRate = 125; + if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 50) sizeRate = 188; + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 1, totalDamage, sizeRate, delay, 0, 0, 0, 0, 0, 1); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKLIFT_BODY); + obj.sq_PlaySound("COMET_BLADE_SWISH"); + obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX + obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ + obj.getVar("cometblade_move").setInt(12, -150);//moveX + obj.getVar("cometblade_move").setInt(13, 250);//moveZ + obj.getVar("cometblade").setBool(1, false); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 2, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 167)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKFIXSWORD_BODY); + obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX + obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ + obj.getVar("cometblade_move").setInt(12, -50);//moveX + obj.getVar("cometblade_move").setInt(13, -180);//moveZ + obj.getVar("cometblade").setBool(2, false); + obj.sq_PlaySound("COMET_BLADE_INDENT"); + + obj.resetHitObjectList(); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKREADYSMASH_BODY); + obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX + obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ + obj.getVar("cometblade_move").setInt(12, -200);//moveX + obj.getVar("cometblade_move").setInt(13, 180);//moveZ + obj.sq_PlaySound("COMET_BLADE_FLY"); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKSMASH_BODY); + obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX + obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ + obj.getVar("cometblade_move").setInt(12, 0);//moveX + obj.getVar("cometblade_move").setInt(13, -sq_GetZPos(obj));//moveZ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/liftattackeffect.ani", 2, 0, -1); + sq_moveWithParent(obj, pooledObj); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 3, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 168)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEnterFrame_Cometblade_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + + switch(subState){ + case 0: + if(frameIndex == 1){ + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/cutsmoke.ani", 0, 0, 0); + sq_flashScreen(obj, 50, 200, 400, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 10, 200); + } + else if(frameIndex == 14 && obj.getVar("cometblade").getBool(0) == true){ + if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) break; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + } + if(frameIndex == 14 && (sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(166.67); + } + break; + case 2: + if(frameIndex == 2){ + sq_flashScreen(obj, 30, 150, 200, 154, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 10, 200); + local aniPath = "character/swordman/effect/animation/atcometblade/finishfloor_00.ani" + local aniPath2 = "character/swordman/effect/animation/atcometblade/finishfixsword.ani" + createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + } + break; + case 4: + switch(frameIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishfixsword_eff2_a.ani", 188, 0, -sq_GetZPos(obj)); + break; + case 2: + obj.sq_PlaySound("COMET_BLADE_FINISH"); + sq_flashScreen(obj, 30, 150, 250, 205, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 200); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishsmokesmash.ani", 188, 0, 0); + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + case 10: + // sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishleaf.ptl", obj, 0, 5, 0, true, 10, 0, 3); + // sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishmiddleleaf.ptl", obj, 0, 5, 0, true, 10, 0, 5); + // sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishsmallleaf.ptl", obj, 0, 5, 0, true, 1, 0, 10); + //local sizeRate = sq_getRandom(15, 90), rotateSet = sq_getRandom(0, 360); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 1, 15, 90, 0, 360, 15, 2, 0, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 2, 20, 50, 0, 360, 15, 3, 0, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 3, 2, 20, 0, 360, 20, 3, 0, 0); + break; + } + break; + } +} + +function onChangeSkillEffect_Cometblade(obj, skillIndex, receiveData) +{ + if(!obj || skillIndex != 220) return; + local type = receiveData.readDword(); + if(type == 0) + obj.resetHitObjectList(); + else if(type == 1) + { + local aptjarr = [ + "character/swordman/effect/animation/atcometblade/finishfixsword.ani", + "character/swordman/effect/animation/atcometblade/finishfloor_00.ani" + ]; + foreach(path in aptjarr) + DarktemplerCreateAniPooledObj(obj, path, false, true, obj.getXPos(), obj.getYPos()-1, 0,1.0); + } +} + +function onEndCurrentAni_Cometblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + case 2: + if(obj.getVar("cometblade").getBool(subState) == true){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 4: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Cometblade_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEndState_Cometblade_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_COMETBLADE){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Cometblade_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Cometblade_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){//位移 + case 0: + case 1: + case 2: + case 3: + case 4: + if(obj.getVar("cometblade").getBool(subState) == false && subState < 3){ + obj.setSkillCommandEnable(SKILL_VAGABOND_COMETBLADE, true); + if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_COMETBLADE) != -1){ + obj.getVar("cometblade").setBool(subState, true); + } + } + + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + if(subState == 2 || subState == 4) fireT = pAni.getDelaySum(0, 1); + else if(subState == 3) fireT = pAni.getDelaySum(0, 3); + else if(subState == 0) fireT = pAni.getDelaySum(0, 7); + if(currentT > fireT){ + if(subState == 4) sq_setCurrentAxisPos(obj, 2, 0); + break; + } + local srcX = obj.getVar("cometblade_move").getInt(10); + local srcZ = obj.getVar("cometblade_move").getInt(11); + local MoveX = obj.getVar("cometblade_move").getInt(12); + local MoveZ = obj.getVar("cometblade_move").getInt(13); + if(subState == 4) MoveZ = -srcZ; + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))){ + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, srcZ + vz); + } + else{ + obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("cometblade_move").setInt(12, 0); + } + break; + case 2: + break; + case 3: + break; + case 6: + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Dualweapon_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_DUALWEAPON); + if (isUse){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut"); + if(addAppendage){ + local weaponType = addAppendage.getVar().getInt(10); + if(weaponType == 4) addAppendage.getVar().setInt(10, 0); + else addAppendage.getVar().setInt(10, weaponType + 1); + switch(weaponType){ + case 4: addAppendage.setBuffIconImage(63); break;//光 + case 0: addAppendage.setBuffIconImage(62); break;//鈍 + case 1: addAppendage.setBuffIconImage(60); break;//太 + case 2: addAppendage.setBuffIconImage(61); break;//巨 + case 3: addAppendage.setBuffIconImage(59); break;//短 + } + } + return 1; + } + return 0; +} + +function checkCommandEnable_Dualweapon_bykk(obj) +{ + if (!obj) return 0; + return 1; +} + +function AddAppend_Dualweapon(obj,index) +{ + local appArr = [ + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut" + ]; + local apPath = appArr[index]; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false); + if(appendage != null) + { + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 202, sq_GetSkillLevel(obj, 202)); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + local incon = [59,60,62,61,63]; + appendage.setBuffIconImage(incon[index]); + } + + return index; +} + +function checkAppend_Dualweapon(obj) +{ + local index = 5; + local appArr = [ + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut" + ]; + + foreach( key,path in appArr) + { + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path)) + return key; + } + + return index; +} + +function SetChrAniIndex_Dualweapon(obj,apdindex) +{ + local index = 10; + local appArr = [526,520,517,523,514,0]; + + return appArr[apdindex]; +} + +function SetChrAtkIndex_Dualweapon(obj,apdindex) +{ + local index = 10; + local appArr = [146,140,137,143,134,0]; + + return appArr[apdindex]; +} + +function Dualweapon_RemoveAppebd(obj)//??? +{ + local appArr = [ + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut", + "character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut" + ]; + + foreach(path in appArr) + { + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path)) + CNSquirrelAppendage.sq_RemoveAppendage(obj, path); + } + obj.getVar("ChangeswordCurId").setInt(0, 0); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Earthpressure_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_EARTHPRESSURE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_EARTHPRESSURE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Earthpressure_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_EARTHPRESSUREBODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("EARTH_PRESSURE_UP"); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atearthpressure/earthpressureeffect_effect.ani", 0, 1, 0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7,7); + local speedRate = 6000.0 / delay.tofloat(); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + } +} + +function onEndCurrentAni_Earthpressure_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Earthpressure_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Earthpressure_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 6: + sq_SetMyShake(obj, 2, 250); + sq_flashScreen(obj, 0, 100, 0, 102,sq_RGB(192, 192, 192), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + break; + case 7: + obj.sq_PlaySound("SW_EARTH_PRESSURE"); + obj.sq_PlaySound("EARTH_PRESSURE_DOWN"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_EARTHPRESSURE, SKILL_VAGABOND_EARTHPRESSURE, 0, 1.0) + 100; + local range = sq_GetIntData(obj, SKILL_VAGABOND_EARTHPRESSURE, 0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7,7); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_EARTHPRESSURE, 1, totalDamage, range, delay, 0, 0, 0, 0, 0, 1); + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + break; + } +} + +function onEndState_Earthpressure_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_EARTHPRESSURE){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Earthpressure_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Earthpressure_bykk(obj) +{ + if(!obj) return; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Fatalflower_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FATALFLOWER); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FATALFLOWER, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Fatalflower_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FATALFLOWER_BODY); + obj.sq_SetXScrollStart(350, 200); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 172)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Fatalflower_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_SetXScrollStop(100); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Fatalflower_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Fatalflower_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("R_SW_FATAL_FLOWER_01"); + sq_flashScreen(obj, 500, 2500, 500, 200, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 4: + obj.sq_PlaySound("FATAL_FLOWER_START"); + sq_SetMyShake(obj, 3, 120); + //`CreateFlower` 0 0 0 + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 1, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 4, skill_level); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 9) totalDamage2 = totalDamage2 * 110 / 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 3, skill_level); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 6) hitMax = hitMax + 3; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 5400.0 / delay.tofloat(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, -1, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 1, totalDamage, hitMax, damageRate, delay, 0, 0, 0, 0, 0); + local pooledObj_1 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfireb_front_00.ani", 0, 0, 0); + local pooledObj_2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfirea_00.ani", 0, 0, 0); + local pAni_1 = pooledObj_1.getCurrentAnimation(); + local pAni_2 = pooledObj_2.getCurrentAnimation(); + pAni_1.setSpeedRate(speedRate); + pAni_2.setSpeedRate(speedRate); + break; + case 21: + sq_SetMyShake(obj, 5, 300); + break; + case 30: + obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 800); + break; + case 41: + obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 400); + break; + case 43: + sq_SetMyShake(obj, 4, 180); + break; + case 46: + obj.sq_PlaySound("SW_SNAKEDANCE_03"); + sq_SetMyShake(obj, 5, 300); + break; + case 50: + //`EnableHermitTripleStep` 0 0 0 + //`rapid step enable` 0 0 0 + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + break; + } +} + +function onEndState_Fatalflower_bykk(obj, newState) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) < 3) return; + local apPath = "character/atswordman/3_vagabond/fatalflower/ap_fatalflower.nut"; + if(newState != SKILL_VAGABOND_FATALFLOWER){ + obj.sq_SetXScrollStop(100); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false); + if(addAppendage){ + addAppendage.sq_SetValidTime(30000); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FATALFLOWER, sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER)); + addAppendage.setEnableIsBuff(true); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + local CRITICAL_RATE = 15; + local change_appendage = addAppendage.sq_getChangeStatus("Fatalflower"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("Fatalflower", obj, obj, 0, 15, false, CRITICAL_RATE); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, CRITICAL_RATE.tofloat()); + } + } + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Fatalflower_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Fatalflower_bykk(obj) +{ + if(!obj) return; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Fistofexplosion_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(219); + if (isUse){ + if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 9) > 0) obj.getVar("Fistofexplosion_Bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + //obj.sq_IsEnterSkillLastKeyUnits(219);//蓄力 + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Fistofexplosion_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTSTART_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTLOOP_BODY); + obj.sq_PlaySound("FIST_HELLFIRE_READY"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){ + local speedRate = 100.0 * (1.0 / 0.6); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_SHOOT_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Fistofexplosion_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + if(obj.getVar("Fistofexplosion_Bool").getBool(0)){ + obj.getVar("Fistofexplosion_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Fistofexplosion_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Fistofexplosion_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + switch(frameIndex){ + case 1: + break; + case 2: + break; + } + break; + } +} + +function onEndState_Fistofexplosion_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_FISTOFEXPLOSION){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Fistofexplosion_bykk(obj, flagIndex) +{ + if (!obj) return true; + local subState = obj.getSkillSubState(); + if(subState != 2) return true; + switch(flagIndex){ + case 1111: + obj.sq_PlaySound("FIST_HELLFIRE_BURST"); + obj.sq_PlaySound("SW_SNAKEDANCE_03"); + sq_SetMyShake(obj, 7, 180); + sq_flashScreen(obj, 0, 0, 150, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FISTOFEXPLOSION); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 1, skill_level); + local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 0, skill_level); + local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 3); + local sub = 0; + if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){ + sub = 1; + lifeTime = lifeTime + 1000; + sizeRate = (sizeRate.tofloat() * 1.25).tointeger(); + hitMax = hitMax - 2; + totalDamage = (totalDamage.tofloat() * 1.27).tointeger(); + totalDamage2 = totalDamage2 + 311; + } + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 85, obj.getDirection(), 3, SKILL_VAGABOND_FISTOFEXPLOSION, 1, totalDamage, sizeRate, lifeTime, hitMax, damageRate, sub, 0, 0, 1); + break; + case 1112: + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + return true; +} + +function onProcCon_Fistofexplosion_bykk(obj) +{ + if(!obj) return; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Fivecircle_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FIVECIRCLE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Fivecircle_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FIVECIRCLE_START_BODY); + obj.sq_PlaySound("SW_FIVE_CIRCLE"); + + local castTime = sq_GetCastTime(obj, SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE)); + local animation = sq_GetCurrentAnimation(obj); + local castAniTime = sq_GetDelaySum(animation); + 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); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FIVECIRCLE_END_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } + +} + +function onEndCurrentAni_Fivecircle_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + local apdPath = "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); + addAppendage.sq_AddEffectFront("character/swordman/effect/animation/atfivecircle/buffeffect/buff_front_1.ani"); + addAppendage.sq_AddEffectBack("character/swordman/effect/animation/atfivecircle/buffeffect/buff_back_1.ani"); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE)); + addAppendage.setEnableIsBuff(true); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE); + local speedRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 2, skill_level) * 5; + // local hitRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, skill_level) * 5; + local change_appendage = addAppendage.sq_getChangeStatus("fivecircle"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("fivecircle", obj, obj, 0, 15, false, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (hitRate * 0.1 / 0.667).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (speedRate).tofloat()); + } + setSkillDamageRate_VagaBond_bykk(obj); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_Fivecircle_bykk(obj, frameIndex) +{ + if(!obj) return; + if(obj.getSkillSubState() == 0 && frameIndex == 3){ + obj.sq_PlaySound("SW_FIVE_CIRCLE"); + obj.sq_PlaySound("FIVE_CIRCLE_CAST"); + } +} + +function onEndState_Fivecircle_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_FIVECIRCLE) sq_EndDrawCastGauge(obj); +} + +function onProcCon_Fivecircle_bykk(obj) +{ + if(!obj) return; +} + +function CreateBuffCutin(obj,CutinPath) +{ + local ani = sq_CreateAnimation("",CutinPath); + local pooledObj = sq_CreatePooledObject(ani,true); + local objectManager = obj.getObjectManager(); + local xPos = obj.getXPos(); + local yPos = objectManager.getFieldYPos(0, 0, 7); + pooledObj = sq_SetEnumDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + pooledObj.setCurrentPos(xPos +480,yPos ,0); + sq_AddObject(obj,pooledObj,2,false); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Flowerbladedance_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FLOWERBLADEDANCE); + if (isUse){ + obj.getVar("flowerbladedance_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("flowerbladedance_move").setInt(2, 150); + obj.getVar("flowerbladedance").setBool(0, false); + obj.getVar("flowerbladedance_jump").setBool(0, false); + + obj.sq_IntVectClear(); + if(obj.sq_GetState() == STATE_JUMP){ + obj.sq_IntVectPush(4); + obj.getVar("flowerbladedance_move").setInt(2, 250); + obj.getVar("flowerbladedance_jump").setBool(0, true); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Flowerbladedance_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_CAST_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_FIRST_BODY); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_STARTJUMP_BODY); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 1, skill_level); + if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ + totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level) * 133 / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_BODY); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_THIRD_BODY); + obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("flowerbladedance_move").setInt(1, sq_GetZPos(obj)); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 1); + obj.setTimeEvent(10, delaySum / 10, 10, true); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 2, skill_level); + if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level); + if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ + totalDamage = totalDamage * 133 / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 173)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 5: + if(obj.getVar("flowerbladedance").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN_BODY); + else{ + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN2_BODY); + } + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 3, skill_level); + if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage * 2; + if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ + totalDamage = totalDamage * 150 * 133 / 10000; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 174)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/downattack_dust03.ani", 0, 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Flowerbladedance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ + if(subState == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155)); + sq_SimpleMoveToNearMovablePos(obj, 200); + sq_setCurrentAxisPos(obj, 2, 250); + break; + } + else if(subState == 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + switch(subState){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", 0, 0, 0); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 100)); + sq_SimpleMoveToNearMovablePos(obj, 200); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155)); + sq_SimpleMoveToNearMovablePos(obj, 200); + sq_setCurrentAxisPos(obj, 2, 250); + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffectdown_jumpline.ani", 0, 0, 0); + break; + } + break; + case 5: + // if(obj.getVar("flowerbladedance").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Flowerbladedance_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 10: + local srcX = obj.getVar("flowerbladedance_move").getInt(0); + local srcZ = obj.getVar("flowerbladedance_move").getInt(1); + local moveX = obj.getVar("flowerbladedance_move").getInt(2); + local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 10); + local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 2, vz); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("flowerbladedance_move").setInt(2, 0); + } + break; + } +} + +function onAttack_Flowerbladedance_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Flowerbladedance_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 0: obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_01"); break; + case 1: + sq_SetMyShake(obj, 1, 30); + sq_flashScreen(obj, 0, 50, 0, 89, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case 1: + switch(frameIndex){ + case 0: sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 1: + obj.sq_PlaySound("FLOWER_BLADE_DANCE_01"); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/flowerbladedance_delay_first002.ani", 0, 0, 0); + break; + case 3: + obj.resetHitObjectList(); + break; + } + break; + case 2: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02"); + obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP"); + sq_SetMyShake(obj, 1, 150); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/flowerbladedance_delay_second001.ani", 0, 0, 0); + break; + case 4: + obj.resetHitObjectList(); + break; + } + break; + case 3: + switch(frameIndex){ + case 0: + sq_SetMyShake(obj, 1, 150); + sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02"); + obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP"); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second001.ani", 0, 0, 0); + break; + case 3: + obj.resetHitObjectList(); + obj.sq_PlaySound("FLOWER_BLADE_DANCE_02"); + break; + } + break; + case 4: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("FLOWER_BLADE_DANCE_03"); + obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_03"); + sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 160); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/downattack_dust02.ani", 0, 0, 0); + break; + case 5: + obj.resetHitObjectList(); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/flowerbladedance_delay_front_third004.ani", 0, 0, 0); + break; + } + break; + case 5: + switch(frameIndex){ + case 0: sq_flashScreen(obj, 10, 50, 100, 178, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 2: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", -500, 0, 70); + case 4: + sq_SetMyShake(obj, 5, 320); + //`finish spin` 7 0 -12 + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/flower_spin.ani", 7, 0, -12); + break; + case 6: + sq_SetMyShake(obj, 1, 50); + //`EnableHermitTripleStep` 0 0 0 + //`rapid step enable` 0 0 0 + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + break; + } +} + +function onChangeSkillEffect_Flowerbladedance_bykk(obj, skillIndex, receiveData) +{ + if(!obj) return; +} + +function onEndState_Flowerbladedance_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_FLOWERBLADEDANCE){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Flowerbladedance_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Flowerbladedance_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + + local curAni = sq_GetCurrentAnimation(obj); + local curframe = obj.sq_GetCurrentFrameIndex(curAni); + local ststeTime = obj.sq_GetStateTimer(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + if(obj.getVar("flowerbladedance").getBool(0) == false){ + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("flowerbladedance").setBool(0, true); + } + break; + case 5: + if(obj.getVar("flowerbladedance").getBool(0) == false){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(0, 7); + local srcX = obj.getVar("flowerbladedance_move").getInt(0); + local baseX = obj.getVar("flowerbladedance_move").getInt(10); + local v = sq_GetUniformVelocity(srcX, baseX, currentT, fireT); + sq_setCurrentAxisPos(obj, 0, v); + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Gonewiththepetal_bykk(obj) +{ + if (!obj) return 0; + local isUseSkill = obj.sq_IsUseSkill(249); + if (isUseSkill){ + obj.sq_IntVectClear(); + if(obj.getState() == STATE_JUMP) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Gonewiththepetal_bykk(obj, state, datas, isResetTimer) +{ + obj.sq_StopMove(); + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + switch(subState){ + case 0: + case 10: + if(subState == 0){ + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALREADY_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/ready_07.ani", 0, 1, 0); + } + else if(subState == 10){ + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPREADY_BODY); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/jumpready_07.ani", 0, 1, 0); + } + obj.getVar("gone_target").clear_obj_vector(); + obj.getVar("gone_target_boss").clear_obj_vector(); + obj.getVar("gone_target_named").clear_obj_vector(); + obj.getVar("gone_target_normal").clear_obj_vector(); + local aniPath = "character/swordman/effect/animation/atgonewiththepetal/rangecheck_01.ani"; + createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + local rangeX = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 0); + local rangeY = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 1); + local objectManager = obj.getObjectManager();//得到對象管理器 + local objectNumber = objectManager.getCollisionObjectNumber();//總數 + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && isFrontObject(obj,object) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= rangeY){ + if(sq_IsBoss(activeObj)) obj.getVar("gone_target_boss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("gone_target_named").push_obj_vector(activeObj); + else obj.getVar("gone_target_normal").push_obj_vector(activeObj); + } + } + } + if(obj.getVar("gone_target_boss").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_boss").get_obj_vector(0)); + else if(obj.getVar("gone_target_named").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_named").get_obj_vector(0)); + else if(obj.getVar("gone_target_normal").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_normal").get_obj_vector(0)); + break; + case 1: + case 11: + if(subState == 1) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALATTACK_BODY); + else if(subState == 11) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPATTACK_BODY); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 0, 1.0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attackb_02.ani", 150, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attacka.ani", 150, 1, 0); + local aniPath = "character/swordman/effect/animation/atgonewiththepetal/attackc.ani"; + createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); + break; + } +} + +function onTimeEvent_Gonewiththepetal_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + if(obj.getVar("gone_target").get_obj_vector_size() > 0){ + local targetObj = obj.getVar("gone_target").get_obj_vector(0); + local moveX = sq_GetDistancePos(sq_GetXPos(targetObj), obj.getDirection(), -130); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + local subState = obj.getSkillSubState(); + if(subState == 10) sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_IntVectClear(); + if(subState == 0) obj.sq_IntVectPush(1); + else if(subState == 10) obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + if(obj.getSkillSubState() == 10){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } +} + +function onAttack_Gonewiththepetal_bykk(obj, damager, boundingBox, isStuck) +{ + if (!obj || !damager) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 11: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 1, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 2, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 8); + if(sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 18) > 0) hitMax = 1; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(damager) / 2 * 0, obj.getDirection(), 3,SKILL_VAGABOND_GONEWITHTHEPETAL, 1, totalDamage, hitMax, damageRate, group, uniqueId, 0, 0, 0, 1); + } + break; + } +} + +function onEnterFrame_Gonewiththepetal_bykk(obj, frameIndex) +{ + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("R_SW_GONE_WITH_THE_PETAL_01"); + obj.sq_PlaySound("PLAY_MY_GLOBAL"); + break; + case 2: + obj.sq_PlaySound("GONE_WITH_THE_PETAL_CAST"); + obj.sq_PlaySound("PLAY_MY_GLOBAL"); + case 3: + obj.setTimeEvent(1, 80, 1, false); + break; + } + break; + case 1: + case 11: + switch(frameIndex){ + case 1: + obj.sq_PlaySound("GONE_WITH_THE_PETAL_ABSORB"); + obj.sq_PlaySound("PLAY_MY_GLOBAL"); + break; + case 3: + //`EnableHermitTripleStep` 0 0 0 + //`rapid step enable` 0 0 0 + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + break; + } +} + +function onKeyFrameFlag_Gonewiththepetal_bykk(obj, flagIndex) +{ + if(!obj) return; +} + +function onProcCon_Gonewiththepetal_bykk(obj) +{ + if(!obj) return; +} + +function onEndCurrentAni_Gonewiththepetal_bykk(obj) +{ + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + //obj.setTimeEvent(1, 80, 1, true); + break; + case 1: + case 11: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEndState_Gonewiththepetal_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_GONEWITHTHEPETAL){ + sq_SimpleMoveToNearMovablePos(obj,200); + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Hermittriplestep_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_HERMITTRIPLESTEP); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Hermittriplestep_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.getVar("hermittriplestep").setBool(0, false); + obj.getVar("hermittriplestep_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("hermittriplestep_move").setInt(11, sq_GetYPos(obj)); + obj.getVar("hermittriplestep_tar").clear_obj_vector(); + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPCAST); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/cast_dust.ani", 0, 0, 0); + // obj.setTimeEvent(1, 25, -1, false); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178)); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_front_leef03.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_back_leef02.ani", 0, -1, 0); + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && !object.isInDamagableState(obj)){ + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + local tarPosX = sq_GetXPos(object), tarPosY = sq_GetYPos(object); + if(direction == ENUM_DIRECTION_RIGHT){ + if((tarPosX > xPos && tarPosX - xPos <= 640) || (tarPosX < xPos && xPos- tarPosX <= 260)){ + if(sq_Abs(tarPosY - yPos) <= 100){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + sq_SetCustomDamageType(activeObj, false, 0); + if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj); + local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + } + } + else if(direction == ENUM_DIRECTION_LEFT){ + if((tarPosX < xPos && xPos- tarPosX <= 640) || (tarPosX > xPos && tarPosX - xPos <= 260)){ + if(sq_Abs(tarPosY - yPos) <= 100){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + sq_SetCustomDamageType(activeObj, false, 0); + if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj); + local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + } + } + } + } + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178)); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_front_leef03.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_back_leef02.ani", 0, -1, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK3); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178)); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_front_leef01.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_back_leef02.ani", 0, -1, 0); + break; + case 4: + obj.removeAllTimeEvent(); + if(obj.getVar("hermittriplestep").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1FRONT); + else{ + sq_setCurrentAxisPos(obj, 0, obj.getVar("hermittriplestep_move").getInt(10)); + sq_setCurrentAxisPos(obj, 1, obj.getVar("hermittriplestep_move").getInt(11)); + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1); + } + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lasta_leef.ani", 0, 0, 0); + break; + case 5: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST2); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_HERMITTRIPLESTEP, SKILL_VAGABOND_HERMITTRIPLESTEP, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 177)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lastb_effect02.ani", 0, 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Hermittriplestep_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true); + switch(subState){ + case 0: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 200)); + // sq_SimpleMoveToNearMovablePos(obj,300); + break; + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 380)); + // sq_SimpleMoveToNearMovablePos(obj,400); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 590)); + // sq_SimpleMoveToNearMovablePos(obj,600); + break; + } + break; + case 5: + local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i); + if(targetObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"); + } + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_Hermittriplestep_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 1: + obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_01"); + obj.sq_PlaySound("FLOWER_BLADE_SLASH_CAST"); + sq_flashScreen(obj, 60, 420, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case 1: + case 2: + switch(frameIndex){ + case 1: + obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH"); + sq_flashScreen(obj, 0, 120, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case 3: + switch(frameIndex){ + case 1: + sq_flashScreen(obj, 0, 120, 360, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH"); + break; + } + break; + case 4: + if(obj.getVar("hermittriplestep").getBool(0) == false){ + switch(frameIndex){ + case 1: + obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN"); + break; + case 6: + sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 14: + obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02"); + break; + } + } + else{ + switch(frameIndex){ + case 1: + obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN"); + break; + case 2: + sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 9: + obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02"); + break; + } + } + break; + case 5: + switch(frameIndex){ + case 1: + sq_flashScreen(obj, 0, 0, 600, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + obj.sq_PlaySound("FLOWER_BLADE_SLASH_SHEATHE"); + sq_SetMyShake(obj, 6, 250); + break; + } + break; + } +} + +function onChangeSkillEffect_Hermittriplestep(obj, skillIndex, receiveData) +{ + if(!obj || skillIndex != 225) return; +} + +function onTimeEvent_Hermittriplestep_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local srcX = obj.getVar("hermittriplestep_move").getInt(10); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), 20 * timeEventCount);//根據方嚮運算當前數值 + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 + else obj.stopTimeEvent(1); + break; + } +} + +function onAttack_Hermittriplestep_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 3: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("hermittriplestep_tar").is_obj_vector(damager)) obj.getVar("hermittriplestep_tar").push_obj_vector(damager); + local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + case 5: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/athermittriplestep/hit_effect02.ani", 0, 0, sq_GetObjectHeight(damager) / 2); + } + break; + } +} + +function onEndState_Hermittriplestep_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_HERMITTRIPLESTEP){ + local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i); + if(targetObj){ + local colObj = sq_GetCNRDObjectToActiveObject(targetObj); + CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"); + } + } + } + sq_SimpleMoveToNearMovablePos(obj,600); + } +} + +function onKeyFrameFlag_Hermittriplestep_bykk(obj, flagIndex) +{ + local subState = obj.getSkillSubState(); + if(subState == 5 && flagIndex == 0){ + local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i); + if(targetObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(targetObj); + sq_SendHitObjectPacketWithNoStuck(obj, colObj, 0, 0, sq_GetObjectHeight(colObj) / 2); + } + } + } + } +} + +function HermittriplestepSearchTarget(obj) +{ + if(IsInterval(obj, 5)) + { + local objectManager = obj.getObjectManager(); + for(local i=0; i 0) + { + local direction = obj.sq_GetInputDirection(0); + + if(obj.getDirection() == direction) + { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_SendChangeSkillEffectPacket(obj, 225); + } + + } +} + +function onProcCon_Hermittriplestep_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + + local curAni = sq_GetCurrentAnimation(obj); + local curframe = obj.sq_GetCurrentFrameIndex(curAni); + local aniSumTime = sq_GetDelaySum(curAni); + local ststeTime = obj.sq_GetStateTimer(); + + switch(subState){ + case 1: + case 2: + case 3: + if(obj.getVar("hermittriplestep").getBool(0) == false){ + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("hermittriplestep").setBool(0, true); + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Inhalation_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_INHALATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Inhalation_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONCAST); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local range = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 2); + obj.getVar("inhalation_target").clear_obj_vector(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,300,0,0,obj.getDirection(),3,SKILL_VAGABOND_INHALATION,1,range,0,0,0,0,0,0,0,0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONGRAB); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local baseX = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 1); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(1, delaySum, 1, false); + + local size = obj.getVar("inhalation_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, baseX, 0, 0, delaySum, true, addAppendage); + createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atinhalation/dust.ani", true, obj.getDirection(), sq_GetXPos(targetObj), sq_GetYPos(targetObj), 0, ENUM_DRAWLAYER_BOTTOM); + } + } + } + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONTHROW); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_INHALATION); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_INHALATION, 0, skill_level); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 6); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 152)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local size = obj.getVar("inhalation_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); + if(targetObj){ + sq_SendHitObjectPacket(obj, targetObj, 0, 0, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, targetObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_INHALATION, 2, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1); + } + } + } + break; + } +} + +function onEndCurrentAni_Inhalation_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + local size = obj.getVar("inhalation_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut"); + } + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Inhalation_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; +} + +function onAttack_Inhalation_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Inhalation_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 2 && frameIndex == 1){ + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + } +} + +function onEndState_Inhalation_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_INHALATION){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + local size = obj.getVar("inhalation_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut"); + } + } + } + } +} + +function onKeyFrameFlag_Inhalation_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Inhalation_bykk(obj) +{ + if(!obj) return; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Moonlightslash_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_MOONLIGHTSLASH); + if (isUse){ + obj.sq_IntVectClear(); + // print("sub ="+sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12)); + if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0) obj.sq_IntVectPush(6); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Moonlightslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_READY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 179)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(3, delay, 1, false); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_CUT); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 180)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(1, delaySum / 18, 17, false); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_DASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("moonlightslash_move").setInt(12, 355); + obj.getVar("moonlightslash_move").setInt(13, 0); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 181)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_UPPER); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("moonlightslash_move").setInt(12, -400); + obj.getVar("moonlightslash_move").setInt(13, 230); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 3, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 182)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("moonlightslash_move").setInt(12, 45); + obj.getVar("moonlightslash_move").setInt(13, -sq_GetZPos(obj)); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 5, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 183)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 5: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH_UPPER); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("moonlightslash_move").setInt(12, -45); + obj.getVar("moonlightslash_move").setInt(13, 0); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 6, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 184)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 6: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.getVar("moonlightslash_move").setInt(12, 45); + obj.getVar("moonlightslash_move").setInt(13, 300); + break; + case 7: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH_EXP); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 7, 1.0); + if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0){ + totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 23.0); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 185)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj)); +} + +function onTimeEvent_Moonlightslash_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local srcZ = obj.getVar("moonlightslash_move").getInt(11); + local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + //if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) < 1) sendAwakeCutinInfo(obj,37); + break; + } +} + +function onEndCurrentAni_Moonlightslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Moonlightslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEnterFrame_Moonlightslash_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 5: + obj.sq_PlaySound("MOON_LIGHT_SLASH_CAST"); + obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_01"); + sq_flashScreen(obj, 100, 4600, 0, 204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 50); + break; + case 9: obj.sq_PlaySound("MOON_LIGHT_SLASH_STAB"); break; + case 10: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step01b_dust07.ani", 0, 0, 0); break; + case 11: sq_SetMyShake(obj, 4, 100); break; + case 12: + sq_flashScreen(obj, 0, 50, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 9, 200); + break; + } + break; + case 1: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("MOON_LIGHT_SLASH_HACK"); + sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + case 6: + case 9: + case 12: + case 15: + case 18: + sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 19: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_02"); break; + } + break; + case 2: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("MOON_LIGHT_SLASH_DASH"); + sq_flashScreen(obj, 0, 100, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 240); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step03b_dust03.ani", 0, 0, 0); + break; + case 3: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_03"); break; + } + break; + case 3: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("MOON_LIGHT_SLASH_JUMP"); + sq_SetMyShake(obj, 3, 10); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04b_dust01.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04c_atk.ani", -220, 0, 70); + break; + } + break; + case 4: + switch(frameIndex){ + case 0: + sq_flashScreen(obj, 0, 40, 0, 102, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step06b_dust03.ani", 20, 0, -280); + break; + case 1: + obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_05"); + obj.sq_PlaySound("MOON_LIGHT_SLASH_BLADE"); + sq_SetMyShake(obj, 7, 150); + break; + } + break; + case 5: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("MOON_LIGHT_SLASH_UPPER"); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step07_spin.ani", 0, 0, 0); + break; + } + break; + case 6: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("MOON_LIGHT_SLASH_RISE"); + sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08c_beam.ani", 0, 0, 0); + break; + case 2: + obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_06"); + sq_flashScreen(obj, 0, 20, 0, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08b_leaf00.ani", 0, -1, -200); break; + case 4: sq_flashScreen(obj, 0, 100, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 12: + obj.sq_PlaySound("MOON_LIGHT_SLASH_CHARGE"); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(12, 14); + obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj)); + obj.setTimeEvent(2, delaySum / 10, 10, true); + break; + } + break; + case 7: + switch(frameIndex){ + case 0: + obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_07"); + obj.sq_PlaySound("MOON_LIGHT_SLASH_EXP"); + sq_flashScreen(obj, 0, 60, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 10, 700); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09a_atkmain.ani", 0, 1, 0); + break; + case 1: + //`EnableHermitTripleStep` 0 0 0 + //`rapid step enable` 0 0 0 + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09b_leafa00.ani", 0, 2, 0); + break; + } + break; + } +} + +function onEndState_Moonlightslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_MOONLIGHTSLASH){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onProc_Moonlightslash_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Moonlightslash_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Moonlightslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 0 || subState == 1 || subState == 7) return; + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(0, 3); + switch(subState){ + case 3: fireT = pAni.getDelaySum(false); break; + case 4: fireT = pAni.getDelaySum(0, 1); break; + case 5: fireT = pAni.getDelaySum(false); break; + case 6: fireT = pAni.getDelaySum(0, 2); break; + } + if(subState == 6 && currentT > fireT) return; + local srcX = obj.getVar("moonlightslash_move").getInt(10); + local srcZ = obj.getVar("moonlightslash_move").getInt(11); + local MoveX = obj.getVar("moonlightslash_move").getInt(12); + local MoveZ = obj.getVar("moonlightslash_move").getInt(13); + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 2, srcZ + vz); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("moonlightslash_move").setInt(12, 0); + } +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Nearblow_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_NEARBLOW); + if (isUse){ + if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0) obj.getVar("Nearblow_Bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Nearblow_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + obj.sq_PlaySound("SW_NEAR_BLOW"); + obj.getVar("nearblow").setBool(0,false); + obj.getVar("nearblow_target").clear_obj_vector(); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACK); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 2: + if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -150), sq_GetYPos(obj))) obj.getVar("nearblow").setBool(0, true); + if(obj.getVar("nearblow").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEFRONTSLASH); + else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACKSLASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + if(obj.getVar("nearblow").getBool(0) == false){ + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local size = obj.getVar("nearblow_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -150, 0, 0, delaySum, true, addAppendage); + } + } + } + } + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 1, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_Nearblow_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + if(obj.getVar("nearblow_target").get_obj_vector_size() < 1){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + local size = obj.getVar("nearblow_target").get_obj_vector_size(); + if(size > 0 && obj.getVar("nearblow").getBool(0) == false){ + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); + local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1); + } + } + } + if(obj.getVar("nearblow").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Nearblow_bykk(obj, timeEventIndex, timeEventCount) +{} + +function onAttack_Nearblow_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){ + if(obj.getVar("Nearblow_Bool").getBool(0)){ + obj.getVar("Nearblow_Bool").setBool(0, false); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11); + local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1); + } + } + else{ + if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ + if(obj.getVar("Nearblow").getBool(0) == false) obj.getVar("Nearblow").setBool(0,true); + obj.getVar("nearblow_target").push_obj_vector(damager); + local path = "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); + if(addAppendage){ + sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 0, ENUM_DIRECTION_NEUTRAL, addAppendage); + sq_MoveToAppendageForce(damager, obj, damager, 0, 0, 20, 100, true, addAppendage); + } + } + else if(sq_IsFixture(damager)){ + obj.getVar("nearblow").setBool(0, true); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11); + local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1); + return; + } + } + } + break; + } + +} + +function onEnterFrame_Nearblow_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local size = obj.getVar("Nearblow").get_obj_vector_size(); + + switch(subState){ + case 0: + if(frameIndex == 3) sq_SetMyShake(obj, 8, 40); + break; + case 2: + if(obj.getVar("nearblow").getBool(0)){ + if(frameIndex == 5) sq_SetMyShake(obj, 10, 100); + else if(frameIndex == 6){ + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + } + else if(frameIndex == 9){ + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); + local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); + local size = obj.getVar("nearblow_target").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); + cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1); + } + } + } + } + else{ + if(frameIndex == 2){ + sq_SetMyShake(obj, 15, 100); + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + } + } + } +} + +function onEndState_Nearblow_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_NEARBLOW){ + local size = obj.getVar("nearblow_target").get_obj_vector_size(); + if(size > 0 && obj.getVar("nearblow").getBool(0) == false){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); + } + } + } + + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Nearblow_bykk(obj, flagIndex) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + switch(flagIndex){ + case 1: + if(obj.getVar("nearblow").getBool(0)){ + local size = obj.getVar("nearblow_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); + if(targetObj){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + } + } + break; + } + break; + } +} + +function onProcCon_Nearblow_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(obj.getVar("nearblow").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.getVar("nearblow").setBool(0, true); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) obj.getVar("nearblow").setBool(0, true); + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Overblowslash_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_OVERBLOWSLASH); + if (isUse){ + obj.sq_StopMove(); + obj.sq_IntVectClear(); + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0){ + obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj)); + if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0) obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2) / 2); + else obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2)); + obj.sq_IntVectPush(1); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Overblowslash_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHREADY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("OVERBLOW_SLASH_DASH"); + obj.sq_PlaySound("SW_OVERBLOW_SLASH"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHDASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atoverblowslash/overblowslashdash_smoke.ani", 0, 0, 0); + obj.sq_PlaySound("OVERBLOW_SLASH_DASH"); + obj.sq_PlaySound("SW_OVERBLOW_SLASH"); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 159)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHSTART_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("OVERBLOW_SLASH_01"); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level); + local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 161)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0,16); + obj.setTimeEvent(1, delaySum / (hitMax + 1), hitMax, true); + break; + } +} + +function onTimeEvent_Overblowslash_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } +} + +function onEndCurrentAni_Overblowslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Overblowslash_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + break; + case 1: + break; + } +} + +function onEnterFrame_Overblowslash_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(frameIndex == 1){ + + } + else if(frameIndex == 22){ + } + else if(frameIndex == 23){ + } + break; + } +} + +function onEndState_Overblowslash_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_OVERBLOWSLASH){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } + +} + +function onKeyFrameFlag_Overblowslash_bykk(obj, flagIndex) +{ + if (!obj) return true; + local subState = obj.getSkillSubState(); + if(subState != 2) return true; + switch(flagIndex){ + case 1111: + sq_SetMyShake(obj, 2, 650); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(1,1); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4, skill_level); + local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 3, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5, skill_level); + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 9) > 0 || OVERBLOWSLASH_STONE > 0){ + hitMax = (hitMax.tofloat() * (1 + 0.8 + 0.67)).tointeger(); + sizeRate = (sizeRate.tofloat() * 1.25).tointeger(); + totalDamage = (totalDamage.tofloat() * 1.07).tointeger(); + } + cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_OVERBLOWSLASH,1,totalDamage,hitMax,sizeRate,damageRate,delaySum,0,0,0,1); + break; + case 1112: + obj.resetHitObjectList(); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 160)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + sq_SetMyShake(obj,9,300); + sq_flashScreen(obj, 200, 50, 0, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1113: + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + return true; +} + +function onProcCon_Overblowslash_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcX = obj.getVar("overblowslash_move").getInt(10); + local MoveX = obj.getVar("overblowslash_move").getInt(11); + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("overblowslash_move").setInt(11, 0); + } + break; + case 2: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Rapidstep_bykk(obj)//一花渡江 +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_RAPIDSTEP); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Rapidstep_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_RAPIDSTEP_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("RAPID_STEP"); + obj.sq_PlaySound("SW_GUARD"); + + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(1,delaySum / 10, 9, false); + + local moveX = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 0); + obj.getVar("rapidstep_move").clear_vector(); + obj.getVar("rapidstep_move").push_vector(sq_GetXPos(obj)); + obj.getVar("rapidstep_move").push_vector(sq_GetZPos(obj)); + obj.getVar("rapidstep_move").push_vector(moveX); + break; + } +} + +function onTimeEvent_Rapidstep_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_RAPIDSTEP, SKILL_VAGABOND_RAPIDSTEP, 0, 1.0) + 100; + local balance = [100,210,140,230,120,195,110,120,100]; + local offsetZ = [50,-40,80,-30,90,-20,70,30,0]; + local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 1) * balance[timeEventCount - 1] / 100; + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, offsetZ[timeEventCount - 1] - sq_GetZPos(obj), obj.getDirection(), 3, SKILL_VAGABOND_RAPIDSTEP, 1, totalDamage, sizeRate, timeEventIndex, 0, 0, 0, 0, 0, 1); + break; + } +} + +function onEndCurrentAni_Rapidstep_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_Rapidstep_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/enddust_00.ani", 0, 1, 0); + break; + case 6: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/startdust_00.ani", 0, 1, 0); + break; + } + break; + } +} + +function onEndState_Rapidstep_bykk(obj, newState) +{ + if(!obj) return; +} + +function onProcCon_Rapidstep_bykk(obj) +{ + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcX = obj.getVar("rapidstep_move").get_vector(0); + local srcZ = obj.getVar("rapidstep_move").get_vector(1); + local MoveX = obj.getVar("rapidstep_move").get_vector(2); + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetAccel(srcZ, 30, currentT, fireT / 2, true); + if(currentT > fireT / 2) vz = sq_GetAccel(30, 0, currentT - fireT / 2, fireT / 2, false); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("rapidstep_move").set_vector(0, sq_GetXPos(obj)); + obj.getVar("rapidstep_move").set_vector(2, 0); + } + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onKeyFrameFlag_Rapidstep_bykk(obj, flagIndex) +{ + if (!obj) return; + switch(flagIndex){ + case 0: + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Revolvingsword_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_REVOLVINGSWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Revolvingsword_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDREADY); + obj.sq_PlaySound("SW_REVOLVING_SWORD"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDSPIN); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 150)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0); + if(true) hitMax = hitMax + sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3); + obj.getVar("revolvingsword").setInt(10, hitMax); + obj.getVar("revolvingsword").setInt(11, 0); + local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1); + obj.setTimeEvent(1, hitTime, 1, true); + break; + case 2: + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDFINISH); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 149)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Revolvingsword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onTimeEvent_Revolvingsword_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 0: + break; + case 1: + if(obj.getVar("revolvingsword").getInt(11) >= obj.getVar("revolvingsword").getInt(10)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 2; + local gapByInputMin = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 16; + local gapByInputMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 8; + + obj.getVar("revolvingsword").setInt(11, obj.getVar("revolvingsword").getInt(11) + 1); + + if(inputConut >= inputMax){ + obj.setTimeEvent(1, gapByInputMin, 1,false); + obj.resetHitObjectList(); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(333.3); + } + else{ + obj.setTimeEvent(1, gapByInputMax, 1,false); + obj.resetHitObjectList(); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(100.0); + } + } + break; + } + +} + +function onEnterFrame_Revolvingsword_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 2 && frameIndex == 5){ + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + } +} + +function onEndState_Revolvingsword_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_REVOLVINGSWORD){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Revolvingsword_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Revolvingsword_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_Soarcut_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_SOARCUT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Soarcut_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local count = sq_GetIntData(obj,213, 5); + switch(subState){ + case 0: + obj.getVar("soarcut_target").clear_obj_vector(); + + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH_MAGIC); + else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcuta_leaf_00.ani", 0, 1, 0); + + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150); + if(obj.isMovablePos(offsetX, sq_GetYPos(obj))) obj.getVar("soarcut").setInt(10, 150); + else obj.getVar("soarcut").setInt(10, 0); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 0, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 156)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTJUMP); + break; + case 2: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASHEX); + else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutb_leaf_b.ani", 0, 1, 0); + else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 1, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFALLINGEX); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 2, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_SOARCUT, 5); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + currentAni.setSpeedRate(speedRate.tofloat() * 2.5); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delaySum / (hitMax + 1), hitMax, true); + + local size = obj.getVar("soarcut_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); + sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), delaySum, true, addAppendage); + } + } + } + break; + case 4: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECTEX); + else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECT); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 3, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 155)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_Soarcut_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("soarcut_target").get_obj_vector_size() < 1){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.getVar("soarcut_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("soarcut_move").setInt(11, sq_GetZPos(obj)); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 4: + local size = obj.getVar("soarcut_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Soarcut_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ + obj.getVar("soarcut_target").push_obj_vector(damager); + local path = "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); + sq_MoveToAppendageForce(damager, obj, obj, obj.getVar("soarcut").getInt(10), 0, 200, 160, true, addAppendage); + sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , addAppendage); + } + } + break; + case 4: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); + } + break; + } + +} + +function onTimeEvent_Soarcut_bykk(obj, timeEventIndex, timeEventCount) +{ + if (!obj) return false; + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } +} + +function onEnterFrame_Soarcut_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 3: + switch(frameIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0); + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0); + break; + case 6: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0); + break; + } + break; + case 4: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0){ + if(frameIndex == 2){ + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + } + } + break; + } +} + +function onEndState_Soarcut_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_SOARCUT){ + local size = obj.getVar("soarcut_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); + } + } + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onProcCon_Soarcut_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local ststeTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0,1); + if(ststeTime > delaySum) break; + local baseX = obj.getVar("soarcut_move").getInt(10); + local baseZ = obj.getVar("soarcut_move").getInt(11); + local vx = sq_GetUniformVelocity(0, obj.getVar("soarcut").getInt(10), ststeTime, delaySum); + local vz = sq_GetAccel(0, 200, ststeTime, delaySum, false); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(baseX, obj.getDirection(), vx)); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + local ststeTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local vz = sq_GetAccel(200, 0, ststeTime, delaySum, false); + sq_setCurrentAxisPos(obj, 2, vz); + if(sq_GetZPos(obj) <= 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } +} + +function onKeyFrameFlag_Soarcut_bykk(obj, flagIndex) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + switch(flagIndex){ + case 1: + local size = obj.getVar("soarcut_target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + break; + } + break; + } + +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function checkExecutableSkill_Threeside_bykk(obj) +{ + if (!obj) return 0; + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_THREESIDE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Threeside_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.getVar("Threeside").setBool(0,false); + obj.sq_PlaySound("SW_THREE_SIDE"); + + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDEEX); + else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDE); + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3, skill_level); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 151)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDEEX); + else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDE); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Threeside_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("Threeside").getBool(0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onAttack_Threeside_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + break; + case 1: + break; + } + +} + +function onEnterFrame_Threeside_bykk(obj, frameIndex) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) < 1 && frameIndex == 6 && obj.getVar("Threeside").getBool(0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true); + } + switch(frameIndex){ + case 3: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_12.ani", 0, 3, 0); + break; + case 5: + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_11.ani", 0, 4, 0); + case 6: + obj.resetHitObjectList(); + break; + } + break; + } +} + +function onEndState_Threeside_bykk(obj, newState) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Threeside_bykk(obj, flagIndex) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(flagIndex == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 4, skill_level); + if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,2,totalDamage,0,0,0,0,0,0,0,1); + else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,1,totalDamage,0,0,0,0,0,0,0,1); + } + break; + } +} + +function onProcCon_Threeside_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("Threeside").getBool(0) == false){ + local curAni = sq_GetCurrentAnimation(obj); + local curframe = obj.sq_GetCurrentFrameIndex(curAni); + obj.setSkillCommandEnable(SKILL_VAGABOND_THREESIDE, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_VAGABOND_THREESIDE); + if(b_useskill != -1 && curframe > 1) obj.getVar("Threeside").setBool(0,true); + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +function checkExecutableSkill_Zweivoltageex_bykk(obj) +{ + if (!obj) return 0; + if(obj.getVar("zwei").get_obj_vector_size() > 0 && (sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true); + return 0; + } + local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_ZWEIVOLTAGEEX); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_Zweivoltageex_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEHORIZONSLASH); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICALCAST); + local currentAni = sq_GetCurrentAnimation(obj); + local delaySum = currentAni.getDelaySum(0,0); + local size = obj.getVar("zwei_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("zwei_tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut"); + if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, obj, 100, 0, 200, delaySum, true, masterAppendage); + } + } + } + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICAL); + local currentAni = sq_GetCurrentAnimation(obj); + local delaySum = currentAni.getDelaySum(0,0); + local size = obj.getVar("zwei_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("zwei_tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut"); + if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, -sq_GetZPos(activeObj), delaySum, true, masterAppendage); + } + } + } + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEEXPLOSION); + local attackObj = obj.getVar("zwei").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Zweivoltageex_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onEnterFrame_Zweivoltageex_bykk(obj, frameIndex) +{ + if(!obj || !obj.isMyControlObject()) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + switch(frameIndex){ + case 1: obj.sq_PlaySound("SW_CROSS_SWORD"); break; + case 3: obj.sq_PlaySound("CROSS_SWORD_READY"); break; + case 13: + obj.sq_PlaySound("CROSS_SWORD_01"); + sq_SetMyShake(obj, 5, 50); + sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //`create zwei voltage horizon` 119 -1 62 + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level); + local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1); + local isStone = 0; + if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){ + isStone = 1; + totalDamage = totalDamage * 2; + totalDamage2 = (totalDamage2.tofloat() * 1.88).tointeger(); + lifeTime = lifeTime + 1500; + } + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 119, -1, 62, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, totalDamage, lifeTime, damageRate, isStone, 0, 0, 0, 0, 1); + break; + case 25: + if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + break; + } + break; + case 1: + switch(frameIndex){ + case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_a.ani", 0, 1, 0); break; + case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_b.ani", 0, 1, 0); break; + } + break; + case 2: + switch(frameIndex){ + case 1: + obj.sq_PlaySound("CROSS_SWORD_02"); + sq_SetMyShake(obj, 10, 100); + sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //`create zwei voltage vertical` 100 -1 69 + local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX); + local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1); + cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 100, -1, 69, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1, totalDamage, lifeTime, damageRate,0,0,0,0,0,1); + obj.getVar("rapid_step_enable").setBool(0, true); + obj.getVar("EnableHermitTripleStep").setBool(0, true); + break; + } + break; + } +} + +function onAttack_Zweivoltageex_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; +} + +function onEndState_Zweivoltageex_bykk(obj, newState) +{ + if(!obj) return; + if(newState != SKILL_VAGABOND_ZWEIVOLTAGEEX){ + if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); + if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); + } +} + +function onKeyFrameFlag_Zweivoltageex_bykk(obj, flagIndex) +{ + if (!obj) return; +} + +function onProcCon_Zweivoltageex_bykk(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local currentAni = sq_GetCurrentAnimation(obj); + local currentT = sq_GetCurrentTime(currentAni); + local delaySum = currentAni.getDelaySum(0,0); + switch(subState){ + case 1: + local vz = sq_GetAccel(0, 200, currentT, delaySum, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 2: + local vz = sq_GetAccel(200, 0, currentT, delaySum, false); + if(currentT > delaySum) vz = 0; + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + diff --git a/user/116.205.165.25/4_fighter_1.c b/user/116.205.165.25/4_fighter_1.c new file mode 100644 index 0000000..1520861 --- /dev/null +++ b/user/116.205.165.25/4_fighter_1.c @@ -0,0 +1,3620 @@ + +//抛沙 +function checkExecutableSkill_ThrowSand(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_THROWSAND); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_THROWSAND, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ThrowSand(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ThrowSand(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(0); + obj.setCurrentAnimation(Ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(400.0); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(0); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.3, 1.3); + obj.sq_PlaySound("VERRICKTM_SAND"); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false); + obj.setTimeEvent(3, currentAni.getDelaySum(0, 2), 1, false); + break; + } +} + +function onEndCurrentAni_ThrowSand(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_THROWSAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ThrowSand(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_ThrowSand(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_ThrowSand(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_THROWSAND, -1, 2, 1.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 1, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW))) / 100; + } + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_THROWSAND, 2); + local offset = 0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) offset = -40; + sq_CreateParticle("passiveobject/1_fighter_bykk/particle/throwsandparticle1.ptl", obj, offset, 0, 50, true, 30, 0, 1); + // sq_CreateParticle("passiveobject/character/fighter/particle/throwsandparticle2.ptl", obj, 50, 0, 50, true, 100, 0, 1); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/fighter/animation/throwsand2_"+sq_getRandom(1,2).tostring()+".ani", 100, 0, 60); + sq_SetCustomRotate(pooledObj, sq_ToRadian(sq_getRandom(100, 200).tofloat())); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(2, 2), 1, false); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_THROWSAND); + local proc = sq_GetLevelData(obj, SKILL_FWBYKK_THROWSAND, 0, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_THROWSAND, 3, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + local decreaseRate = sq_GetLevelData(obj, SKILL_FWBYKK_THROWSAND, 4, skillLevel); + local decreaseRate2 = sq_GetLevelData(obj, SKILL_FWBYKK_THROWSAND, 5, skillLevel); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,50,sq_GetDirection(obj),3,SKILL_FWBYKK_THROWSAND,1,totalDamage,sizeRate,proc,time,level,decreaseRate,decreaseRate2,0); + break; + case 2: + local offset = 0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) offset = -40; + sq_CreateParticle("passiveobject/1_fighter_bykk/particle/throwsandparticle1.ptl", obj, offset + 40, 0, 50, true, 30, 0, 1); + break; + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW) && obj.getVar("ThrowSandBool").getBool(0) == false){//DOUBLETHROW + obj.getVar("ThrowSandBool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_THROWSAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_ThrowSand(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FWBYKK_THROWSAND){ + obj.getVar("ThrowSandBool").setBool(0, false); + } +} + + +//擒月炎 +function checkExecutableSkill_GrabExplosion(obj) +{ + if (!obj) return false; + // return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_GRABEXPLOSION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_GRABEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GrabExplosion(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_GrabExplosion(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_GRABEXPLOSION); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_GRABEXPLOSION)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("GrabExplosionBool").setBool(0, true); + obj.getVar("GrabExplosionTar").clear_obj_vector(); + obj.getVar("GrabExplosionTarFix").clear_obj_vector(); + obj.sq_PlaySound("FT_GRIP"); + break; + } +} + +function onEndCurrentAni_GrabExplosion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GrabExplosion(obj) +{ + if(!obj) return; +} + +function onProc_GrabExplosion(obj) +{ + if(!obj) return; + if(sq_GetCurrentFrameIndex(obj) == 8){ + if(obj.getVar("GrabExplosionBool").getBool(0) == false){ + obj.setSkillCommandEnable(SKILL_FWBYKK_GRABEXPLOSION, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_FWBYKK_GRABEXPLOSION); + if(b_useskill != -1){ + if(obj.isExistTimeEvent(1)) obj.stopTimeEvent(1); + obj.setTimeEvent(1, 50, 1, true); + } + } + else{ + if(!obj.isExistTimeEvent(2)){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 15000 / currentAni.getDelaySum(0, 0); + local delay = 10000 / speedRate; + obj.setTimeEvent(2, delay, 1, false); + } + } + } +} + +function onKeyFrameFlag_GrabExplosion(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + local size = obj.getVar("GrabExplosionTar").get_obj_vector_size(); + local apdPath = "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"; + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(9, 11); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("GrabExplosionTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, apdPath); + if(addAppendage){ + sq_MoveToAppendageForce(targetObj, obj, obj, 200, 0, 55, delay, true, addAppendage); + } + } + } + } + break; + case 1001: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 15000 / currentAni.getDelaySum(0, 0); + local delay = 30000 / speedRate; + obj.setTimeEvent(3, delay, 1, false); + break; + } + return true; +} + +function onTimeEvent_GrabExplosion(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/grabexplosion1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/grabexplosion2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/grabexplosion3.ani"), 0, 0); + if(obj.getVar("GrabExplosionTarFix").get_obj_vector_size() > 0) break; + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(9); + local delay = currentAni.getDelaySum(9, 11) + obj.getVar("GrabExplosionSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(4, 10, delay / 10, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_PlaySound("FT_BAST"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 1, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 2, 1.0) + 100; + local addRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 3, 1.0) + 100; + local activeStatusCount = obj.getVar("GrabExplosionSet").getInt(1); + if(activeStatusCount > 0) totalDamage = totalDamage * (100 + addRate * activeStatusCount) / 100; + local proc = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 4, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 6, 1.0) + 100; + local level = sq_GetSkillLevel(obj, 174) + 5; + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,50,0,75,sq_GetDirection(obj),3,SKILL_FWBYKK_GRABEXPLOSION,1,totalDamage,sizeRate,proc,time,level,0,0,0); + local size = obj.getVar("GrabExplosionTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("GrabExplosionTar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"); + } + } + } + local currentAni = obj.getCurrentAnimation(); + local speedRate = 15000 / currentAni.getDelaySum(0, 0); + local delay = 50000 / speedRate; + obj.setTimeEvent(2, delay, 1, false); + break; + case 4: + local v = sq_GetUniformVelocity(0, 150, timeEventCount, 10); + local dstX = sq_GetDistancePos(obj.getVar("GrabExplosionSet").getInt(0), obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_GrabExplosion(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_GrabExplosion(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj.getVar("GrabExplosionTar").is_obj_vector(damager)) obj.getVar("GrabExplosionTar").push_obj_vector(damager); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT); + if(obj.getVar("GrabExplosionBool").getBool(0)){ + obj.getVar("GrabExplosionBool").setBool(0, false); + if(!obj.getVar("GrabExplosionTarFix").is_obj_vector(damager) && sq_IsFixture(damager)) obj.getVar("GrabExplosionTarFix").push_obj_vector(damager); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local activeStatusCount = 0; + for(local i = 0; i < 17; i++){ + if(sq_IsValidActiveStatus(activeObj, i)) activeStatusCount = activeStatusCount + 1; + if(activeStatusCount >= 3) break; + } + obj.getVar("GrabExplosionSet").setInt(1, activeStatusCount); + // print("activeStatusCount = "+activeStatusCount); + if(skillLevel > 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 15000 / currentAni.getDelaySum(0, 0); + local delay = 10000 / speedRate; + local holdTime = sq_GetLevelData(obj, SKILL_FWBYKK_POISONSPIRIT, 0, skillLevel); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 1, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 2, 1.0) + 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 3, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW))) / 100; + } + local addRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 3, 1.0) + 100; + if(activeStatusCount > 0) totalDamage = totalDamage * (100 + addRate * activeStatusCount) / 100; + local proc = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 4, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 6, 1.0) + 100; + local level = sq_GetSkillLevel(obj, 174) + 5; + createSkillPassive_Fighter_bykk(obj,damager,PASSIVEOBJNUM_FWBYKK,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),3,SKILL_FWBYKK_GRABEXPLOSION,2,totalDamage,sizeRate,holdTime,group,uniqueId,proc,time,level); + obj.setTimeEvent(2, delay, 1, false); + } + else{ + local apdPath = "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(!sq_IsFixture(damager)){ + sq_MoveToAppendageForce(damager, obj, obj, 75, 0, 0, 100, true, AddAppendage); + } + } + obj.setTimeEvent(1, 1500, 1, false); + } + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 11, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } + } +} + +function proc_appendage_grabexplosion_hold(appendage) +{ + if(!appendage) return; + local sourceObj = appendage.getSource(); + if(!sourceObj) { + appendage.setValid(false); + return; + } +} + +//涂毒 +function checkExecutableSkill_EnchantPoison(obj) +{ + if (!obj) return false; + print("test"); + local isUse = obj.sq_IsUseSkill(0); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_EnchantPoison(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_EnchantPoison(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(120); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_EnchantPoison(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_EnchantPoison(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_EnchantPoison(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_EnchantPoison(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_EnchantPoison(obj, new_state) +{ + if(!obj) return; +} + + +//毒影针 +function checkExecutableSkill_HiddenSting(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_HIDDENSTING); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_HIDDENSTING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HiddenSting(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HiddenSting(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local passive_90Level = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT); + if(passive_90Level > 0) obj.sq_SetCurrentAnimation(ANI_FWBYKK_HIDDENSTING_POISONSPIRIT_BODY); + else{ + obj.sq_SetCurrentAnimation(ANI_FWBYKK_HIDDENSTING); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/hiddenstingpin.ani"), 0, 0); + local aniPath = "character/fighter/effect/animation/hiddenstingdrop.ani"; + sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_HIDDENSTING, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_HIDDENSTING); + local stunTime = sq_GetLevelData(obj, SKILL_FWBYKK_HIDDENSTING, 1, skillLevel); + if(passive_90Level > 0){ + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_HIDDENSTING,1,totalDamage,stunTime,0,0,0,0,0,0); + } + else{ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_HIDDENSTING)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAttackInfoForceHitStunTime(attackInfo, stunTime); + } + obj.sq_PlaySound("FT_HIDDEN_STING"); + break; + } +} + +function onEndCurrentAni_HiddenSting(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_HiddenSting(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_HiddenSting(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_HiddenSting(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_HiddenSting(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_HiddenSting(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_HIDDENSTING); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_HIDDENSTING, 2, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_HIDDENSTING, 3, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), level, false, time); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_SLOW, prob.tofloat(), level, false, time); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_HIDDENSTING, -1, 13, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + +//砖袭 +function checkExecutableSkill_BlockBuster(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_BLOCKBUSTER); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_BLOCKBUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BlockBuster(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BlockBuster(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_BLOCKBUSTER); + obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/blockbusterblock1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/blockbusterblock2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/blockbusterglow.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTER, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_BLOCKBUSTER); + local proc = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTER, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTER, 3, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_BLOCKBUSTER)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, proc, level, time); + obj.sq_PlaySound("FT_CRASH_MINE"); + obj.getVar("BlockBusterBool").setBool(0, true); + break; + } +} + +function onEndCurrentAni_BlockBuster(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + // if(true && obj.getVar("BlockBusterBool").getBool(1)){ + // obj.getVar("BlockBusterBool").setBool(1, false); + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(STATE_FWBYKK_BLOCKBUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + // return; + // } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BlockBuster(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BlockBuster(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_BlockBuster(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BlockBuster(obj, new_state) +{ + if(!obj) return; + // if(new_state != STATE_FWBYKK_BLOCKBUSTER){ + // obj.getVar("BlockBusterBool").setBool(1, true); + // } +} + +function onAttack_BlockBuster(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT); + if(obj.getVar("BlockBusterBool").getBool(0)){ + obj.getVar("BlockBusterBool").setBool(0, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTER, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_BLOCKBUSTER); + local proc = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTER, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTER, 3, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_BLOCKBUSTER, 2); + createSkillPassive_Fighter_bykk(obj,damager,PASSIVEOBJNUM_FWBYKK,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTER,1,totalDamage,proc,time,level,sizeRate,0,0,0); + } + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTER, -1, 8, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + + +//伏虎霸王拳 +function checkExecutableSkill_Mount(obj) +{ + if (!obj) return false; + // return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_MOUNT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_MOUNT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Mount(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Mount(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_MOUNTTRY); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/mounttry.ani"), 0, 0); + obj.getVar("MontCount").setInt(0, 0); + obj.getVar("MountBool").setBool(0, true); + obj.getVar("MountBool").setBool(1, false); + obj.getVar("MountTar").clear_obj_vector(); + obj.getVar("MountTarFix").clear_obj_vector(); + obj.sq_PlaySound("FT_MOUNTAIN"); + break; + case 1: + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT) > 0){ + obj.sq_SetCurrentAnimation(ANI_FWBYKK_CRAZYMOUNTSTART); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/crazymountstart.ani"), 0, 0); + obj.sq_PlaySound("R_FT_MOUNTAIN_ATK"); + } + else obj.sq_SetCurrentAnimation(ANI_FWBYKK_MOUNT); + break; + case 2: + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT) > 0){ + obj.sq_SetCurrentAnimation(ANI_FWBYKK_CRAZYMOUNTLEFT); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/crazymountlleft.ani"), 0, 0); + } + else obj.sq_SetCurrentAnimation(ANI_FWBYKK_MOUNTLEFT); + obj.sq_PlaySound("R_FT_MOUNTAIN_ATK"); + break; + case 3: + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT) > 0){ + obj.sq_SetCurrentAnimation(ANI_FWBYKK_CRAZYMOUNTRIGHT); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/crazymountright.ani"), 0, 0); + } + else obj.sq_SetCurrentAnimation(ANI_FWBYKK_MOUNTRIGHT); + obj.sq_PlaySound("R_FT_MOUNTAIN_ATK"); + break; + case 4: + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT) > 0){ + obj.sq_SetCurrentAnimation(ANI_FWBYKK_CRAZYMOUNTEND); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/crazymountend.ani"), 0, 0); + } + else{ + obj.sq_SetCurrentAnimation(ANI_FWBYKK_MOUNTEND); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/mountend.ani"), 0, 0); + } + obj.sq_PlaySound("R_FT_MOUNTAIN_ATK"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_MOUNT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onEndCurrentAni_Mount(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if((obj.getVar("MountTarFix").get_obj_vector_size() > 0 || (obj.getVar("MountTarFix").get_obj_vector_size() == 0 && obj.getVar("MountTar").get_obj_vector_size() == 0)) && sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT) > 0){ + obj.getVar("MountBool").setBool(1, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_FWBYKK_MOUNT, STATE_PRIORITY_AUTO, true); + break; + } + else if(obj.getVar("MountTar").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_MOUNT, STATE_PRIORITY_AUTO, true); + break; + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_FWBYKK_MOUNT, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 3: + local hitMax = sq_GetIntData(obj, SKILL_FWBYKK_MOUNT, 0); + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT) > 0) hitMax = sq_GetIntData(obj, SKILL_FWBYKK_CRAZYMOUNT, 0) - 1; + if(obj.getVar("MontCount").getInt(0) < hitMax){ + obj.getVar("MontCount").setInt(0, obj.getVar("MontCount").getInt(0) + 1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState>2?2:3); + obj.sq_AddSetStatePacket(STATE_FWBYKK_MOUNT, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_FWBYKK_MOUNT, STATE_PRIORITY_AUTO, true); + } + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Mount(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Mount_bykk(obj, flagIndex) +{ + if(!obj) return; + switch(flagIndex){ + case 101: + local subState = obj.getSkillSubState(); + local passiveskillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_CRAZYMOUNT); + switch(subState){ + case 1: + case 2: + case 3: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 0, 1.0); + local sizeRate = 100; + if(passiveskillLevel > 0){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_CRAZYMOUNT, 0, passiveskillLevel)) / 100; + sizeRate = sizeRate + obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 5, 1.0) + 100; + local addRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 3, 1.0) + 100; + local sizeAddRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 4, 1.0) + 100; + local activeStatusCount = obj.getVar("MountSet").getInt(0); + if(activeStatusCount > 0){ + totalDamage = totalDamage * (100 + addRate * activeStatusCount) / 100; + sizeRate = sizeRate * (100 + sizeAddRate * activeStatusCount) / 100; + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,65,subState==2?-5:5,0,sq_GetDirection(obj),3,SKILL_FWBYKK_MOUNT,2,totalDamage,sizeRate,subState,0,0,0,0,0); + break; + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,65,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_MOUNT,1,totalDamage,sizeRate,subState,0,0,0,0,0); + break; + case 4: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 1, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 2, 1.0) + 100; + if(passiveskillLevel > 0){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 2, 1.0); + sizeRate = sizeRate + obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 5, 1.0) + 100; + local addRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 3, 1.0) + 100; + local sizeAddRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_CRAZYMOUNT, -1, 4, 1.0) + 100; + local activeStatusCount = obj.getVar("MountSet").getInt(0); + if(activeStatusCount > 0){ + totalDamage = totalDamage * (100 + addRate * activeStatusCount) / 100; + sizeRate = sizeRate * (100 + sizeAddRate * activeStatusCount) / 100; + } + } + if(obj.getVar("MountBool").getBool(1)){ + local changeRate = sq_GetIntData(obj, SKILL_FWBYKK_CRAZYMOUNT, 4); + if(changeRate > 100) totalDamage = totalDamage * changeRate / 100; + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,65,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_MOUNT,3,totalDamage,sizeRate,subState,0,0,0,0,0); + break; + } + break; + } + return; +} + +function onTimeEvent_Mount(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local size = obj.getVar("MountTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("MountTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/fighter/3streetfighter_bykk/ap_mount_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, "character/fighter/3streetfighter_bykk/ap_mount_hold.nut", true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_DOWN, AddAppendage); + } + } + } + } + break; + } +} + +function onEndState_Mount(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Mount(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(sq_IsFixture(damager)) obj.getVar("MountTarFix").push_obj_vector(damager); + else if(!obj.getVar("MountTar").is_obj_vector(damager)) obj.getVar("MountTar").push_obj_vector(damager); + + if(obj.getVar("MountBool").getBool(0)){ + obj.getVar("MountBool").setBool(0, false); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local activeStatusCount = 0; + for(local i = 0; i < 17; i++){ + if(sq_IsValidActiveStatus(activeObj, i)) activeStatusCount = activeStatusCount + 1; + if(activeStatusCount >= 3) break; + } + obj.getVar("MountSet").setInt(0, activeStatusCount); + // print("activeStatusCount = "+activeStatusCount); + } + + if(!sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(sq_GetDirection(activeObj) == sq_GetDirection(obj)) sq_SetCurrentDirection(activeObj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.setTimeEvent(1, 50, 1, false); + } + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 4, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + +function proc_appendage_mount_hold(appendage) +{ + if(!appendage) return; + local sourceObj = appendage.getSource(); + if(sourceObj && sourceObj.getState() != STATE_FWBYKK_MOUNT) { + appendage.setValid(false); + return; + } +} + +//天罗地网 +function checkExecutableSkill_ThrowWeb(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_THROWWEB); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_THROWWEB, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ThrowWeb(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ThrowWeb(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_THROWWEB_READY); + obj.getVar("ThrowWebBool").setBool(0, false); + obj.getVar("ThrowWebTar").clear_obj_vector(); + obj.sq_PlaySound("FT_NET"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_THROWWEB_SPREAD); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_MOUNT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_THROWWEB_THROW); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, 2, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_THROWWEB); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_THROWWEB, 0, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_THROWWEB, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + local holdTime = sq_GetLevelData(obj, SKILL_FWBYKK_THROWWEB, 9, skillLevel); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_THROWWEB, 2); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW); + holdTime = holdTime * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 5, skillLevel)) / 100; + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,100-sizeRate,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_THROWWEB,1,totalDamage,prob,time,level,holdTime,sizeRate,0,0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_ThrowWeb(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + if(obj.getVar("ThrowWebBool").getBool(0)) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_THROWWEB, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ThrowWeb(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("ThrowWebBool").setBool(0, true); + } + break; + } +} + +function onKeyFrameFlag_ThrowWeb(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 2: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 7); + local size = obj.getVar("ThrowWebTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ThrowWebTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/3streetfighter_bykk/ap_web_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 100, 0, sq_GetZPos(targetObj), delay, true, addAppendage); + } + } + } + obj.sq_PlaySound("FT_NET_PULL"); + break; + } + return true; +} + +function onTimeEvent_ThrowWeb(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ThrowWeb(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_ThrowWeb(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj.getVar("ThrowWebTar").is_obj_vector(damager)) obj.getVar("ThrowWebTar").push_obj_vector(damager); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_THROWWEB); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_THROWWEB, 0, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_THROWWEB, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + local holdTime = sq_GetLevelData(obj, SKILL_FWBYKK_THROWWEB, 9, skillLevel); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/fighter/3streetfighter_bykk/ap_web_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/fighter/3streetfighter_bykk/ap_web_hold.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + AddAppendage.sq_SetValidTime(holdTime); + } + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_THROWWEB, -1, 10, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + + +//裂地飞沙 +function checkExecutableSkill_GroundKick(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_GROUNDKICK); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_GROUNDKICK, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GroundKick(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_GroundKick(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_GROUNDKICKCHARGE); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_GROUNDKICKKICK); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GROUNDKICK, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_GROUNDKICK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_GROUNDKICK); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_GROUNDKICK, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_GROUNDKICK, 2, skillLevel); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_GroundKick(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 14700 / currentAni.getDelaySum(0, 0); + local delay = 50000 / speedRate; + obj.setTimeEvent(1, delay, 1, false); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GroundKick(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_GroundKick(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + sq_SetMyShake(obj, 5, 80); + sq_CreateParticle("character/fighter/particle/groundkicksand1particle.ptl", obj, 0, 0, 0, true, 30, 0, 1); + sq_CreateParticle("character/fighter/particle/groundkicksand1particle2.ptl", obj, 0, 0, 0, true, 30, 0, 1); + sq_CreateParticle("character/fighter/particle/groundkickstoneparticle.ptl", obj, 0, 0, 0, true, 30, 0, 1); + break; + } + return true; +} + +function onTimeEvent_GroundKick(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_GROUNDKICK, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_GroundKick(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_GroundKick(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(sq_IsFixture(damager)){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GROUNDKICK, -1, 0, 1.0); + local bonusRate = sq_GetIntData(obj, SKILL_FWBYKK_GROUNDKICK, 3); + totalDamage = totalDamage * bonusRate / 1000; + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_GROUNDKICK,1,totalDamage,group,uniqueId,0,0,0,0,0); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_GROUNDKICK); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_GROUNDKICK, 1, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_GROUNDKICK, 3, skillLevel); + local prob2 = sq_GetLevelData(obj, SKILL_FWBYKK_GROUNDKICK, 4, skillLevel); + local time2 = sq_GetLevelData(obj, SKILL_FWBYKK_GROUNDKICK, 6, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLIND, prob.tofloat() * 0.1, level.tointeger(), false, time.tointeger()); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob2.tofloat() * 0.1, level.tointeger(), false, time2.tointeger()); + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GROUNDKICK, -1, 8, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + + +//挑衅 +function checkExecutableSkill_Provocation(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_PROVOCATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_PROVOCATION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Provocation(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Provocation(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("R_FT_PROVOCATION"); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_PROVOCATION); + local castTime = sq_GetCastTime(obj, SKILL_FWBYKK_PROVOCATION, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local startTime = animation.getDelaySum(false); + local speedRate = startTime.tofloat() / castTime.tofloat(); + sq_StartDrawCastGauge(obj, castTime, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + obj.setTimeEvent(1, castTime, 1, false); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(false), 1, false); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_PROVOCATION); + local range = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 1, skillLevel) / 2; + local allt = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 8, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + allt = allt * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_POISONSNAKE, 13, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSNAKE))) / 100; + } + local damageIncreaseRate = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 10, skillLevel); + local buffTime = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 0, skillLevel); + local stunRate = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 2, skillLevel); + local aniPath = ["character/fighter/effect/animation/provocation1.ani", "character/fighter/effect/animation/provocation2.ani", "character/fighter/effect/animation/provocation3.ani"]; + local sizeRate = range * 100 / 275, direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj); + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObjectEX_Fighter_bykk(obj,aniPath[i],true,direction,x,y,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_PROVOCATION_DEBUFF); + if(!AddAppendage){ + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, true, APDPATH_PROVOCATION_DEBUFF, true); + AddAppendage.sq_SetValidTime(buffTime); + } + AddAppendage.getVar("custom").setInt(0, damageIncreaseRate); + AddAppendage.getVar("custom").setInt(1, buffTime - 3000); + AddAppendage.setBuffIconImage(23); + + local change_appendage = AddAppendage.sq_getChangeStatus("provocationDeBuff"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("provocationDeBuff",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, true, (allt * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stunRate * 0.1).tofloat()); + } + } + } + break; + } +} + +function onEndCurrentAni_Provocation(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_PROVOCATION, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Provocation(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Provocation(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Provocation(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_PROVOCATION, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_Provocation(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FWBYKK_PROVOCATION){ + sq_EndDrawCastGauge(obj); + } +} + + +//毒雷引爆 +function checkExecutableSkill_VenomMine(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_VENOMMINE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_VENOMMINE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_VenomMine(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_VenomMine(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_VENOMMINE_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("FT_THROW_MINE"); + obj.sq_PlaySound("VM_MINE_SWIRL"); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 2); + obj.setTimeEvent(1, delay, 1, false); + break; + } +} + +function onEndCurrentAni_VenomMine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_VenomMine(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_VenomMine(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_VenomMine(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_VENOMMINE, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_FWBYKK_VENOMMINE, 14); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_VENOMMINE, 8); + local increaseRate = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW); + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 10, skillLevel)) / 100; + increaseRate = sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 9, skillLevel); + } + for(local i = 0; i < 6; i++){ + local angle = 360 / 6 * i + 120; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 2.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 2.0).tointeger(); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,x,y,30,sq_GetDirection(obj),3,SKILL_FWBYKK_VENOMMINE,1,angle,i,increaseRate,0,0,0,0,0); + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_VENOMMINE,2,totalDamage,hitMax,sizeRate,0,0,0,0,0); + break; + } +} + +function onEndState_VenomMine(obj, new_state) +{ + if(!obj) return; +} + + +//街头风暴 +function checkExecutableSkill_JunkSpin(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_JUNKSPIN); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_JUNKSPIN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_JunkSpin(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_JunkSpin(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_JUNKSPIN); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/junkspin/front-dodge.ani"), 0, 0); + // obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/junkspin/front-normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/junkspin/back-dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/junkspin/back-normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/junkspin/ground-effect.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 10000 / currentAni.getDelaySum(0, 0); + obj.getVar("JunkSpinSet").setInt(0, speedRate); + obj.getVar("JunkSpinSet").setInt(1, 0); + obj.startRapidInput(); + obj.sq_PlaySound("FT_JUNK_SPIN"); + obj.sq_PlaySound("JS_TYPHOON_LOOP", 1212); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_JUNKSPIN,1,speedRate,0,0,0,0,0,0,0); + break; + } +} + +function onEndCurrentAni_JunkSpin(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_JunkSpin(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 1000, 1, true); + } +} + +function onKeyFrameFlag_JunkSpin(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + case 102: + local speedRate = obj.getVar("JunkSpinSet").getInt(0); + local currentAni = obj.getCurrentAnimation(); + if(obj.getRapidInputFrequency() > 0){currentAni.setSpeedRate(speedRate.tofloat() * 3.0);speedRate = speedRate * 3;} + else currentAni.setSpeedRate(speedRate.tofloat()); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_JUNKSPIN); + local hitMax = sq_GetLevelData(obj, SKILL_FWBYKK_JUNKSPIN, 0, skillLevel); + local createMax = sq_GetIntData(obj, SKILL_FWBYKK_JUNKSPIN, 10); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)) createMax = createMax * 2; + local count = obj.getVar("JunkSpinSet").getInt(1); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_JUNKSPIN, 9); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_JUNKSPIN, 5, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_JUNKSPIN, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + if(count < hitMax){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)) obj.getVar("JunkSpinSet").setInt(1, count + createMax / 2); + else obj.getVar("JunkSpinSet").setInt(1, count + createMax); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_JUNKSPIN, -1, 1, 1.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 2, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW))) / 100; + } + for(local i = 0; i < createMax; i++){ + local direction = sq_GetDirection(obj); + if(flagIndex == 102) direction = sq_GetOppositeDirection(direction); + if(i % 2 == 1) direction = sq_GetOppositeDirection(direction); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,direction,3,SKILL_FWBYKK_JUNKSPIN,4,totalDamage,sizeRate,speedRate,0,0,0,0,0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,sizeRate,direction,3,SKILL_FWBYKK_JUNKSPIN,2,sizeRate,0,0,0,0,0,0,0); + // createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-10,1,sizeRate,sq_GetOppositeDirection(direction),3,SKILL_FWBYKK_JUNKSPIN,2,sizeRate,0,0,0,0,0,0,0); + } + } + else{ + obj.setTimeEvent(1, 1000, 1, true); + } + break; + } + return true; +} + +function onTimeEvent_JunkSpin(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_JUNKSPIN); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_JUNKSPIN, 9); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_JUNKSPIN, 5, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_JUNKSPIN, 4, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_JUNKSPIN, -1, 2, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,-1,40,sq_GetDirection(obj),3,SKILL_FWBYKK_JUNKSPIN,3,totalDamage,sizeRate,prob,time,level,0,0,0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_JunkSpin(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FWBYKK_JUNKSPIN){ + obj.stopSound(1212); + } +} + + +//死亡毒雾 +function checkExecutableSkill_PoisonMist(obj) +{ + if (!obj) return false; + if(obj.getVar("PoisonMistBool").getBool(0)){ + obj.getVar("PoisonMistBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_FWBYKK_POISONMIST, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_POISONMIST); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_POISONMIST, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PoisonMist(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PoisonMist(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local ani = obj.sq_GetJumpAni(); + obj.setCurrentAnimation(ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 5) / 50, 50, true); + break; + case 1: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONMIST); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonmist/start.ani"), 0, 0); + obj.sq_PlaySound("FT_POISON_MIST"); + obj.getVar("PoisonMistBool").setBool(0, false); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONMISTEXPLOSION); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_PoisonMist(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PoisonMist(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PoisonMist(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.getVar("PoisonMistObj").clear_obj_vector(); + for(local i = 0; i < 10; i++){ + local angle = 360 / 10 * i + 0; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 10.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 5.0).tointeger(); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,x,y,0,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,1,angle,i,sq_GetXPos(obj),sq_GetYPos(obj),0,0,0,0); + } + break; + case 102: + local flashScreenObj = obj.getVar("PoisonMistFlash").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + sq_flashScreen(obj, 0, 0, 200, 66, sq_RGB(190,83,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local size = obj.getVar("PoisonMistObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local atkObj = obj.getVar("PoisonMistObj").get_obj_vector(i); + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + if(colObj){ + colObj.setTimeEvent(1, 1000, 1, true); + } + } + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMIST, -1, 2, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_FWBYKK_POISONMIST, 1); + local range = (obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMIST, -1, 5, 1.0) + 100) / 2; + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,4,totalDamage,hitMax,range,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_PoisonMist(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 150, timeEventCount, 50, true); + sq_setCurrentAxisPos(obj, 2, v); + if(timeEventCount >= 50){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_POISONMIST, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_PoisonMist(obj, new_state) +{ + if(!obj) return; +} + +function proc_appendage_poisonmist_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj && parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local sourceObj = appendage.getSource(); + if(!sourceObj){ + appendage.setValid(false); + return; + } + + local ttt = appendage.getVar("cooltime").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); + if(ttt && ttt.isOnEvent(currentT)){ + local xPos = appendage.getVar("custom").getInt(0); + local yPos = appendage.getVar("custom").getInt(1); + local range = appendage.getVar("custom").getInt(2); + if(sq_Abs(sq_GetXPos(activeObj) - xPos) > range || sq_Abs(sq_GetYPos(activeObj) - yPos) > range / 2){ + appendage.setValid(false); + return; + } + } +} + +function onStart_appendage_poisonmist_buff(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMIST); + local allAttack = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMIST, 8, skillLevel); + local speed = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMIST, 9, skillLevel); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_POISONMIST, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMIST)); + + local change_appendage = appendage.sq_getChangeStatus("poisonmistBuff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("poisonmistBuff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (allAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (allAttack).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speed * 1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (speed * 1).tofloat()); + } + + appendage.getVar("cooltime").clear_timer_vector(); + appendage.getVar("cooltime").push_timer_vector(); + local ttt = appendage.getVar("cooltime").get_timer_vector(0); + ttt.setParameter(1000, -1); + ttt.resetInstant(0); + + sq_SendCreatePassiveObjectPacket(obj, 776104, 0, 0, 0, 0, obj.getDirection()); +} + +function onEnd_appendage_poisonmist_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj && parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); +} + +function proc_appendage_poisonmist_debuff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj && parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function onStart_appendage_poisonmist_debuff(appendage) +{ + local parentObj = appendage.getParent(); + local sourceObj = appendage.getSource(); + local obj = sq_GetCNRDObjectToSQRCharacter(sourceObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMIST); + local allt = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMIST, 6, skillLevel); + local allDefense = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMIST, 7, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("poisonmistDeBuff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("poisonmistDeBuff",parentObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, true, (allt * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense * -1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense * -1).tofloat()); + } +} + + +//猛毒擒月炎 + +function checkExecutableSkill_GrabExplosionEx(obj) +{ + if (!obj) return false; + // return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_GRABEXPLOSIONEX); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_GRABEXPLOSIONEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GrabExplosionEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_GrabExplosionEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_GRABEXPLOSIONEX); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/grabexplosionex/blacksmoke.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/grabexplosionex/blacksmokenormal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/grabexplosionex/grabexplosion1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/grabexplosionex/grabexplosion2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/grabexplosionex/grabexplosion3.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_GRABEXPLOSION)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("GrabExplosionExBool").setBool(0, true); + obj.getVar("GrabExplosionExBool").setBool(1, true); + obj.getVar("GrabExplosionExTar").clear_obj_vector(); + obj.getVar("GrabExplosionExTarFix").clear_obj_vector(); + obj.sq_PlaySound("FT_GRIP"); + break; + } +} + +function onEndCurrentAni_GrabExplosionEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} +function onProcCon_GrabExplosionEx(obj) +{ + if(!obj) return; +} + +function onProc_GrabExplosionEx(obj) +{ + if(!obj) return; + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex == 8){ + if(obj.getVar("GrabExplosionExTar").get_obj_vector_size() < 1){ + if(!obj.isExistTimeEvent(2)) obj.setTimeEvent(2, 100, 1, false); + return; + } + } + if(frameIndex > 8 && frameIndex < 13){ + if(obj.getVar("GrabExplosionExBool").getBool(0) == false){ + obj.setSkillCommandEnable(SKILL_FWBYKK_GRABEXPLOSIONEX, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_FWBYKK_GRABEXPLOSIONEX); + if(b_useskill != -1){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(13); + } + } + } +} + +function onKeyFrameFlag_GrabExplosionEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + local size = obj.getVar("GrabExplosionExTar").get_obj_vector_size(); + local apdPath = "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"; + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(9, 11); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("GrabExplosionExTar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, apdPath); + if(addAppendage){ + sq_MoveToAppendageForce(targetObj, obj, obj, 150, 0, 55, delay, true, addAppendage); + } + } + } + } + break; + case 1001: + obj.sq_PlaySound("FT_BAST"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 1, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 2, 1.0) + 200; + local addRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 3, 1.0) + 100; + local activeStatusCount = obj.getVar("GrabExplosionExSet").getInt(1); + if(activeStatusCount > 0) totalDamage = totalDamage * (100 + addRate * activeStatusCount) / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW); + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 7, skillLevel)) / 100; + } + local proc = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 12, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 14, 1.0) + 100; + local level = sq_GetSkillLevel(obj, 174) + 5; + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,65,0,90,sq_GetDirection(obj),3,SKILL_FWBYKK_GRABEXPLOSIONEX,1,totalDamage,sizeRate,proc,time,level,0,0,0); + local size = obj.getVar("GrabExplosionExTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("GrabExplosionExTar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"); + } + } + } + local appendage = obj.getVar("GrabExplosionExApd").getAppendage(0); + if(appendage) appendage.setValid(false); + break; + } + return true; +} + +function onTimeEvent_GrabExplosionEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(9); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/grabexplosionex/tractnormal.ani"), 65, -90); + local range = 400; + local appendage = sq_AttractToMe(obj, range, 65, 200); + obj.getVar("GrabExplosionExApd").setAppendage(0, appendage); + if(obj.getVar("GrabExplosionExTarFix").get_obj_vector_size() > 0) break; + local delay = currentAni.getDelaySum(9, 10); + obj.getVar("GrabExplosionExSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(4, 10, delay / 10, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + break; + case 4: + local v = sq_GetUniformVelocity(0, 150, timeEventCount, 10); + local dstX = sq_GetDistancePos(obj.getVar("GrabExplosionExSet").getInt(0), obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_GrabExplosionEx(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FWBYKK_GRABEXPLOSIONEX){ + local appendage = obj.getVar("GrabExplosionExApd").getAppendage(0); + if(appendage) appendage.setValid(false); + local size = obj.getVar("GrabExplosionExTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("GrabExplosionExTar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"); + } + } + } + } +} + +function onAttack_GrabExplosionEx(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj.getVar("GrabExplosionExTar").is_obj_vector(damager)) obj.getVar("GrabExplosionExTar").push_obj_vector(damager); + if(obj.getVar("GrabExplosionExBool").getBool(0)){ + obj.getVar("GrabExplosionExBool").setBool(0, false); + obj.getVar("GrabExplosionExBool").setBool(1, false); + if(!obj.getVar("GrabExplosionExTarFix").is_obj_vector(damager) && sq_IsFixture(damager)) obj.getVar("GrabExplosionExTarFix").push_obj_vector(damager); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local activeStatusCount = 0; + for(local i = 0; i < 17; i++){ + if(sq_IsValidActiveStatus(activeObj, i)) activeStatusCount = activeStatusCount + 1; + if(activeStatusCount >= 3) break; + } + obj.getVar("GrabExplosionSet").setInt(1, activeStatusCount); + // print("activeStatusCount = "+activeStatusCount); + + local apdPath = "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(!sq_IsFixture(damager)){ + sq_MoveToAppendageForce(damager, obj, obj, 75, 0, 0, 100, true, AddAppendage); + } + } + obj.setTimeEvent(1, 80, 1, false); + } + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 20, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + +//破碎砖裂 +function checkExecutableSkill_BlockBusterEx(obj) +{ + if (!obj) return false; + // return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_BLOCKBUSTEREX); + if (isUse){ + obj.sq_IntVectClear(); + if(obj.getState() == 6 || obj.getState() == 7) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_BLOCKBUSTEREX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BlockBusterEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BlockBusterEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_BLOCKBUSTEREXTRY); + obj.getVar("BlockBusterExJumpBool").setBool(0, false); + obj.sq_PlaySound("BIGPUNCH_12SWING"); + obj.sq_PlaySound("BIGPUNCH_4SWING_READY"); + return; + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_BLOCKBUSTEREXAIRREADY_BODY); + obj.getVar("BlockBusterExJumpBool").setBool(0, true); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_BLOCKBUSTEREXJUMP); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.getVar("BlockBusterExSet").setInt(0, sq_GetXPos(obj)); + if(obj.getVar("BlockBusterExJumpBool").getBool(0)){ + currentAni.setCurrentFrameWithChildLayer(2); + } + else{ + local delay = currentAni.getDelaySum(0, 1); + obj.setTimeEvent(1, delay / 5, 5, true); + obj.sq_ZStop(); + } + obj.sq_PlaySound("FT_CRASH_MINE"); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_BLOCKBUSTEREXFINISH); + return; + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_BlockBusterEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_FWBYKK_BLOCKBUSTEREX, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_BLOCKBUSTEREX, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BlockBusterEx(obj) +{ + if(!obj) return; +} + +function onProc_BlockBusterEx(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BlockBusterEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 4); + obj.setTimeEvent(2, delay / 5, 5, true); + break; + case 102: + sq_SetMyShake(obj, 10, 240); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 0, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,0,-sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,1,totalDamage,0,0,0,0,0,0,0); + break; + case 103: + // sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block2.ani", 125, 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 2, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 4, 1.0); + local totalDamage_lastexp = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 10, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_BLOCKBUSTEREX); + local stunTime = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTEREX, 9, skillLevel); + local sizeRate = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTEREX, 6, skillLevel); + local sizeRateLastExp = sq_GetLevelData(obj, SKILL_FWBYKK_BLOCKBUSTEREX, 12, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW); + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 8, skillLevel)) / 100; + sizeRateLastExp = sizeRateLastExp * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 8, skillLevel)) / 100; + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,0,80,sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,2,totalDamage,totalDamage_exp,totalDamage_lastexp,stunTime,sizeRate,sizeRateLastExp,0,0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,0,80,sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,3,totalDamage,totalDamage_exp,stunTime,sizeRate,0,0,0,0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,0,80,sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,4,totalDamage,totalDamage_exp,stunTime,sizeRate,0,0,0,0); + local offset = 125; + if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) offset = -125; + sq_CreateParticle("passiveobject/1_fighter_bykk/particle/blockbusterexexp.ptl", obj, offset, 0, 60, true, 30, 0, 1); + break; + } + return true; +} + +function onTimeEvent_BlockBusterEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetUniformVelocity(0, 150, timeEventCount, 5); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 2: + local vx = sq_GetUniformVelocity(0, 75, timeEventCount, 5); + local vz = sq_GetUniformVelocity(150, 0, timeEventCount, 5); + local dstX = sq_GetDistancePos(obj.getVar("BlockBusterExSet").getInt(0), sq_GetDirection(obj), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_BlockBusterEx(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FWBYKK_BLOCKBUSTEREX){ + sq_SimpleMoveToNearMovablePos(obj,300); + } +} + + +//连环毒爆弹 +function checkExecutableSkill_PoisonExplosion(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_POISONEXPLOSION); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONEXPLOSIONCUSTOM) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_POISONEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PoisonExplosion(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PoisonExplosion(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONEXPLOSION_START_BODY); + obj.getVar("PoisonExplosionBool").setBool(0, false); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONEXPLOSIONCUSTOMKICK)); + // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, false); + obj.getVar("poisonExplosionTar").clear_obj_vector(); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONEXPLOSION_KICK_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.getVar("PoisonExplosionSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 10, 10, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_POISONEXPLOSION, 8); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONEXPLOSION,1,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 15, 120); + return; + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONEXPLOSIONCUSTOM_START_BODY); + sq_SetMyShake(obj, 5, 50); + obj.getVar("PoisonExplosionBool").setBool(0, false); + local addRate = sq_GetLevelData(obj, SKILL_FWBYKK_POISONEXPLOSIONCUSTOM, 0, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONEXPLOSIONCUSTOM)); + local bonusRate = 1.0 + addRate.tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONEXPLOSIONCUSTOMKICK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONEXPLOSIONCUSTOM_KICK_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + obj.getVar("PoisonExplosionSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 10, 10, true); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_PoisonExplosion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 2: + if(obj.getVar("PoisonExplosionBool").getBool(0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_POISONEXPLOSION, STATE_PRIORITY_AUTO, true); + return; + } + case 1: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PoisonExplosion(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PoisonExplosion(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 105://EnableCancel + break; + case 106://DisableCancel + break; + } + return true; +} + +function onTimeEvent_PoisonExplosion(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vx = sq_GetUniformVelocity(0, -120, timeEventCount, 10); + local vz = sq_GetUniformVelocity(0, 50, timeEventCount, 10); + local dstX = sq_GetDistancePos(obj.getVar("PoisonExplosionSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount == 10){ + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(4, 6) / 10, 10, true); + } + break; + case 2: + local vx = sq_GetUniformVelocity(-120, -155, timeEventCount, 10); + local vz = sq_GetUniformVelocity(50, 0, timeEventCount, 10); + local dstX = sq_GetDistancePos(obj.getVar("PoisonExplosionSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_PoisonExplosion(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FWBYKK_POISONEXPLOSION){ + sq_SimpleMoveToNearMovablePos(obj,300); + } +} + +function onAttack_PoisonExplosion(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + if(obj.getVar("PoisonExplosionBool").getBool(0) == false){ + obj.getVar("PoisonExplosionBool").setBool(0, true); + obj.getVar("poisonExplosionTar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, "appendage/character/ap_common_hold.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(300); + local bonusRate = 1.0; + if(subState > 1) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_FWBYKK_POISONEXPLOSIONCUSTOM, 1, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONEXPLOSIONCUSTOM)).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 1, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_POISONEXPLOSION, 8); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local sub = 0; + if(subState > 1) sub = 1; + createSkillPassive_Fighter_bykk(obj,damager,PASSIVEOBJNUM_FWBYKK,0,0,sq_GetObjectHeight(damager) / 2,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONEXPLOSION,2,totalDamage,sizeRate,group,uniqueId,sub,0,0,0); + } + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 15, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + + +//毒龙轰天雷 +function checkExecutableSkill_DragonMine(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_DRAGONMINE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_FWBYKK_DRAGONMINE, 11) > 0){ + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(21); + else obj.sq_IntVectPush(10); + } + else{ + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(20); + else obj.sq_IntVectPush(0); + } + obj.sq_AddSetStatePacket(STATE_FWBYKK_DRAGONMINE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DragonMine(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DragonMine(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINESTART); + obj.sq_PlaySound("DRAGONMINE_01"); + obj.sq_PlaySound("FT_DRAGONMINE_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEJUMPSPIN); + obj.sq_PlaySound("FT_DRAGONMINE_02_1"); + obj.sq_PlaySound("DRAGONMINE_02"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEDROP); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEIMPACT); + break; + case 10: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEBOXATTACKSTART); + obj.sq_PlaySound("DRAGONMINE_01_TALISMAN"); + obj.sq_PlaySound("FT_DRAGONMINE_02_1"); + break; + case 11: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEBOXATTACKJUMPSPIN); + break; + case 12: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEBOXATTACKDROP); + break; + case 13: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEBOOM); + break; + case 20: + case 21: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_DRAGONMINEBOXATTACKSTART_JUMP); + if(subState == 21){ + obj.sq_PlaySound("DRAGONMINE_01_TALISMAN"); + obj.sq_PlaySound("FT_DRAGONMINE_02_1"); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 0: + case 10: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("DragonMineSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(1, delay / 32, 32, true); + if(subState == 0) obj.setTimeEvent(2, delay / 32, 32, true); + else obj.setTimeEvent(5, delay / 32, 32, true); + break; + case 2: + case 12: + obj.removeAllTimeEvent(); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("DragonMineSet").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(3, delay / 16, 16, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_DRAGONMINEDROP)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 20: + case 21: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("DragonMineSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(4, delay / 40, 40, true); + if(subState == 21){ + obj.getVar("DragonMineSet").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(6, delay / 40, 40, true); + } + case 1: + case 11: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local flashScreenObj = obj.getVar("DragonMineFlash").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + local flashScreenObj = sq_flashScreen(obj,delay,99990,0,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("DragonMineFlash").clear_obj_vector();//清除 + obj.getVar("DragonMineFlash").push_obj_vector(flashScreenObj);//加入 + break; + } +} + +function onEndCurrentAni_DragonMine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 10: + case 11: + case 12: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_DRAGONMINE, STATE_PRIORITY_AUTO, true); + break; + case 3: + case 13: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 20: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_DRAGONMINE, STATE_PRIORITY_AUTO, true); + break; + case 21: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(STATE_FWBYKK_DRAGONMINE, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DragonMine(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DragonMine(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 201://`CreateBombBox` 22 0 37 + if(obj.getSkillSubState() == 20) break; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 4); + local offsetX = sq_GetDistancePos(obj.getVar("DragonMineSet").getInt(0), sq_GetDirection(obj), 195); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,50,-1,sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_FWBYKK_DRAGONMINE,3,delay,offsetX,0,0,0,0,0,0); + break; + case 202: + obj.sq_PlaySound("FT_DRAGONMINE_02_2"); + obj.sq_PlaySound("DRAGONMINE_05"); + break; + case 1:// + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 0, 1.0) + obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 1, 6.0); + totalDamage = totalDamage * 116 / 100; + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_DRAGONMINE, 4); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_DRAGONMINE); + local lifeTime = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 3, skillLevel); + local hitTime = sq_GetIntData(obj, SKILL_FWBYKK_DRAGONMINE, 9); + local damage = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 4, skillLevel) - 100; + local moveSpeed = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 6, skillLevel); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_DRAGONMINE,4,totalDamage,sizeRate,lifeTime,hitTime,damage,moveSpeed,0,0); + break; + case 101: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_FWBYKK_DRAGONMINE, 4); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_DRAGONMINE); + local lifeTime = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 3, skillLevel); + local hitTime = sq_GetIntData(obj, SKILL_FWBYKK_DRAGONMINE, 9); + local damage = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 4, skillLevel) - 100; + local moveSpeed = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 6, skillLevel); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_DRAGONMINE,1,totalDamage,sizeRate,lifeTime,hitTime,damage,moveSpeed,0,0); + break; + } + return true; +} + +function onTimeEvent_DragonMine(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vx = sq_GetAccel(0, 150, timeEventCount, 32, true); + local dstX = sq_GetDistancePos(obj.getVar("DragonMineSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(1); + break; + case 2: + local vz = sq_GetAccel(0, 150, timeEventCount, 32, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + local vz = sq_GetAccel(obj.getVar("DragonMineSet").getInt(1), 0, timeEventCount, 15, true); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 16){ + local subState = obj.getSkillSubState(); + if(subState < 10){ + sq_SetMyShake(obj, 20, 220); + local aniPath = "character/fighter/effect/animation/3_streetfighter_bykk/dragonmine/impact_dragonmine_bottom.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_CreateParticle("character/fighter/particle/dragonminenormal.ptl", obj, 0, 0, 0, true, 30, 0, 1); + } + else{ + local boxObj = obj.getVar("DragonMineBox").get_obj_vector(0); + if(boxObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(boxObj); + colObj.removeAllTimeEvent(); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + sq_SetMyShake(obj, 20, 220); + local aniPath = "character/fighter/effect/animation/3_streetfighter_bykk/dragonmine/boom_dragonmine_bottom.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + sq_CreateParticle("character/fighter/particle/dragonmineboom.ptl", obj, 0, 0, 0, true, 30, 0, 1); + } + } + } + break; + case 4: + local vx = sq_GetAccel(0, 200, timeEventCount, 40, true); + local dstX = sq_GetDistancePos(obj.getVar("DragonMineSet").getInt(0), sq_GetDirection(obj), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(4); + break; + case 5: + local vz = sq_GetAccel(0, 450, timeEventCount, 32, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 6: + local vz = sq_GetAccel(obj.getVar("DragonMineSet").getInt(1), 450, timeEventCount, 40, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_DragonMine(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_DragonMine(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 11, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + + +//万毒噬心诀 +function checkExecutableSkill_PoisonSnake(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_POISONSNAKE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_POISONSNAKE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PoisonSnake(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PoisonSnake(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_POISONSNAKESTART_BODY); + obj.getVar("PoisonSnakeSet").setInt(0, 1); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_PoisonSnake(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PoisonSnake(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PoisonSnake(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local phase = obj.getVar("PoisonSnakeSet").getInt(0); + switch(phase){ + case 1: + sq_SetMyShake(obj, 5, 200); + obj.getVar("PoisonSnakeSet").setInt(0, phase + 1); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_POISONSNAKE_BUFF); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_POISONSNAKE_BUFF, true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_POISONSNAKE, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSNAKE)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + AddAppendage.sq_DeleteEffectFront(); + AddAppendage.sq_AddEffectFront("character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/poisonbody_loop.ani"); + setSkillBonusRate_3StreetFighter_bykk(obj); + break; + case 2: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKECASTINGATTACK2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case 2: + obj.sq_PlaySound("FT_POISONSNAKE"); + obj.sq_PlaySound("POISONSNAKE_CAST"); + break; + } + return true; +} + +function onTimeEvent_PoisonSnake(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_PoisonSnake(obj, new_state) +{ + if(!obj) return; +} + +function onStart_appendage_poisonsnake_buff(appendage) +{} + +function proc_appendage_poisonsnake_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local sqrState = obj.getState(); + if(sqrState == 0 || sqrState == 14) return; + if(!sq_GetSkill(obj, SKILL_FWBYKK_PROVOCATION).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_FWBYKK_PROVOCATION,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_FWBYKK_PROVOCATION); + if(b_useskill != -1){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_PROVOCATION); + obj.startSkillCoolTime(SKILL_FWBYKK_PROVOCATION, skillLevel, -1); + local range = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 1, skillLevel) / 2; + local allt = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 8, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + allt = allt * (100 + sq_GetLevelData(obj, SKILL_FWBYKK_POISONSNAKE, 13, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSNAKE))) / 100; + } + local damageIncreaseRate = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 10, skillLevel); + local buffTime = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 0, skillLevel); + local stunRate = sq_GetLevelData(obj, SKILL_FWBYKK_PROVOCATION, 2, skillLevel); + local aniPath = ["character/fighter/effect/animation/provocation1.ani", "character/fighter/effect/animation/provocation2.ani", "character/fighter/effect/animation/provocation3.ani"]; + local sizeRate = range * 100 / 275, direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj); + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObjectEX_Fighter_bykk(obj,aniPath[i],true,direction,x,y,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_PROVOCATION_DEBUFF); + if(!AddAppendage){ + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, true, APDPATH_PROVOCATION_DEBUFF, true); + AddAppendage.sq_SetValidTime(buffTime); + } + AddAppendage.getVar("custom").setInt(0, damageIncreaseRate); + AddAppendage.getVar("custom").setInt(1, buffTime - 3000); + AddAppendage.setBuffIconImage(23); + + local change_appendage = AddAppendage.sq_getChangeStatus("provocationDeBuff"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("provocationDeBuff",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, true, (allt * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stunRate * 0.1).tofloat()); + } + } + } + } + } +} + +//禁技 : 万毒蛇窟 +function checkExecutableSkill_SnakeCave(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_SNAKECAVE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_SNAKECAVE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SnakeCave(obj) +{ + if (!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false; + return true; +} + +function onSetState_SnakeCave(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SNAKECAVEREADY1_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SNAKECAVEREADY2_BODY); + break; + case 2: + case 12: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SNAKECAVEEXPLOSION_BODY); + break; + case 10: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SNAKECAVEREADYAIR2_BODY); + break; + case 11: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SNAKECAVEREADYAIR3_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 1: + case 11: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("SnakeCaveSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(1, delay / 16, 16, true); + if(subState == 11){ + obj.getVar("SnakeCaveSet").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(3, delay / 16, 16, true); + } + break; + } +} + +function onEndCurrentAni_SnakeCave(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + case 1: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_SNAKECAVE, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SnakeCave(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SnakeCave(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("SNAKECAVE_READY"); + obj.sq_PlaySound("FT_POSION_EXPLOSION"); + if(obj.getSkillSubState() > 10) break; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/snakecaveready3_01.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local delay = 20000 / speedRate; + sq_flashScreen(obj,0,0,delay,127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 400); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 24, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SNAKECAVE)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 26, 1.0) + 100; + obj.setTimeEvent(2, currentAni.getDelaySum(2, 9) / hitMax, hitMax - 1, false); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/snakecaveexplosionup_00.ani", 0, 1, 0); + break; + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/snakecavecrack_01.ani", 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/snakecaveexplosiondown_00.ani", 0, -1, 0); + break; + case 9: + break; + } + return true; +} + +function onTimeEvent_SnakeCave(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 85, timeEventCount, 16, true); + local dstX = sq_GetDistancePos(obj.getVar("SnakeCaveSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(1); + break; + case 2: obj.resetHitObjectList(); break; + case 3: + local v = sq_GetAccel(obj.getVar("SnakeCaveSet").getInt(1), 0, timeEventCount, 16, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onEndState_SnakeCave(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_SnakeCave(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 25, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + + +//钻心毒爆 +function checkExecutableSkill_PainsKiller(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_FWBYKK_PAINSKILLER); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FWBYKK_PAINSKILLER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PainsKiller(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PainsKiller(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_PAINKILLERREADY_BODY); + obj.sq_PlaySound("R_FT_PAINKILLER_READY"); + obj.sq_PlaySound("PAINKILLER_READY"); + obj.getVar("PainsKillerBool").setBool(0, false); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/painkiller/ready/painkillerreadyfront_00.ani", 0, 1, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/painkiller/ready/painkillerreadyground_00.ani", 0, 1, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_PAINKILLERSTART_BODY); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_PAINKILLERCOLLISIONCHECK)); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/painkiller/start/painkillerstartfront_02.ani", 0, 1, 0); + break; + case 2: + case 3: + if(subState == 2) obj.sq_SetCurrentAnimation(ANI_FWBYKK_PAINKILLERATTACKA_BODY); + else obj.sq_SetCurrentAnimation(ANI_FWBYKK_PAINKILLERATTACKB_BODY); + obj.sq_PlaySound("FT_PAINKILLER_FIN"); + obj.sq_PlaySound("PAINKILLER_LANDING"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local delay1 = 20000 / speedRate; + local delay2 = 60000 / speedRate; + sq_flashScreen(obj,delay1,delay2,delay1,178,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("PainsKillerSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(1, delay / 32, 32, true); + obj.setTimeEvent(2, delay / 32, 32, true); + break; + case 2: + case 3: + obj.removeAllTimeEvent(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local delay1 = 5000 / speedRate; + local delay2 = 10000 / speedRate; + local delay3 = 20000 / speedRate; + sq_flashScreen(obj,delay1,delay2,delay1,204,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, delay3); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 2, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_PAINSKILLER); + local hitMax = sq_GetLevelData(obj, SKILL_FWBYKK_PAINSKILLER, 3, skillLevel); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_PAINSKILLER, 6, skillLevel) * 10; + local time = sq_GetLevelData(obj, SKILL_FWBYKK_PAINSKILLER, 7, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + //CreateMineExplosion + //down + if(subState == 3){ + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,-1,0,sq_GetDirection(obj),3,SKILL_FWBYKK_PAINSKILLER,1,totalDamage,hitMax,speedRate,prob,time,level,0,0); + }else{ + local delay = currentAni.getDelaySum(0, 0); + obj.setTimeEvent(3, delay / 4, 4, true); + // local hitTime = sq_GetIntData(obj, SKILL_FWBYKK_DRAGONMINE, 9); + // local damage = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 4, skillLevel) - 100; + // local moveSpeed = sq_GetLevelData(obj, SKILL_FWBYKK_DRAGONMINE, 6, skillLevel); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,-1,0,sq_GetDirection(obj),3,SKILL_FWBYKK_PAINSKILLER,2,totalDamage,hitMax,speedRate,prob,time,level,0,0); + } + break; + } +} + +function onEndCurrentAni_PainsKiller(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_FWBYKK_PAINSKILLER, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + if(obj.getVar("PainsKillerBool").getBool(0)) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_FWBYKK_PAINSKILLER, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PainsKiller(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_PainsKiller(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + case 102: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_PAINKILLERA)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "character/fighter/effect/animation/3_streetfighter_bykk/painkiller/attack/painkillerattackground_00.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, -sq_GetZPos(obj)); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + case 103: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_PAINKILLERA)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 104: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(1, 2); + obj.setTimeEvent(3, delay / 4, 4, true); + break; + } + return true; +} + +function onTimeEvent_PainsKiller(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 120, timeEventCount, 32, true); + local dstX = sq_GetDistancePos(obj.getVar("PainsKillerSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(1); + break; + case 2: + local v = sq_GetAccel(0, 120, timeEventCount, 32, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 3: + local v = sq_GetAccel(120, 0, timeEventCount, 4, false); + sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onEndState_PainsKiller(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_PainsKiller(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + // print("subState = "+subState); + switch(subState){ + case 1: + if(obj.getVar("PainsKillerBool").getBool(0) == false) obj.getVar("PainsKillerBool").setBool(0, true); + break; + case 2: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 15, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } + break; + case 3: + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex < 3){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_PAINSKILLER); + local prob = 1000; + local time = sq_GetLevelData(obj, SKILL_FWBYKK_PAINSKILLER, 13, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), level, false, time); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 14, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } + } + else{ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 15, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } + break; + } +} + + + + +function setStreetFighterBuff_bykk(obj, index) +{ + switch(index){ + case SKILL_FWBYKK_ENCHANTPOISON: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ENCHANTPOISON); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ENCHANTPOISON, true); + local buffTime = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 0, sq_GetSkillLevel(obj, SKILL_FWBYKK_ENCHANTPOISON)); + if(buffTime != 0) AddAppendage.sq_SetValidTime(buffTime); + break; + case SKILL_FWBYKK_DOUBLETHROW: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_DOUBLETHROW); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_DOUBLETHROW, true); + local buffTime = sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 0, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW)); + if(buffTime != 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_DOUBLETHROW, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + break; + } +} + +function proc_appendage_doublethrow(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function proc_appendage_enchantpoison(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function onStart_appendage_enchantpoison(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_ENCHANTPOISON); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 6, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 8, skillLevel); + local damage = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 9, skillLevel); + appendage.getVar("custom").setInt(0, prob); + appendage.getVar("custom").setInt(1, time); + appendage.getVar("custom").setInt(2, damage); +} + +function onEnd_appendage_enchantpoison(appendage) +{} + +function onAttackParent_appendage_enchantpoison(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(sq_getRandom(1, 1000) < 1000 - appendage.getVar("custom").getInt(0)) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return;// || obj.getState() != 8 + // if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + // local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + // local skillIndex = colObj.getVar("skillIndex").getInt(0); + // if(skillIndex == 255) return; + // } + if(damager.getVar("SFPoison").get_obj_vector_size() < 1){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local time = appendage.getVar("custom").getInt(1); + local damage = appendage.getVar("custom").getInt(2); + createSkillPassive_Fighter_bykk(obj,damager,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,255,1,group,uniqueId,time,damage,0,0,0,0); + } + // else{ + // local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + // if(poisonObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + // local time = appendage.getVar("custom").getInt(1); + // local damage = appendage.getVar("custom").getInt(2); + // local count = time / 500; + // colObj.getVar("time").setInt(0, time); + // colObj.getVar("custom").setInt(2, count); + // local baseDamage = colObj.getVar("damage").getInt(0); + // colObj.getVar("damage").setInt(0, baseDamage + damage); + // if(!colObj.isExistTimeEvent(1)) colObj.setTimeEvent(1, 500, count, true); + // } + // } +} + +function proc_appendage_provocation_debuff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + if(appendage.getVar().getBool(0) == false && appendage.getTimer().Get() >= appendage.getVar("custom").getInt(1)){ + appendage.getVar().setBool(0, true); + local pooledObj = sq_AddDrawOnlyAniFromParent(parentObj, "character/fighter/effect/animation/provocationed.ani", 0, -1, sq_GetHeightObject(parentObj) + 50); + sq_moveWithParent(parentObj, pooledObj); + } +} + +function getImmuneTypeDamageRate_appendage_provocation_debuff(appendage, damageRate, attacker) +{ + if(!appendage) return damageRate; + local sourceObj = appendage.getSource(); + if(isSameObject(sourceObj, attacker)){ + local newDamageRate = damageRate + appendage.getVar("custom").getInt(0) / 10; + // print("newDamageRate = "+newDamageRate); + return newDamageRate; + } + else return damageRate; +} + +function onStart_appendage_clawmastery(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == -1) return; + print("weaponSubType = "+weaponSubType); + if(weaponSubType == 2){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_CLAWMASTERY); + local physicalEquAttack = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 9, skillLevel); + local magicalEquAttack = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 10, skillLevel); + local stunRate = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 8, skillLevel); + local prob = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 7, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 11, skillLevel); + local damage = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 12, skillLevel); + local level = sq_GetLevelData(obj, SKILL_FWBYKK_CLAWMASTERY, 13, skillLevel); + appendage.getVar("custom").setInt(0, prob); + appendage.getVar("custom").setInt(1, time); + appendage.getVar("custom").setInt(2, damage); + appendage.getVar("custom").setInt(3, level); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_POISONMASTERY, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMASTERY)); + + local change_appendage = appendage.sq_getChangeStatus("poisonstunBuff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("poisonstunBuff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, physicalEquAttack.tofloat() * 0.1); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK , true, magicalEquAttack.tofloat() * 0.1); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK , false, stunRate.tofloat() * -0.1); + } + } +} + +function onAttackParent_appendage_clawmastery(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; +} + +function onStart_appendage_poisonmastery(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMASTERY); + local speed = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMASTERY, 7, skillLevel); + local hitProb = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMASTERY, 0, skillLevel); + local attackProb = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMASTERY, 6, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMASTERY, 3, skillLevel); + local damage = sq_GetLevelData(obj, SKILL_FWBYKK_POISONMASTERY, 4, skillLevel); + appendage.getVar("custom").setInt(0, hitProb); + appendage.getVar("custom").setInt(1, attackProb); + appendage.getVar("custom").setInt(2, time); + appendage.getVar("custom").setInt(3, damage); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_POISONMASTERY, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMASTERY)); + + local change_appendage = appendage.sq_getChangeStatus("poisonstunBuff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("poisonstunBuff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED , false, (speed).tofloat()); + } +} + +function onDamageParent_appendage_poisonmastery(appendage ,attacker, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck || !attacker.isObjectType(OBJECTTYPE_ACTIVE)) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local prob = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 0, 1.0) + 100; + if(sq_getRandom(1, 1000) < 1000 - prob) return; + if(attacker.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = attacker.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 4, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 3, 1.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + colObj.getVar("time").setInt(0, time); + colObj.getVar("custom").setInt(2, time / 500); + } + } +} + +function onAttackParent_appendage_poisonmastery(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + local skillIndex = colObj.getVar("skillIndex").getInt(0); + if(skillIndex == 255) return; + } + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local prob = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 6, 1.0) + 100; + if(sq_getRandom(1, 1000) < 1000 - prob) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 4, 1.0) + 100; + local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 3, 1.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + colObj.getVar("time").setInt(0, time); + colObj.getVar("custom").setInt(2, time / 500); + } + } +} + +function onStart_appendage_poisonspirit(appendage) +{ + if(!appendage) return; +} + +function onStart_appendage_poisonstun(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSTUN); + local allCriticalRate = sq_GetLevelData(obj, SKILL_FWBYKK_POISONSTUN, 1, skillLevel); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_POISONSTUN, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSTUN)); + + local change_appendage = appendage.sq_getChangeStatus("poisonstunBuff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("poisonstunBuff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (allCriticalRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE , false, (allCriticalRate).tofloat()); + } +} + + +function ProcPassiveSkill_Fighter_3bykk(obj, skill_index, skill_level) +{ + switch (skill_index){ + case 33: + // if (skill_level > 0){ + // local apPath = "character/fighter/stunonuseskill/ap_stunonuseskill.nut"; + // local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, apPath, true); + // } + break; + case SKILL_FWBYKK_POISONMASTERY: + if (skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_POISONMASTERY, true); + } + break; + case SKILL_FWBYKK_CLAWMASTERY: + if (skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_CLAWMASTERY, true); + } + break; + case SKILL_FWBYKK_POISONSTUN: + if (skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_POISONSTUN, true); + } + break; + } +} + +function onStartDungeon_Fighter_3bykk(obj) +{ + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT) > 0){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_DOUBLETHROW); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_DOUBLETHROW, true); + local buffTime = sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 0, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW)); + if(buffTime != 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_DOUBLETHROW, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + + setSkillBonusRate_3StreetFighter_bykk(obj); +} + +function onStartMap_Fighter_3bykk(obj) +{ + if(!obj || obj.getState() == STATE_DIE) return; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(activeObj.getVar("SFPoison").get_obj_vector_size() < 1){ + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_Fighter_bykk(obj,activeObj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,255,1,group,uniqueId,0,0,0,0,0,0); + } + } + } +} + +function reset_Fighter_3bykk(obj) +{ + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT) > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DOUBLETHROW)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_DOUBLETHROW, true); + local buffTime = sq_GetLevelData(obj, SKILL_FWBYKK_DOUBLETHROW, 0, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW)); + if(buffTime != 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FWBYKK_DOUBLETHROW, sq_GetSkillLevel(obj, SKILL_FWBYKK_DOUBLETHROW)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + } + setSkillBonusRate_3StreetFighter_bykk(obj) +} + +function setSkillBonusRate_3StreetFighter_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_FWBYKK_POISONSNAKE, 15, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSNAKE))) / 1000; + print("bonusRate0 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMASTERY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_FWBYKK_POISONMASTERY, 5, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONMASTERY))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_FWBYKK_POISONSPIRIT, 1, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSPIRIT))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSTUN) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_FWBYKK_POISONSTUN, 3, sq_GetSkillLevel(obj, SKILL_FWBYKK_POISONSTUN))) / 1000; + print("bonusRate3 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + + diff --git a/user/116.205.165.25/4_fighter_2.c b/user/116.205.165.25/4_fighter_2.c new file mode 100644 index 0000000..1fe6336 --- /dev/null +++ b/user/116.205.165.25/4_fighter_2.c @@ -0,0 +1,2980 @@ + + + +function onSetState_Fighter_Throw_bykk(obj, state, datas, isResetTimer) +{ + if(obj.getThrowIndex() == 69 && obj.getThrowState() == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_FIGHTER_ILLSIONBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getThrowIndex() == 30 && obj.getThrowState() == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_FIGHTER_ILLSIONBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + +function illusionBomb_bykk(obj) +{ + if(obj.getVar("illusionBomb").getBool(0)){ + obj.setSkillCommandEnable(SKILL_FIGHTER_ILLSIONBOMB, true); + if(obj.sq_IsEnterSkill(SKILL_FIGHTER_ILLSIONBOMB) != -1){ + obj.getVar("illusionBomb").setBool(0, false); + local skill = sq_GetSkill(obj, 69); + if(!skill.isSealFunction()){ + obj.getVar("illusionBomb_boss").clear_obj_vector(); + obj.getVar("illusionBomb_named").clear_obj_vector(); + obj.getVar("illusionBomb_normal").clear_obj_vector(); + obj.getVar("illusionBomb_target").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)) obj.getVar("illusionBomb_boss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("illusionBomb_named").push_obj_vector(activeObj); + else obj.getVar("illusionBomb_normal").push_obj_vector(activeObj); + } + } + if(obj.getVar("illusionBomb_boss").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("illusionBomb_boss").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("illusionBomb_boss").get_obj_vector(i); + if(targetObj) obj.getVar("illusionBomb_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("illusionBomb_named").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("illusionBomb_named").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("illusionBomb_named").get_obj_vector(i); + if(targetObj) obj.getVar("illusionBomb_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("illusionBomb_normal").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("illusionBomb_normal").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("illusionBomb_normal").get_obj_vector(i); + if(targetObj) obj.getVar("illusionBomb_target").push_obj_vector(targetObj); + } + } + if(obj.getVar("illusionBomb_obj").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("illusionBomb_obj").get_obj_vector_size(); i++){ + local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("illusionBomb_obj").get_obj_vector(i)); + if(!colObj) continue; + local targetObj = obj.getVar("illusionBomb_target").get_obj_vector(0); + colObj.getVar("move").setInt(20, sq_GetXPos(targetObj)); + colObj.getVar("move").setInt(21, sq_GetYPos(targetObj)); + colObj.getVar("move").setInt(10, sq_GetXPos(colObj)); + colObj.getVar("move").setInt(11, sq_GetYPos(colObj)); + colObj.removeAllTimeEvent(); + if((sq_GetXPos(targetObj) > sq_GetXPos(colObj) && colObj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_GetXPos(targetObj) < sq_GetXPos(colObj) && colObj.getDirection() == ENUM_DIRECTION_RIGHT)) sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + else{ + local totalDamage = 0; + local size = obj.getVar("illusionBomb_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("illusionBomb_obj").get_obj_vector(i)); + if(!colObj) continue; + // colObj.getVar("move").setInt(20, sq_GetXPos(obj)); + // colObj.getVar("move").setInt(21, sq_GetYPos(obj) - 1); + // colObj.getVar("move").setInt(10, sq_GetXPos(colObj)); + // colObj.getVar("move").setInt(11, sq_GetYPos(colObj)); + colObj.removeAllTimeEvent(); + // if((sq_GetXPos(obj) > sq_GetXPos(colObj) && colObj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_GetXPos(obj) < sq_GetXPos(colObj) && colObj.getDirection() == ENUM_DIRECTION_RIGHT)) sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); + totalDamage = colObj.getVar("custom").getInt(10); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(size * totalDamage); + sq_BinaryWriteDword(sq_GetIntData(obj, 69, 0) * 3); + sq_SendCreatePassiveObjectPacket(obj, 24150, 0, 0, -1, 70, obj.getDirection()); + } + } + } + } +} + + + +function onSetState_IllusionBomb(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, SKILL_FIGHTER_ILLSIONBOMB); + local castTime = sq_GetCastTime(obj, SKILL_FIGHTER_ILLSIONBOMB, skill_level); + local animation = sq_GetCurrentAnimation(obj); + local startTime = animation.getDelaySum(false); + 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, castTime, true); + obj.setTimeEvent(2, castTime, 1, false); + break; + case 1: + obj.sq_PlaySound("FT_KENSIN"); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.getVar("illusionBomb").setBool(0, true); + local skill_level = sq_GetSkillLevel(obj, SKILL_FIGHTER_ILLSIONBOMB); + local createNumber = sq_GetLevelData(obj, 8, 0, sq_GetSkillLevel(obj, 8)); + local lifeTime = sq_GetLevelData(obj, 8, 1, sq_GetSkillLevel(obj, 8)); + local powerDamage = obj.sq_GetPowerWithPassive(SKILL_FIGHTER_ILLSIONBOMB, -1, 0, -1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_FIGHTER_ILLSIONBOMB, 0); + local time = sq_GetIntData(obj, SKILL_FIGHTER_ILLSIONBOMB, 1); + local range = sq_GetIntData(obj, 8, 0) / 4; + local baseangle = sq_getRandom(0,60); + for(local i = 0; i < createNumber; i++){ + local angle = 360 / createNumber * i + baseangle; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * range.tofloat()).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * (range / 3).tofloat()).tointeger(); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(powerDamage); + sq_BinaryWriteDword(lifeTime); + sq_BinaryWriteDword(sizeRate); + sq_SendCreatePassiveObjectPacket(obj, 24150, 0, x, y, 0, obj.getDirection()); + } + obj.setTimeEvent(1, time, 1, false); + break; + case 2: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, 36); + local castTime = sq_GetCastTime(obj, 30, skill_level); + local animation = sq_GetCurrentAnimation(obj); + local startTime = animation.getDelaySum(false); + 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, castTime, true); + obj.setTimeEvent(3, castTime, 1, false); + break; + case 3: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.setTimeEvent(1, 300, 1, false); + local apdPath = "character/fighter/illusionbomb/ap_f_lightenchantweapon.nut"; + local skillLevel = sq_GetSkillLevel(obj, 30); + local buffTime = sq_GetLevelData(obj, 30, 1, skillLevel); + local bonusRate = sq_GetLevelData(obj, 30, 0, skillLevel); + + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)){ + local sqrObj = sq_GetCNRDObjectToSQRCharacter(object); + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrObj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(sqrObj, apdPath); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrObj, obj, 30, false, apdPath, true); + if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime); + else addAppendage.sq_SetValidTime(0); + addAppendage.setEnableIsBuff(true); + addAppendage.setBuffIconImage(2); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 30, sq_GetSkillLevel(obj, 30)); + CNSquirrelAppendage.sq_Append(addAppendage, sqrObj, obj, true); + + local change_appendage = addAppendage.sq_getChangeStatus("lightenchantweapon"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("lightenchantweapon",sqrObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (bonusRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (bonusRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, (bonusRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, (bonusRate * 0.1).tofloat()); + } + } + } + break; + } +} + +function onEndCurrentAni_IllusionBomb(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FIGHTER_ILLSIONBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_FIGHTER_ILLSIONBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onTimeEvent_IllusionBomb(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return true; + if(timeEventIndex == 1) obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + else if(timeEventIndex == 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_FIGHTER_ILLSIONBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(timeEventIndex == 3){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_FIGHTER_ILLSIONBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + + + +function setCustomData_po_illusionbomb_bykk(obj,receiveData) +{ + if(!obj) return; + local sub = receiveData.readDword(); + obj.getVar("sub").setInt(10, sub); + switch(sub){ + case 1://body + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(sqrChr.getVar("illusionBomb_obj").get_obj_vector_size() > 0){ + if(!sqrChr.getVar("illusionBomb_obj").is_obj_vector(obj)) sqrChr.getVar("illusionBomb_obj").push_obj_vector(obj); + } + else{ + sqrChr.getVar("illusionBomb_obj").clear_obj_vector(); + sqrChr.getVar("illusionBomb_obj").push_obj_vector(obj); + } + local powerDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.getVar("custom").setInt(10, powerDamage); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://explosion + local powerDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(12, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage); + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + } +} + +function setState_po_illusionbomb_bykk(obj, state, datas) +{ + if(!obj) return; + obj.getVar("state").setInt(10, state); + switch(state){ + case 20: + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = obj.getCustomAnimation(1); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = obj.getCustomAnimation(2); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2, 15, 15, false); + break; + case 23: + sq_setCurrentAxisPos(obj, 2, 70); + local ani = obj.getCustomAnimation(3); + obj.setCurrentAnimation(ani); + break; + case 24: + local ani = obj.getCustomAnimation(4); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(12).tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(11, 200, 2, true); + obj.setTimeEvent(12, 50, 4, true); + obj.setTimeEvent(13, 15, 4, true); + obj.setTimeEvent(14, 100, 2, true); + break; + } + +} + +function onEndCurrentAni_po_illusionbomb_bykk(obj) +{ + if(!obj) return; + local state = obj.getVar("state").getInt(10); + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } +} + +function onTimeEvent_po_illusionbomb_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return true; + local sizeRate = obj.getVar("custom").getInt(12); + sizeRate = sizeRate.tofloat() / 100.0; + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + //print(obj.getVar("move").getInt(20)); + //print(obj.getVar("move").getInt(21)); + if(obj.getVar("move").getInt(20) < 1 || obj.getVar("move").getInt(21) < 1){ + obj.stopTimeEvent(2); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(20), timeEventCount, 15); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), obj.getVar("move").getInt(21), timeEventCount, 15); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + if(timeEventCount == 15){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(obj.getVar("custom").getInt(10)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(12)); + sq_SendCreatePassiveObjectPacket(obj, 24150, 0, 0, 1, 70, obj.getDirection()); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 11: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/lightexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 12: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/lightexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 13: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/lightexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 14: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/lightexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } +} + +function procAppend_po_illusionbomb_bykk(obj) +{ + return; +} + +function onAttack_po_illusionbomb_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local sub = obj.getVar("sub").getInt(10); + local state = obj.getVar("state").getInt(10); + if(sub == 1 && state == 21){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(obj.getVar("custom").getInt(10)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(12)); + sq_SendCreatePassiveObjectPacket(obj, 24150, 0, 0, 1, 70, obj.getDirection()); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function createOnlyDrawObject_Fighter_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_Fighter_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createSkillPassive_Fighter_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + + + +//obj + +function setCustomData_po_fighter_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("job").setInt(0, job); + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SKYTHUNDERSTEP: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/1_nenmaster_bykk/animation/skythunderstep/skythunderstep_end_exp_plism.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_LIGHTNINGSHIFT: + switch(subtype){ + case 1: + local subState = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local aniPath = [ + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02a_00.ani", + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02b_00.ani", + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02c_00.ani", + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02d_00.ani", + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02e_00.ani", + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02f_00.ani", + "passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02g_00.ani", + ]; + local ani = sq_CreateAnimation("",aniPath[subState]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, subState + 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetShake(obj, 12, 200); + sq_flashScreen(obj,20,10,80,104, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local subState = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/2_striker_bykk/animation/lightningshift/lightningshifthiteffect02h_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetShake(obj, 20, 300); + sq_flashScreen(obj,20,350,100,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_THROWSAND: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local decreaseRate = receiveData.readDword(); + local decreaseRate2 = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_THROWSAND, -1, 7, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/throwsand.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + prob = (prob.tofloat() / 10.0).tointeger(); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_FWBYKK_GRABEXPLOSION: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSION, -1, 12, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level,time); + obj.setTimeEvent(1, 200, 2, true); + obj.setTimeEvent(2, 50, 2, true); + obj.setTimeEvent(3, 15, 4, true); + obj.setTimeEvent(4, 100, 1, true); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + sq_SetMyShake(obj, 15, 120); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local proc = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, proc); + obj.getVar("custom").setInt(3, time); + obj.getVar("custom").setInt(4, level); + local ani = sq_CreateAnimation("","character/fighter/effect/animation/3_streetfighter_bykk/grabexplosion/lv95poisonspirit/poisonspirit_00.ani"); + obj.setCurrentAnimation(ani); + + local apdPath = "character/fighter/3streetfighter_bykk/ap_grabexplosion_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + AddAppendage.sq_SetValidTime(holdTime + 100); + } + obj.setTimeEvent(0, holdTime, 1, false); + } + break; + } + break; + case SKILL_FWBYKK_GRABEXPLOSIONEX: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GRABEXPLOSIONEX, -1, 21, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/grabexplosionex/darkexplosion[grap].ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, prob, level, time); + obj.setTimeEvent(1, 200, 2, true); + obj.setTimeEvent(2, 50, 2, true); + obj.setTimeEvent(3, 15, 4, true); + obj.setTimeEvent(4, 100, 1, true); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + sq_SetMyShake(obj, 15, 200); + break; + } + break; + case SKILL_FWBYKK_HIDDENSTING: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local stunTime = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_HIDDENSTING, -1, 13, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/hiddensting/lv95poisonspirit/hiddenstingfront_01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAttackInfoForceHitStunTime(attackInfo, stunTime); + obj.setTimeEvent(1, 250, 1, false); + break; + } + break; + case SKILL_FWBYKK_BLOCKBUSTER: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local proc = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTER, -1, 9, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbustersub.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, proc, level, time); + sq_CreateParticle("passiveobject/1_fighter_bykk/particle/blockbusterpiece.ptl", obj, 0, 0, 0, true, 30, 0, 1); + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterdust.ani" + createOnlyDrawObjectEX_Fighter_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 3, 100); + break; + } + break; + case SKILL_FWBYKK_MOUNT: + switch(subtype){ + case 1: + case 2: + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local subState = receiveData.readDword(); + local aniPath = ["","passiveobject/character/fighter/animation/mountsub.ani","passiveobject/character/fighter/animation/crazymountsubsmallleft.ani","passiveobject/character/fighter/animation/crazymountsubsmallleft.ani"]; + local atkSet = [0, 16, 6, 5]; + local bonusSet = [0, 4, 5, 5]; + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_MOUNT, -1, bonusSet[subtype], bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("",aniPath[subtype]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[subtype])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(subState != 4) sq_SetMyShake(obj, 3, 30); + else sq_SetMyShake(obj, 5, 150); + break; + } + break; + case SKILL_FWBYKK_THROWWEB: + switch(subtype){ + case 1://totalDamage,prob,time,level,holdTime + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local holdTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, prob); + obj.getVar("custom").setInt(1, time); + obj.getVar("custom").setInt(2, level); + obj.getVar("custom").setInt(3, holdTime); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_THROWWEB, -1, 10, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/throwweblongtype/ring_back_normal.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_FWBYKK_GROUNDKICK: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_GROUNDKICK, -1, 8, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + obj.setTimeEvent(1, 100, 1, false); + break; + } + break; + case SKILL_FWBYKK_VENOMMINE: + switch(subtype){ + case 1: + local angle = receiveData.readDword(); + local sub = receiveData.readDword(); + local increaseRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, angle); + obj.getVar("custom").setInt(1, sub); + obj.getVar("custom").setInt(2, increaseRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, hitMax); + obj.getVar("custom").setInt(2, sizeRate); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_VENOMMINE, -1, 4, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + + obj.setTimeEvent(2, 400, 1, false); + break + } + break; + case SKILL_FWBYKK_JUNKSPIN: + switch(subtype){ + case 1: + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "character/fighter/effect/animation/3_streetfighter_bykk/junkspin/down3_normal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + // currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/fighter/effect/animation/3_streetfighter_bykk/junkspin/ground.ani"),true); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.setTimeEvent(1, 50, -1, false); + break; + case 2: + local sizeRate = receiveData.readDword(); + local baseAniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/junkspinobjects/"; + local aniPath = ["barrel2.ani","wagon.ani","pipeline.ani","Table.ani","Barrel2.ani","Barrel3.ani"]; + local ani = sq_CreateAnimation("", baseAniPath + aniPath[sq_getRandom(0, aniPath.len() - 1)]); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + obj.sq_SetMoveParticle("particle/junkspinthrowobject.ptl", 0.0, 0.0); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_JUNKSPIN, -1, 7, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/junkspinobjects/dynamite/junkspinfinishfront_05.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/junkspinobjects/dynamite/junkspinfinishback_00.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //sq_SetCurrentAttackeHitStunTime(sq_GetCurrentAttackInfo(obj), 2000); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time); + + obj.sq_PlaySound("R_FT_JUNK_SPIN_FIN"); + obj.sq_PlaySound("JUNK_SPIN_DYNAMITE"); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_JUNKSPIN, -1, 6, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + sq_AddAttackBox(currentAni, -250, -100, -10, 500, 200, 160); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCurrentAttackeHitStunTime(sq_GetCurrentAttackInfo(obj), 1500); + local delay = 20000 / speedRate; + obj.setTimeEvent(2, delay, 1, false); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_FWBYKK_BLOCKBUSTEREX: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 16, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("", "passiveobject/character/fighter/animation/blockbusterexsub/blockbusterexdodge.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/character/fighter/animation/blockbusterexsub/blockbusterexsubdodge.ani"; + createOnlyDrawObjectEX_Fighter_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,100,100); + break; + case 2://totalDamage,totalDamage_exp,totalDamage_lastexp,stunTime,sizeRate,sizeRateLastExp + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local totalDamage_lastexp = receiveData.readDword(); + local stunTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sizeRateLastExp = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, totalDamage_lastexp); + obj.getVar("custom").setInt(3, stunTime); + obj.getVar("custom").setInt(4, sizeRate); + obj.getVar("custom").setInt(5, sizeRateLastExp); + // print("sizeRateLastExp = "+sizeRateLastExp); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block1glow.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block1spark.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/venommine.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,0); + // obj.setTimeEvent(1, 150, 1, false); + obj.setTimeEvent(0, 100, 2, false); + break; + case 3://totalDamage,totalDamage_exp,stunTime,sizeRate + case 4://totalDamage,totalDamage_exp,stunTime,sizeRate + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local stunTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 17, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, stunTime); + obj.getVar("custom").setInt(3, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block"+(subtype-1).tostring()+".ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block"+(subtype-1).tostring()+"glow.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block"+(subtype-1).tostring()+"spark.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/venommine.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,0); + obj.setTimeEvent(2, 50 * (subtype - 2), 2, false); + break; + case 5: + local totalDamage = receiveData.readDword(); + local stunTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, sub==1?2:1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAttackInfoForceHitStunTime(attackInfo, stunTime); + if(sub > 0){ + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 19, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + obj.setTimeEvent(3, 200, 4, true); + obj.setTimeEvent(4, 50, 4, true); + obj.setTimeEvent(5, 15, 8, true); + obj.setTimeEvent(6, 100, 2, true); + } + else{ + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_BLOCKBUSTEREX, -1, 18, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + obj.setTimeEvent(3, 200, 1, true); + obj.setTimeEvent(4, 50, 1, true); + obj.setTimeEvent(5, 15, 2, true); + obj.setTimeEvent(6, 100, 1, true); + } + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + if(sub > 0) sq_SetMyShake(obj, 15, 300); + else sq_SetMyShake(obj, 15, 120); + break; + } + break; + case SKILL_FWBYKK_POISONEXPLOSION: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 15, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonexplosion/explosion_00_shockwave_n.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2://19 20 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local sub = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_FWBYKK_POISONEXPLOSION); + local createMax_1st = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 2, skillLevel); + local createMax_2nd = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 3, skillLevel); + createMax_2nd = createMax_2nd + createMax_1st + 1; + local decreaseRate_1st = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 4, skillLevel); + local decreaseRate_2nd = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 5, skillLevel); + local totalDamage_1st = totalDamage * (100 - decreaseRate_1st) / 100; + local totalDamage_2nd = totalDamage * (100 - decreaseRate_2nd) / 100; + local moveSpeed = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 6, skillLevel); + local attackSpeed = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 7, skillLevel); + local prob = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 8, skillLevel) * 10; + local time = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONEXPLOSION, 14, skillLevel); + local level = sq_GetSkillLevel(sqrChr, 174) + 5; + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, createMax_1st); + obj.getVar("custom").setInt(3, createMax_2nd); + obj.getVar("custom").setInt(4, totalDamage_1st); + obj.getVar("custom").setInt(5, totalDamage_2nd); + obj.getVar("custom").setInt(6, moveSpeed); + obj.getVar("custom").setInt(7, attackSpeed); + obj.getVar("custom").setInt(8, prob); + obj.getVar("custom").setInt(9, time); + obj.getVar("custom").setInt(10, level); + obj.getVar("custom").setInt(11, sub); + local ani = sq_CreateAnimation("", "character/fighter/effect/animation/poisonexplosion/flower_01_d.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(sub > 0){ + currentAni.setSpeedRate(300.0); + currentAni = obj.getCurrentAnimation(); + } + local delay = currentAni.getDelaySum(false); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -moveSpeed.tofloat(), 0); + if(ap) { + ap.getAppendageInfo().setValidTime(delay); + ap.sq_Append(obj, targetObj); + } + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, -attackSpeed.tofloat(), 0); + if(ap2) { + ap2.getAppendageInfo().setValidTime(delay); + ap2.sq_Append(obj, targetObj); + } + sq_EffectLayerAppendage(targetObj,sq_RGB(0,0,0),delay,0,0,delay); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local createMax_1st = receiveData.readDword(); + local createMax_2nd = receiveData.readDword(); + local totalDamage_1st = receiveData.readDword(); + local totalDamage_2nd = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, createMax_1st); + obj.getVar("custom").setInt(3, createMax_2nd); + obj.getVar("custom").setInt(4, totalDamage_1st); + obj.getVar("custom").setInt(5, totalDamage_2nd); + obj.getVar("custom").setInt(6, moveSpeed); + obj.getVar("custom").setInt(7, attackSpeed); + obj.getVar("custom").setInt(8, prob); + obj.getVar("custom").setInt(9, time); + obj.getVar("custom").setInt(10, level); + obj.getVar("custom").setInt(11, sub); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 16, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonexplosion/explosion_01_shockwave_d.ani"; + if(sub > 0) aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonexplosioncustom/explosion_shockwave_n.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, sub>0?20:19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + if(sub > 0){sq_SetMyShake(obj, 15, 220);sq_flashScreen(obj, 0, 90, 180, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);} + else sq_SetMyShake(obj, 10, 220); + break; + case 4: + local totalDamage_1st = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local createMax_2nd = receiveData.readDword(); + local totalDamage_2nd = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("custom").setInt(0, totalDamage_1st); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, createMax_2nd); + obj.getVar("custom").setInt(3, totalDamage_2nd); + obj.getVar("custom").setInt(4, moveSpeed); + obj.getVar("custom").setInt(5, attackSpeed); + obj.getVar("custom").setInt(6, prob); + obj.getVar("custom").setInt(7, time); + obj.getVar("custom").setInt(8, level); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + local ani = sq_CreateAnimation("", "character/fighter/effect/animation/poisonexplosion/flower_01_d.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -moveSpeed.tofloat(), 0); + if(ap) { + ap.getAppendageInfo().setValidTime(delay); + ap.sq_Append(obj, targetObj); + } + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, -attackSpeed.tofloat(), 0); + if(ap2) { + ap2.getAppendageInfo().setValidTime(delay); + ap2.sq_Append(obj, targetObj); + } + } + break; + case 5: + local totalDamage_1st = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local createMax_2nd = receiveData.readDword(); + local totalDamage_2nd = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + obj.getVar("custom").setInt(1, createMax_2nd); + obj.getVar("custom").setInt(2, totalDamage_2nd); + obj.getVar("custom").setInt(3, moveSpeed); + obj.getVar("custom").setInt(4, attackSpeed); + obj.getVar("custom").setInt(5, prob); + obj.getVar("custom").setInt(6, time); + obj.getVar("custom").setInt(7, level); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 16, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonexplosion/explosion_01_shockwave_d.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_1st); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 10, 150); + break; + case 6: + local totalDamage_2nd = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + obj.getVar("custom").setInt(0, totalDamage_2nd); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, moveSpeed); + obj.getVar("custom").setInt(3, attackSpeed); + obj.getVar("custom").setInt(4, prob); + obj.getVar("custom").setInt(5, time); + obj.getVar("custom").setInt(6, level); + local ani = sq_CreateAnimation("", "character/fighter/effect/animation/poisonexplosion/flower_01_d.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -moveSpeed.tofloat(), 0); + if(ap) { + ap.getAppendageInfo().setValidTime(delay); + ap.sq_Append(obj, targetObj); + } + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, -attackSpeed.tofloat(), 0); + if(ap2) { + ap2.getAppendageInfo().setValidTime(delay); + ap2.sq_Append(obj, targetObj); + } + } + break; + case 7: + local totalDamage_2nd = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local attackSpeed = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONEXPLOSION, -1, 16, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonexplosion/explosion_01_shockwave_d.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_2nd); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 10, 150); + break; + } + break; + case SKILL_FWBYKK_DRAGONMINE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local damage = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + obj.getVar("custom").setInt(0, lifeTime); + obj.getVar("custom").setInt(1, hitTime); + obj.getVar("custom").setInt(2, damage); + obj.getVar("custom").setInt(3, moveSpeed); + obj.getVar("custom").setInt(4, sizeRate); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 12, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/explosion/boom_dragonmine_boom4.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAttack = sq_GetCurrentAttackInfo(obj) + sq_SetCurrentAttacknUpForce(pAttack, 200); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 13); + local delay2 = currentAni.getDelaySum(0, 12); + obj.setTimeEvent(1, delay / 6, 5, false); + obj.setTimeEvent(2, delay2, 1, false); + sq_flashScreen(obj,0,delay2 / 2,delay2 / 2,85,sq_RGB(255,50,128), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_NORMAL); + break; + case 2: + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local damage = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, lifeTime); + obj.getVar("custom").setInt(1, hitTime); + obj.getVar("custom").setInt(2, damage); + obj.getVar("custom").setInt(3, moveSpeed); + obj.getVar("custom").setInt(4, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + sqrChr.getVar("DragonMineBox").clear_obj_vector(); + sqrChr.getVar("DragonMineBox").push_obj_vector(obj); + local delay = receiveData.readDword(); + local offsetX = receiveData.readDword(); + obj.getVar("custom").setInt(0, delay); + obj.getVar("custom").setInt(1, offsetX); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local damage = receiveData.readDword(); + local moveSpeed = receiveData.readDword(); + obj.getVar("custom").setInt(0, lifeTime); + obj.getVar("custom").setInt(1, hitTime); + obj.getVar("custom").setInt(2, damage); + obj.getVar("custom").setInt(3, moveSpeed); + obj.getVar("custom").setInt(4, sizeRate); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_DRAGONMINE, -1, 12, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/tal/dragonmineboomtal_17.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAttack = sq_GetCurrentAttackInfo(obj) + sq_SetCurrentAttacknUpForce(pAttack, 200); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 8); + sq_SetMyShake(obj, 18, delay); + local delay2 = currentAni.getDelaySum(0, 11); + obj.setTimeEvent(2, delay2, 1, false); + sq_flashScreen(obj,0,delay2 / 2,delay2 / 2,85,sq_RGB(255,50,128), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_NORMAL); + break; + } + break; + case SKILL_FWBYKK_PAINSKILLER: + switch(subtype){ + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.getVar("custom").setInt(1, prob); + obj.getVar("custom").setInt(2, time); + obj.getVar("custom").setInt(3, level); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_PAINSKILLER, -1, 16, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + if(subtype == 1){ + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/painkiller/painkillerattackbfront_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level,time); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 6), 1, false); + } + else{ + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/painkiller/painkillerattackafront_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 17)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level,time); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(3, currentAni.getDelaySum(0, 8), 1, false); + } + break; + } + break; + case SKILL_FWBYKK_POISONMIST: + switch(subtype){ + case 1: + local angle = receiveData.readDword(); + local sub = receiveData.readDword(); + local xPos = receiveData.readDword(); + local yPos = receiveData.readDword(); + obj.getVar("custom").setInt(0, angle); + obj.getVar("custom").setInt(1, sub); + obj.getVar("custom").setInt(2, xPos); + obj.getVar("custom").setInt(3, yPos); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + sqrChr.getVar("PoisonMistObj").push_obj_vector(obj); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/bottom.ani"); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_FWBYKK_POISONMIST); + local lifeTime = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONMIST, 1, skillLevel); + local range = sq_GetLevelData(sqrChr, SKILL_FWBYKK_POISONMIST, 5, skillLevel) / 2; + local sizeRate = range.tofloat() / 225.0; + local currentAni = obj.getCurrentAnimation(); + obj.getVar("custom").setInt(1, range); + if(sub > 1){ + currentAni.setImageRateFromOriginal(-sizeRate, sizeRate); + sq_AddAttackBox(currentAni, -range, -range / 2, -10, range * 2, range, 160); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, false); + sq_SetCurrentAttackeDamageAct(attackInfo, 0); + local flashScreenObj = sqrChr.getVar("PoisonMistFlash").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + local flashScreenObj = sq_flashScreen(sqrChr, 800, lifeTime - 1000, 200, 66, sq_RGB(190,83,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sqrChr.getVar("PoisonMistFlash").clear_obj_vector(); + sqrChr.getVar("PoisonMistFlash").push_obj_vector(flashScreenObj); + local hitTime = sq_GetIntData(sqrChr, SKILL_FWBYKK_POISONMIST, 4); + local hitTime_poison = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMIST, -1, 3, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMIST, -1, 4, 1.0); + obj.getVar("custom").setInt(10, damage); + obj.getVar("custom").setInt(11, hitTime_poison); + obj.getVar("custom").setInt(2, hitTime); + obj.setTimeEvent(4, hitTime, -1, false); + obj.setTimeEvent(5, hitTime * 2, 1, false); + obj.setTimeEvent(7, hitTime_poison, -1, true); + } + else{ + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, 100, -1, true); + obj.setTimeEvent(3, lifeTime - 1500, 1, false); + break; + case 3: + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/smallsmoke.ani"; + if(sq_getRandom(1, 100) > 50){ + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 4: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local range = receiveData.readDword(); + obj.getVar("custom").setInt(1, range); + local bonusRate = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = sqrChr.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMIST, -1, 10, bonusRate.tofloat() / 1000.0) + 100; + obj.getVar("PoisonDamage").setInt(0, damage); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -range, -range / 2, -10, range * 2, range, 160); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(6, 50, 17, true); + obj.setTimeEvent(7, 1850 / (hitMax + 2), hitMax - 1, false); + break; + case 5: + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/explosion.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/explosionlayer.ani"),true); + sq_ClearAttackBox(currentAni); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + } + break; + case 255: + switch(subtype){ + case 1: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("SFPoison").clear_obj_vector(); + activeObj.getVar("SFPoison").push_obj_vector(obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(activeObj); + sq_moveWithParent(activeObj, obj); + obj.getVar("custom").setInt(0, group); + obj.getVar("custom").setInt(1, uniqueId); + local count = time / 500; + obj.getVar("custom").setInt(2, count); + obj.getVar("time").setInt(0, time); + obj.getVar("damage").setInt(0, damage); + obj.getVar("damage").setInt(1, damage); + if(damage > 0){ + obj.setTimeEvent(1, 500, count, false); + // print("test"); + } + } + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + local ani = sq_CreateAnimation("","common/commoneffect/animation/decreaseeffect/reactionpoison_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2, 250, 1, false); + } + break;// + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_SHININGWINGSFLAP: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + print("totalDamage = "+totalDamage); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/grabcannonsub.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + sq_SetMyShake(obj, 7, 250); + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sub = receiveData.readDword(); + local sub2 = receiveData.readDword(); + print("totalDamage2 = "+totalDamage); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage2); + obj.getVar("custom").setInt(2, sub); + obj.getVar("custom").setInt(3, sub2); + local aniPath = "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattack01_body.ani"; + if(sub2 > 0) aniPath = "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattack02_body.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_PlaySound("R_FT_SHINING_WINGS_FLAP_LEXY"); + break; + case 21: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect01_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + sq_SetMyShake(obj, 10, 300); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + print("totalDamage3 = "+totalDamage); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sub); + local aniPath = "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattack03bnew_body.ani"; + if(sub > 0){ + aniPath = "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattack03anew_body.ani"; + obj.sq_PlaySound("R_FT_SHINING_WINGS_FLAP_LUCY_02"); + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + case 31: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattack03bnew2_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + sq_SetMyShake(obj, 20, 500); + break; + case 32: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03floor_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + sq_SetMyShake(obj, 20, 500); + break; + case 10: + local totalDamage = receiveData.readDword(); + print("totalDamage = "+totalDamage); + local ani = sq_CreateAnimation("","passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect05floor_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + break; + } + break; + } + break; + } +} + +function setState_po_fighter_bykk(obj, state, datas) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0, state); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_BYKK_SKYTHUNDERSTEP: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_VENOMMINE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/minea_00.ani"); + obj.setCurrentAnimation(ani); + local angle = obj.getVar("custom").getInt(0); + // print("angle = "+angle); + obj.sq_SetMoveParticle("particle/venommine.ptl", angle.tofloat(), 0.0); + local speed = 500 * (100 + obj.getVar("custom").getInt(2)) / 100; + sq_SetSpeedToMoveParticle(obj,0,speed); + break; + case 21: + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/mineb_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/mineb_bottom.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/mineb_back.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/mineb_front.ani"),true); + local sub = obj.getVar("custom").getInt(1); + // if(sub < 3) obj.setTimeEvent(1, 500 + 50 * sub, 1, false); + // else + obj.setTimeEvent(1, 250 + 50 * (5 - sub), 1, false); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/explosionb_00.ani"); + obj.setCurrentAnimation(ani); + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/explosionc_bottom_00.ani"; + local aniPath2 = "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/explosiona_00.ani"; + local direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj); + createOnlyDrawObject_Fighter_bykk(obj,aniPath,true,direction,x,y,0,ENUM_DRAWLAYER_BOTTOM); + createOnlyDrawObject_Fighter_bykk(obj,aniPath2,true,direction,x,y + 1,0,ENUM_DRAWLAYER_NORMAL); + local sub = obj.getVar("custom").getInt(1); + local angle = [10,20,30,-10,-20,-30]; + sq_SetCustomRotate(obj, sq_ToRadian(angle[sub].tofloat())); + sq_SetMyShake(obj, 10, 200); + local sizeRate = 100 + obj.getVar("custom").getInt(2); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + } + break; + } + break; + case SKILL_FWBYKK_BLOCKBUSTEREX: + switch(subtype){ + case 2: + switch(state){ + case 20: + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/minea_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block2.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block2glow.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block2spark.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/minea_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 4: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block3.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block3glow.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/1_fighter_bykk/3_streetfighter/animation/blockbusterexblock/block3spark.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/minea_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_FWBYKK_DRAGONMINE: + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/poisonloop_dragonmine_bottom.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(2)); + obj.setTimeEvent(1, obj.getVar("custom").getInt(1), -1, false); + local flashScreenObj = sqrChr.getVar("DragonMineFlash").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + local flashScreenObj = sq_flashScreen(obj,0,99990,0,66,sq_RGB(255,50,128), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Flash").clear_obj_vector(); + obj.getVar("Flash").push_obj_vector(flashScreenObj); + break; + case 21: + local flashScreenObj = obj.getVar("Flash").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/poisonend_dragonmine_bottom.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + sq_flashScreen(obj,0,0,delay,66,sq_RGB(255,50,128), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + local sizeRate = obj.getVar("custom").getInt(4); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + // print("state = "+state); + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/tal/flyingbox_a.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + local delay = obj.getVar("custom").getInt(0); + if(fullTime <= delay) delay = fullTime; + obj.getVar("custom").setInt(2, sq_GetXPos(obj)); + obj.getVar("custom").setInt(3, sq_GetZPos(obj)); + obj.setTimeEvent(3, delay / 40, 40, true); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/tal/flyingbox_b.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/tal/box.ani"); + obj.setCurrentAnimation(ani); + break; + case 23: + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/dragonmine/tal/brokenbox.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_FWBYKK_POISONMIST: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "character/fighter/effect/animation/3_streetfighter_bykk/poisonmist/throwair.ani"); + obj.setCurrentAnimation(ani); + local angle = obj.getVar("custom").getInt(0); + local newAngel = -angle; + // if(angle > 180) newAngel = newAngel - 180;// && angle < 270 + sq_SetCustomRotate(obj, sq_ToRadian(newAngel.tofloat())); + obj.sq_SetMoveParticle("particle/poisonmistarea.ptl", angle.tofloat(), 0.0); + sq_SetSpeedToMoveParticle(obj,0,sq_getRandom(1200, 2500)); + sq_SetSpeedToMoveParticle(obj,2,-1500); + break; + case 21: + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("", "character/fighter/effect/animation/poisonmist/throwland.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + break; + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/bigsmokebottom.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/bigsmokeair1.ani"; + if(sq_getRandom(1, 100) > 50) aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/poisonmist/bigsmokeair2.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + } + break; + case 4: + break; + } +} + +function onEndCurrentAni_po_fighter_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_LIGHTNINGSHIFT: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_THROWSAND: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_GRABEXPLOSION: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_HIDDENSTING: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_BLOCKBUSTER: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_MOUNT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_THROWWEB: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_GROUNDKICK: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_VENOMMINE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_JUNKSPIN: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_GRABEXPLOSIONEX: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_BLOCKBUSTEREX: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_POISONEXPLOSION: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + // local targetObj = obj.getVar("tar").get_obj_vector(0); + // if(targetObj && targetObj.getState() != STATE_DIE){ + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local createMax_1st = obj.getVar("custom").getInt(2); + local createMax_2nd = obj.getVar("custom").getInt(3); + local decreaseRate_1st = obj.getVar("custom").getInt(4); + local decreaseRate_2nd = obj.getVar("custom").getInt(5); + local moveSpeed = obj.getVar("custom").getInt(6); + local attackSpeed = obj.getVar("custom").getInt(7); + local prob = obj.getVar("custom").getInt(8); + local time = obj.getVar("custom").getInt(9); + local level = obj.getVar("custom").getInt(10); + local sub = obj.getVar("custom").getInt(11); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONEXPLOSION); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(createMax_1st); + sq_BinaryWriteDword(createMax_2nd); + sq_BinaryWriteDword(decreaseRate_1st); + sq_BinaryWriteDword(decreaseRate_2nd); + sq_BinaryWriteDword(moveSpeed); + sq_BinaryWriteDword(attackSpeed); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(level); + sq_BinaryWriteDword(sub); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJNUM_FWBYKK, 0, 0, 0, 0, obj.getDirection()); + // } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local totalDamage_1st = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local createMax_2nd = obj.getVar("custom").getInt(2); + local totalDamage_2nd = obj.getVar("custom").getInt(3); + local moveSpeed = obj.getVar("custom").getInt(4); + local attackSpeed = obj.getVar("custom").getInt(5); + local prob = obj.getVar("custom").getInt(6); + local time = obj.getVar("custom").getInt(7); + local level = obj.getVar("custom").getInt(8); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONEXPLOSION); + sq_BinaryWriteDword(5); + sq_BinaryWriteDword(totalDamage_1st); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(createMax_2nd); + sq_BinaryWriteDword(totalDamage_2nd); + sq_BinaryWriteDword(moveSpeed); + sq_BinaryWriteDword(attackSpeed); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(level); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJNUM_FWBYKK, 0, 0, 0, 0, obj.getDirection()); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + case 6: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local totalDamage_2nd = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local moveSpeed = obj.getVar("custom").getInt(2); + local attackSpeed = obj.getVar("custom").getInt(3); + local prob = obj.getVar("custom").getInt(4); + local time = obj.getVar("custom").getInt(5); + local level = obj.getVar("custom").getInt(6); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONEXPLOSION); + sq_BinaryWriteDword(7); + sq_BinaryWriteDword(totalDamage_2nd); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(moveSpeed); + sq_BinaryWriteDword(attackSpeed); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(level); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJNUM_FWBYKK, 0, 0, 0, 0, obj.getDirection()); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 7: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_FWBYKK_DRAGONMINE: + switch(subtype){ + case 2: + // + break; + case 3: + switch(state){ + case 20: + return; + break; + case 21: + case 22: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + } + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_FWBYKK_PAINSKILLER: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_FWBYKK_POISONMIST: + if(subtype == 1 && state == 21){ + if(obj.getVar("custom").getInt(1) == 0){ + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local xPos = obj.getVar("custom").getInt(2); + local yPos = obj.getVar("custom").getInt(3); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONMIST); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(1); + sq_SendCreatePassiveObjectPacketPos(sqrChr, PASSIVEOBJNUM_FWBYKK, 0, xPos, yPos, 0); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONMIST); + sq_BinaryWriteDword(2); + sq_BinaryWriteDword(2); + sq_SendCreatePassiveObjectPacketPos(sqrChr, PASSIVEOBJNUM_FWBYKK, 0, xPos, yPos, 0); + } + } + } + else if(subtype == 2 || subtype == 4) break; + else if(subtype == 3 && state == 20){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 255: + if(subtype == 2) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_SHININGWINGSFLAP: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } +} + +function onTimeEvent_po_fighter_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_GRABEXPLOSION: + switch(timeEventIndex){ + case 0: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local proc = obj.getVar("custom").getInt(2); + local time = obj.getVar("custom").getInt(3); + local level = obj.getVar("custom").getInt(4); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_GRABEXPLOSION,1,totalDamage,sizeRate,proc,time,level,0,0,0); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + case 2: + case 3: + case 4: + local sizeRate = obj.getVar("custom").getInt(0); + sizeRate = sizeRate.tofloat() / 100.0; + switch(timeEventIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 2: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_FWBYKK_HIDDENSTING: + switch(timeEventIndex){ + case 1: + local aniPath = "passiveobject/1_fighter_bykk/3_streetfighter/animation/hiddensting/lv95poisonspirit/hiddenstingbottom_00.ani"; + createOnlyDrawObject_Fighter_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), 0),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 80); + break; + } + break; + case SKILL_FWBYKK_GROUNDKICK: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_FWBYKK_VENOMMINE: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + local totalDamage = obj.getVar("custom").getInt(0); + local hitMax = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + local ani = sq_CreateAnimation("", "passiveobject/1_fighter_bykk/3_streetfighter/animation/venommine/explosion_dummy.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(3, delaySum / (hitMax + 1), hitMax, true); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + obj.resetHitObjectList(); + obj.sq_PlaySound("R_VM_MINE_EXP"); + break; + } + break; + case SKILL_FWBYKK_JUNKSPIN: + switch(timeEventIndex){ + case 1: + if(sqrChr.getState() != STATE_FWBYKK_JUNKSPIN) sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + sq_SetMyShake(obj, 6, 80); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_FWBYKK_GRABEXPLOSIONEX: + switch(timeEventIndex){ + case 1: + case 2: + case 3: + case 4: + local sizeRate = obj.getVar("custom").getInt(0); + sizeRate = sizeRate.tofloat() / 100.0; + switch(timeEventIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 2: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_FWBYKK_BLOCKBUSTEREX: + switch(timeEventIndex){ + case 0: + local totalDamage = obj.getVar("custom").getInt(1); + local stunTime = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(4); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,5,totalDamage,stunTime,sizeRate,0,0,0,0,0); + break; + case 1: + local totalDamage = obj.getVar("custom").getInt(2); + local stunTime = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(5); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,5,totalDamage,stunTime,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + local totalDamage = obj.getVar("custom").getInt(1); + local stunTime = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(3); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_BLOCKBUSTEREX,5,totalDamage,stunTime,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + case 4: + case 5: + case 6: + local sizeRate = obj.getVar("custom").getInt(0); + sizeRate = sizeRate.tofloat() / 100.0; + switch(timeEventIndex){ + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 5: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 6: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_FWBYKK_DRAGONMINE: + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(subtype == 1) sq_SetMyShake(obj, 10, 150); + break; + case 2: + local lifeTime = obj.getVar("custom").getInt(0); + local hitTime = obj.getVar("custom").getInt(1); + local damage = obj.getVar("custom").getInt(2); + local moveSpeed = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(4); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,SKILL_FWBYKK_DRAGONMINE,2,lifeTime,hitTime,damage,moveSpeed,sizeRate,0,0,0); + break; + case 3: + local vx = sq_GetAccel(obj.getVar("custom").getInt(2), obj.getVar("custom").getInt(1), timeEventCount, 40, false); + local vz = sq_GetAccel(obj.getVar("custom").getInt(3), 0, timeEventCount, 40, false); + // local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(2), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 40) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_FWBYKK_PAINSKILLER: + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7, 22); + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(2, delay / hitMax, hitMax - 1, false); + break; + case 2: obj.resetHitObjectList(); break; + case 3: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(9, 25); + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(2, delay / hitMax, hitMax - 1, false); + break; + } + break; + case SKILL_FWBYKK_POISONMIST: + switch(timeEventIndex){ + case 1: + if(sqrChr.getVar("PoisonMistBool").getBool(0) && subtype == 2) sqrChr.getVar("PoisonMistBool").setBool(0, false); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + local sub = obj.getVar("custom").getInt(0); + local range = obj.getVar("custom").getInt(1); + switch(sub){ + case 1: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,sq_getRandom(-range, 0),sq_getRandom(-range / 5, range / 5),0,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,3,0,0,0,0,0,0,0,0); + break; + case 2: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,sq_getRandom(0, range),sq_getRandom(-range / 5, range / 5),0,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,3,0,0,0,0,0,0,0,0); + break; + } + break; + case 3: obj.stopTimeEvent(2); break; + case 4: + local range = obj.getVar("custom").getInt(1); + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_Abs(sq_GetXPos(sqrChr) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(sqrChr) - sq_GetYPos(obj)) <= range / 2){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_POISONMIST_BUFF)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_POISONMIST_BUFF, true); + AddAppendage.getVar("custom").setInt(0, sq_GetXPos(obj)); + AddAppendage.getVar("custom").setInt(1, sq_GetYPos(obj)); + AddAppendage.getVar("custom").setInt(2, range); + } + } + break; + case 5: sqrChr.getVar("PoisonMistBool").setBool(0, true); break; + case 6: + local range = obj.getVar("custom").getInt(1); + switch(timeEventCount){ + case 1: + case 2: + case 3: + local sizeRate = 180; + if(timeEventCount == 1) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-50,1,100,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 2) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,50,0,80,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 3) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,50,sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + break; + case 4: + case 5: + case 6: + case 7: + range = range / 5 * 2; + local sizeRate = 150; + if(timeEventCount == 4) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,1,sq_getRandom(80,60),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 5) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,2,sq_getRandom(80,60),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 6) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,-1,sq_getRandom(70,50),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 7) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,0,sq_getRandom(70,50),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + break; + case 8: + case 9: + case 10: + case 11: + range = range / 5 * 3; + local sizeRate = 140; + if(timeEventCount == 8) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,1,sq_getRandom(100,80),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 9) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,2,sq_getRandom(100,80),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 10) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,-1,sq_getRandom(80,60),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 11) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,0,sq_getRandom(80,60),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + break; + case 12: + case 13: + case 14: + case 15: + range = range / 5 * 4; + local sizeRate = 110; + if(timeEventCount == 12) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,1,sq_getRandom(80,60),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 13) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,2,sq_getRandom(80,60),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 14) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,-1,sq_getRandom(70,40),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 15) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,0,sq_getRandom(70,40),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + break; + case 16: + case 17: + local sizeRate = 90; + if(timeEventCount == 16) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-range,1,sq_getRandom(70,50),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + else if(timeEventCount == 17) createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,range,2,sq_getRandom(70,50),sq_GetDirection(obj),3,SKILL_FWBYKK_POISONMIST,5,sizeRate,0,0,0,0,0,0,0); + break; + } + sq_SetMyShake(obj, 8, 50); + if(timeEventCount >= 17){ + obj.setTimeEvent(1, 1000, 1, false); + } + break; + case 7: obj.resetHitObjectList(); break; + } + break; + case 255: + switch(timeEventIndex){ + case 1: + obj.getVar("custom").setInt(3, timeEventCount); + local allDamage = obj.getVar("damage").getInt(0); + local count = obj.getVar("custom").getInt(2); + if(count == 0){ + sq_SendDestroyPacketPassiveObject(obj); + return true; + } + local damage = allDamage / count; + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + print("timeEventCount = "+timeEventCount); + print("allDamage = "+allDamage+",,damage = "+damage); + if(activeObj && activeObj.getState() != STATE_DIE && activeObj.getHp() > 0){ + local group = obj.getVar("custom").getInt(0); + local uniqueId = obj.getVar("custom").getInt(1); + local height = sq_GetHeightObject(activeObj) / 2; + if(height > 75) height = 75; + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,height,sq_GetDirection(obj),3,255,2,group,uniqueId,damage,0,0,0,0,0); + // obj.getVar("damage").setInt(0, allDamage - damage); + if(timeEventCount == 1){ + local time = obj.getVar("time").getInt(0); + sq_EffectLayerAppendage(activeObj,sq_RGB(128,0,255),127,0,0,time + 2000); + } + if(timeEventCount == count){ + obj.getVar("damage").setInt(0, 0); + obj.getVar("damage").setInt(1, 0); + } + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + return; + } + if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ + local newDamage = allDamage - damage * obj.getVar("custom").getInt(3); + print("newDamage = "+newDamage); + if(newDamage < 0) newDamage = 0; + obj.getVar("damage").setInt(0, newDamage); + obj.getVar("damage").setInt(1, newDamage); + + obj.stopTimeEvent(1); + obj.setTimeEvent(1, 500, obj.getVar("time").getInt(0) / 500, false); + } + break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj && activeObj.getState() != STATE_DIE && activeObj.getHp() > 0){ + local height = sq_GetObjectHeight(activeObj) / 2; + if(height > 75) height = 75; + sq_SendHitObjectPacket(obj,activeObj,0,0,height); + obj.sq_PlaySound("CONDITION_POSION"); + obj.sq_PlaySound("CONDITION_POSION_DROP"); + } + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj && activeObj.getState() != STATE_DIE && activeObj.getHp() > 0){ + sq_EffectLayerAppendage(activeObj,sq_RGB(128,0,255),127,0,0,300); + local allDamage = obj.getVar("damage").getInt(2); + print("PoisonDamageExp = "+allDamage); + local group = obj.getVar("custom").getInt(0); + local uniqueId = obj.getVar("custom").getInt(1); + local height = sq_GetHeightObject(activeObj) / 2; + if(height > 75) height = 75; + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,height,sq_GetDirection(obj),3,255,2,group,uniqueId,allDamage,0,0,0,0,0); + } + break; + } + break; + } + break; + case 4: + break; + } +} + +function onAttack_po_fighter_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_THROWWEB: + local prob = obj.getVar("custom").getInt(0); + local time = obj.getVar("custom").getInt(1); + local level = obj.getVar("custom").getInt(2); + local holdTime = obj.getVar("custom").getInt(3); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/fighter/3streetfighter_bykk/ap_web_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/fighter/3streetfighter_bykk/ap_web_hold.nut", true); + if(AddAppendage) sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(AddAppendage) AddAppendage.sq_SetValidTime(holdTime); + } + break; + case SKILL_FWBYKK_POISONEXPLOSION: + switch(subtype){ + case 3: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(sqrChr.getState() == STATE_DIE) break; + if(sqrChr.getVar("poisonExplosionTar").is_obj_vector(damager)) break; + if(obj.getVar("custom").getInt(11) > 0) break; + local sizeRate = obj.getVar("custom").getInt(1); + local createMax_1st = obj.getVar("custom").getInt(2); + local createMax_2nd = obj.getVar("custom").getInt(3); + local totalDamage_1st = obj.getVar("custom").getInt(4); + local totalDamage_2nd = obj.getVar("custom").getInt(5); + local moveSpeed = obj.getVar("custom").getInt(6); + local attackSpeed = obj.getVar("custom").getInt(7); + local prob = obj.getVar("custom").getInt(8); + local time = obj.getVar("custom").getInt(9); + local level = obj.getVar("custom").getInt(10); + if(createMax_1st > 0){ + sqrChr.getVar("poisonExplosionTar").push_obj_vector(damager); + obj.getVar("custom").setInt(2, obj.getVar("custom").getInt(2) - 1); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONEXPLOSION); + sq_BinaryWriteDword(4); + sq_BinaryWriteDword(totalDamage_1st); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(createMax_2nd); + sq_BinaryWriteDword(totalDamage_2nd); + sq_BinaryWriteDword(moveSpeed); + sq_BinaryWriteDword(attackSpeed); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(level); + sq_BinaryWriteDword(sq_GetGroup(damager)); + sq_BinaryWriteDword(sq_GetUniqueId(damager)); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJNUM_FWBYKK, 0, sq_GetXPos(damager), sq_GetYPos(damager), sq_GetObjectHeight(damager) / 2); + } + break; + case 5: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(sqrChr.getState() == STATE_DIE) break; + if(sqrChr.getVar("poisonExplosionTar").is_obj_vector(damager)) break; + local sizeRate = obj.getVar("custom").getInt(0); + local createMax_2nd = obj.getVar("custom").getInt(1); + local totalDamage_2nd = obj.getVar("custom").getInt(2); + local moveSpeed = obj.getVar("custom").getInt(3); + local attackSpeed = obj.getVar("custom").getInt(4); + local prob = obj.getVar("custom").getInt(5); + local time = obj.getVar("custom").getInt(6); + local level = obj.getVar("custom").getInt(7); + if(sqrChr.getVar("poisonExplosionTar").get_obj_vector_size() < createMax_2nd){ + sqrChr.getVar("poisonExplosionTar").push_obj_vector(damager); + // print("test"); + // obj.getVar("custom").setInt(1, createMax_2nd - 1); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_FWBYKK_POISONEXPLOSION); + sq_BinaryWriteDword(6); + sq_BinaryWriteDword(totalDamage_2nd); + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(moveSpeed); + sq_BinaryWriteDword(attackSpeed); + sq_BinaryWriteDword(prob); + sq_BinaryWriteDword(time); + sq_BinaryWriteDword(level); + sq_BinaryWriteDword(sq_GetGroup(damager)); + sq_BinaryWriteDword(sq_GetUniqueId(damager)); + sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJNUM_FWBYKK, 0, sq_GetXPos(damager), sq_GetYPos(damager), sq_GetObjectHeight(damager) / 2); + } + break; + } + break; + case SKILL_FWBYKK_DRAGONMINE: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(subtype == 2){ + local moveSpeed = obj.getVar("custom").getInt(3); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -moveSpeed.tofloat(), 0); + if(ap){ + ap.getAppendageInfo().setValidTime(obj.getVar("custom").getInt(1)); + ap.sq_Append(damager, obj); + } + } + break; + case SKILL_FWBYKK_PAINSKILLER: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + local prob = obj.getVar("custom").getInt(1); + local time = obj.getVar("custom").getInt(2); + local level = obj.getVar("custom").getInt(3); + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), level, false, time); + break; + case SKILL_FWBYKK_POISONMIST: + switch(subtype){ + case 2: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + local damage = obj.getVar("custom").getInt(10); + local time = obj.getVar("custom").getInt(11); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local height = sq_GetHeightObject(damager) / 2; + if(height > 75) height = 75; + sq_EffectLayerAppendage(damager,sq_RGB(128,0,255),127,0,0,time + 1500); + createSkillPassive_Fighter_bykk(obj,damager,PASSIVEOBJNUM_FWBYKK,0,0,height,sq_GetDirection(obj),3,255,2,group,uniqueId,damage,0,0,0,0,0); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_POISONMIST_DEBUFF)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, APDPATH_POISONMIST_DEBUFF, true); + AddAppendage.sq_SetValidTime(obj.getVar("custom").getInt(2)); + } + break; + } + break; + } + + if(skillIndex == 255) return; + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_ENCHANTPOISON)) return; + local damage = obj.getVar("PoisonDamage").getInt(0); + if(damage == 0) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + if(skillIndex == SKILL_FWBYKK_GRABEXPLOSION || skillIndex == SKILL_FWBYKK_GRABEXPLOSIONEX){ + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, 0); + colObj.getVar("damage").setInt(1, 0); + colObj.getVar("damage").setInt(2, baseDamage + damage); + if(colObj.isExistTimeEvent(1)) colObj.stopTimeEvent(1); + colObj.setTimeEvent(3, 500, 1, true); + } + else{ + print("add = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } + } + break; + case 4: + break; + } +} + +function onKeyFrameFlag_po_fighter_bykk(obj, flagIndex) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_JUNKSPIN: + switch(flagIndex){ + case 101: + obj.sq_PlaySound("JUNK_SPIN_DYNAMITE_EXP"); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(6, 13); + sq_SetMyShake(obj, 12, delay); + break; + } + break; + } + break; + case 4: + switch(skillIndex){ + case SKILL_BYKK_SHININGWINGSFLAP: + switch(subtype){ + case 2: + local sub = obj.getVar("custom").getInt(3); + if(sub > 0){ + switch(flagIndex){ + case 4: + local totalDamage = obj.getVar("custom").getInt(1); + local sub = obj.getVar("custom").getInt(2); + switch(sub){ + case 0: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,3,totalDamage,0,0,0,0,0,0,0); + break; + case 1: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,3,totalDamage,1,0,0,0,0,0,0); + break; + case 2: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,3,totalDamage,2,0,0,0,0,0,0); + break; + } + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,78,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,21,totalDamage,0,0,0,0,0,0,0); + break; + } + } + else{ + switch(flagIndex){ + case 5: obj.sq_PlaySound("SHINING_WINGS_FLAP_GRAB"); break; + case 7: + local totalDamage = obj.getVar("custom").getInt(1); + local sub = obj.getVar("custom").getInt(2); + switch(sub){ + case 0: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,3,totalDamage,0,0,0,0,0,0,0); + break; + case 1: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,3,totalDamage,1,0,0,0,0,0,0); + break; + case 2: + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,3,totalDamage,2,0,0,0,0,0,0); + break; + } + break; + case 8: + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-1,0,100,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,21,totalDamage,0,0,0,0,0,0,0); + break; + } + } + break; + case 3: + local sub = obj.getVar("custom").getInt(1); + switch(sub){ + case 0: + switch(flagIndex){ + case 13: + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,3,0,102,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,31,totalDamage,0,0,0,0,0,0,0); + print("test"); + break; + } + break; + case 1: + switch(flagIndex){ + case 7: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(7, 10); + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -35, -1, 176, delay, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 11: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect06spin_00.ani", 0, 10, 0); + sq_SetMyShake(obj, 8, 100); + break; + case 12: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 35, -1, 228, 60, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 13: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, -1, 239, 60, true, addAppendage); + } + } + } + break; + case 14: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -35, -1, 245, 60, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 15: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, 1, 248, 60, true, addAppendage); + } + } + } + break; + case 16: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 35, -1, 249, 60, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 17: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, -1, 248, 60, true, addAppendage); + } + } + } + break; + case 18: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -35, -1, 238, 60, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 19: + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, 1, 226, 60, true, addAppendage); + } + } + } + break; + case 20: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(20, 22); + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, -1, 38, delay, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 22: + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,5,0,3,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,32,totalDamage,0,0,0,0,0,0,0); + local size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, 0, -1, 0, 60, true, addAppendage); + sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(sq_GetDirection(targetObj))); + } + } + } + break; + case 23: + obj.sq_PlaySound("R_FT_SHINING_WINGS_FLAP_LUCY_02"); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", 0, -2, 0); + break; + case 32: + print(111111111111111); + local size = sqrChr.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTargetFixture").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + } + } + size = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + } + } + break; + } + break; + } + break; + } + break; + } + break; + } + return true; +} + +function procAppend_po_fighter_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + switch(skillIndex){ + case SKILL_FWBYKK_VENOMMINE: + case SKILL_FWBYKK_POISONMIST: + switch(subtype){ + case 1: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_FWBYKK_BLOCKBUSTEREX: + switch(subtype){ + case 2: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.setTimeEvent(1, 200, 1, false); + } + break; + } + break; + case SKILL_FWBYKK_DRAGONMINE: + switch(subtype){ + case 2: + switch(state){ + case 20: + if(sq_GetObjectTime(obj) >= obj.getVar("custom").getInt(0)){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + } + break; + } + break; + case 255: + switch(subtype){ + case 1: + if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ + if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 500, obj.getVar("time").getInt(0) / 500, true); + } + break; + } + break; + } + break; + case 4: + break; + } +} + + diff --git a/user/116.205.165.25/4_fighter_3.c b/user/116.205.165.25/4_fighter_3.c new file mode 100644 index 0000000..ab124d4 --- /dev/null +++ b/user/116.205.165.25/4_fighter_3.c @@ -0,0 +1,1190 @@ + + + +///普通攻击 +function onAfterSetState_Fighter_Attack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: + //obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack01_b_boom02_normal_02.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack01_b_boom02_normal_02.ani", 0, 0, 0); + break; + case 1: + // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack02_b_boom02_normal_02.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack02_b_boom02_normal_02.ani", 0, 0, 0); + break; + case 2: + // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack03_b_boom02_normal_02.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack03_b_boom02_normal_02.ani", 0, 0, 0); + break; + case 3: + // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack04_b_boom02_normal_02.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack04_b_boom02_normal_02.ani", 0, 0, 0); + break; + case 4: + // local currentAni = obj.getCurrentAnimation(); + // print("delaySum = "+currentAni.getDelaySum(0, 3)); + // print("delaySum2 = "+currentAni.getDelaySum(false)); + // obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 22, 22, true); + obj.getVar("fwAttackSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("fwAttackBool").setBool(0, false); + obj.getVar("fwAttackBool").setBool(1, false); + // obj.setTimeEvent(2, currentAni.getDelaySum(false) / 55, 55, true); + break; + } +} + +function onProcCon_Fighter_Attack(obj) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + if(obj.getVar("fwAttackBool").getBool(1) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("fwAttackBool").setBool(0, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + obj.getVar("fwAttackBool").setBool(0, true); + obj.getVar("fwAttackBool").setBool(1, true); + } + } + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 4: + local currentAni = obj.getCurrentAnimation(); + local frameIndex = sq_GetCurrentFrameIndex(obj); + local stateTime = obj.sq_GetStateTimer(); + if(obj.getVar("fwAttackBool").getBool(0)) return; + if(obj.getVar("fwAttackBool").getBool(0) == false && frameIndex <= 7){ + local fullTime = currentAni.getDelaySum(0, 7); + local offset = 120; + if(obj.getVar("fwAttackBool").getBool(1)) offset = 180; + local v = sq_GetUniformVelocity(0, 120, stateTime, fullTime); + local dstX = sq_GetDistancePos(obj.getVar("fwAttackSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.getVar("fwAttackBool").setBool(0, true); + } + break; + } +} + +function onProc_Fighter_Attack(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 4: + local currentAni = obj.getCurrentAnimation(); + local frameIndex = sq_GetCurrentFrameIndex(obj); + local jumpTime = currentAni.getDelaySum(0, 3); + local stateTime = obj.sq_GetStateTimer(); + if(frameIndex <= 3){ + local v = sq_GetAccel(0, 60, stateTime, jumpTime, true); + sq_setCurrentAxisPos(obj, 2, v); + } + else{ + local jumpTime = currentAni.getDelaySum(4, 6); + local stateTime = obj.sq_GetStateTimer(); + local v = sq_GetAccel(60, 0, stateTime - jumpTime, jumpTime, false); + sq_setCurrentAxisPos(obj, 2, v); + } + break; + } + break; + } +} + +function onTimeEvent_Fighter_Attack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return true; +} + +function onKeyFrameFlag_Fighter_Attack(obj, flagIndex) +{ + if(!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false; + switch(flagIndex){ + case 1: + local attackIndex = obj.getAttackIndex(); + if(attackIndex == 4) sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack05_b_boom03_normal_01.ani", 0, 0, 0); + break; + } + return true; +} + +function onAttack_Fighter_Attack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_ENCHANTPOISON); + local damage = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 9, skillLevel); + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } + return; + } + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 17 + attackIndex, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + +function getAttackCancelStartFrameSize_Fighter(obj) +{ + local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) + maxAttackNumber = 4; + return maxAttackNumber; +} + +function getAttackCancelStartFrame_Fighter(obj, index) +{ + if(!obj) return null; + local frm = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + switch(index){ + case 0:frm = 3; break; + case 1:frm = 3; break; + case 2:frm = 3; break; + case 3:frm = 3; break; + } + } + else frm = obj.sq_GetAttackCancelStartFrame(index); + return frm; +} + +function getAttackAni_Fighter(obj, index) +{ + if(!obj) return null; + local animation = obj.sq_GetAttackAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) + animation = obj.sq_GetCustomAni(ANI_FWBYKK_POISONSNAKEATTACK01_BODY + index); + return animation; +} + +function getDefaultAttackInfo_Fighter(obj, index) +{ + if(!obj) return null; + // print("index = "+index); + local attackInfo = obj.sq_GetDefaultAttackInfo(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + attackInfo = sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKECOMBO1 + index); + local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0; + sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 3 + index, bonusRate)); + } + return attackInfo; +} + +///前冲攻击 +function onAfterSetState_Fighter_DashAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/dashbody_effect.ani"), 0, 0);//effect/animation/3_streetfighter_bykk/poisonsnake/dash_body_effect.ani + obj.getVar("fwDashAttackSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("fwDashAttackBool").setBool(0, false); +} + +function onProcCon_Fighter_DashAttack(obj) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + if(obj.getVar("fwDashAttackBool").getBool(1) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("fwDashAttackBool").setBool(0, true); + } + } + else return; + local currentAni = obj.getCurrentAnimation(); + local frameIndex = sq_GetCurrentFrameIndex(obj); + local stateTime = obj.sq_GetStateTimer(); + if(obj.getVar("fwDashAttackBool").getBool(0) == false){ + local fullTime = currentAni.getDelaySum(0, 3); + local v = sq_GetUniformVelocity(0, 125, stateTime, fullTime); + local dstX = sq_GetDistancePos(obj.getVar("fwDashAttackSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.getVar("fwDashAttackBool").setBool(0, true); + } +} + +function onAttack_Fighter_DashAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 22, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + +function getDashAttackAni_Fighter(obj) +{ + if(!obj) return null; + local animation = obj.sq_GetDashAttackAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) + animation = sq_GetCustomAni(obj, ANI_FWBYKK_POISONSNAKEDASH_BODY); + return animation; +} + +function getDashAttackInfo_Fighter(obj) +{ + if(!obj) return null; + local attackInfo = obj.sq_GetDashAttackInfo(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + attackInfo = sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKEDASHATTACK); + local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 1, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0; + // print("bonus : "+obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 8, bonusRate)); + sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 8, bonusRate)); + } + return attackInfo; +} + +//跳跃攻击 +function onAfterSetState_Fighter_JumpAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_glow_red.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_attack_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_attack_normal.ani"), 0, 0); +} + +function onKeyFrameFlag_Fighter_JumpAttack(obj, flagIndex) +{ + if(!obj) return false; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false; + switch(flagIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/jump_b_boom01_normal_01.ani", 0, 0, 0); + break; + } + return true; +} + +function onAttack_Fighter_JumpAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; + if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + if(poisonObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + local attackIndex = obj.getAttackIndex(); + local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; + local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 23, bonusRate.tofloat() / 1000.0) + 100; + print("damageAddSet = "+damage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + damage); + } + } +} + +function getJumpAttackAni_Fighter(obj) +{ + if(!obj) return null; + local animation = obj.sq_GetJumpAttackAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) + animation = sq_GetCustomAni(obj, ANI_FWBYKK_POISONSNAKEJUMP_BODY); + return animation; +} + +function getJumpAttackInfo_Fighter(obj) +{ + if(!obj) return null; + local attackInfo = obj.sq_GetJumpAttackInfo(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ + attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_FIGHTER_POISONSNAKEJUMPATTACK); + local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 2, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0; + sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 9, bonusRate)); + } + return attackInfo; +} + + + + +///////////////////////////////////////////////////////////////////////////女散打 + +//雷霆之舞 +function checkExecutableSkill_LightningShift(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIGHTNINGSHIFT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTNINGSHIFT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_LightningShift(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_LightningShift(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + print("subState = "+subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK01_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 0); + local speedRate = delaySum * 100 / 49; + obj.getVar("LightningShiftSet").setInt(6, speedRate); + obj.getVar("LightningShiftTar").clear_obj_vector(); + obj.getVar("LightningShiftTar_Boss").clear_obj_vector(); + obj.getVar("LightningShiftTar_Named").clear_obj_vector(); + obj.getVar("LightningShiftTar_Normal").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(targetObj)) <= 300){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(sq_IsBoss(activeObj)) obj.getVar("LightningShiftTar_Boss").push_obj_vector(activeObj); + else if(sq_IsNamed(activeObj)) obj.getVar("LightningShiftTar_Named").push_obj_vector(activeObj); + else obj.getVar("LightningShiftTar_Normal").push_obj_vector(activeObj); + } + } + local bossNum = obj.getVar("LightningShiftTar_Boss").get_obj_vector_size(); + local namedNum = obj.getVar("LightningShiftTar_Named").get_obj_vector_size(); + local normalNum = obj.getVar("LightningShiftTar_Normal").get_obj_vector_size(); + if(bossNum> 0){ + for(local i = 0; i < bossNum; i++){ + local targetObj = obj.getVar("LightningShiftTar_Boss").get_obj_vector(i); + if(targetObj){ + obj.getVar("LightningShiftTar").push_obj_vector(targetObj); + } + } + } + if(namedNum> 0){ + for(local i = 0; i < namedNum; i++){ + local targetObj = obj.getVar("LightningShiftTar_Named").get_obj_vector(i); + if(targetObj){ + obj.getVar("LightningShiftTar").push_obj_vector(targetObj); + } + } + } + if(normalNum> 0){ + for(local i = 0; i < normalNum; i++){ + local targetObj = obj.getVar("LightningShiftTar_Normal").get_obj_vector(i); + if(targetObj){ + obj.getVar("LightningShiftTar").push_obj_vector(targetObj); + } + } + } + local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size(); + if(targetNum > 0){ + local randomNum = 0; + if(targetNum > 1) randomNum = sq_getRandom(0, targetNum); + obj.getVar("LightningShiftSet").setInt(0, randomNum); + obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); + obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj)); + obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj)); + local timeEventMax = (3000 / speedRate).tointeger(); + obj.getVar("LightningShiftSet").setInt(4, timeEventMax); + obj.setTimeEvent(1, 2, timeEventMax, true); + } + //sq_SetMyShake(obj, 10, 120); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK02_BODY); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK03_BODY); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK04_BODY); + obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); + obj.setTimeEvent(2, 5, 28, true); + break; + case 4: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK05_BODY); + obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); + obj.setTimeEvent(2, 5, 28, true); + break; + case 5: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK06_BODY); + break; + case 6: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK07_BODY); + break; + case 7: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK08_BODY); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/skl95_bykk/lightningshift/lightningshiftattack08effect_00.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftattack08effect_00.ani", 0, 1, 0); + break; + } + obj.getVar("LightningShiftBool").setBool(subState, true); + if(subState <= 6){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_LIGHTNINGSHIFT01 + subState)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftdasheffect01_00.ani", 0, 1, 0); + } + else { + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 7, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_LIGHTNINGSHIFTFINISH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + if(subState == 4 || subState == 5){// || subState == 6 + local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size(); + if(targetNum > 0){ + local randomNum = 0; + if(targetNum > 1) randomNum = sq_getRandom(0, targetNum); + if(subState == 6) randomNum = 0; + if(randomNum != 0 && randomNum == obj.getVar("LightningShiftSet").getInt(0)) + obj.getVar("LightningShiftSet").setInt(0, randomNum); + obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); + obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj)); + obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj)); + local timeEventMax = [14,14,14,14,15,20,20]; + obj.getVar("LightningShiftSet").setInt(4, timeEventMax[subState]); + local delaySum = [140,140,140,140,150,100,200]; + local delay = delaySum[subState] * obj.getVar("LightningShiftSet").getInt(6) / 100; + obj.setTimeEvent(1, delay.tointeger() / timeEventMax[subState], timeEventMax[subState], true); + local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(randomNum); + local x1 = sq_GetXPos(obj), x2 = sq_GetXPos(targetObj), direction = sq_GetDirection(obj); + if((x1 > x2 && direction == ENUM_DIRECTION_RIGHT) || (x1 < x2 && direction == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + } + } + // local currentAni = obj.getCurrentAnimation(); + //currentAni.setSpeedRate(50.0);//速度率 + if(subState > 0){ + if(subState < 7) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + } + +} + +function onEndCurrentAni_LightningShift(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("LightningShiftTar").get_obj_vector_size() < 1){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + if(subState == 1 || subState == 3 || subState == 5){ + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTNINGSHIFT, STATE_PRIORITY_AUTO, true); + break; + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_LightningShift(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + if(sq_GetZPos(obj) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onKeyFrameFlag_LightningShift(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 102: + local direction = sq_GetDirection(obj); + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0); + else sq_SetVelocity(obj, 0, -100.0); + break; + case 103: + // if(subState == 2){ + // } + break; + case 101: + // case 103: + // case 104: + // case 105: + // case 106: + local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size(); + if(targetNum > 0){ + local randomNum = 0; + if(targetNum > 1) randomNum = sq_getRandom(0, targetNum); + if(flagIndex == 106) randomNum = 0; + obj.getVar("LightningShiftSet").setInt(0, randomNum); + obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); + obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj)); + obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj)); + local timeEventMax = [14,20,14,14,15,20,20]; + obj.getVar("LightningShiftSet").setInt(4, timeEventMax[flagIndex - 101]); + local delaySum = [140,100,140,140,150,100,200]; + local delay = delaySum[flagIndex - 101] * obj.getVar("LightningShiftSet").getInt(6) / 100; + obj.setTimeEvent(1, delay.tointeger() / timeEventMax[flagIndex - 101], timeEventMax[flagIndex - 101], true); + local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(randomNum); + local x1 = sq_GetXPos(obj), x2 = sq_GetXPos(targetObj), direction = sq_GetDirection(obj); + if((x1 > x2 && direction == ENUM_DIRECTION_RIGHT) || (x1 < x2 && direction == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 201: + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftattack06smoke_00.ani", 0, 1, 0); + break; + } + return true; +} + +function onTimeEvent_LightningShift(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local readjustPos01 = 0, readjustPos02 = 0, offsetX = 0; + if(obj.getSkillSubState() == 4 || obj.getSkillSubState() == 5) readjustPos01 = 50; + else if(obj.getSkillSubState() == 0) offsetX = -60; + else if(obj.getSkillSubState() == 6) readjustPos02 = 50; + local tarNum = obj.getVar("LightningShiftSet").getInt(0); + local timeEventMax = obj.getVar("LightningShiftSet").getInt(4); + local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(tarNum); + if(targetObj){// && targetObj.getState() != STATE_DIE + local direction = sq_GetDirection(obj); + local vx = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(1), sq_GetDistancePos(sq_GetXPos(targetObj), direction, 30 + offsetX), timeEventCount, timeEventMax); + local vy = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(2), sq_GetYPos(targetObj), timeEventCount, timeEventMax); + local vz = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(3) + readjustPos02, sq_GetZPos(targetObj) + readjustPos01, timeEventCount, timeEventMax); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + } + break; + case 2: + local v = sq_GetUniformVelocity(0, 100, timeEventCount, 28); + local dstX = sq_GetDistancePos(obj.getVar("LightningShiftSet").getInt(1), sq_GetDirection(obj), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_LightningShift(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_LIGHTNINGSHIFT) sq_SimpleMoveToNearMovablePos(obj,200); +} + +function onAttack_LightningShift(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + if(obj.getVar("LightningShiftBool").getBool(subState)){ + obj.getVar("LightningShiftBool").setBool(subState, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 8, 1.0), subtype = 1; + if(subState == 7){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 15, 1.0);subtype = 2;} + // sq_BinaryStartWrite(); + // sq_BinaryWriteDword(subState); + // sq_BinaryWriteDword(totalDamage); + // sq_SendCreatePassiveObjectPacket(obj, passiveObjNum, 0, 0, 0, sq_GetCenterZPos(boundingBox), sq_GetDirection(obj)); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),2,SKILL_BYKK_LIGHTNINGSHIFT,subtype,subState,totalDamage,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(damager, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshifthiteffect01_00.ani", 0, 1, sq_GetCenterZPos(boundingBox)); + } +} + +///////////////////////////////////////////////////////////////////////////女气功 + +//天雷分身步 +function checkExecutableSkill_SkyThunderStep(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SKYTHUNDERSTEP); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SkyThunderStep(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SkyThunderStep(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + print("subState = "+subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_START_BODY); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_ki_fx01.ani"), 0, 0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_START_RUSH_BODY); + obj.getVar("skyThunderStepMove").setInt(0, sq_GetXPos(obj)); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SKYTHUNDERSTEPDASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("skyThunderStepBool").setBool(0, true); + obj.sq_PlaySound("R_FT_SKY_THUNDER_STEP_01"); + obj.sq_PlaySound("SKY_THUNDER_STEP_1CAST"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_LOOP_BODY_MAIN); + sq_flashScreen(obj,50,1200,0,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SKYTHUNDERSTEPSWEEP)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(1, delay / 10, 9, false); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop5_front_fx02.ani", 0, -1, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_LOOP_BODY_AFTERIMAGE); + break; + case 4: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_ATTRACTION_ENERGY_BODY_MAIN); + sq_SetMyShake(obj, 5, 300); + //`createBallEffect` 0 -1 0 + //`createBallBackEffect` 0 -1 0 + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loopeffect/skythunderstep_loop_5_back_fx02.ani", 0, -1, 0); + break; + case 5: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_END_FT_BODY_END); + // sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/end/skythunderstep_end_body_shadow_normal.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/end/skythunderstep_ft_shadow_end_01.ani", 0, -1, -sq_GetZPos(obj)); + break; + } + +} + +function onEndCurrentAni_SkyThunderStep(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 3: + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_AUTO, true); + break; + case 5: + sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_SkyThunderStep(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local fireT = currentAni.getDelaySum(0, 3); + local stateTime = obj.sq_GetStateTimer(); + local v = sq_GetAccel(0, 250, stateTime, fireT, false); + local dstX = sq_GetDistancePos(obj.getVar("skyThunderStepMove").getInt(0), sq_GetDirection(obj), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(stateTime >= fireT && obj.getVar("skyThunderStepBool").getBool(0)){ + obj.getVar("skyThunderStepBool").setBool(0, false); + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_windblow.ani", 0, 0, 50); + } + break; + case 4: + local currentAni = obj.getCurrentAnimation(); + local fireT = currentAni.getDelaySum(0, 1); + local stateTime = obj.sq_GetStateTimer(); + local vz = sq_GetAccel(0, 220, stateTime, fireT, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 5: + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex < 8) break; + local currentAni = obj.getCurrentAnimation(); + local fireT = currentAni.getDelaySum(0, 10); + local stateTime = obj.sq_GetStateTimer(); + if(frameIndex > 10){ + fireT = currentAni.getDelaySum(0, 12); + local vz = sq_GetAccel(30, 0, stateTime, fireT, false); + sq_setCurrentAxisPos(obj, 2, vz); + } + else{ + local vz = sq_GetAccel(220, 30, stateTime, fireT, false); + sq_setCurrentAxisPos(obj, 2, vz); + } + break; + } +} + +function onKeyFrameFlag_SkyThunderStep(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + //`createStartEffect` 0 0 0 + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_ki_fx01.ani"), 0, 0); + break; + case 102: sq_flashScreen(obj,80,2000,0,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 200: + //`dashToExplosion` 0 0 0 + break; + case 201: + sq_flashScreen(obj,0,10,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 10); + //`createWindEffect` 0 0 50 + break; + case 303: + sq_SetMyShake(obj, 10, 100); + //`loop1 sub Effect` 0 -1 0 + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop1_shadow_fx01.ani", 0, -1, 0); + obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); + break; + case 306: + //`create sweep Illusion Object` 0 0 0 + break; + case 310: sq_SetMyShake(obj, 10, 100); break; + case 312: + //`loop2 sub Effect` 0 -1 0 + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop2_shadow_fx07.ani", 0, -1, 0); + obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); + break; + case 314: sq_SetMyShake(obj, 10, 100); break; + case 320: + //`loop3 sub Effect` 0 -1 0 + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop3_shadow_fx13.ani", 0, -1, 0); + obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); + break; + case 325: sq_SetMyShake(obj, 10, 100); break; + case 326: + //`loop4 sub Effect` 0 -1 0 + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop4_shadow_fx07.ani", 0, -1, 0); + obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); + break; + case 502: + //`Sphere Effect` 0 -1 60 + sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_attraction_energy.ani", 0, -1, 60); + break; + case 504: + sq_flashScreen(obj,300,700,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 509: + //`stop sound` + break; + case 608: + //`createExplosion` 0 0 0 + break; + case 610: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 2, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,0,sq_GetDirection(obj),1,SKILL_BYKK_SKYTHUNDERSTEP,1,totalDamage,0,0,0,0,0,0,0); + sq_flashScreen(obj,50,250,50,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 500); + break; + } + return true; +} + +function onTimeEvent_SkyThunderStep(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_SkyThunderStep(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SKYTHUNDERSTEP) sq_SimpleMoveToNearMovablePos(obj,200); +} + +function onAttack_SkyThunderStep(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; +} + + +///////////////////////////////////////////////////////////////////////////女柔道 + +//送葬舞步 +function checkExecutableSkill_ShiningWingsFlap(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHININGWINGSFLAP); + if (isUse){ + obj.sq_IntVectClear(); + if(obj.getState() == 6) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ShiningWingsFlap(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ShiningWingsFlap(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + print("subState = "+subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPTRY); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SHININGWINGSFLAPTRY)); + obj.getVar("shiningWingsFlapTarget").clear_obj_vector(); + obj.getVar("shiningWingsFlapTargetFixture").clear_obj_vector(); + obj.sq_PlaySound("FT_BACK"); + obj.sq_PlaySound("FT_HOLD"); + break; + case 10: + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPTRYAIR); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SHININGWINGSFLAPTRY)); + obj.getVar("shiningWingsFlapTarget").clear_obj_vector(); + obj.getVar("shiningWingsFlapTargetFixture").clear_obj_vector(); + local speed = 1000.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetZVelocity(obj,-300,-800); + break; + case 1://抓轰炮 + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART04_BODY); + break; + case 2://普攻形态 + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART01_BODY); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 2); + local size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -45, 0, 30, delay, true, addAppendage); + } + } + } + obj.setTimeEvent(1, delay, 1, false); + break; + case 11://空中形态 + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART03_BODY); + break; + case 12://空中形态 + obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART03END_BODY); + break; + } + +} + +function onEndCurrentAni_ShiningWingsFlap(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); + break; + } + if(obj.getVar("shiningWingsFlapTarget").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + if(obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size() > 0 || obj.getVar("shiningWingsFlapTarget").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 11: + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + // case 11: + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(subState + 1); + // obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); + // break; + } +} + +function onProc_ShiningWingsFlap(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + if(sq_GetZPos(obj) <= 5){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onProcCon_ShiningWingsFlap(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + if(obj.getVar("shiningWingsFlapBool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("shiningWingsFlapBool").setBool(0, true); + } + } + break; + } +} + +function onKeyFrameFlag_ShiningWingsFlap(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 104://普通 + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", -89, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", -89, -2, 0); + sq_flashScreen(obj,10,100,40,76,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 0, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-89,0,2,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,10,totalDamage,0,0,0,0,0,0,0); + break; + case 105: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 1, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 2, 1.0); + local sub2 = 0; + if(obj.getVar("shiningWingsFlapBool").getBool(0)){ + obj.getVar("shiningWingsFlapBool").setBool(0, false); + sub2 = 1; + } + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-125,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,1,sub2,0,0,0,0); + break; + case 110: sq_SetMyShake(obj, 3, 60); break; + case 201://空中 + break; + case 204: + sq_setCurrentAxisPos(obj, 2, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", 25, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", 25, -2, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 3, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,25,0,2,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,10,totalDamage,0,0,0,0,0,0,0); + break; + case 213: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 4, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 5, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,25,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,0,0,0,0,0,0); + break; + case 219: + break; + case 302://抓轰炮 + break; + case 305: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 3, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,1,totalDamage,0,0,0,0,0,0,0); + break; + case 309: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 4, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 5, 1.0); + createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_ShiningWingsFlap(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(2, 3); + local size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + sq_MoveToAppendageForce(targetObj, obj, obj, -89, 0, 0, delay, true, addAppendage); + } + } + } + break; + } +} + +function onEndState_ShiningWingsFlap(obj, new_state) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 2 || subState == 0) return; + if(new_state != STATE_BYKK_SKYTHUNDERSTEP){ + local size = obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + } + } + size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); + } + } + } +} + +function onAttack_ShiningWingsFlap(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + if(sq_IsFixture(damager)) obj.getVar("shiningWingsFlapTargetFixture").push_obj_vector(damager); + else if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)){ + obj.getVar("shiningWingsFlapTarget").push_obj_vector(damager); + } + local apdPath = "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(damager) && subState == 0) sq_MoveToAppendageForce(damager, obj, obj, 80, 0, damager.getZPos(), 100, true, AddAppendage); + } + if(subState == 10){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); + } + break; + } +} diff --git a/user/116.205.165.25/5_gunner_1.c b/user/116.205.165.25/5_gunner_1.c new file mode 100644 index 0000000..a9493ed --- /dev/null +++ b/user/116.205.165.25/5_gunner_1.c @@ -0,0 +1,3058 @@ + +//男机械 + +function onSourceKeyFrameFlag_appendage_kak_rx78(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + local sizeRate = sq_GetIntData(sqrChr, 27, 1); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + // local sizeRate = sq_GetIntData(sqrChr, 27, 1); + // local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100; + //createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + +} + +function proc_appendage_kak_rx78(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local skill_level = sq_GetSkillLevel(sqrChr, 27); + local valuetime = sqrChr.sq_GetLevelData(27, 2, skill_level); + local useTime = appendage.getTimer().Get(); + local ani1 = parentObj.getCurrentAnimation(); + if(useTime > valuetime - 1000 && appendage.getVar().getBool(0) == false){ + appendage.getVar().clear_timer_vector(); + appendage.getVar().push_timer_vector(); + local t = appendage.getVar().get_timer_vector(0); + t.setParameter(100, 10); + appendage.getVar().setBool(0,true) + } + local t = appendage.getVar().get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t && t.isOnEvent(currentT) == true){ + if(appendage.getVar().getBool(1) == true){ + ani1.setRGBA(255, 255, 255, 255); + appendage.getVar().setBool(1,false); + } + else{ + ani1.setRGBA(255, 150, 50, 255); + appendage.getVar().setBool(1,true); + } + } + if(useTime >= valuetime && sqrChr.getVar("holdandgo").getBool(0) == false){ + local sizeRate = sq_GetIntData(sqrChr, 27, 1); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900); + if(targetObj){ + local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()); + local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos()); + local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos()); + if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + if(attackIndex == 1){ + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_ez8(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj) + { + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + local skill_level = sq_GetSkillLevel(sqrChr, 28); + local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 4); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + // local skill_level = sq_GetSkillLevel(sqrChr, 28); + // local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level); + // local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100; + //createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + parentObj.setValid(false); + break; + } + +} + +function proc_appendage_kak_ez8(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + // printp(" ,parentObj_state:"+parentObj.getState().tostring()+",attackindex:"+parentObj.getAttackIndex().tostring()); + // if(parentObj.getAttackIndex() == 3) printp(",FrameIndex:"+sq_GetCurrentFrameIndex(parentObj).tostring()); + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local skill_level = sq_GetSkillLevel(sqrChr, 28); + local valuetime = sqrChr.sq_GetLevelData(28, 2, skill_level); + local useTime = appendage.getTimer().Get(); + local ani1 = parentObj.getCurrentAnimation(); + if(useTime > valuetime - 1000 && appendage.getVar().getBool(0) == false){ + appendage.getVar().clear_timer_vector(); + appendage.getVar().push_timer_vector(); + local t = appendage.getVar().get_timer_vector(0); + t.setParameter(100, 10); + appendage.getVar().setBool(0,true) + } + local t = appendage.getVar().get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t && t.isOnEvent(currentT) == true){ + if(appendage.getVar().getBool(1) == true){ + ani1.setRGBA(255, 255, 255, 255); + appendage.getVar().setBool(1,false); + } + else{ + ani1.setRGBA(255, 150, 50, 255); + appendage.getVar().setBool(1,true); + } + } + if(useTime >= valuetime && sqrChr.getVar("holdandgo").getBool(0) == false){ + local skill_level = sq_GetSkillLevel(sqrChr, 28); + local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 2); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + if(attackIndex == 2){ + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + } + break; + } +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_ez8ex(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj) + { + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 4); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + // if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + // local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + // dieHardAppendage.getVar().setBool(0,true); + // CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + // } + local skill_level = sq_GetSkillLevel(sqrChr, 105); + local number = sqrChr.sq_GetLevelData(105, 6, skill_level); + local level = sqrChr.sq_GetLevelData(105, 0, skill_level); + local destX_01 = parentObj.getXPos() - sqrChr.getXPos(); + local destY_01 = parentObj.getYPos() - sqrChr.getYPos(); + if(sqrChr.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - parentObj.getXPos(); + for(local i = 0; i < number; i++){ + summonmonster_mechanic(sqrChr,destX_01+sq_getRandom(-10,10),destY_01+sq_getRandom(-10,10),0,0,77620,20000,level,0); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 2); + parentObj.setValid(false); + break; + } + +} + +function proc_appendage_kak_ez8ex(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + // printp(" ,parentObj_state:"+parentObj.getState().tostring()+",attackindex:"+parentObj.getAttackIndex().tostring()); + // if(parentObj.getAttackIndex() == 3) printp(",FrameIndex:"+sq_GetCurrentFrameIndex(parentObj).tostring()); + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local valuetime = parentObj.getVar().get_vector(0); + local useTime = appendage.getTimer().Get(); + if(useTime >= valuetime && sqrChr.getVar("holdandgo").getBool(0) == false){ + local skill_level = sq_GetSkillLevel(sqrChr, 105); + local sizeRate = sqrChr.sq_GetLevelData(105, 3, skill_level); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 105, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 2); + local number = sqrChr.sq_GetLevelData(105, 6, skill_level); + local level = sqrChr.sq_GetLevelData(105, 0, skill_level); + local destX_01 = parentObj.getXPos() - sqrChr.getXPos(); + local destY_01 = parentObj.getYPos() - sqrChr.getYPos(); + if(sqrChr.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - parentObj.getXPos(); + for(local i = 0; i < number; i++){ + summonmonster_mechanic(sqrChr,destX_01+sq_getRandom(-10,10),destY_01+sq_getRandom(-10,10),0,0,77620,600000,level,0); + } + parentObj.setValid(false); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 2); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + if(attackIndex == 2){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + } + break; + } +} + + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function proc_appendage_kak_oldrobot(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local sqr_state = sqrChr.getState(); + local bDownKey = sqrChr.isDownSkillLastKey(); + local distance = sq_GetDistance(parentObj.getXPos(), parentObj.getYPos(), sqrChr.getXPos(), sqrChr.getYPos(), true); + local robotsexplosion_level = sq_GetSkillLevel(sqrChr, 93); + local skill_distance = sqrChr.sq_GetLevelData(93, 0, robotsexplosion_level) / 2; + local stateTime = sqrChr.sq_GetStateTimer(); + if((sqr_state == 93 && !bDownKey && distance <= skill_distance) || (bDownKey && stateTime >= 1200)){ + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + if(moveX > 0){ + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + } + local skill_level = sq_GetSkillLevel(sqrChr, 28); + local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + parentObj.setValid(false); + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function onSourceKeyFrameFlag_appendage_kak_exs(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + + break; + case 11: + local moveX = parentObj.getVar("move").get_vector(0); + local moveY = parentObj.getVar("move").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + sq_SetCurrentDirection(parentObj, sqrChr.getDirection()); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + //printp("flagIndex="+flagIndex.tostring()+"\n"); +} + +function proc_appendage_kak_exs(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + // printp(" ,parentObj_state:"+parentObj.getState().tostring()+",attackindex:"+parentObj.getAttackIndex().tostring()); + // if(parentObj.getAttackIndex() == 3) printp(",FrameIndex:"+sq_GetCurrentFrameIndex(parentObj).tostring()); + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local valuetime = appendage.getVar().get_vector(0)*0+7000; + local useTime = appendage.getTimer().Get(); + if(useTime >= valuetime){ + + parentObj.setValid(false); + } + +} + +function onStart_appendage_kak_exs(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + local skill_level = sq_GetSkillLevel(sqrChr, 29); + local valuetime = sqrChr.sq_GetLevelData(29, 3, skill_level); + appendage.getVar().clear_vector(); + appendage.getVar().push_vector(valuetime); + appendage.getVar().setBool(0,true); + appendage.getVar().setBool(1,true); + appendage.getVar().setBool(2,true); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +function onSourceKeyFrameFlag_appendage_kak_tempester(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return true; + } + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + switch(flagIndex){ + case 1: + break; + case 10: + local currentAni = parentObj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/tempesterani/effectboostattack.ani"),true); + local targetObj = parentObj.getVar("targetObj").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) parentObj.sendStateOnlyPacket(STATE_STAND); + local hitnumber = appendage.getVar("custom").get_vector(1); + local hittime = appendage.getVar("custom").get_vector(2); + + // appendage.getVar("skill_bullet").clear_timer_vector(); + // appendage.getVar("skill_bullet").push_timer_vector(); + // local t = appendage.getVar("skill_bullet").get_timer_vector(0); + // t.setParameter(hittime, hitnumber); + + local x1 = parentObj.getVar("skill_bullet").get_vector(0); + local z1 = parentObj.getVar("skill_bullet").get_vector(1); + local angle = sq_ToDegree(sq_Atan2(x1.tofloat(), z1.tofloat())); + local offset = [[55, 0, 78],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[55, 0, 63],[50, 0, 48],[48, 0, 38],[38, 0, 31],[27, 0, 17],[10, 0, 9]]; + local attackIndex = parentObj.getAttackIndex(); + + local pooledObj = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectgunshoot.ani", offset[attackIndex][0], offset[attackIndex][1], offset[attackIndex][2]); + local pAni = pooledObj.getCurrentAnimation(); + sq_SetfRotateAngle(pAni, sq_ToRadian(angle - 90)); + local totalDamage = appendage.getVar("custom").get_vector(5); + if(!sqrChr) sqrChr = sq_getMyCharacter(); + createSkillPassiveObj_nanjixie(sqrChr, targetObj, 63, 3, totalDamage, hitnumber, 0, 0, 0, 0); + break; + case 11: + // sq_SendCreatePassiveObjectPacket(parentObj, 776104, 0, 0, 0, 0, parentObj.getDirection()); + // print("test"); + break; + case 20: + parentObj.sq_PlaySound("TEMPESTER_MISSILE"); + break; + case 21: + local hitnumber = appendage.getVar("custom").get_vector(3); + local hittime = appendage.getVar("custom").get_vector(4); + if(hitnumber % 2 == 0){ + hitnumber = hitnumber / 2; + } + else if(hitnumber % 2 == 1){ + hitnumber = (hitnumber / 2).tointeger() + 1; + } + // sqrChr.getVar("Debug_SubState").set_vector(4,hitnumber); + + appendage.getVar("skill_missile").clear_timer_vector(); + appendage.getVar("skill_missile").push_timer_vector(); + local t = appendage.getVar("skill_missile").get_timer_vector(0); + t.setParameter(hittime, hitnumber); + // print(parentObj.getHp() + " && " + parentObj.getHpMax()); + break; + case 101: + local moveX = parentObj.getVar("move").get_vector(0); + local moveY = parentObj.getVar("move").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + if(parentObj.getVar("move").getBool(0) == true){ + sq_setCurrentAxisPos(parentObj, 2, 20); + } + sq_SetCurrentDirection(parentObj, sqrChr.getDirection()); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 4); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 102: + if(parentObj.getVar("move").getBool(0) == true) parentObj.setValid(false); + else parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + return true; +} + +function proc_appendage_kak_tempester(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + switch(parentObj.getState()){ + case STATE_STAND: + local chr = sq_getMyCharacter(); + if(isSameObject(sqrChr,chr)){ + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 2); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + } + if(appendage.getVar().getBool(0) == false) appendage.getVar().setBool(0, true); + if(appendage.getVar().getBool(1) == false) appendage.getVar().setBool(1, true); + if(appendage.getVar().getBool(2) == false) appendage.getVar().setBool(2, true); + local targetObj = sq_FindTarget( parentObj, 0, 400, 300, 300); + if(targetObj){ + local targetObjx = targetObj.getXPos(); + local targetObjy = targetObj.getYPos(); + local targetObjz = targetObj.getZPos(); + local x1 = sq_Abs(targetObjx - parentObj.getXPos()); + local z1 = sq_Abs(targetObjz - parentObj.getZPos()); + + if(t_02 && t_02.isOnEvent(currentT) == true){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + parentObj.getVar("skill_missile").clear_vector(); + parentObj.getVar("skill_missile").push_vector(group); + parentObj.getVar("skill_missile").push_vector(uniqueId); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + // sqrChr.getVar("Debug_SubState").set_vector(9,1000); + return; + + } + else if(t_01 && t_01.isOnEvent(currentT) == true && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= 30){ + parentObj.getVar("skill_bullet").clear_vector(); + parentObj.getVar("skill_bullet").push_vector(x1); + parentObj.getVar("skill_bullet").push_vector(z1); + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local angle = sq_ToDegree(sq_Atan2(x1.tofloat(), z1.tofloat())); + local attackIndex; + if(angle.tointeger() > 90){ + attackIndex = 0; + } + else if(angle.tointeger() == 90){ + attackIndex = 6; + } + else if(angle.tointeger() < 90 && angle.tointeger() > 45){ + attackIndex = 7; + } + else if(angle.tointeger() == 45){ + attackIndex = 8; + } + else if(angle.tointeger() < 45 && angle.tointeger() > 30){ + attackIndex = 9; + } + else if(angle.tointeger() <= 30 && angle.tointeger() > 10){ + attackIndex = 10; + } + else if(angle.tointeger() <= 10){ + attackIndex = 11; + } + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, attackIndex); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 1: + if(appendage.getVar().getBool(0) == true){ + local currentAni = parentObj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/tempesterani/effectboostattack.ani"),true); + appendage.getVar().setBool(0, false); + return; + } + local t12 = appendage.getVar("skill_missile").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t12 && t12.isOnEvent(currentT) == true){ + local group = parentObj.getVar("skill_missile").get_vector(0); + local uniqueId = parentObj.getVar("skill_missile").get_vector(1); + local totalDamage = appendage.getVar("custom").get_vector(6); + if(!sqrChr) sqrChr = sq_getMyCharacter(); + createSkillPassiveObj_nanjixie(sqrChr, parentObj, 63, 2, totalDamage, group, uniqueId, -15, 0, 70); + createSkillPassiveObj_nanjixie(sqrChr, parentObj, 63, 2, totalDamage, group, uniqueId, 30, 0, 70); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile1.ani",-25,1,71); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile2.ani",-25,0,70); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile1.ani",20,1,71); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile2.ani",20,0,70); + } + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + if(currentT >= 900 && t12.isEnd()){ + local coolt_02 = appendage.getVar("custom").get_vector(7); + if(t_02 && t_02.getEventTerm() != coolt_02){ + t_02.setEventTerm(coolt_02.tointeger()); + } + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + break; + case 2: + local chr = sq_getMyCharacter(); + if(isSameObject(sqrChr,chr)){ + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + } + break; + } + break; + } +} + +function onStart_appendage_kak_tempester(appendage) +{ + if (!appendage) return; + appendage.getVar().setBool(0,true); + appendage.getVar().setBool(1,true); + appendage.getVar().setBool(2,true); + appendage.getVar().setBool(3,true); + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + parentObj.sq_PlaySound("TEMPESTER_APPEAR"); +} + + +function proc_appendage_kk_tempester_buff(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function onStart_appendage_kk_tempester_buff(appendage) +{ + if (!appendage) return; +} + +function onEnd_appendage_kk_tempester_buff(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(parentObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); + local normalAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester.nut"); + local totalDamage = normalAppendage.getVar("custom").get_vector(5); + local totalDamage2 = normalAppendage.getVar("custom").get_vector(6); + normalAppendage.getVar("custom").set_vector(5, totalDamage / 150 * 100); + normalAppendage.getVar("custom").set_vector(6, totalDamage2 / 150 * 100); + local t_01 = normalAppendage.getVar("skill_1").get_timer_vector(0); + local t_02 = normalAppendage.getVar("skill_2").get_timer_vector(0); + local bullet = t_01.getEventTerm(); + local missile = t_02.getEventTerm(); + print(bullet); + print(missile); + t_01.setEventTerm(bullet * 2); + t_02.setEventTerm(missile * 2); + } +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_ateam(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + local sizeRate = 0; + local totalDamage = 0; + switch(parentObj.getCollisionObjectIndex()){ + case 77625: + sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 6) * 2; + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 4, 1.0) + 100; + break; + case 77626: + sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 7) * 2; + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 5, 1.0) + 100; + break; + case 77627: + sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 8) * 2; + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 6, 1.0) + 100; + break; + case 77628: + sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 9) * 2; + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 2, 1.0) + 100; + break; + case 77629: + sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 10) * 2; + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 3, 1.0) + 100; + break; + } + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 20, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + + return true; +} + +function proc_appendage_kak_ateam(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900); + if(targetObj){ + local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()); + local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos()); + local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos()); + if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + if(attackIndex == 1){ + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + } + break; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_rx60(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + if(parentObj.getVar().getBool(0) == true){ + parentObj.getVar().setBool(0,false); + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_GUNNER_ROBOTRX60); + local range = sqrChr.sq_GetLevelData(SKILL_GUNNER_ROBOTRX60, 4, skill_level); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_ROBOTRX60);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_BinaryWriteDword(range); + sq_SendCreatePassiveObjectPacket(parentObj, NUM_BYKK_PASSIVEOBJECT , 0, 0, 0, 0, parentObj.getDirection()); + } + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + + return true; +} + +function proc_appendage_kak_rx60(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_GUNNER_ROBOTRX60); + local valuetime = sqrChr.sq_GetLevelData(SKILL_GUNNER_ROBOTRX60, 3, skill_level); + local useTime = appendage.getTimer().Get(); + if(useTime >= valuetime){ + local sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ROBOTRX60, 2); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ROBOTRX60, 29, 1, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 0: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + break; + case 1: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + break; + } + break; + } +} + +function onEnd_appendage_kak_rx60(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onStart_appendage_kak_rx60(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + parentObj.getVar().setBool(0,true); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_mechadrop1(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + if(parentObj.getVar().getBool(1) == true){ + sqrChr.sq_SendSetHpPacket(sqrChr.getHp() + sqrChr.getHpMax() * 8 / 100, true, parentObj); + } + else{ + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false); + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + + return true; +} + +function proc_appendage_kak_mechadrop1(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + local valuetime = 10000; + local useTime = appendage.getTimer().Get(); + + if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){ + parentObj.getVar("move").clear_vector(); + parentObj.getVar("move").push_vector(parentObj.getXPos()); + parentObj.getVar("move").push_vector(parentObj.getZPos()); + parentObj.getVar("move").push_vector(200); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + if(useTime > 1000){ + local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900); + if(targetObj){ + local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()); + local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos()); + local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos()); + if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 0: + break; + case 1: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + break; + case 3: + local pAni = parentObj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标 + local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标 + local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离 + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值 + if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标 + else{ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(2,0); + } + sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标 + break; + } + break; + } + + if(useTime >= valuetime){ + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } +} + +function onEnd_appendage_kak_mechadrop1(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onStart_appendage_kak_mechadrop1(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + parentObj.getVar().setBool(0,true); + parentObj.getVar().setBool(10,true); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_mechadrop2(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + if(parentObj.getVar().getBool(1) == true){ + sqrChr.sq_SendSetMpPacket(sqrChr.getMp() + sqrChr.getMpMax() * 8 / 100, true, parentObj); + } + else{ + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false); + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + + return true; +} + +function proc_appendage_kak_mechadrop2(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local valuetime = 10000; + local useTime = appendage.getTimer().Get(); + + if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){ + parentObj.getVar("move").clear_vector(); + parentObj.getVar("move").push_vector(parentObj.getXPos()); + parentObj.getVar("move").push_vector(parentObj.getZPos()); + parentObj.getVar("move").push_vector(200); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + if(useTime > 1000){ + local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900); + if(targetObj){ + local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()); + local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos()); + local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos()); + if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 0: + break; + case 1: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + break; + case 3: + local pAni = parentObj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标 + local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标 + local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离 + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值 + if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标 + else{ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(2,0); + } + sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标 + break; + } + break; + } + + if(useTime >= valuetime){ + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } +} + +function onEnd_appendage_kak_mechadrop2(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onStart_appendage_kak_mechadrop2(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + parentObj.getVar().setBool(0,true); + parentObj.getVar().setBool(10,true); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function onSourceKeyFrameFlag_appendage_kak_mechadrop3(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + + return true; +} + +function proc_appendage_kak_mechadrop3(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local valuetime = 10000; + local useTime = appendage.getTimer().Get(); + + if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){ + parentObj.getVar("move").clear_vector(); + parentObj.getVar("move").push_vector(parentObj.getXPos()); + parentObj.getVar("move").push_vector(parentObj.getZPos()); + parentObj.getVar("move").push_vector(200); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + if(useTime > 1000){ + local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900); + if(targetObj){ + local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()); + local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos()); + local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos()); + if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 0: + break; + case 1: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + break; + case 3: + local pAni = parentObj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标 + local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标 + local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离 + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值 + if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标 + else{ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(2,0); + } + sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标 + break; + } + break; + } + + if(useTime >= valuetime){ + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } +} + +function onEnd_appendage_kak_mechadrop3(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onStart_appendage_kak_mechadrop3(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + parentObj.getVar().setBool(0,true); + parentObj.getVar().setBool(10,true); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function onSourceKeyFrameFlag_appendage_kak_mechadrop4(appendage,flagIndex) +{ + if(!appendage) return; + + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){ + appendage.setValid(false); + return true; + } + + switch(flagIndex){ + case 1: + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 9, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + break; + case 11: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(parentObj, 0, moveX); + sq_setCurrentAxisPos(parentObj, 1, moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 5); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1); + parentObj.setValid(false); + break; + } + + return true; +} + +function proc_appendage_kak_mechadrop4(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){ + appendage.setValid(false); + return; + } + + if(!sqrChr || sqrChr.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local valuetime = 10000; + local useTime = appendage.getTimer().Get(); + + if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){ + parentObj.getVar("move").clear_vector(); + parentObj.getVar("move").push_vector(parentObj.getXPos()); + parentObj.getVar("move").push_vector(parentObj.getZPos()); + parentObj.getVar("move").push_vector(200); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + + switch(parentObj.getState()){ + case STATE_STAND: + if(sqrChr.getVar("holdandgo").getBool(0)){ + CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + if(useTime > 1000){ + local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900); + if(targetObj){ + local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()); + local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos()); + local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos()); + if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 0: + break; + case 1: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + break; + case 3: + local pAni = parentObj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标 + local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标 + local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离 + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值 + if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标 + else{ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(2,0); + } + sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标 + break; + } + break; + } + + if(useTime >= valuetime){ + local sizeRate = sq_GetIntData(sqrChr, 59, 12); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1); + parentObj.setValid(false); + } +} + +function onEnd_appendage_kak_mechadrop4(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); + +} + +function onStart_appendage_kak_mechadrop4(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + parentObj.getVar().setBool(0,true); + parentObj.getVar().setBool(10,true); +} + +function onStart_appendage_holdandgotorb_kk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + sq_SetCustomDamageType(parentObj, true, 2); + +} + +function onEnd_appendage_holdandgotorb_kk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + sq_SetCustomDamageType(parentObj, true, 0); + // local pooledObj = sq_AddDrawOnlyAniFromParent(parentObj,"character/gunner/effect/animation/holdandgo/hold_go_play_normal.ani", 0, 0, 0); + // sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); +} + +function drawAppend_appendage_holdandgotorb_kk(appendage, isOver, x, y, isFlip) +{ + if (!appendage){ + return; + } + + local parentObj = appendage.getParent(); + + if (!parentObj){ + appendage.setValid(false); + return; + } + local var = appendage.getVar(); + local Ani = var.GetAnimationMap("exclamation", "character/gunner/effect/animation/holdandgo/hold_go_pause_normal.ani"); + // if(Ani && isOver){ + // sq_AnimationProc(Ani); + // sq_drawCurrentFrame(Ani, x, y, isFlip); + // } +} + +//机械助手 +function Gunner_HS1_BYKK(obj) +{ + local chr = sq_getMyCharacter(); + if (sq_GetSkillLevel(obj, SKILL_GUNNER_HS1) > 0 && isSameObject(obj,chr)){ + if(obj.getVar("hs1_obj").get_obj_vector_size() < 2 && obj.getState() != STATE_DIE){ + if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3);//type + sq_BinaryWriteDword(1);//substate + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, 60, -5, 90, obj.getDirection()); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(4);//type + sq_BinaryWriteDword(1);//substate + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, -60, 5, 90, obj.getDirection()); + } + else{ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1);//type + sq_BinaryWriteDword(1);//substate + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, 60, -5, 90, obj.getDirection()); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(2);//type + sq_BinaryWriteDword(1);//substate + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, -60, 5, 90, obj.getDirection()); + } + } + if(obj.getVar("FGTObj").get_obj_vector_size() < 1 && obj.getState() != STATE_DIE && obj.getVar("fgt").getBool(0) == false && sq_GetSkillLevel(obj,68) > 0){ + obj.getVar("fgt").setBool(0,true); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT3, 0, 0, 0, 0, obj.getDirection()); + } + else if(obj.getVar("FGTObj").get_obj_vector_size() > 0){ + if(obj.getVar("FGTObj").get_obj_vector(0).getState() == STATE_DIE) obj.getVar("fgt").setBool(0,false); + } + return; + } +} + + +//设置技能效果 +function changeskilleffect_bykk(obj, skillIndex, reciveData) +{ + local subtype = reciveData.readDword(); + switch(subtype){ + case 1: + local id = reciveData.readDword(); + local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword())); + + local chr = sq_getMyCharacter(); + if(!isSameObject(obj,chr)){ + //print("no same object"); + // sq_SendCreatePassiveObjectPacket(chr, 30555, 0, 0, 0, 50, chr.getDirection()); + monster_obj.setMapFollowParent(chr); + monster_obj.setMapFollowType(1); + } + else{ + //print("same object"); + monster_obj.setMapFollowParent(obj); + monster_obj.setMapFollowType(1); + } + //printp("id="+id.tostring()+"\n"); + switch(id){ + case 77620://77620 + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_rx78.nut", "RX78Obj", 27); + break; + case 77621://77620 + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ez8.nut", "EZ8Obj", 28); + break; + case 77622: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_exs.nut", "EXSObj", 29); + break; + case 77623: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester.nut", "TEMPObj", 63); + break; + case 77624: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_sparrowboom.nut", "SPAObj", 83); + break; + case 77625: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamD1Obj", SKILL_GUNNER_ATEAM); + break; + case 77626: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamG1Obj", SKILL_GUNNER_ATEAM); + break; + case 77627: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamH1Obj", SKILL_GUNNER_ATEAM); + break; + case 77628: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamS1Obj", SKILL_GUNNER_ATEAM); + break; + case 77629: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamT1Obj", SKILL_GUNNER_ATEAM); + break; + case 77630: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_rx60.nut", "RX60Obj", SKILL_GUNNER_ROBOTRX60); + break; + case 77631: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop1.nut", "MCDrop1Obj", 59); + break; + case 77632: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop2.nut", "MCDrop1Obj", 59); + break; + case 77633: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop3.nut", "MCDrop1Obj", 59); + break; + case 77634: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop4.nut", "MCDrop2Obj", 59); + break; + case 77635: + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ez8ex.nut", "EZ8exObj", 105); + break; + case 60002://77620 + case 60003://77620 + case 60061://77620 + setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_oldrobot.nut", "OldRobotObj", 27); + break; + case 60019: + local monsternum = obj.getVar("FGTObj").get_obj_vector_size(); + if(monsternum > 0){ + obj.getVar("FGTObj").push_obj_vector(monster_obj); + } + else{ + obj.getVar("FGTObj").clear_obj_vector(); + obj.getVar("FGTObj").push_obj_vector(monster_obj); + } + break; + } + break; + } +} + + +function setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, appendagepath, monstername, skill_index) +{ + if(!obj) return; + if(!monster_obj) return; + if(appendagepath == null || monstername == null || skill_index == null) return; + appendagepath = appendagepath.tostring(); + monstername = monstername.tostring(); + local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true); + AddAppendage.getVar("sqrChr").clear_obj_vector(); + AddAppendage.getVar("sqrChr").push_obj_vector(obj); + setMonsterInfo_Nanjixie_byKK(obj, monster_obj, skill_index, AddAppendage); + local monsternum = obj.getVar(monstername).get_obj_vector_size(); + if(monsternum > 0){ + obj.getVar(monstername).push_obj_vector(monster_obj); + } + else{ + obj.getVar(monstername).clear_obj_vector(); + obj.getVar(monstername).push_obj_vector(monster_obj); + } + } +} + +//设置怪物信息 +function setMonsterInfo_Nanjixie_byKK(obj, monster_obj, skill_index, appendage) +{ + if(!obj) return; + local monster_id = monster_obj.getCollisionObjectIndex(); + print(monster_obj.getHpMax()) + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj); + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/gunner/madeby_kak_mechanic/ap2/ap_robotics.nut")){ + local skillLevel = sqrChr.sq_GetSkillLevel(46); + local value1 = sq_GetLevelData(sqrChr, 46, 4, skillLevel); + local movespeed = sq_GetLevelData(sqrChr, 46, 4, skillLevel); + if(skill_index == 63) movespeed = movespeed / 4; + local hpmax = sq_GetLevelData(sqrChr, 46, 1, skillLevel); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, (movespeed * 0.03).tofloat(), 0); + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_HP_MAX, true, (hpmax).tofloat(), 0); + if(ap) ap.sq_Append(monster_obj, monster_obj); + if(ap2) ap2.sq_Append(monster_obj, monster_obj); + // print(monster_obj.getHpMax()) + } + switch(monster_id){ + case 77622: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local resttime = obj.sq_GetIntData(skill_index, 2); + local time = resttime + 1000; + appendage.getVar("skill").clear_timer_vector(); + appendage.getVar("skill").push_timer_vector(); + local t_01 = appendage.getVar("skill").get_timer_vector(0); + t_01.setParameter(time, -1); + t_01.resetInstant(0); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_AddSetStatePacketActiveObject(monster_obj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 77623: + //local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = 1000;//obj.sq_GetIntData(skill_index, 5).tofloat() / 100 * 1000; + local coolt_02 = obj.sq_GetIntData(skill_index, 5).tofloat() / 100 * 2500; + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01.tointeger(), -1); + t_01.resetInstant(0); + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02.tointeger(), -1); + t_02.resetInstant(0); + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local valuetime = obj.sq_GetLevelData(skill_index, 5, skill_level); + local hitnumber1 = sq_GetIntData(obj,skill_index,1); + local hittime1 = sq_GetIntData(obj,skill_index,0); + local hitnumber2 = sq_GetIntData(obj,skill_index,3); + local hittime2 = sq_GetIntData(obj,skill_index,2); + local totalDamage = sq_GetBonusRateWithPassive(obj, skill_index, skill_index, 1, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(obj, skill_index, skill_index, 2, 1.0) + 100; + local coolt_02 = sq_GetIntData(obj,skill_index, 5).tofloat() / 100.0 * 2500; + local sizeRate = sq_GetIntData(obj,skill_index,6); + local totalDamage3 = sq_GetBonusRateWithPassive(obj, skill_index, skill_index, 4, 1.0) + 100; + + appendage.getVar("custom").clear_vector(); + appendage.getVar("custom").push_vector(valuetime); + appendage.getVar("custom").push_vector(hitnumber1); + appendage.getVar("custom").push_vector(hittime1); + appendage.getVar("custom").push_vector(hitnumber2); + appendage.getVar("custom").push_vector(hittime2); + appendage.getVar("custom").push_vector(totalDamage); + appendage.getVar("custom").push_vector(totalDamage2); + appendage.getVar("custom").push_vector(coolt_02.tointeger()); + appendage.getVar("custom").push_vector(sizeRate); + appendage.getVar("custom").push_vector(totalDamage3); + break; + case 77635: + local skill_level = sq_GetSkillLevel(obj, 105); + local valuetime = obj.sq_GetLevelData(105, 2, skill_level); + //printp("valuetimetest= "+valuetime.tostring()+"\n"); + monster_obj.getVar().clear_vector(); + monster_obj.getVar().push_vector(valuetime); + break; + } +} + +//人物复活 +function reset_mechanic_bykk(obj) +{ + obj.getVar("fgt").setBool(0,false); +} + +//机械助手发送状态 +function sendSkillPacket_hs1(obj,skillIndex) +{ + if(!sq_IsMyControlObject(obj)) return; + local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0)); + local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1)); + if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0){ + if(hs1_obj01 && hs1_obj01.getState() < 27){ + hs1_obj01.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj01.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(0,true); + } + else if(hs1_obj02 && hs1_obj02.getState() < 27){ + hs1_obj02.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj02.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(1,true); + } + else if(hs1_obj01 && hs1_obj01.getState() == 27 && obj.getVar("hs1").getBool(0) == true && skillIndex != SKILL_GUNNER_VIRTUALRUSH){ + hs1_obj01.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj01.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(0,false); + } + else if(hs1_obj02 && hs1_obj02.getState() == 27 && obj.getVar("hs1").getBool(1) == true && skillIndex != SKILL_GUNNER_VIRTUALRUSH){ + hs1_obj02.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj02.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(1,false); + } + else{ + obj.sq_PlaySound("GN_SOPHIA_COOLTIME"); + return false; + } + } + else{ + if(hs1_obj01 && hs1_obj01.getState() < 26){ + hs1_obj01.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj01.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(0, true); + } + else if(hs1_obj02 && hs1_obj02.getState() < 26){ + hs1_obj02.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj02.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(1, true); + } + else if(hs1_obj01 && hs1_obj01.getState() == 26 && obj.getVar("hs1").getBool(0) == true){ + hs1_obj01.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj01.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(0, false); + } + else if(hs1_obj02 && hs1_obj02.getState() == 26 && obj.getVar("hs1").getBool(1) == true){ + hs1_obj02.getVar("skillIndex").setInt(10, skillIndex); + hs1_obj02.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("hs1").setBool(1, false); + } + else{ + return false; + } + } + + if(skillIndex != SKILL_GUNNER_VIRTUALRUSH){ + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +//机器人发送状态 +function sendrobotstate_byKK(obj,type) +{ + switch(type){ + case 1://直接引爆 + local robot = ["RX78Obj","EZ8Obj","AteamD1Obj","AteamG1Obj","AteamH1Obj","AteamS1Obj","AteamT1Obj","RX60Obj","MCDrop1Obj","MCDrop2Obj","EZ8exObj"]; + local skillIndex = [27,28,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ROBOTRX60,59,59,105]; + local bonusrateIndex = [1,1,4,5,6,2,3,1,7,9,1]; + local robotobj = ["SPARROWOBJ"]; + local attackstate = [24]; + for(local i = 0; i < robot.len(); i++){ + local size = obj.getVar(robot[i]).get_obj_vector_size(); + for(local ui = 0; ui < size; ui++){ + local robot_obj = sq_GetCNRDObjectToActiveObject(obj.getVar(robot[i]).get_obj_vector(ui)); + if(robot_obj){ + local sizeRate = 100; + //获取爆炸大小 + switch(i){ + case 0: + sizeRate = sq_GetIntData(obj, 27, 1); + break; + case 1: + sizeRate = obj.sq_GetLevelData(28, 3, sq_GetSkillLevel(obj, 28)); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + sizeRate = sq_GetIntData(obj, SKILL_GUNNER_ATEAM, 4 + i) * 2; + break; + case 7: + sizeRate = sq_GetIntData(obj, SKILL_GUNNER_ROBOTRX60, 2); + break; + case 8: + case 9: + sizeRate = sq_GetIntData(obj, 59, 12); + break; + case 10: + sizeRate = obj.sq_GetLevelData(105, 3, sq_GetSkillLevel(obj, 105)); + break; + + } + local totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex[i], 29, bonusrateIndex[i], 1.0) + 100; + if(skillIndex[i] == 59 && sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){ + totalDamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, 1.0) + 100; + print("KT-totaldamage = "+totalDamage); + } + //printp("totalDamage="+totalDamage.tostring()+"\n"); + createFireExplosion_nanjixie(obj,robot_obj,sizeRate,totalDamage, 20, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(robot_obj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){ + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(robot_obj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + dieHardAppendage.getVar().setBool(0,true); + CNSquirrelAppendage.sq_RemoveAppendage(robot_obj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut"); + } + switch(i){ + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", robot_obj, 0, 1, 0, true, 30, 0, 1); + break; + case 1: + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", robot_obj, 0, 1, 0, true, 30, 0, 1); + break; + case 10: + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", robot_obj, 0, 1, 0, true, 30, 0, 2); + local number = obj.sq_GetLevelData(105, 6, sq_GetSkillLevel(obj, 105)); + local level = obj.sq_GetLevelData(105, 0, sq_GetSkillLevel(obj, 105)); + local destX_01 = robot_obj.getXPos() - obj.getXPos(); + local destY_01 = robot_obj.getYPos() - obj.getYPos(); + if(obj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - robot_obj.getXPos(); + for(local i = 0; i < number; i++){ + summonmonster_mechanic(obj,destX_01+sq_getRandom(-10,10),destY_01+sq_getRandom(-10,10),0,0,77620,20000,level,0); + } + break; + } + robot_obj.setValid(false); + } + } + } + for(local oi = 0; oi < robotobj.len(); oi++){ + local size = obj.getVar(robotobj[oi]).get_obj_vector_size(); + for(local yi = 0; yi < size; yi++){ + local robot_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar(robotobj[oi]).get_obj_vector(yi)); + if(robot_obj) robot_obj.addSetStatePacket(attackstate[oi], null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + case 2://指定引爆 + local robot = ["RX78Obj","EZ8Obj","AteamD1Obj","AteamG1Obj","AteamH1Obj","AteamS1Obj","AteamT1Obj","RX60Obj","MCDrop1Obj","MCDrop2Obj","EZ8exObj"]; + local attackIndex = [4,3,4,4,4,4,4,4,4,4,3]; + local robotobj = ["SPARROWOBJ"]; + local attackstate = [22]; + for(local i = 0; i < robot.len(); i++){ + local size = obj.getVar(robot[i]).get_obj_vector_size(); + for(local ui = 0; ui < size; ui++){ + local robot_obj = sq_GetCNRDObjectToActiveObject(obj.getVar(robot[i]).get_obj_vector(ui)); + if(robot_obj){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, attackIndex[i]); + sq_AddSetStatePacketActiveObject(robot_obj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + } + for(local oi = 0; oi < robotobj.len(); oi++){ + local size = obj.getVar(robotobj[oi]).get_obj_vector_size(); + for(local yi = 0; yi < size; yi++){ + local robot_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar(robotobj[oi]).get_obj_vector(yi)); + if(robot_obj) robot_obj.addSetStatePacket(attackstate[oi], null, STATE_PRIORITY_AUTO, false, ""); + } + } + local skill = sq_GetSkill(obj, 63); + if(!skill.isSealFunction()){ + local size = obj.getVar("TEMPObj").get_obj_vector_size(); + local moveX = obj.getVar("robotsexplosion").get_vector(0); + local moveY = obj.getVar("robotsexplosion").get_vector(1); + for(local i = 0; i < size; i++){ + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("TEMPObj").get_obj_vector(0)); + if(activeObj){ + activeObj.getVar("move").clear_vector(); + activeObj.getVar("move").push_vector(moveX); + activeObj.getVar("move").push_vector(moveY); + activeObj.getVar("move").setBool(0,true); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(activeObj, 8, pIntVec, STATE_PRIORITY_USER); + } + } + + } + local skill2 = sq_GetSkill(obj, 29); + if(!skill2.isSealFunction()){ + local size2 = obj.getVar("ExsS_OBJ").get_obj_vector_size(); + for(local ui = 0; ui < size2; ui++){ + local activeObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("ExsS_OBJ").get_obj_vector(ui)); + if(activeObj) activeObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + case 3://全息机械助手直接引爆 + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + effect_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effect2_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i)); + effect2_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 4://全息机械助手指定引爆 + local aimPosX = obj.getVar("virtualrush").get_vector(0); + local aimPosY = obj.getVar("virtualrush").get_vector(1); + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + sq_setCurrentAxisPos(effect_obj, 0, aimPosX); + sq_setCurrentAxisPos(effect_obj, 1, aimPosY); + effect_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effect2_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i)); + effect2_obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 5://全息机械助手指定引爆 + local aimPosX = obj.getVar("robotsexplosion").get_vector(0); + local aimPosY = obj.getVar("robotsexplosion").get_vector(1); + obj.getVar("virtualrush").clear_vector(); + obj.getVar("virtualrush").push_vector(aimPosX); + obj.getVar("virtualrush").push_vector(aimPosY); + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + sq_setCurrentAxisPos(effect_obj, 0, aimPosX); + sq_setCurrentAxisPos(effect_obj, 1, aimPosY); + effect_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effect2_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i)); + effect2_obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + + } +} + +//融合爆炸为单HIT +function createPointFireExplosion_byKK(obj,type) +{ + if(!sq_IsMyControlObject(obj)) return; + switch(type){ + case 1: + local aimPosX = obj.getVar("robotsexplosion").get_vector(0); + local aimPosY = obj.getVar("robotsexplosion").get_vector(1); + if(aimPosX > 0){ + local robotsexplosion_level = sq_GetSkillLevel(obj, 93); + local bonusrate = obj.sq_GetLevelData(93, 1, robotsexplosion_level).tofloat() / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner//madeby_kak_mechanic/ap2/ap_robotics.nut")){ + local skillLevel = obj.sq_GetSkillLevel(46); + local value1 = sq_GetLevelData(obj, 46, 5, skillLevel); + bonusrate = bonusrate + value1.tofloat() / 1000; + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_lastfightingspirit.nut")){ + local skillLevel = obj.sq_GetSkillLevel(68); + local value1 = sq_GetLevelData(obj, 68, 6, skillLevel); + bonusrate = bonusrate + value1.tofloat() / 1000; + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_arkreactor.nut")){ + local skillLevel = obj.sq_GetSkillLevel(127); + local value1 = sq_GetLevelData(obj, 127, 0, skillLevel); + bonusrate = bonusrate + value1.tofloat() / 1000; + } + //printp("bonusrate = "+bonusrate.tostring()+"\n"); + local sizeRate = 100; + local size_all = 0; + local totalDamage_all = 0; + local number = 0; + local robot = ["RX78Obj","EZ8Obj","SPARROWOBJ","AteamD1Obj","AteamG1Obj","AteamH1Obj","AteamS1Obj","AteamT1Obj","RX60Obj","MCDrop1Obj","MCDrop2Obj","EZ8exObj"]; + local skillIndex = [27,28,83,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ROBOTRX60,59,59,105]; + local damageIndex = [1,1,4,4,5,6,2,3,1,7,9,1]; + for(local i = 0; i < robot.len(); i++){ + local size = obj.getVar(robot[i]).get_obj_vector_size(); + local totaldamage = sq_GetBonusRateWithPassive(obj, skillIndex[i], -1, damageIndex[i], bonusrate) + 100; + if(skillIndex[i] == 59 && sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){ + totaldamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, bonusrate) + 100; + // print("KT-totaldamage = "+totaldamage); + } + local sizeRate2 = 0; + switch (i) { + case 0: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 1); break; + case 1: sizeRate2 = sq_GetLevelData(obj, skillIndex[i], 3, sq_GetSkillLevel(obj, skillIndex[i])); break; + case 2: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 7); break; + case 3: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 6); break; + case 4: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 7); break; + case 5: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 8); break; + case 6: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 9); break; + case 7: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 10); break; + case 8: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 2); break; + case 9: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 14); break; + case 10: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 14); break; + case 11: sizeRate2 = sq_GetLevelData(obj, skillIndex[i], 3, sq_GetSkillLevel(obj, skillIndex[i])); break; + } + // print(sizeRate2 + " && " + sizeRate); + if(size > 0 && sizeRate2 > sizeRate) sizeRate = sizeRate2; + size_all = size + size_all; + totalDamage_all = size * totaldamage + totalDamage_all; + number = number + size; + } + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("TEMPObj").get_obj_vector(0)); + local skill = sq_GetSkill(obj, 63); + if(activeObj && !skill.isSealFunction()){ + local totalDamage = sq_GetBonusRateWithPassive(obj, 63, 29, 4, 1.0) + 100; + totalDamage_all = totalDamage_all + totalDamage; + number = number + 1; + } + local skill = sq_GetSkill(obj, 29); + if(!skill.isSealFunction()){ + local size2 = obj.getVar("ExsS_OBJ").get_obj_vector_size(); + local totalDamage = sq_GetBonusRateWithPassive(obj, 29, 29, 2, 1.0) + 100; + totalDamage_all = totalDamage_all + totalDamage * size2; + number = number + size2; + //printp("size2="+size2.tostring()+"totalDamage_all="+totalDamage_all.tostring()+"\n"); + } + if(totalDamage_all > 0){ + if(size_all > 10) sizeRate = sizeRate + 50 + (size_all - 10)* 1; + else sizeRate = sizeRate + size_all * 5; + // print(sizeRate); + // print("totalDamage_all="+totalDamage_all.tostring()+"\n"); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(200);//skillIndex + sq_BinaryWriteDword(2);//subtype + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(totalDamage_all); + sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30); + // if(number > 0){ + // for(local i = 0; i < number - 1; i++){ + // sq_BinaryStartWrite(); + // sq_BinaryWriteDword(201);//skillIndex + // sq_BinaryWriteDword(1);//subtype + // sq_BinaryWriteDword(sizeRate); + // sq_BinaryWriteDword(0); + // sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30); + // } + // } + } + } + break; + case 2: + case 3: + local aimPosX = obj.getVar("virtualrush").get_vector(0); + local aimPosY = obj.getVar("virtualrush").get_vector(1); + if(type == 3){ + aimPosX = obj.getVar("robotsexplosion").get_vector(0); + aimPosY = obj.getVar("robotsexplosion").get_vector(1); + } + if(aimPosX > 0){ + local sizeRate = 100, sizeRate2 = 0; + local totalDamage_all = 0; + local number = 0; + local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i)); + local skillIndex_sub1 = effect_obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = effect_obj.getVar("skillIndex_sub2").get_vector(0); + local totalDamage = 0; + local robotsexplosion_level = sq_GetSkillLevel(obj, 93); + local bonusrate = obj.sq_GetLevelData(93, 1, robotsexplosion_level).tofloat() / 100; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_robotics.nut")){ + local skillLevel = obj.sq_GetSkillLevel(46); + local value1 = sq_GetLevelData(obj, 46, 5, skillLevel); + bonusrate = bonusrate * (1000 + value1).tofloat() / 1000; + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_lastfightingspirit.nut")){ + local skillLevel = obj.sq_GetSkillLevel(68); + local value1 = sq_GetLevelData(obj, 68, 6, skillLevel); + bonusrate = bonusrate * (1000 + value1).tofloat() / 1000; + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_arkreactor.nut")){ + local skillLevel = obj.sq_GetSkillLevel(127); + local value1 = sq_GetLevelData(obj, 127, 0, skillLevel); + bonusrate = bonusrate * (1000 + value1).tofloat() / 1000; + } + if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0){ + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_SOPHIA, 0, sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA))) / 1000; + } + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 4, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 6); + break; + case 2: + totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 5, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 7); + break; + case 3: + totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 6, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 8); + break; + case 4: + totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 3, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 9); + break; + case 5: + totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 2, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 10); + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_ROBOTRX60, 29, 1, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, SKILL_GUNNER_ROBOTRX60, 2); + break; + case 27: + totalDamage = sq_GetBonusRateWithPassive(obj, 27, 29, 1, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, 27, 1); + break; + case 28: + totalDamage = sq_GetBonusRateWithPassive(obj, 28, 29, 1, bonusrate) + 100; + sizeRate2 = sq_GetLevelData(obj, 28, 3, sq_GetSkillLevel(obj, 28)); + break; + case 59: + switch(skillIndex_sub2){ + case 1: + case 2: + totalDamage = sq_GetBonusRateWithPassive(obj, 59, 29, 7, bonusrate) + 100; + if(sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){ + totaldamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, bonusrate) + 100; + print("KT-totaldamage = "+totaldamage); + } + break; + case 3: + totalDamage = sq_GetBonusRateWithPassive(obj, 59, 29, 9, bonusrate) + 100; + if(sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){ + totaldamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, bonusrate) + 100; + print("KT-totaldamage = "+totaldamage); + } + break; + } + sizeRate2 = sq_GetIntData(obj, 59, 14); + break; + case 83: + totalDamage = sq_GetBonusRateWithPassive(obj, 83, 29, 4, bonusrate) + 100; + sizeRate2 = sq_GetIntData(obj, 83, 7); + break; + case 105: + totalDamage = sq_GetBonusRateWithPassive(obj, 105, 29, 1, bonusrate) + 100; + sizeRate2 = sq_GetLevelData(obj, 105, 3, sq_GetSkillLevel(obj, 105)); + break; + } + // print(sizeRate2 + " && " + sizeRate); + if(sizeRate2 > sizeRate) sizeRate = sizeRate2; + totalDamage_all = totalDamage_all + totalDamage; + number = number + 1; + } + if(size > 10) sizeRate = sizeRate + 50 + (size - 10)* 1; + else sizeRate = sizeRate + size * 5; + if(totalDamage_all > 0){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(200);//skillIndex + sq_BinaryWriteDword(2);//subtype + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(totalDamage_all); + sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30); + // if(number > 0){ + // for(local i = 0; i < number - 1; i++){ + // sq_BinaryStartWrite(); + // sq_BinaryWriteDword(201);//skillIndex + // sq_BinaryWriteDword(1);//subtype + // sq_BinaryWriteDword(sizeRate); + // sq_BinaryWriteDword(0); + // sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30); + // } + // } + } + } + break; + } +} + + +//生成爆炸OBJ +function createFireExplosion_nanjixie(obj,passiveobject,sizeRate,totalDamage,zpos,isTrue) +{ + obj = sq_GetCNRDObjectToSQRCharacter(obj) + local bonusrate = 1.0;// + obj.getVar("mechanics_bonusRate").get_vector(0).tofloat() / 1000.0; + // print("createFireExplosion_nanjixie: bonusrate = "+bonusrate); + if(isTrue == true){ + local robotsexplosion_level = sq_GetSkillLevel(obj, 93); + local bonus = obj.sq_GetLevelData(93, 1, robotsexplosion_level).tofloat() / 100; + bonusrate = bonusrate * bonus; + } + // print("createFireExplosion_nanjixie: bonusrate2 = "+bonusrate); + //printp("totalDamage="+totalDamage.tostring()+"\n"); + totalDamage = (totalDamage.tofloat() * bonusrate).tointeger(); + //printp("bonusrate="+bonusrate.tostring()+"totalDamage="+totalDamage.tostring()+"\n"); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(200);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_BinaryWriteDword(sizeRate); + sq_BinaryWriteDword(totalDamage); + // printp("sizeRate="+sizeRate.tostring()+" ,totalDamage="+totalDamage.tostring()+"\n"); + local destX_01 = 0; + local destY_01 = 0; + if(passiveobject.getDirection() == ENUM_DIRECTION_RIGHT) + { + destX_01 = passiveobject.getXPos() - obj.getXPos(); + destY_01 = passiveobject.getYPos() - obj.getYPos(); + } + else if(passiveobject.getDirection() == ENUM_DIRECTION_LEFT) + { + destX_01 = obj.getXPos() - passiveobject.getXPos(); + destY_01 = passiveobject.getYPos() - obj.getYPos(); + } + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01, zpos - obj.getZPos(), passiveobject.getDirection()); +} + + +//生成技能OBJ +function createSkillPassiveObj_nanjixie(obj,passiveobject,skillIndex,subtype,totalDamage,etc_num1,etc_num2,x,y,z) +{ + obj = sq_GetCNRDObjectToSQRCharacter(obj); + local bonusrate = 1.0;//obj.getVar("mechanics_bonusRate").get_vector(0).tofloat() / 1000.0; + // if(bonusrate <= 1) bonusrate = 1.0; + // print("bonusrate2 = "+bonusrate+" ,,totalDamage = "+totalDamage); + // print("createSkillPassiveObj_nanjixie: bonusrate = "+bonusrate); + totalDamage = (totalDamage.tofloat() * bonusrate).tointeger(); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillIndex);//skillIndex + sq_BinaryWriteDword(subtype);//subtype + sq_BinaryWriteDword(totalDamage); + if(etc_num1 > 0) sq_BinaryWriteDword(etc_num1); + if(etc_num2 > 0) sq_BinaryWriteDword(etc_num2); + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj,passiveobject)){ + if(passiveobject.getDirection() == ENUM_DIRECTION_RIGHT){ + destX_01 = passiveobject.getXPos() - obj.getXPos(); + destY_01 = passiveobject.getYPos() - obj.getYPos(); + } + else if(passiveobject.getDirection() == ENUM_DIRECTION_LEFT){ + destX_01 = obj.getXPos() - passiveobject.getXPos(); + destY_01 = passiveobject.getYPos() - obj.getYPos(); + } + } + if(skillIndex == 63) z = z + 150; + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, destX_01 + x, destY_01 + y, z - obj.getZPos(), passiveobject.getDirection()); +} + +function summonmonster_mechanic(obj,x,y,z,substate,monsterId,summontime,level,team) +{ + if(obj.getVar("Summonnum").size_vector() == 0) + { + obj.getVar("Summonnum").clear_vector(); + obj.getVar("Summonnum").push_vector(0); + + } + + sq_BinaryStartWrite(); + sq_BinaryWriteByte(substate); + sq_BinaryWriteDword(monsterId); + sq_BinaryWriteWord(team); + sq_BinaryWriteWord(level); + sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0)); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(summontime); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + sq_SendCreatePassiveObjectPacket(obj, 48024, 0, x, y, z, obj.getDirection()); + obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1); +} + + +function mechanic_kkmade(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, SKILL_GUNNER_ARKREACTOR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_ARKREACTOR, 0, sq_GetSkillLevel(obj, SKILL_GUNNER_ARKREACTOR))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_GUNNER_LASTFIGHTINGSPIRIT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_LASTFIGHTINGSPIRIT, 6, sq_GetSkillLevel(obj, SKILL_GUNNER_LASTFIGHTINGSPIRIT))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_SOPHIA, 0, sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA))) / 1000; + print("bonusRate3 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_robotics.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_GUNNER_ROBOTICS, 5, sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTICS))) / 1000; + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + // obj.getVar("mechanics_bonusRate").clear_vector(); + // obj.getVar("mechanics_bonusRate").push_vector(bonusRate); + // print("bonusRate = "+bonusRate); +} + + +function startSkillCoolTime_gunner_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + switch(skillIndex){ + case SKILL_GUNNER_G1: + case SKILL_GUNNER_G2: + case SKILL_GUNNER_G3: + local newCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G1, 3); + return newCoolTime; + break; + } + if (isAtSOWalkerOnBody(obj)){ + switch (skillIndex){ + case SKILL_AIMSHOOT: + case SKILL_BURSTBOMB: + case SKILL_NEODYMIUMFUSEE: + case SKILL_TRIPLEGUNSHOT: + case SKILL_MCPICE: + case SKILL_DIRECTFEEDBACK: + local reduceCoolTime = obj.sq_GetIntData(SKILL_AT_SOWALKER, 46); + reduceCoolTime = currentCoolTime * (reduceCoolTime.tofloat() / 100.0); + newCoolTime = currentCoolTime - reduceCoolTime; + break; + } + } + return currentCoolTime; +} + + +function createOnlyDrawObject_mechanic_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath);//创建ani + local pooledObj = sq_CreatePooledObject(ani,isTrue);//创建绘画对象 参数2:应该是ani结束时true 就销毁反之false不销毁 + sq_SetCurrentDirection(pooledObj, direction);//设置方向 + pooledObj.setCurrentPos(x,y,z);//设置pos + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);//设置图层 + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);//增加对象 + return pooledObj; +} + +function setCustomData_po_hs1_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local hs1_number = sqrChr.getVar("hs1_obj").get_obj_vector_size(); + if(hs1_number > 0) sqrChr.getVar("hs1_obj").push_obj_vector(obj); + else{ + sqrChr.getVar("hs1_obj").clear_obj_vector(); + sqrChr.getVar("hs1_obj").push_obj_vector(obj); + } + print("test"); + + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + + local type = receiveData.readDword(); + local substate = receiveData.readDword(); + obj.getVar("type").setInt(0, type); + obj.getVar("substate").setInt(0, substate); + switch(type){ + case 3: + case 4: + if(sq_getRandom(0,100) > 50) obj.sq_PlaySound("GN_SOPHIA_ENTER_01"); + else obj.sq_PlaySound("GN_SOPHIA_ENTER_02"); + case 1: + case 2: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } +} + + +function setState_po_hs1_bykk(obj, state, datas) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local type = obj.getVar("type").getInt(0); + local substate = obj.getVar("substate").getInt(0); + obj.getVar("state").setInt(0,state);//把state存入数组 + + local aniPath = "passiveobject/mechanic_bykk/animation/hs1/"; + local aniSet = ["hs-1_body02_1.ani","hs-1_body02_2.ani","hs-1_body02_3.ani","hs-1_body02_4.ani","hs-1_body02_5.ani","hs-1_body02_6.ani","hs-1_body02_7.ani"]; + if(type > 2){ + aniPath = "passiveobject/mechanic_bykk/animation/hs1/lv95passive/"; + aniSet = ["hs-1_3rd_01_stand_body.ani","hs-1_3rd_02_sad_body.ani","hs-1_3rd_04_happy_body.ani","hs-1_3rd_06_message_body.ani","hs-1_3rd_07_voice_body.ani","hs-1_3rd_08_hologram_body.ani","hs-1_3rd_03_twinkle_body.ani","hs-1_3rd_05_danger_body.ani"]; + } + + local ani = sq_CreateAnimation("", aniPath + aniSet[state - 20]); + obj.setCurrentAnimation(ani); + + local setState = 26; + if(type > 2) setState = 27; + if(state < setState){ + if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 15, -1, true); + } + else{ + obj.removeAllTimeEvent(); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetYPos(obj)); + obj.getVar("move").setInt(12, sq_GetZPos(obj)); + obj.getVar("move").setInt(13, sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 80)); + obj.getVar("move").setInt(14, sq_GetYPos(sqrChr)); + local moveZ = sq_GetZPos(sqrChr) + 170; + local skillIndex = obj.getVar("skillIndex").getInt(10) + if(skillIndex == 63) moveZ = moveZ + 170; + else if(skillIndex == SKILL_GUNNER_ATEAM) moveZ = moveZ + 195; + else if(skillIndex == SKILL_GUNNER_VIRTUALRUSH) moveZ = moveZ + 105; + obj.getVar("move").setInt(15, moveZ); + obj.setTimeEvent(20, 5, 30, true); + } +} + + +function onEndCurrentAni_po_hs1_bykk(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local type = obj.getVar("type").getInt(0); + local substate = obj.getVar("substate").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(type){ + case 1: + case 2: + local emo_num = sq_getRandom(20,25).tointeger(); + obj.addSetStatePacket(emo_num, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + case 4: + local emo_num = sq_getRandom(20,26).tointeger(); + obj.addSetStatePacket(emo_num, null, STATE_PRIORITY_AUTO, false, ""); + break; + } +} + +function onAttack_po_hs1_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function procAppend_po_hs1_bykk(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + if(type == 4) obj.sq_PlaySound("GN_SOPHIA_DIE"); + sq_SendDestroyPacketPassiveObject(obj); + } + local chr = sq_GetMyMasterCharacter(); + if(!isSameObject(sqrChr, chr)){ + sq_SendDestroyPacketPassiveObject(obj); + } +} + +function onKeyFrameFlag_po_hs1_bykk(obj, flagIndex) +{ + if(!obj) return; +} + +function onTimeEvent_po_hs1_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local type = obj.getVar("type").getInt(0); + local substate = obj.getVar("substate").getInt(0); + local soundEffect = ["HS_1_01","HS_1_02","HS_1_03","HS_1_04","HS_1_CAST"]; + switch(timeEventIndex){ + case 1: + local skillIndex = obj.getVar("skillIndex").getInt(10); + obj.getVar("skillIndex").setInt(10, 0); + local pooledObj01,pooledObj02,pooledObj03,pooledObj04,pooledObj05,pooledObj06; + + local destX_01 = 0; + local destY_01 = obj.getYPos() - sqrChr.getYPos(); + if(sqrChr.getDirection() == ENUM_DIRECTION_RIGHT) destX_01 = obj.getXPos() - sqrChr.getXPos(); + else if(sqrChr.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - obj.getXPos(); + local skill_level = sq_GetSkillLevel(sqrChr, skillIndex); + local level = sqrChr.sq_GetLevelData(skillIndex, 0, skill_level); + + switch(skillIndex){ + case 63: + pooledObj01 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/callrobot_01.ani", 0, -1, 150 - obj.getZPos()); + break; + case SKILL_GUNNER_ATEAM: + pooledObj01 = pooledObj01 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/a-team/callrobot_01.ani", 0, -1, 0 - obj.getZPos()); + break; + case SKILL_GUNNER_VIRTUALRUSH: + obj.sq_PlaySound("GN_SOPHIA_VIRTUALRUSH"); + createSkillPassiveObj_nanjixie(sqrChr,obj,SKILL_GUNNER_VIRTUALRUSH,1,0,0,0,0,-1,0); + break; + default: + pooledObj01 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/callrobot_01.ani", 0, -1, -20 - obj.getZPos()); + break; + } + + switch(skillIndex){ + case 27: + local skill_level = sq_GetSkillLevel(sqrChr, 42); + if(skill_level > 0){ + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, -10, 0 - obj.getZPos()); + pooledObj03 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, 20, 0 - obj.getZPos()); + } + else pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, -1, 0 - obj.getZPos()); + local skill_level02 = sq_GetSkillLevel(sqrChr, 42); + if(skill_level02 > 0){ + summonmonster_mechanic(sqrChr,destX_01, destY_01 - 10, 0, 0, 77620, 600000, level, 0);//60002 + summonmonster_mechanic(sqrChr,destX_01, destY_01 + 20, 0, 0, 77620, 600000, level, 0); + } + else summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77620,600000,level,0); + sqrChr.sq_PlaySound("GN_LADNRUNNER"); + break; + case 28: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, -1, 0 - obj.getZPos()); + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77621,60000,level,0);//60003 + if(sq_GetLevelData(sqrChr, 28, 6, skill_level) > 0) summonmonster_mechanic(sqrChr,destX_01 + 5,destY_01 - 5,0,0,77621,60000,level,0); + sqrChr.sq_PlaySound("R_GN_COUNTDOWN"); + break; + case 29: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/exs_05.ani", 0, -1, 0 - obj.getZPos()); + local bonusrate = sq_GetBonusRateWithPassive(sqrChr, 29, 29, 1, 1.0) + 100; + local lifetime = sqrChr.sq_GetLevelData(29, 3, skill_level); + local resttime = sqrChr.sq_GetIntData(skillIndex, 2); + local bullet_number = sqrChr.sq_GetIntData(skillIndex, 1); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(29);//skillIndex + sq_BinaryWriteDword(3);//subtype + sq_BinaryWriteDword(bonusrate); + sq_BinaryWriteDword(lifetime); + sq_BinaryWriteDword(resttime); + sq_BinaryWriteDword(bullet_number); + sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01, 0, obj.getDirection()); + sqrChr.sq_PlaySound("GN_VIPER"); + break; + case 63: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/tempester_02.ani", 0, -1, 150 - obj.getZPos()); + local number = sqrChr.sq_GetLevelData(skillIndex, 6, skill_level); + local time = sqrChr.sq_GetLevelData(skillIndex, 5, skill_level); + for(local i = 0; i < number; i++){ + summonmonster_mechanic(sqrChr,destX_01,destY_01,150,0,77623,time,level,0);//GN_TRMPESTER 60018 + } + sqrChr.sq_PlaySound("GN_TRMPESTER"); + break; + case 83: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/sparrowfactory_02.ani", 0, -1, 0 - obj.getZPos()); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(83); + sq_BinaryWriteDword(1); + sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01 - 1, 0, sqrChr.getDirection()); + sqrChr.sq_PlaySound("GN_SPARROW_FACTORY"); + break; + case 105: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/ez8ex_01.ani", 0, -1, 0 - obj.getZPos()); + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77635,20000,level,0); + sqrChr.sq_PlaySound("R_GN_COUNTDOWN"); + break; + case 106: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/exs_05.ani", 0, -1, 0 - obj.getZPos()); + local bonusrate = sq_GetBonusRateWithPassive(sqrChr, skillIndex, 29, 1, 1.0) + 100; + local bonusrate2 = sq_GetBonusRateWithPassive(sqrChr, skillIndex, 29, 4, 1.0) + 100; + local lifetime = sqrChr.sq_GetLevelData(skillIndex, 3, skill_level); + local resttime = sqrChr.sq_GetIntData(skillIndex, 2); + local bullet_number = sqrChr.sq_GetIntData(skillIndex, 1); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(29);//skillIndex + sq_BinaryWriteDword(5);//subtype + sq_BinaryWriteDword(bonusrate); + sq_BinaryWriteDword(lifetime); + sq_BinaryWriteDword(resttime); + sq_BinaryWriteDword(bullet_number); + sq_BinaryWriteDword(bonusrate2); + if(sq_GetLevelData(sqrChr, skillIndex, 6, skill_level) > 0){ + sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01+sq_getRandom(-10, 10), destY_01-10, 0, obj.getDirection()); + sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01+10, 0, obj.getDirection()); + print("te11111st") + } + else sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01, 0, obj.getDirection()); + sqrChr.sq_PlaySound("GN_VIPER"); + break; + case SKILL_GUNNER_ROBOTRX60: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx-60_02.ani", 0, -1, 0 - obj.getZPos()); + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77630,600000,level,0); + break; + case SKILL_GUNNER_ATEAM: + pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleportd1end_00.ani", 0, -25, 0 - obj.getZPos()); + pooledObj03 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleportg1end_00.ani", 0, 25, 0 - obj.getZPos()); + pooledObj04 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleporth1end_00.ani", 60, -1, 0 - obj.getZPos()); + pooledObj05 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleports1end_00.ani", -50, -50, 0 - obj.getZPos()); + pooledObj06 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleportt1end_00.ani", -50, 50, 0 - obj.getZPos()); + summonmonster_mechanic(sqrChr,destX_01, destY_01 - 25, 0, 0, 77625, 600000, level, 0); + summonmonster_mechanic(sqrChr,destX_01, destY_01 + 25, 0, 0, 77626, 600000, level, 0); + summonmonster_mechanic(sqrChr,destX_01 + 60, destY_01, 0, 0, 77627, 600000, level, 0); + summonmonster_mechanic(sqrChr,destX_01 - 50, destY_01 - 50, 0, 0, 77628, 600000, level, 0); + summonmonster_mechanic(sqrChr,destX_01 - 50, destY_01 + 50, 0, 0, 77629, 600000, level, 0); + break; + } + if(skillIndex != SKILL_GUNNER_VIRTUALRUSH) obj.sq_PlaySound(soundEffect[sq_getRandom(0,4).tointeger()]); + local pooledObjSum = [pooledObj01,pooledObj02,pooledObj03,pooledObj04,pooledObj05,pooledObj06]; + for(local i = 0; i < pooledObjSum.len(); i++){ + if(pooledObjSum[i] && pooledObjSum[i].isObjectType(OBJECTTYPE_DRAWONLY)){ + local pAni = pooledObjSum[i].getCurrentAnimation(); + pAni.setSpeedRate(200.0); + print("test"); + } + } + if(skillIndex != SKILL_GUNNER_VIRTUALRUSH) obj.setTimeEvent(12,300,1,false); + else obj.setTimeEvent(12,11600,1,false); + break; + case 3: + local anipath = ["character/gunner/effect/animation/virtualrush/hologramloopfront_00.ani","character/gunner/effect/animation/virtualrush/hologramloopbottom_00.ani","character/gunner/effect/animation/virtualrush/hologramloopback_00.ani"]; + for(local i = 0; i < 3; i++){ + local pooledObj = CreateAni_HS1_bykk(obj, anipath[i], ENUM_DRAWLAYER_NORMAL, obj.getXPos(), obj.getYPos() - 1, 0, true); + obj.getVar("Face").push_obj_vector(pooledObj); + } + break; + case 10://判斷距離 + local base_X = 55,base_Y = -10; + if(type == 2 || type == 4){base_X = -55,base_Y = 10;} + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr) - base_Y); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 90); + local direction = sqrChr.getDirection(); + if(obj.getDirection() != direction) obj.setDirection(direction); + if(disX > 10){ + local baseM = 30; + local moveX = disX / baseM + 2; + if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 10){ + local baseM = 30; + local moveY = disY / baseM + 1; + if(sq_GetYPos(obj) > sq_GetYPos(sqrChr) + base_Y) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disZ > 5){ + local baseM = 30; + local moveZ = disZ / baseM + 1; + if(sq_GetZPos(obj) - 90 > sq_GetZPos(sqrChr)) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) - moveZ); + else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + moveZ); + } + if(disX <= 10 && disY <= 10 && disZ <= 5){ + obj.stopTimeEvent(10); + obj.setTimeEvent(11,300,-1,false); + } + break; + case 11://移動 + local base_X = 55,base_Y = -10; + if(type == 2 || type == 4){base_X = -55,base_Y = 10;} + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr) - base_Y); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 30); + if(disX > 10 || disY > 10 || disZ > 5){ + obj.stopTimeEvent(11); + obj.setTimeEvent(10,15,-1,false); + } + break; + case 12: + if(type > 2) obj.addSetStatePacket(sq_getRandom(20,26), null, STATE_PRIORITY_AUTO, false, ""); + obj.setTimeEvent(10,15,-1,false); + break; + case 20: + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(13), timeEventCount, 30); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), obj.getVar("move").getInt(14), timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), obj.getVar("move").getInt(15), timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30) obj.setTimeEvent(1,1000,1,true); + break; + } +} + +function RemoveAllAni_HS1_bykk(obj,Var) +{ + if(!Var){ + Var = "aniobj"; + } + + local sq_var = obj.getVar(Var); + local size = sq_var.get_obj_vector_size(); + + for(local i = 0; i < size; i++){ + local pObj = sq_var.get_obj_vector(i); + if(pObj) pObj.setValid(false); + } + + obj.getVar(Var).clear_obj_vector(); +} + +function CreateAni_HS1_bykk(obj,AniRoute,DrawLayer,XPos,YPos,ZPos,IsMove) +{ + local anipath = sq_CreateAnimation("", AniRoute); + + local pooledobj = sq_CreatePooledObject(anipath, true); + pooledobj = sq_SetEnumDrawLayer(pooledobj, DrawLayer); + sq_SetCurrentDirection(pooledobj, obj.getDirection()); + pooledobj.setCurrentPos(XPos, YPos, ZPos); + if(IsMove){ + sq_moveWithParent(obj, pooledobj); + } + sq_AddObject(obj, pooledobj, OBJECTTYPE_DRAWONLY, false); + return pooledobj; +} + diff --git a/user/116.205.165.25/5_gunner_2.c b/user/116.205.165.25/5_gunner_2.c new file mode 100644 index 0000000..993ff24 --- /dev/null +++ b/user/116.205.165.25/5_gunner_2.c @@ -0,0 +1,3201 @@ + + +function setCustomData_po_nanjixie_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("skillIndex").clear_vector(); + obj.getVar("skillIndex").push_vector(skillIndex); + obj.getVar("subtype").clear_vector(); + obj.getVar("subtype").push_vector(subtype); + + switch(skillIndex){ + case 29: + local totalDamage = receiveData.readDword(); + obj.getVar("totalDamage").clear_vector(); + obj.getVar("totalDamage").push_vector(totalDamage); + switch(subtype){ + case 3: + local lifetime = receiveData.readDword(); + obj.getVar("lifetime").clear_vector(); + obj.getVar("lifetime").push_vector(lifetime); + local resttime = receiveData.readDword(); + obj.getVar("resttime").clear_vector(); + obj.getVar("resttime").push_vector(resttime); + local bullet_number = receiveData.readDword(); + obj.getVar("bullet_number").clear_vector(); + obj.getVar("bullet_number").push_vector(bullet_number); + local dsp_number = sqrChr.getVar("ExsS_OBJ").get_obj_vector_size(); + if(dsp_number > 0){ + sqrChr.getVar("ExsS_OBJ").push_obj_vector(obj); + } + else{ + sqrChr.getVar("ExsS_OBJ").clear_obj_vector(); + sqrChr.getVar("ExsS_OBJ").push_obj_vector(obj); + } + break; + case 4: + local lifetime = receiveData.readDword(); + obj.getVar("lifetime").clear_vector(); + obj.getVar("lifetime").push_vector(lifetime); + local resttime = receiveData.readDword(); + obj.getVar("resttime").clear_vector(); + obj.getVar("resttime").push_vector(resttime); + local bullet_number = receiveData.readDword(); + obj.getVar("bullet_number").clear_vector(); + obj.getVar("bullet_number").push_vector(bullet_number); + local dsp_number = sqrChr.getVar("Exs_OBJ").get_obj_vector_size(); + if(dsp_number > 0){ + sqrChr.getVar("Exs_OBJ").push_obj_vector(obj); + } + else{ + sqrChr.getVar("Exs_OBJ").clear_obj_vector(); + sqrChr.getVar("Exs_OBJ").push_obj_vector(obj); + } + break; + case 5: + local lifetime = receiveData.readDword(); + obj.getVar("lifetime").clear_vector(); + obj.getVar("lifetime").push_vector(lifetime); + local resttime = receiveData.readDword(); + obj.getVar("resttime").clear_vector(); + obj.getVar("resttime").push_vector(resttime); + local bullet_number = receiveData.readDword(); + obj.getVar("bullet_number").clear_vector(); + obj.getVar("bullet_number").push_vector(bullet_number); + local totalDamage2 = receiveData.readDword(); + obj.getVar("totalDamage2").clear_vector(); + obj.getVar("totalDamage2").push_vector(totalDamage2); + local dsp_number = sqrChr.getVar("ExsEx_OBJ").get_obj_vector_size(); + if(dsp_number > 0){ + sqrChr.getVar("ExsEx_OBJ").push_obj_vector(obj); + } + else{ + sqrChr.getVar("ExsEx_OBJ").clear_obj_vector(); + sqrChr.getVar("ExsEx_OBJ").push_obj_vector(obj); + } + break; + } + if(subtype == 3 || subtype == 4 || subtype == 5){ + obj.setMapFollowParent(obj.getParent()); + obj.setMapFollowType(1); + } + break; + case 59: + switch(subtype){ + case 1: + local XPos = receiveData.readDword(); + local YPos = receiveData.readDword(); + obj.getVar("basepos").clear_vector(); + obj.getVar("basepos").push_vector(XPos); + obj.getVar("basepos").push_vector(YPos); + break; + case 2: + local type = receiveData.readDword(); + obj.getVar("type").clear_vector(); + obj.getVar("type").push_vector(type); + break; + } + break; + case 63://风暴 + local totalDamage = receiveData.readDword(); + obj.getVar("totalDamage").clear_vector(); + obj.getVar("totalDamage").push_vector(totalDamage); + switch(subtype){ + case 1://子弹 + local angleX = receiveData.readDword(); + local angleZ = receiveData.readDword(); + obj.getVar("angle").clear_vector(); + obj.getVar("angle").push_vector(angleX); + obj.getVar("angle").push_vector(angleZ); + break; + case 2://导弹 + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(targetObj) + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3://更新子弹 + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitMax); + break; + } + break; + case SKILL_GUNNER_G1://G1 + switch(subtype){ + case 1: + sqrChr.getVar("G1_obj").clear_obj_vector(); + sqrChr.getVar("G1_obj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local stunTime = receiveData.readDword(); + local hitCoolTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, lifeTime); + obj.getVar("custom").setInt(12, stunTime); + obj.getVar("custom").setInt(13, hitCoolTime); + obj.getVar("custom").setInt(14, sizeRate); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + // print("hitCoolTime = "+hitCoolTime); + break; + case 2: + local totalDamage = receiveData.readDword(); + local stunTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, stunTime); + obj.getVar("custom").setInt(12, sizeRate); + break; + } + break; + case SKILL_GUNNER_G2://G2 + if(sqrChr.getVar("G2_obj").get_obj_vector_size() < 0) sqrChr.getVar("G2_obj").clear_obj_vector(); + sqrChr.getVar("G2_obj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local chargeTime = receiveData.readDword(); + local hitCoolTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, totalDamage2); + obj.getVar("custom").setInt(12, chargeTime); + obj.getVar("custom").setInt(13, hitCoolTime); + obj.getVar("custom").setInt(14, sub); + obj.getVar("custom").setInt(15, lifeTime); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + break; + case SKILL_GUNNER_G3://G3 + switch(subtype){ + case 1: + if(sqrChr.getVar("G3_obj").get_obj_vector_size() < 0) sqrChr.getVar("G3_obj").clear_obj_vector(); + sqrChr.getVar("G3_obj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitCoolTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitCoolTime); + obj.getVar("custom").setInt(12, sub); + obj.getVar("custom").setInt(13, lifeTime); + if(obj.getDirection() != ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + break; + case 2: + if(sqrChr.getVar("G3_att_obj").get_obj_vector_size() < 0) sqrChr.getVar("G3_att_obj").clear_obj_vector(); + sqrChr.getVar("G3_att_obj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitCoolTime = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, hitCoolTime); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + } + local sub = receiveData.readDword(); + local sub2 = receiveData.readDword(); + obj.getVar("custom").setInt(12, sub); + obj.getVar("custom").setInt(13, sub2); + break; + } + break; + case 83: + switch(subtype){ + case 1: + local vtr_number = sqrChr.getVar("SPAFACOBJ").get_obj_vector_size(); + if(vtr_number > 0){ + sqrChr.getVar("SPAFACOBJ").push_obj_vector(obj); + } + else{ + sqrChr.getVar("SPAFACOBJ").clear_obj_vector(); + sqrChr.getVar("SPAFACOBJ").push_obj_vector(obj); + } + break; + case 2: + local vtr_number = sqrChr.getVar("SPARROWOBJ").get_obj_vector_size(); + if(vtr_number > 0){ + sqrChr.getVar("SPARROWOBJ").push_obj_vector(obj); + } + else{ + sqrChr.getVar("SPARROWOBJ").clear_obj_vector(); + sqrChr.getVar("SPARROWOBJ").push_obj_vector(obj); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + obj.getVar("totalDamage").clear_vector(); + obj.getVar("totalDamage").push_vector(totalDamage); + break; + } + break; + case SKILL_GUNNER_VIRTUALRUSH: + switch(subtype){ + case 1: + local vtr_number = sqrChr.getVar("VIRTUALRUSH_SUB1").get_obj_vector_size(); + if(vtr_number > 0){ + sqrChr.getVar("VIRTUALRUSH_SUB1").push_obj_vector(obj); + } + else{ + sqrChr.getVar("VIRTUALRUSH_SUB1").clear_obj_vector(); + sqrChr.getVar("VIRTUALRUSH_SUB1").push_obj_vector(obj); + } + break; + case 2: + local vtr_number = sqrChr.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size(); + if(vtr_number > 0){ + sqrChr.getVar("VIRTUALRUSH_SUB2").push_obj_vector(obj); + } + else{ + sqrChr.getVar("VIRTUALRUSH_SUB2").clear_obj_vector(); + sqrChr.getVar("VIRTUALRUSH_SUB2").push_obj_vector(obj); + } + local totalDamage = receiveData.readDword(); + local skillIndex_sub1 = receiveData.readDword(); + local skillIndex_sub2 = receiveData.readDword(); + obj.getVar("skillIndex_sub1").clear_vector(); + obj.getVar("skillIndex_sub1").push_vector(skillIndex_sub1); + obj.getVar("skillIndex_sub2").clear_vector(); + obj.getVar("skillIndex_sub2").push_vector(skillIndex_sub2); + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + switch(subtype){ + case 1: + local range = receiveData.readDword(); + obj.getVar("range").clear_vector(); + obj.getVar("range").push_vector(range); + local parentObj = obj.getParent(); + sq_moveWithParent(parentObj, obj); + break; + } + break; + case SKILL_GUNNER_DIMENSIONRUNNER: + switch(subtype){ + case 1://T80本体 + local totalDamage = receiveData.readDword(); + local missile_number = receiveData.readDword(); + local missile_totalDamage = receiveData.readDword(); + obj.getVar("totalDamage").clear_vector(); + obj.getVar("totalDamage").push_vector(totalDamage); + obj.getVar("totalDamage").push_vector(missile_totalDamage); + obj.getVar("missile_number").clear_vector(); + obj.getVar("missile_number").push_vector(missile_number); + break; + case 2://导弹 + local totalDamage = receiveData.readDword(); + local angle = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(obj.getXPos()); + obj.getVar("custom").push_vector(obj.getYPos()); + obj.getVar("custom").push_vector(obj.getZPos()); + obj.getVar("custom").push_vector(sq_getRandom(250,500)); + obj.getVar("custom").push_vector(sq_getRandom(-20,20)); + obj.getVar("custom").push_vector(angle); + break; + } + break; + case SKILL_GUNNER_HELLMARCH: + switch(subtype){ + case 1://门 + case 2://门 + local totalDamage = receiveData.readDword(); + local time = receiveData.readDword(); + obj.setTimeEvent(0,time,1,false); + break; + case 3: + case 4: + case 5: + local totalDamage = receiveData.readDword(); + local moveX = receiveData.readDword(); + local number = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(obj.getXPos()); + obj.getVar("custom").push_vector(moveX); + if(subtype == 5){ + obj.getVar("custom").push_vector(number); + obj.setTimeEvent(3,2250 - 450 * number,1,false); + } + break; + case 6: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(totalDamage2); + break; + } + break; + case 200: + local sizeRate = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + obj.getVar("sizeRate").clear_vector(); + obj.getVar("sizeRate").push_vector(sizeRate); + obj.getVar("totalDamage").clear_vector(); + obj.getVar("totalDamage").push_vector(totalDamage); + //printp("sizeRate="+sizeRate.tostring()+" ,totalDamage="+totalDamage.tostring()+"\n"); + break; + case 201://12 + //设置ATK,百分比 + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/explosion/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + //大小 + local currentAni = obj.getCurrentAnimation();//得到当前ani + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻击框,x y z比率 + return; + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); +} + +function setState_po_nanjixie_bykk(obj, state, datas) +{ + if(!obj) return; + + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + //把state存入数组 + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(state); + + switch(skillIndex){ + case 29://毒蛇炮 + switch(subtype){ + case 1://子弹 + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exsviperbulletnormal.ani"); + obj.setCurrentAnimation(ani); + //设置PTL + obj.sq_SetMoveParticle("particle/exsviperbullet.ptl", 0.0, 0.0); + //Z轴放大攻击框 + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, 1.0, 1.0, 5.0);//攻击框,x y z比率 + currentAni.addLayerAnimation(-10,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exsviperbulletdodge.ani"),true); + // currentAni.addLayerAnimation(1000,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exsviperbullet.ani"),true);//增加层ani + currentAni.setRGBA(255, 255, 0, 255); + break; + } + break; + case 2://激光 + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exslaser/laserfire.ani"); + obj.setCurrentAnimation(ani); + //设置效果 + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, 1.0, 1.0, 2.0);//攻击框,x y z比率 + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exslaser/lasertile.ani"),true); + obj.setTimeEvent(0,70,3,true); + break; + } + break; + case 3://sophia毒蛇炮 + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_out.ani"); + obj.setCurrentAnimation(ani); + local lifetime = obj.getVar("lifetime").get_vector(0); + obj.setTimeEvent(1001,lifetime,1,false); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_body.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"monster/character/gunner/robot_by_kk/exssophia_ani/sophia_smoke.ani", 0, 1, 50); + local resttime = obj.getVar("resttime").get_vector(0); + if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,resttime,1,false); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_attack.ani"); + obj.setCurrentAnimation(ani); + local bullet_number = obj.getVar("bullet_number").get_vector(0); + local bullet_time = 1000 / bullet_number; + obj.setTimeEvent(1,bullet_time,bullet_number,true); + break; + case 23: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_on.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1002,250,1,false); + break; + case 24: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_on.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1003,250,1,false); + break; + case 25: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_out.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1004,200,1,false); + break; + } + break; + case 4://普通毒蛇炮 + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/body.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/cannonstand.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/bodyback.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/robot1.ani"),true); + local lifetime = obj.getVar("lifetime").get_vector(0); + obj.setTimeEvent(1001,lifetime,1,false); + if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,100,1,false); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/body.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/cannonstand.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/bodyback.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/robot1.ani"),true); + sq_AddDrawOnlyAniFromParent(obj,"monster/character/gunner/robot_by_kk/exssophia_ani/sophia_smoke.ani", 0, 1, 50); + local resttime = obj.getVar("resttime").get_vector(0); + if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,resttime,1,false); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/attack.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/bodyback.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/robot2.ani"),true); + local bullet_number = obj.getVar("bullet_number").get_vector(0); + local bullet_time = 1000 / bullet_number; + obj.setTimeEvent(1,bullet_time,bullet_number,true); + break; + } + break; + case 5://EX毒蛇炮 + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/body.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local lifetime = obj.getVar("lifetime").get_vector(0); + obj.setTimeEvent(1001,lifetime,1,false); + if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,100,1,false); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/body.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_AddDrawOnlyAniFromParent(obj,"monster/character/gunner/robot_by_kk/exssophia_ani/sophia_smoke.ani", 0, 1, 50); + local resttime = obj.getVar("resttime").get_vector(0); + if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,resttime,1,false); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/attack.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setLoop(true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/bodyback.ani"),true); + currentAni.addLayerAnimation(10003,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/robot2.ani"),true); + local bullet_number = obj.getVar("bullet_number").get_vector(0); + local bullet_time = 1000 / bullet_number; + obj.setTimeEvent(1,bullet_time,-1,true); + obj.setTimeEvent(2,300,-1,true); + break; + } + break; + } + break; + case 59://空投支援 + switch(subtype){ + case 1: + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/character/gunner/animation/mechadropappear.ani"); + obj.setCurrentAnimation(ani); + if(obj.getDirection() == ENUM_DIRECTION_LEFT){ + sq_SetVelocity(obj, 0, -400.0); + } + else{ + sq_SetVelocity(obj, 0, 400.0); + } + obj.setTimeEvent(0,200,1,false); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/character/gunner/animation/mechadropmove.ani"); + obj.setCurrentAnimation(ani); + if(obj.getDirection() == ENUM_DIRECTION_LEFT){ + sq_SetVelocity(obj, 0, -400.0); + } + else{ + sq_SetVelocity(obj, 0, 400.0); + } + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/character/gunner/animation/mechadropdisappear.ani"); + obj.setCurrentAnimation(ani); + if(obj.getDirection() == ENUM_DIRECTION_LEFT){ + sq_SetVelocity(obj, 0, -400.0); + } + else{ + sq_SetVelocity(obj, 0, 400.0); + } + break; + } + break; + case 2: + switch(state){ + case 20: + //设置ANI + local anipath = ""; + local type = obj.getVar("type").get_vector(0); + switch(type){ + case 1: + case 2: + anipath = "monster/character/gunner/robot_by_kk/healrx78_ani/drop.ani"; + break; + case 3: + anipath = "monster/character/gunner/robot_by_kk/headingrx78_ani/drop.ani"; + break; + case 4: + case 5: + anipath = "monster/character/gunner/robot_by_kk/firerx78_ani/drop.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + // + local currentAni = obj.getCurrentAnimation(); + switch(type){ + case 1: + case 2: + currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/healrx78_ani/dropeffect.ani"),true); + break; + case 3: + currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/headingrx78_ani/dropeffect.ani"),true); + break; + case 4: + case 5: + currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/firerx78_ani/dropeffect.ani"),true); + break; + } + obj.sq_SetMoveParticle("particle/mechadrop.ptl", 0.0, 0.0); + break; + case 21: + //设置ANI + local anipath = ""; + local type = obj.getVar("type").get_vector(0); + switch(type){ + case 1: + case 2: + anipath = "monster/character/gunner/robot_by_kk/healrx78_ani/land.ani"; + break; + case 3: + anipath = "monster/character/gunner/robot_by_kk/headingrx78_ani/land.ani"; + break; + case 4: + case 5: + anipath = "monster/character/gunner/robot_by_kk/firerx78_ani/land.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + // + local currentAni = obj.getCurrentAnimation(); + switch(type){ + case 1: + case 2: + currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/healrx78_ani/dropeffect.ani"),true); + break; + case 3: + currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/headingrx78_ani/dropeffect.ani"),true); + break; + case 4: + case 5: + currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/firerx78_ani/dropeffect.ani"),true); + break; + } + break; + } + break; + } + break; + case 63://暴风 + switch(subtype){ + case 1://子弹 + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/gunbullet.ani"); + obj.setCurrentAnimation(ani); + //设置PTL + local angleX = obj.getVar("angle").get_vector(0); + local angleZ = obj.getVar("angle").get_vector(1); + //printp("angleX="+angleX.tostring()+"angleZ="+angleZ.tostring()+"\n"); + //printp(sq_ToDegree(sq_Atan2(angleX.tofloat(),angleZ.tofloat())).tostring()+"\n"); + local angle = sq_ToDegree(sq_Atan2(angleX.tofloat(), angleZ.tofloat()));//sq_ToDegree(sq_Atan2(angleX.tofloat(), angleZ.tofloat())); + obj.sq_SetMoveParticle("particle/tempestergunbullet.ptl", 0.0, angle); + sq_SetCustomRotate(obj, sq_ToRadian(angle - 90).tofloat()); + break; + } + break; + case 2://导弹 + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = (obj.getVar("totalDamage").get_vector(0).tofloat() * 0.3).tointeger(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/missile.ani"); + obj.setCurrentAnimation(ani); + //设置PTL + local number = sq_getRandom(1,4); + obj.getVar().clear_vector(); + obj.getVar().push_vector(number); + local ptlPath = getMissilePtl_bykk(number); + obj.sq_SetMoveParticle(ptlPath, 0.0, 0.0); + //烟雾时钟 + obj.setTimeEvent(0,50,-1,true); + break; + case 21: + case 22: + obj.stopTimeEvent(0); + obj.sq_RemoveMoveParticle(); + //设置ATK,百分比 + local bonusrater = (obj.getVar("totalDamage").get_vector(0).tofloat() * 1.0).tointeger(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/expairdodge.ani"); + if(state == 22) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/explanddodge.ani"); + obj.setCurrentAnimation(ani); + //效果 + if(state == 21){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/tempester/expairnormal.ani",0,-1,-1); + } + else if(state == 22){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/tempester/explandnormal.ani",0,-1,-1); + } + //设置旋转 + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + break; + } + break; + case 3: + local totalDamage = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/dummy.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + obj.setTimeEvent(0, delaySum / (hitMax + 1),hitMax, true); + break; + } + break; + case SKILL_GUNNER_G1://G1 + switch(subtype){ + case 1: + switch(state){ + case 20://出现 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/joint.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/character/gunner/animation/g1/transformeffect.ani"),true); + break; + case 21://持续 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staynormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staydodge.ani"),true); + if(!obj.isExistTimeEvent(0)) obj.setTimeEvent(0, obj.getVar("custom").getInt(11), 1, false); + obj.setTimeEvent(10, obj.getVar("custom").getInt(13), 1, false); + break; + case 22://攻击 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staynormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, 180); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staydodge.ani"),true); + pAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/attack1.ani"),true); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/mechanic_bykk/animation/g1/firevolt/attack2.ani", 30, 1, 10); + sq_moveWithParent(obj, pooledObj2); + obj.setTimeEvent(1, 120, 1, false); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.setTimeEvent(2, 10, 12, true); + break; + case 23://消失 + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/disjoint.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/character/gunner/animation/g1/transformeffect.ani"),true); + break; + } + break; + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/bullet.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + obj.sq_SetMoveParticle("particle/g1.ptl", 0.0, 0.0); + break; + case 21: + case 22: + obj.sq_RemoveMoveParticle(); + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/expair.ani"); + if(state == 22) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/expland.ani"); + obj.setCurrentAnimation(ani); + local bonusrater = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + local hitDelayRate = obj.getVar("custom").getInt(11) / 50; + print("hitDelayRate = "+hitDelayRate); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAttackInfoHitDelayRateDamager(attackInfo, hitDelayRate.tofloat()); + local sizeRate = obj.getVar("custom").getInt(12); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + } + break; + case SKILL_GUNNER_G2://G2 + switch(state){ + case 20://开始 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/joint.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/effect.ani"),true); + obj.setTimeEvent(8,50,1,false); + break; + case 21://持续 + obj.stopTimeEvent(1); + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/staynormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/staydodge.ani"),true); + local chargeTime = obj.getVar("custom").getInt(12) * (1 + obj.getVar("custom").getInt(14)); + obj.setTimeEvent(0, chargeTime, 1, false); + local lifeTime = obj.getVar("custom").getInt(15); + if(!obj.isExistTimeEvent(3)) obj.setTimeEvent(3, lifeTime, 1, false); + break; + case 22://充能 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/staychargenormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/staychargedodge.ani"),true); + local bonusrater = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + obj.setTimeEvent(1, obj.getVar("custom").getInt(13), -1 ,false); + break; + case 23://充能攻击 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/attacknormal.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/attackdodge.ani"),true); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/spark.ani"),true); + local bonusrater = obj.getVar("custom").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + break; + case 24://结束 + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/disjoint.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/effect.ani"),true); + break; + } + break; + case SKILL_GUNNER_G3://G3 + switch(subtype){ + case 1: + switch(state){ + case 20://生成 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move1.ani"); + if(obj.getVar("custom").getInt(12) % 2 == 0) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move2.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0, 150, 1, false); + break; + case 21://移动 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move1.ani"); + if(obj.getVar("custom").getInt(12) % 2 == 0) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move2.ani"); + obj.setCurrentAnimation(ani); + break; + case 22://环绕 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/round.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + if(!obj.isExistTimeEvent(3)) obj.setTimeEvent(3, obj.getVar("custom").getInt(13), 1, false); + break; + case 23://攻击 + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/round.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 9, 999999); + pAni.setCurrentFrameWithChildLayer(9); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/firevolt/spark.ani"),true); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/firevolt/beam3.ani"),true); + + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("target").get_obj_vector(0)); + if(targetObj){ + local totalDamage = obj.getVar("custom").getInt(10); + local hitCoolTime = obj.getVar("custom").getInt(11); + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_G3);//skillIndex + sq_BinaryWriteDword(2);//subtype + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(hitCoolTime); + sq_BinaryWriteDword(group); + sq_BinaryWriteDword(uniqueId); + sq_BinaryWriteDword(obj.getVar("custom").getInt(12)); + sq_BinaryWriteDword(obj.getVar("custom").getInt(12) + 3); + sq_SendCreatePassiveObjectPacketPos(sqrChr, NUM_BYKK_PASSIVEOBJECT, 0, sq_GetXPos(targetObj), sq_GetYPos(targetObj), targetObj.getZPos() + sq_GetObjectHeight(targetObj) + 40 - 60); + } + break; + case 24://消失 + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/broken.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setLoop(false); + // local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G1); + // if(loadSlot){ + // sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G1); + // sqrChr.startSkillCoolTime(SKILL_GUNNER_G1, sq_GetSkillLevel(sqrChr), -1); + // } + local size2 = sqrChr.getVar("G3_att_obj").get_obj_vector_size(); + if(size2 > 0){ + for(local ui = 0; ui < size2; ui++){ + local G3_att_obj = sqrChr.getVar("G3_att_obj").get_obj_vector(ui); + if(G3_att_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_att_obj); + colObj.setValid(false); + } + } + } + break; + } + break; + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/firevolt/hit.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + local bonusrater = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + obj.setTimeEvent(100, obj.getVar("custom").getInt(11), -1, true); + break; + } + break; + } + break; + case 83://拦截机工厂 + switch(subtype){ + case 1://二觉后工厂 + switch(state){ + case 20://召唤效果 + //设置ANI + local anipath = "passiveobject/mechanic_bykk/animation/sparrowfactory/appearbody.ani"; + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_GUNNER_HS1); + if(skill_level > 0) anipath = "passiveobject/mechanic_bykk/animation/sparrowfactory/teleportsparrowfactorystart_00.ani"; + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + if(skill_level <= 0){ + //增加效果 + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/appeareffect.ani"),true); + } + //音效 + obj.sq_PlaySound("SPARROW_FACTORY"); + //设置跟随 + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + break; + case 21://持续效果 + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/body.ani"); + obj.setCurrentAnimation(ani); + //修改持续时间 + local currentAni = obj.getCurrentAnimation(); + local skill_level = sq_GetSkillLevel(sqrChr, 83); + local lifetime = sqrChr.sq_GetLevelData(83, 0, skill_level); + sq_SetFrameDelayTime(currentAni, 0, lifetime); + //增加效果 + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/effect.ani"),true); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/summoneffect1.ani", 0, 0, 0); + //判断是否为单HIT,否则召唤飞机 + local skill = sq_GetSkill(sqrChr, 98); + local skill_level02 = sq_GetSkillLevel(sqrChr, 98); + if(skill_level02 > 0){ + if(!skill.isSealFunction()){ + obj.setTimeEvent(3, 620, 1, false); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/solarlight01_02.ani", 0, 0, 0); + } + else{ + obj.setTimeEvent(0, 160, 1, false); + obj.setTimeEvent(2, 960, 1, false); + } + } + else{ + obj.setTimeEvent(0, 160, 1, false); + obj.setTimeEvent(2, 960, 1, false); + } + break; + } + break; + case 2://拦截机 + switch(state){ + case 20://起飞 + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/body1.ani"); + obj.setCurrentAnimation(ani); + //设置跟随 + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + break; + case 21://飞行 + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/sparrow_sparrow.ani"); + obj.setCurrentAnimation(ani); + break; + case 22://传送开始 + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/teleportsparrowstart_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 23://传送结束 + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/teleportsparrowend_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 24://发射 + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/body3.ani"); + obj.setCurrentAnimation(ani); + //增加效果 + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/sparrowmove3.ani"),true); + //音效 + obj.getVar().setBool(10,true); + break; + } + break; + case 3://模块单HIT + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/solarlight02_03.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_GUNNER_VIRTUALRUSH://全息机械猎手 + switch(subtype){ + case 1://光效 + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + //效果 + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramstartfront_00.ani", 0, -1, -1); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramstartbottom_00.ani", 0, -1, -1); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramstartback_00.ani", 0, -1, -1); + //LOOP时钟 + obj.setTimeEvent(0, 600, 1, false); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + //效果 + local pAni = obj.getCurrentAnimation(); + local ani1 = sq_CreateAnimation("","character/gunner/effect/animation/virtualrush/hologramloopfront_00.ani"); + local ani2 = sq_CreateAnimation("","character/gunner/effect/animation/virtualrush/hologramloopbottom_00.ani"); + local ani3 = sq_CreateAnimation("","character/gunner/effect/animation/virtualrush/hologramloopback_00.ani"); + pAni.addLayerAnimation(-10,ani1,true); + pAni.addLayerAnimation(-10,ani2,true); + pAni.addLayerAnimation(-10,ani3,true); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + //设置帧延时 + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, 100); + sq_SetFrameDelayTime(pAni, 1, 1000); + //效果 + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramendfront_00.ani", 0, -1, -1); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramendbottom_00.ani", 0, -1, -1); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramendback_00.ani", 0, -1, -1); + //爆炸时钟 + if(sqrChr.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size() > 0){ + obj.setTimeEvent(1, 650, 1, false); + } + break; + case 23: + //设置ATK,百分比 + local bonusrater = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_VIRTUALRUSH, STATE_GUNNER_VIRTUALRUSH, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/explosion/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + //设置帧延时 + local pAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(pAni, 4.0, 4.0, 4.0);//攻击框,x y z比率 + sq_SetFrameDelayTime(pAni, 0, 50); + sq_SetFrameDelayTime(pAni, 1, 50); + //效果 + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramboomfront_00.ani", 0, -1, -1); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramboombottom_00.ani", 0, -1, -1); + break; + + } + break; + case 2://召唤效果 + switch(state){ + case 20://普通开始 + //根据技能选择不同ANI地址 + local anipath; + local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0); + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramd1start_01.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramg1start_01.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramh1start_01.ani"; + break; + case 4: + anipath = "character/gunner/effect/animation/virtualrush/hologram/holograms1start_01.ani"; + break; + case 5: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramt1start_01.ani"; + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx60start_01.ani"; + break; + case 27: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx78start_01.ani"; + break; + case 28: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8start_01.ani"; + break; + case 59: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramhealrx78start_01.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78start_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramfirerx78start_01.ani"; + break; + } + break; + case 83: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowfactorystart_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowstart_01.ani"; + break; + } + break; + case 105: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8exstart_01.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + break; + case 21://普通过程 + //根据技能选择不同ANI地址 + local anipath; + local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0); + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramd1loop_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramg1loop_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramh1loop_00.ani"; + break; + case 4: + anipath = "character/gunner/effect/animation/virtualrush/hologram/holograms1loop_00.ani"; + break; + case 5: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramt1loop_00.ani"; + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx60loop_00.ani"; + break; + case 27: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx78loop_00.ani"; + break; + case 28: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8loop_00.ani"; + break; + case 59: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramhealrx78loop_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78loop_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramfirerx78loop_00.ani"; + break; + } + break; + case 83: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowfactoryloop_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowloop_00.ani"; + break; + } + break; + case 105: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8exloop_00.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + break; + case 22://普通结束 + //根据技能选择不同ANI地址 + local anipath; + local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0); + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramd1end_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramg1end_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramh1end_00.ani"; + break; + case 4: + anipath = "character/gunner/effect/animation/virtualrush/hologram/holograms1end_00.ani"; + break; + case 5: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramt1end_00.ani"; + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx60end_02.ani"; + break; + case 27: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx78end_02.ani"; + break; + case 28: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8end_02.ani"; + break; + case 59: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78end_02.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78start_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramfirerx78end_02.ani"; + break; + } + break; + case 83: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowfactoryend_02.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowend_02.ani"; + break; + } + break; + case 105: + anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8exend_02.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + break; + case 23://传送开始 + //根据技能选择不同ANI地址 + local anipath; + local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0); + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportd1start_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportg1start_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporth1start_00.ani"; + break; + case 4: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleports1start_00.ani"; + break; + case 5: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportt1start_00.ani"; + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx60start_00.ani"; + break; + case 27: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx78start_00.ani"; + break; + case 28: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8start_00.ani"; + break; + case 59: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporthealrx78start_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportheadingrx78start_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportfirerx78start_00.ani"; + break; + } + break; + case 83: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowfactorystart_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowstart_00.ani"; + break; + } + break; + case 105: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8exstart_00.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + // local pAni = obj.getCurrentAnimation();//得到ani + // local fireT = pAni.getDelaySum(false); + // printp("skillIndex_sub1="+skillIndex_sub1.tostring()+" skillIndex_sub2="+skillIndex_sub2.tostring()+" fireT="+fireT.tostring()+"\n"); + break; + case 24://传送结束 + //根据技能选择不同ANI地址 + local anipath; + local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0); + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportd1end_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportg1end_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporth1end_00.ani"; + break; + case 4: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleports1end_00.ani"; + break; + case 5: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportt1end_00.ani"; + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx60end_00.ani"; + break; + case 27: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx78end_00.ani"; + break; + case 28: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8end_00.ani"; + break; + case 59: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporthealrx78end_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportheadingrx78end_00.ani"; + break; + case 3: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportfirerx78end_00.ani"; + break; + } + break; + case 83: + switch(skillIndex_sub2){ + case 1: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowfactoryend_00.ani"; + break; + case 2: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowend_00.ani"; + break; + } + break; + case 105: + anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8exend_00.ani"; + break; + } + local ani = sq_CreateAnimation("", anipath); + obj.setCurrentAnimation(ani); + // + local aimPosX = sqrChr.getVar("virtualrush").get_vector(0); + local aimPosY = sqrChr.getVar("virtualrush").get_vector(1); + sq_setCurrentAxisPos(obj, 0, aimPosX); + sq_setCurrentAxisPos(obj, 1, aimPosY); + break; + } + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + switch(subtype){ + case 1: + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("","character/gunner/effect/animation/rx-60/rx-60_ground_a.ani"); + obj.setCurrentAnimation(ani); + //修改范围 + local range = 250; + local recive_range = obj.getVar("range").get_vector(0); + local sizeRate = recive_range.tofloat() / range; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + //设置ap + local parentObj = obj.getParent(); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_GUNNER_ROBOTRX60, false, "character/gunner/madeby_kak_mechanic/ap2/ap_virtualrush.nut", false); + + if(appendage){ + 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(250, 250, recive_range, 100);//300,300,150,100 + } + } + break; + } + break; + } + break; + case SKILL_GUNNER_DIMENSIONRUNNER://TN80 + switch(subtype){ + case 1://本体 + switch(state){ + case 20://出场 + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerready_body.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/dimensionrunner_a.ani",0,0,0); + obj.setTimeEvent(0,800,1,false); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/dimensionrunner_c.ani",0,0,0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + break; + case 21://导弹 + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfire_body.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("totalDamage").get_vector(1); + createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 60, 0, -50, 4, 134); + createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 60, 0, 65, 1, 126); + if(sq_getRandom(0,99) > 33) createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 30, 0, -16, 3, 153); + if(sq_getRandom(0,99) > 33) createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 30, 0, 25, 2, 157); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfirea_00.ani",0,-1,-1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfireb_00.ani",0,-1,-1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfirec_00.ani",0,-1,-1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfired_00.ani",0,-1,-1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_a.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_b.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_c.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_d.ani",0,0,0); + break; + case 22://是否抓人 + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnersuicideready_body.ani"); + obj.setCurrentAnimation(ani); + break; + case 23://抓人 + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnersuicide_body.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/suicidedust_00.ani",0,0,0); + break; + case 24://抓住 + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/suisideexplosiona_body.ani"); + obj.setCurrentAnimation(ani); + break; + case 25://爆炸 + //设置ATK,百分比 + local bonusrater = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/suisideexplosionb_04.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2,800,1,false); + break; + } + break; + case 2://导弹 + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/missile_01.ani"); + obj.setCurrentAnimation(ani); + local angle = obj.getVar("custom").get_vector(6).tofloat(); + sq_SetCustomRotate(obj, sq_ToRadian(-angle)); + // if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCustomRotate(obj, sq_ToRadian(45.0)); + obj.setTimeEvent(10,100,-1,false); + break; + case 21: + obj.stopTimeEvent(10); + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/missileexplosiontalisman_03.ani"); + obj.setCurrentAnimation(ani); + //设置ATK,百分比 + local bonusrater = obj.getVar("custom").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + break; + } + break; + } + break; + case SKILL_GUNNER_HELLMARCH: + switch(subtype){ + case 1: + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/front/gatestart_dot2.ani"); + obj.setCurrentAnimation(ani); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.addLayerAnimation(-1,sq_CreateAnimation("",""),true); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_electric02.ani",0,0,0); + obj.setTimeEvent(1,880,1,false); + obj.setTimeEvent(2,1000,1,false); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/front/gateloop_dot2.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/gunner/effect/animation/hellmarch/gate/gateground_03.ani"),true); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_attack.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_direct01.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_direct02.ani",0,0,0); + obj.setTimeEvent(9,150,1,false); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/front/gateend_dot2.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/back/gatestart_dot4.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/back/gateloop_dot4.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/back/gateend_dot4.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3://蓝色队长 + case 4://红色队长 + case 5://红色队长 + local anipath = "passiveobject/mechanic_bykk/animation/hellmarch/leaderblue/leader_"; + if(subtype == 4) anipath = "passiveobject/mechanic_bykk/animation/hellmarch/leaderred/leader_"; + if(subtype == 5) anipath = "passiveobject/mechanic_bykk/animation/hellmarch/soldier/soldier_"; + switch(state){ + case 20: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "appear_leftfootmove1.ani"); + obj.setCurrentAnimation(ani); + if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS"); + break; + case 21: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "appear_rightfootmove1.ani"); + obj.setCurrentAnimation(ani); + if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS"); + break; + case 22: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "leftfootmove.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath + "appear_leftfootmove1.ani",0,1,1); + sq_moveWithParent(obj, pooledObj); + if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS"); + break; + case 23: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "rightfootmove.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath + "appear_rightfootmove1.ani",0,1,1); + sq_moveWithParent(obj, pooledObj); + if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS"); + break; + case 24: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "leftfootmove.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 50); + sq_SetFrameDelayTime(currentAni, 1, 50); + if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS"); + break; + case 25: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "rightfootmove.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 50); + sq_SetFrameDelayTime(currentAni, 1, 50); + if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS"); + break; + case 26: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "sir.ani"); + obj.setCurrentAnimation(ani); + break; + case 27: + //设置ANI + local ani = sq_CreateAnimation("", anipath + "readytoexplosion.ani"); + obj.setCurrentAnimation(ani); + break; + case 28: + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/hellmarch/bombnew/explosion_04.ani"); + obj.setCurrentAnimation(ani); + if(subtype == 3 || subtype == 4){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom_dodge.ani"),true); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom01_dodge.ani"),true); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom02_dodge.ani"),true); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom03_dodge.ani"),true); + } + sq_setCurrentAxisPos(obj, 2, 75); + break; + } + if(subtype == 5){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(0.95, 0.95); + currentAni.setAutoLayerWorkAnimationAddSizeRate(0.95); + } + break; + case 6://攻击主体 + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = obj.getVar("custom").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/hellmarch/hellmarchdummyexplosion.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(21,450,3,false); + + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 3340); + break; + } + break; + } + break; + case 200: + switch(state){ + case 20: + //设置ATK,百分比 + local bonusrater = obj.getVar("totalDamage").get_vector(0); + //printp("bonusrater="+bonusrater.tostring()+"\n"); + if(subtype == 1){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + } + else if(subtype == 2){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/explosion/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + //大小 + local currentAni = obj.getCurrentAnimation();//得到当前ani + local sizeRate = obj.getVar("sizeRate").get_vector(0).tofloat() / 100; + sizeRate = sizeRate.tofloat(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻击框,x y z比率 + + // local attackInfo = sq_GetCurrentAttackInfo(obj); + // if (attackInfo){ + // attackInfo.setElement(ENUM_ELEMENT_WATER); + // attackInfo.setElement(ENUM_ELEMENT_LIGHT); + // attackInfo.setElement(ENUM_ELEMENT_FIRE); + // attackInfo.setElement(ENUM_ELEMENT_DARK); + // } + //声音 + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + //特效 + if(subtype == 1){ + obj.setTimeEvent(1, 200, 2, true); + obj.setTimeEvent(2, 50, 4, true); + obj.setTimeEvent(3, 15, 16, true); + obj.setTimeEvent(4, 100, 2, true); + } + else if(subtype == 2){ + obj.setTimeEvent(1, 100, 4, true); + obj.setTimeEvent(2, 25, 8, true); + obj.setTimeEvent(3, 7, 32, true); + obj.setTimeEvent(4, 50, 4, true); + } + break; + } + break; + case 250: + //设置ANI + local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,200,4,true); + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onTimeEvent_po_nanjixie_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 29: + switch(subtype){ + case 2: + switch(timeEventIndex){ + case 0: + switch(timeEventCount){ + case 1: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/exs/exslaser/lasersub1.ani", 0, 1, 1); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/exs/exslaser/lasersub2.ani", 0, 1, 1); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/exs/exslaser/lasersub3.ani", 0, 1, 1); + break; + } + break; + } + break; + case 3: + case 4: + case 5: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local bullet_number = obj.getVar("bullet_number").get_vector(0); + if(sqrChr.getVar("holdandgo").getBool(0)){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + if(subtype == 5){ + obj.stopTimeEvent(1); + obj.stopTimeEvent(2); + } + } + if(timeEventCount >= bullet_number && subtype != 5) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + local speedRate = (bullet_number.tofloat() * 180.0 / 1000.0) * 100.0; + local anipath1 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_cannonattack.ani"; + local anipath2 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_cannonattackglow.ani"; + local anipath3 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_attackglow.ani"; + local anipath4 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_shoot.ani"; + if(subtype == 4){ + anipath1 = "monster/character/gunner/robot_by_kk/exs_ani/cannonattack.ani"; + anipath2 = "monster/character/gunner/robot_by_kk/exs_ani/cannonattackglow.ani"; + anipath3 = "monster/character/gunner/robot_by_kk/exs_ani/attackglow.ani"; + anipath4 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_shoot.ani"; + } + else if(subtype == 5){ + anipath1 = "monster/character/gunner/robot_by_kk/exsex_ani/cannonattack.ani"; + anipath2 = "monster/character/gunner/robot_by_kk/exsex_ani/cannonattackglow.ani"; + anipath3 = "monster/character/gunner/robot_by_kk/exsex_ani/attackglow.ani"; + anipath4 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_shoot.ani"; + } + local pooledObj1 = sq_AddDrawOnlyAniFromParent(obj, anipath1, 0, -1, -1); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, anipath2, 0, 1, 1); + local pooledObj3 = sq_AddDrawOnlyAniFromParent(obj, anipath3, 0, 1, 1); + local pooledObj4 = sq_AddDrawOnlyAniFromParent(obj, anipath4, 50, 1, 74); + local pAni1 = pooledObj1.getCurrentAnimation(); + local pAni2 = pooledObj2.getCurrentAnimation(); + local pAni3 = pooledObj3.getCurrentAnimation(); + local pAni4 = pooledObj3.getCurrentAnimation(); + pAni1.setSpeedRate(speedRate.tofloat()); + pAni2.setSpeedRate(speedRate.tofloat()); + pAni3.setSpeedRate(speedRate.tofloat()); + pAni4.setSpeedRate(speedRate.tofloat()); + local totalDamage = obj.getVar("totalDamage").get_vector(0); + createSkillPassiveObj_nanjixie(sqrChr, obj, 29, 1, totalDamage, 0, 0, 88, 0, 70); + obj.sq_PlaySound("P_VIPER_SHOT_02"); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_body_light.ani", 0, 2, 52); + sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_laser_attack_front.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_laser_attack_back.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_laser_attack_flash.ani", 30, 1, 66); + local totalDamage2 = obj.getVar("totalDamage2").get_vector(0); + createSkillPassiveObj_nanjixie(sqrChr, obj, 29, 2, totalDamage2, 0, 0, 50, 1, 66); + break; + case 1001: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + local sizeRate = 150; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 29, 29, 2, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,obj,sizeRate,totalDamage, 20, false); + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/exs_robotboom.ptl", obj, 0, 1, 20, true, 30, 0, 1); + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/exs_boom.ptl", obj, 0, 1, 20, true, 30, 0, 1); + sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/exs_bullet.ptl", obj, 0, 1, 20, true, 30, 0, 1); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1002: + local moveX = obj.getVar("move").get_vector(0); + local moveY = obj.getVar("move").get_vector(1); + sq_setCurrentAxisPos(obj, 0, moveX);//设置当前x坐标 + sq_setCurrentAxisPos(obj, 1, moveY);//设置当前y坐标 + sq_SetCurrentDirection(obj, sqrChr.getDirection()); + break; + case 1003: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(obj, 0, moveX);//设置当前x坐标 + sq_setCurrentAxisPos(obj, 1, moveY);//设置当前y坐标 + sq_SetCurrentDirection(obj, sqrChr.getDirection()); + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1004: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 59: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: + local skill_level = sq_GetSkillLevel(sqrChr, 59); + local number = sqrChr.sq_GetLevelData(59, 3, skill_level); + obj.getVar().clear_vector(); + obj.getVar().push_vector(number); + local sperobot_number = sqrChr.sq_GetLevelData(59, 4, skill_level); + obj.getVar("sperobot").clear_vector(); + for(local io = 0; io < sperobot_number; io ++){ + local numberlen = (number / sperobot_number).tointeger(); + local random_number = sq_getRandom(0 + io * numberlen, (io + 1) * numberlen - 1); + obj.getVar("sperobot").push_vector(random_number); + } + obj.setTimeEvent(1, 5, number,true); + break; + case 1: + local basexpos = obj.getVar("basepos").get_vector(0); + local baseypos = obj.getVar("basepos").get_vector(1); + local number = obj.getVar().get_vector(0); + local level = sq_GetSkillLevel(sqrChr, 174); + local distanceX = 50; + if(number >= 30) distanceX = 40; + if(number >= 50) distanceX = 30; + local rebotnumer = 77634; + timeEventCount = timeEventCount - 1; + for(local ui = 0; ui < obj.getVar("sperobot").size_vector(); ui++){ + if(timeEventCount == obj.getVar("sperobot").get_vector(ui)){ + rebotnumer = sq_getRandom(77631,77633).tointeger(); + break; + } + } + local destX_01 = 0; + local destY_01 = baseypos - sqrChr.getYPos(); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT){ + destX_01 = basexpos - sqrChr.getXPos(); + } + else if(obj.getDirection() == ENUM_DIRECTION_LEFT){ + destX_01 = sqrChr.getXPos() - basexpos; + } + if(timeEventCount % 3 == 1){ + //createSkillPassiveObj_nanjixie(sqrChr,obj,59,2,rebotnumer,0,0,-400+sq_getRandom(-5,5),0 - 40 + sq_getRandom(-8,8),400); + summonmonster_mechanic(sqrChr, destX_01 + (timeEventCount/3).tointeger()*distanceX + sq_getRandom(-5,5), destY_01 - 40 + sq_getRandom(-8,8), 600, 0, rebotnumer, 600000, level, 0); + } + else if(timeEventCount % 3 == 2){ + //createSkillPassiveObj_nanjixie(sqrChr,obj,59,2,rebotnumer,0,0,-400+sq_getRandom(-5,5),0 + sq_getRandom(-8,8),400); + summonmonster_mechanic(sqrChr, destX_01 + (timeEventCount/3).tointeger()*distanceX + sq_getRandom(-5,5), destY_01 + sq_getRandom(-8,8), 600, 0, rebotnumer, 600000, level, 0); + } + else if(timeEventCount % 3 == 0){ + //createSkillPassiveObj_nanjixie(sqrChr,obj,59,2,rebotnumer,0,0,-400+sq_getRandom(-5,5),0 + 40 + sq_getRandom(-8,8),400); + summonmonster_mechanic(sqrChr, destX_01 + (timeEventCount/3).tointeger()*distanceX + sq_getRandom(-5,5), destY_01 + 40 + sq_getRandom(-8,8), 600, 0, rebotnumer, 600000, level, 0); + } + break; + } + break; + } + break; + case 63: + switch(subtype){ + case 2: + switch(timeEventIndex){ + case 0: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/tempester/missilesmoke"+sq_getRandom(1,3)+".ani", 0, -1, -1); + break; + } + break; + case 3: + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + } + break; + } + break; + case SKILL_GUNNER_G1://G1 + switch(timeEventIndex){ + case 0: obj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break; + case 1: + local totalDamage = obj.getVar("custom").getInt(10); + local stunTime = obj.getVar("custom").getInt(12); + local sizeRate = obj.getVar("custom").getInt(14); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_G1);//skillIndex + sq_BinaryWriteDword(2);//subtype + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(stunTime); + sq_BinaryWriteDword(sizeRate); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, 30, 0, 10, obj.getDirection()); + obj.sq_PlaySound("G1_SHOT"); + break; + case 2: + local vx = sq_GetUniformVelocity(0, -12, timeEventCount, 12); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + case 10: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 100://判斷距離 + local base_X = -75; + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 60); + local direction = sqrChr.getDirection(); + if(obj.getDirection() != direction) obj.setDirection(direction); + if(disX > 10){ + local baseM = 30; + local moveX = disX / baseM + 2; + if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 10){ + local baseM = 30; + local moveY = disY / baseM + 1; + if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disZ > 5){ + local baseM = 30; + local moveZ = disZ / baseM + 1; + if(sq_GetZPos(obj) - 60 > sq_GetZPos(sqrChr)) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) - moveZ); + else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + moveZ); + } + if(disX <= 10 && disY <= 10 && disZ <= 5){ + obj.stopTimeEvent(100); + obj.setTimeEvent(101,300,-1,false); + } + break; + case 101://移動 + local base_X = -75; + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 60); + if(disX > 10 || disY > 10 || disZ > 5){ + obj.stopTimeEvent(101); + obj.setTimeEvent(100,15,-1,false); + } + break; + } + break; + case SKILL_GUNNER_G2://G2 + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2: + obj.setTimeEvent(10,5,-1,false); + break; + case 3: + obj.sq_PlaySound("G2_CHARGE"); + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 8: + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 50)); + obj.setTimeEvent(9, 5, 30, true); + break; + case 9: + local v = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(11), timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, v); + if(timeEventCount >= 30) obj.setTimeEvent(10,5,-1,false); + break; + case 10: + if(timeEventCount % 30 == 0) obj.sq_PlaySound("G2_LOOP"); + local time = timeEventCount * 5; + local hitCoolTime = obj.getVar("custom").getInt(13); + local sub = obj.getVar("custom").getInt(14); + local roundTime = hitCoolTime * 1; + local direction = sqrChr.getDirection(); + if(obj.getDirection() != direction) obj.setDirection(direction); + + local base100Angle = 36000 / 3 * (sub + 1); + local baseY = sqrChr.getYPos(); + local baseZ = sqrChr.getZPos() + 75; + local current100Angle = (base100Angle + (36000 * time / roundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + local disMovLen = 35 * sq_CosTable(angle.tointeger()); + if(direction == ENUM_DIRECTION_LEFT) disMovLen = -disMovLen; + local upMovLen = 50 * sq_SinTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), disMovLen.tointeger() + 60); + local mov_z = baseZ + upMovLen.tointeger(); + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, baseY + 1); + sq_setCurrentAxisPos(obj, 2, mov_z); + break; + } + break; + case SKILL_GUNNER_G3://G3 + switch(timeEventIndex){ + case 0: + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetYPos(obj)); + obj.getVar("move").setInt(12, sq_GetZPos(obj)); + obj.getVar("move").setInt(13, sq_GetXPos(sqrChr)); + obj.getVar("move").setInt(14, sq_GetYPos(sqrChr)); + obj.getVar("move").setInt(15, sq_GetZPos(sqrChr) + sq_GetObjectHeight(sqrChr) + 60); + obj.setTimeEvent(1, 5, 30, true); + break; + case 1: + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(13), timeEventCount, 30); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), obj.getVar("move").getInt(14), timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), obj.getVar("move").getInt(15), timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30){ + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(sqrChr); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 20, -1, true); + } + break; + case 3: + obj.removeAllTimeEvent(); + obj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + break; + case 10: + if(state != 22) break; + if(timeEventCount % 10 == 0) obj.sq_PlaySound("G3_LOOP"); + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("target").get_obj_vector(0)); + local pAni = obj.getCurrentAnimation(); + local currentT = (timeEventCount - 1) * 20; + local defaultRoundTime = 1800; + local base100Angle = 36000 / 6 * (obj.getVar("custom").getInt(12) + 0); + local baseX = sq_GetXPos(targetObj); + local baseY = sq_GetYPos(targetObj) + local current100Angle = (base100Angle + (36000 * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + if(angle >= 345 && angle < 15 && sq_GetAnimationFrameIndex(pAni) != 0){pAni.setCurrentFrameWithChildLayer(0);} + if(angle >= 15 && angle < 45 && sq_GetAnimationFrameIndex(pAni) != 1){pAni.setCurrentFrameWithChildLayer(1);} + if(angle >= 45 && angle < 75 && sq_GetAnimationFrameIndex(pAni) != 2){pAni.setCurrentFrameWithChildLayer(2);} + if(angle >= 75 && angle < 105 && sq_GetAnimationFrameIndex(pAni) != 3){pAni.setCurrentFrameWithChildLayer(3);} + if(angle >= 105 && angle < 135 && sq_GetAnimationFrameIndex(pAni) != 4){pAni.setCurrentFrameWithChildLayer(4);} + if(angle >= 135 && angle < 165 && sq_GetAnimationFrameIndex(pAni) != 5){pAni.setCurrentFrameWithChildLayer(5);} + if(angle >= 165 && angle < 195 && sq_GetAnimationFrameIndex(pAni) != 6){pAni.setCurrentFrameWithChildLayer(6);} + if(angle >= 195 && angle < 225 && sq_GetAnimationFrameIndex(pAni) != 7){pAni.setCurrentFrameWithChildLayer(7);} + if(angle >= 225 && angle < 255 && sq_GetAnimationFrameIndex(pAni) != 8){pAni.setCurrentFrameWithChildLayer(8);} + if(angle >= 255 && angle < 285 && sq_GetAnimationFrameIndex(pAni) != 9){pAni.setCurrentFrameWithChildLayer(9);} + if(angle >= 285 && angle < 315 && sq_GetAnimationFrameIndex(pAni) != 10){pAni.setCurrentFrameWithChildLayer(10);} + if(angle >= 315 && angle < 345 && sq_GetAnimationFrameIndex(pAni) != 11){pAni.setCurrentFrameWithChildLayer(11);} + + local disMovLen = 80 * sq_CosTable(angle.tointeger()); + local upMovLen = 40 * sq_SinTable(angle.tointeger()); + + local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_RIGHT, disMovLen.tointeger()); + local mov_y = baseY + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 2, targetObj.getZPos() + sq_GetObjectHeight(targetObj) + 40); + // print("mov_x = "+mov_x+",,mov_y = "+mov_y); + break; + case 11: + obj.setTimeEvent(13, 20, -1, true); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 12: + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(13), timeEventCount, 30); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), obj.getVar("move").getInt(14), timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), obj.getVar("move").getInt(15), timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 13: + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("target").get_obj_vector(0)); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) + 60); + } + else{ + obj.stopTimeEvent(13); + if(obj.getState() != 24) obj.addSetStatePacket(20, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + break; + case 100: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.sq_PlaySound("G3_SHOT_LOOP"); + sq_SendHitObjectPacket(obj,targetObj, 0, 0, targetObj.getZPos() + sq_GetObjectHeight(targetObj) + 40 - 60); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case 83: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: + local number = sqrChr.sq_GetIntData(83, 2); + obj.setTimeEvent(1, 250, number, false); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/sparrowcreate.ani", -10, 0, 40); + createSkillPassiveObj_nanjixie(sqrChr,obj,83,2,0,0,0,0,0,30); + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1001, sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/summoneffect1_loop.ani"), true); + break; + case 3: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 6, 1.0) + 100; + // print("totalDamage = "+totalDamage); + createSkillPassiveObj_nanjixie(sqrChr,obj,83,3,totalDamage,0,0,0,0,0); + obj.setTimeEvent(4, 1000, 1, false); + obj.setTimeEvent(5, 320, 1, false); + break; + case 4: + local sizeRate = sqrChr.sq_GetIntData(83, 7); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,obj,sizeRate,totalDamage, 0, false); + sq_CreateParticle("passiveobject/character/gunner/particle/sparrowfactorydestroy.ptl", obj, 0, 1, 0, true, 30, 0, 1); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/solarlight02_11.ani", 0, 1, 101); + break; + } + break; + } + break; + case SKILL_GUNNER_VIRTUALRUSH: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + sqrChr.getVar("virtualrush").setBool(0,false); + sqrChr.getVar("VIRTUALRUSH_SUB1").clear_obj_vector(); + if(sq_GetIntData(sqrChr, SKILL_GUNNER_VIRTUALRUSH, 20) > 0){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_GUNNER_DIMENSIONRUNNER: + switch(timeEventIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/targetarea.ani",100,0,0); + break; + case 1: + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/last/dimensionrunnerfinishhand.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/last/dimensionrunnerfinishhandeff_hand_dodge.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/last/dimensionrunnerfinishhandeff_ground_normal.ani",0,-1,-1); + break; + case 10: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilesmoke_00.ani",0,-1,-1); + break; + } + break; + case SKILL_GUNNER_HELLMARCH: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + sq_SetMyShake(obj,2,1000); + break; + case 2: + sq_flashScreen(obj,0,0,160,178, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 9: + local direction = obj.getDirection(); + if(direction == ENUM_DIRECTION_RIGHT) createSkillPassiveObj_hellmarch_bykk(obj,3,0,300,0,20,-75,0,direction); + else createSkillPassiveObj_hellmarch_bykk(obj,4,0,300,0,20,-75,0,direction); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_HELLMARCH, SKILL_GUNNER_HELLMARCH, 2, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_HELLMARCH, SKILL_GUNNER_HELLMARCH, 3, 1.0) + 100; + if(sqrChr.getVar("hellmarch").getBool(0)){ + sqrChr.getVar("hellmarch").setBool(0, false); + createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_HELLMARCH, 6, totalDamage, totalDamage2, 0, 0, 0, 0); + } + obj.setTimeEvent(10,450,3,false); + break; + case 10: + local direction = obj.getDirection(); + for(local i = 0; i < 6; i++){ + createSkillPassiveObj_hellmarch_bykk(obj,5,0,300 - 100 * timeEventCount,timeEventCount,100 - 35 * i,-155 + 30 * i,0,direction); + } + break; + case 20: + obj.resetHitObjectList(); + break; + case 21: + obj.setTimeEvent(20,10,3,false); + break; + } + break; + case 200: + local sizeRate = obj.getVar("sizeRate").get_vector(0).tofloat() / 100; + sizeRate = sizeRate.tofloat(); + switch(timeEventIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 2: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + case 250: + if(timeEventIndex == 0){ + switch(timeEventCount){ + case 1: + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(0); + sqrChr.sq_IntVectPush(0); + sqrChr.sq_IntVectPush(75); + sqrChr.sq_IntVectPush(100); + sqrChr.sq_IntVectPush(450); + sqrChr.sq_IntVectPush(0); + sqrChr.sq_IntVectPush(4); + sqrChr.sq_IntVectPush(0); + sqrChr.sq_AddSetStatePacket(13, STATE_PRIORITY_USER, true); + break; + case 2: + local posX = sqrChr.getXPos() + 125; + sq_SendCreatePassiveObjectPacketPos(sqrChr,20011, sq_GetSkillLevel(sqrChr, 25) ,posX,sqrChr.getYPos(), 0); + break; + case 3: + local posX = sqrChr.getXPos() + 125; + sq_SendCreatePassiveObjectPacketPos(sqrChr,20013, sq_GetSkillLevel(sqrChr, 41) ,posX,sqrChr.getYPos(), 0); + break; + case 4: + local posX = sqrChr.getXPos() + 125; + sq_SendCreatePassiveObjectPacketPos(sqrChr,20012, sq_GetSkillLevel(sqrChr, 36) ,posX,sqrChr.getYPos(), 0); + break; + + } + } + break; + } + +} + +function onAttack_po_nanjixie_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 63: + switch(subtype){ + case 1: + switch(state){ + case 20: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + case 22: + //sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_GUNNER_G1://G1 + switch(subtype){ + case 2: + if(isStuck) break; + if(state != 20) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + break; + } + break; + case SKILL_GUNNER_G2://G2 + break; + case SKILL_GUNNER_G3://G3 + break; + case SKILL_GUNNER_DIMENSIONRUNNER: + break; + case SKILL_GUNNER_HELLMARCH: + break; + } +} + +function onEndCurrentAni_po_nanjixie_bykk(obj) +{ + if(!obj) return; + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + + + switch(skillIndex){ + case 29: + switch(subtype){ + case 3: + switch(state){ + case 20: + if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 23: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 25: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 59: + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 21: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + } + break; + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 21: + break; + } + break; + } + break; + case 63: + switch(subtype){ + case 2: + switch(state){ + case 20: + return; + break; + } + break; + } + break; + case SKILL_GUNNER_G1://G1 + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.setTimeEvent(100,15,-1,false); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G1); + if(loadSlot){ + sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G1); + //sqrChr.startSkillCoolTime(SKILL_GUNNER_G1, sq_GetSkillLevel(sqrChr), -1); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + return; + break; + } + break; + case SKILL_GUNNER_G2://G2 + switch(state){ + case 20: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G2); + if(loadSlot){ + sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G2); + // sqrChr.startSkillCoolTime(SKILL_GUNNER_G3, sq_GetSkillLevel(sqrChr), -1); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + return; + break; + case SKILL_GUNNER_G3://G3 + switch(subtype){ + case 1: + switch(state){ + case 24: + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G3); + if(loadSlot){ + sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G3); + // sqrChr.startSkillCoolTime(SKILL_GUNNER_G3, sq_GetSkillLevel(sqrChr), -1); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + return; + break; + case 83: + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 21: + local sizeRate = sqrChr.sq_GetIntData(83, 7); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr,obj,sizeRate,totalDamage, 0, false); + sq_CreateParticle("passiveobject/character/gunner/particle/sparrowfactorydestroy.ptl", obj, 0, 1, 0, true, 30, 0, 1); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 22: + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 24: + local sizeRate = sq_GetIntData(sqrChr, 83, 11); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_GUNNER_VIRTUALRUSH: + switch(subtype){ + case 1: + switch(state){ + case 21: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 22: + sqrChr.getVar("virtualrush").setBool(0,false); + sqrChr.getVar("VIRTUALRUSH_SUB1").clear_obj_vector(); + break; + case 23: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 22: + case 24: + local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0); + local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0); + local skill_level = sq_GetSkillLevel(sqrChr,skillIndex_sub1); + // local pAni = obj.getCurrentAnimation();//得到ani + // local currentT = sq_GetCurrentTime(pAni);//当前时间 + local sizeRate; + local totalDamage; + switch(skillIndex_sub1){ + case SKILL_GUNNER_ATEAM: + switch(skillIndex_sub2){ + case 1: + sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,6); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 4, 1.0) + 100; + break; + case 2: + sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,7); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 5, 1.0) + 100; + break; + case 3: + sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,8); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 6, 1.0) + 100; + break; + case 4: + sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,9); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 3, 1.0) + 100; + break; + case 5: + sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,10); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 2, 1.0) + 100; + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ROBOTRX60, 1); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ROBOTRX60, 29, 1, 1.0) + 100; + break; + case 27: + sizeRate = sq_GetIntData(sqrChr, 27, 1); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100; + break; + case 28: + sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100; + break; + case 59: + sizeRate = sq_GetIntData(sqrChr, 59, 14); + switch(skillIndex_sub2){ + case 1: + case 2: + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + sq_GetBonusRateWithPassive(sqrChr, 59, -1, 19, 1.0) + 200; + break; + case 3: + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 9, 1.0) + sq_GetBonusRateWithPassive(sqrChr, 59, -1, 19, 1.0) + 200; + break; + } + break; + case 83: + sizeRate = sq_GetIntData(sqrChr, 83, 11); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + break; + case 105: + sizeRate = sqrChr.sq_GetLevelData(105, 3, skill_level); + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 105, 29, 1, 1.0) + 100; + break; + } + if(state == 22){ + createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, 50, false); + } + break; + case 23: + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + } + break; + } + break; + case SKILL_GUNNER_DIMENSIONRUNNER: + switch(subtype){ + case 1: + switch(state){ + case 20: + case 22: + case 24: + if(state == 22){ + local boss_number = 0; + local nameed_number = 0; + local targetObj; + local objectManager = sqrChr.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + boss_number = boss_number + 1; + targetObj = activeObj; + break; + } + else if(sq_IsNamed(activeObj)){ + nameed_number = nameed_number + 1; + targetObj = activeObj; + break; + } + } + } + if(boss_number <= 0 || nameed_number <= 0){ + targetObj = sq_FindTarget(sqrChr, 0, 1500, 500, 500); + } + if(!targetObj){ + obj.setTimeEvent(1,1000,1,false); + return; + } + else{ + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + } + } + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + case 21: + local missile_number = obj.getVar("missile_number").get_vector(0); + if(missile_number - 1 > 0){ + obj.getVar("missile_number").set_vector(0,missile_number - 1); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + else{ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + } + break; + } + break; + case SKILL_GUNNER_HELLMARCH: + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + } + break; + case 3: + case 4: + case 5: + switch(state){ + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + return; + break; + } + break; + } + break; + } + sq_SendDestroyPacketPassiveObject(obj); + +} + +function onKeyFrameFlag_po_nanjixie_bykk(obj, flagIndex) +{ + if(!obj) return false; + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case SKILL_GUNNER_G1://G1 + break; + case SKILL_GUNNER_G2://G2 + break; + case SKILL_GUNNER_G3://G3 + break; + case 83: + switch(subtype){ + case 2: + switch(flagIndex){ + case 1: + local moveX = sqrChr.getVar("robotsexplosion").get_vector(0); + local moveY = sqrChr.getVar("robotsexplosion").get_vector(1); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 1, moveY); + sq_setCurrentAxisPos(obj, 2, 0); + sq_SetCurrentDirection(obj, sqrChr.getDirection()); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + // local sizeRate = sq_GetIntData(sqrChr, 83, 11); + // local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + // createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1001: + local randomX = sq_getRandom(-300,300); + local randomY = sq_getRandom(-60,60); + obj.getVar().clear_vector(); + obj.getVar().push_vector(randomX); + obj.getVar().push_vector(randomY); + sq_SetVelocity(obj, 0, randomX.tofloat()); + sq_SetVelocity(obj, 1, randomY.tofloat()); + break; + case 1002: + local randomX = obj.getVar().get_vector(0); + local randomY = obj.getVar().get_vector(1); + sq_SetVelocity(obj, 0, -randomX.tofloat()); + sq_SetVelocity(obj, 1, -randomY.tofloat()); + break; + } + break; + } + break; + case SKILL_GUNNER_DIMENSIONRUNNER: + break; + case SKILL_GUNNER_HELLMARCH: + if(subtype == 6 && flagIndex == 1){ + //设置ATK,百分比 + local bonusrater = obj.getVar("custom").get_vector(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater); + local count = sqrChr.sq_GetBonusRateWithPassive(SKILL_GUNNER_HELLMARCH, SKILL_GUNNER_HELLMARCH, 5, 1.0) + 100; + obj.setTimeEvent(20,100,count - 1,false); + } + break; + } + return true; +} + +function procAppend_po_nanjixie_bykk(obj) +{ + if(!obj) return; + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 29: + switch(subtype){ + case 3: + case 4: + case 5: + switch(state){ + case 20: + if(sqrChr.getVar("holdandgo").getBool(0) == false && subtype == 5){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + case 21: + if(sqrChr.getVar("holdandgo").getBool(0) == false){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + } + break; + } + if(sqrChr.getState() == STATE_DIE) { + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 59: + switch(subtype){ + case 2: + if(obj.getZPos() <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0,true); + local level = sq_GetSkillLevel(sqrChr, 174); + local destX_01 = 0; + local destY_01 = obj.getYPos() - sqrChr.getYPos(); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT){ + destX_01 = obj.getXPos() - sqrChr.getXPos(); + } + else if(obj.getDirection() == ENUM_DIRECTION_LEFT){ + destX_01 = sqrChr.getXPos() - obj.getXPos(); + } + local type = obj.getVar("type").get_vector(0); + switch(type){ + case 1: + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77631,600000,level,0); + break; + case 2: + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77632,600000,level,0); + break; + case 3: + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77633,600000,level,0); + break; + case 4: + case 5: + summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77634,600000,level,0); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case 63: + switch(subtype){ + case 1: + switch(state){ + case 20: + if(obj.getZPos() <= 0){ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case 2: + switch(state){ + case 20: + local currentT = sq_GetObjectTime(obj); + local object = obj.getVar("targetObj").get_obj_vector(0); + local fireT = 8000; + if(object){ + if(sq_GetDistanceObject(obj, object, false) < 5){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + local X1 = sq_GetUniformVelocity(obj.getXPos(), object.getXPos(), currentT, fireT); + local Y1 = sq_GetUniformVelocity(obj.getYPos(), object.getYPos(), currentT, fireT); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + local angle = sq_GetUniformVelocity(45, -45, currentT, 500); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + } + if(obj.getZPos() <= 0){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_GUNNER_G1://G1 + switch(subtype){ + case 2: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_GUNNER_G2://G2 + // switch(state){ + // case 21: + // case 22: + // case 23: + // break; + // } + break; + case SKILL_GUNNER_G3://G3 + break; + case 83: + switch(subtype){ + case 2: + switch(state){ + case 20: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(false);//总时间 + local vz = sq_GetUniformVelocity(30, 120, currentT, fireT); + sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 + break; + case 21: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local skill_level = sq_GetSkillLevel(sqrChr, 83); + local lifetime = sqrChr.sq_GetLevelData(83, 0, skill_level); + local target_range = sqrChr.sq_GetLevelData(83, 0, skill_level); + if(currentT >= lifetime){ + local targetObj = sq_FindTarget(sqrChr, -target_range, target_range, target_range, target_range); + if(targetObj){ + local distance = sq_GetDistance(obj.getXPos(), obj.getYPos(), targetObj.getXPos(), targetObj.getYPos(), true); + if(distance <= target_range){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + } + } + break; + case 24: + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("tar").get_obj_vector(0)); + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(false);//总时间 + local skill_level = sq_GetSkillLevel(sqrChr, 83); + local target_range = sqrChr.sq_GetLevelData(83, 0, skill_level); + if(!targetObj){ + targetObj = sq_GetCNRDObjectToActiveObject(sq_FindTarget(sqrChr, -target_range, target_range, target_range, target_range)); + } + if(targetObj){ + if(obj.getVar().getBool(10) == true){ + obj.sq_PlaySound("R_SPARROW_SUICIDE"); + obj.getVar().setBool(10,false); + } + if(sq_GetDistanceObject(obj, targetObj, false) < 10){ + local sizeRate = sq_GetIntData(sqrChr, 83, 7); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true); + sq_SendDestroyPacketPassiveObject(obj); + } + local X1 = sq_GetUniformVelocity(obj.getXPos(), targetObj.getXPos(), currentT, fireT); + local Y1 = sq_GetUniformVelocity(obj.getYPos(), targetObj.getYPos(), currentT, fireT); + local Z1 = sq_GetUniformVelocity(120, 0, currentT, fireT); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + sq_setCurrentAxisPos(obj, 2, Z1); + } + else{ + local sizeRate = sq_GetIntData(sqrChr, 83, 11); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100; + createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + } + break; + case SKILL_GUNNER_VIRTUALRUSH: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + switch(subtype){ + case 1: + switch(state){ + case 21: + break; + } + break; + case 2: + switch(state){ + case 21: + if(sqrChr.getVar("VIRTUALRUSH_SUB1").get_obj_vector_size() <= 0){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + } + break; + } + break; + case SKILL_GUNNER_ROBOTRX60: + switch(subtype){ + case 1: + local parentObj = obj.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/mechanic_bykk/ap2/ap_virtualrush.nut"); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_GUNNER_DIMENSIONRUNNER: + switch(subtype){ + case 1: + switch(state){ + case 23: + local time = sq_GetObjectTime(obj); + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); + if(targetObj){ + if(sq_GetDistanceObject(obj, targetObj, false) < 10){ + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 1000;//pAni.getDelaySum(0,3); + local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, false); + local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, false); + if(sqrChr.isMovablePos(X1, Y1)){ + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + } + else{ + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + } + if((obj.getXPos() > targetObj.getXPos() && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (obj.getXPos() < targetObj.getXPos() && obj.getDirection() == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + } + else obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 2: + switch(state){ + case 20: + local time = sq_GetObjectTime(obj); + local fireT = 1200; + local srcX = obj.getVar("custom").get_vector(1); + local srcY = obj.getVar("custom").get_vector(2); + local srcZ = obj.getVar("custom").get_vector(3); + local MoveX = obj.getVar("custom").get_vector(4); + local MoveY = obj.getVar("custom").get_vector(5); + local angle1 = obj.getVar("custom").get_vector(6); + local vx = sq_GetUniformVelocity(0, MoveX, time, fireT) + local vy = sq_GetUniformVelocity(0, MoveY, time, fireT); + local vz = 0; + if(time <= 400) vz = sq_GetUniformVelocity(0, 100, time, fireT); + else vz = sq_GetUniformVelocity(0, srcZ + 100, time - 400, fireT) * -1; + local angle = sq_GetAccel(-angle1, -135, time, fireT * 80 / 100, true); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, srcY + vy); + sq_setCurrentAxisPos(obj, 2, srcZ + vz); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + if(obj.getZPos() <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_GUNNER_HELLMARCH: + switch(subtype){ + case 3: + case 4: + case 5: + local time = sq_GetObjectTime(obj); + local fireT = 2150; + if(subtype == 5){ + local number = obj.getVar("custom").get_vector(2); + fireT = 2100 - 450 * number; + } + local srcX = obj.getVar("custom").get_vector(0); + local MoveX = obj.getVar("custom").get_vector(1); + local vx = sq_GetUniformVelocity(0, MoveX, time, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + if(time <= fireT) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } + break; + } + + if(obj.getZPos() >= 1000){ + local parentObj = obj.getParent(); + local pChr = obj.getTopCharacter(); + local id = parentObj.getCollisionObjectIndex(); + if(!id || !pChr) return; + if(pChr.isMyControlObject()) { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(id); + sq_BinaryWriteDword(sq_GetGroup(parentObj)); + sq_BinaryWriteDword(sq_GetUniqueId(parentObj)); + sq_SendChangeSkillEffectPacket(pChr, SKILL_GUNNER_HS1); + sq_SendDestroyPacketPassiveObject(obj); + } + sq_SendDestroyPacketPassiveObject(obj); + } +} + diff --git a/user/116.205.165.25/5_gunner_3.c b/user/116.205.165.25/5_gunner_3.c new file mode 100644 index 0000000..8630a6d --- /dev/null +++ b/user/116.205.165.25/5_gunner_3.c @@ -0,0 +1,1970 @@ + +function getMissilePtl_bykk(number) +{ + local ptlPath; + switch(number){ + case 1: + ptlPath = "particle/tempestermissile1.ptl"; + break; + case 2: + ptlPath = "particle/tempestermissile2.ptl"; + break; + case 3: + ptlPath = "particle/tempestermissile3.ptl"; + break; + case 4: + ptlPath = "particle/tempestermissile4.ptl"; + break; + } + return ptlPath; +} + +function checkExecutableSkill_RobotRX78_bykk(obj) +{ + if(!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 27).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-240,240); + local offsetY = sq_getRandom(-30,60); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,27,1,offsetX,offsetY,0); + if(sq_GetSkillLevel(obj, 42) > 0) createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,27,1,offsetX,offsetY - 30,0); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + //obj.startSkillCoolTime(27, sq_GetSkillLevel(obj, 27), -1); + obj.sq_PlaySound("GN_LADNRUNNER"); + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + local b_useskill = obj.sq_IsUseSkill(27); + if(b_useskill){ + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,27); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(27); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + return true; + } + + return false; +} + +function checkExecutableSkill_RobotEz8_bykk(obj) +{ + if(!obj) return false; + local skill = sq_GetSkill(obj, SKILL_GUNNER_HOLDANDGO); + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 28).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-240,240); + local offsetY = sq_getRandom(-30,60); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,28,1,offsetX,offsetY,0); + if(sq_GetLevelData(obj, 28, 6, sq_GetSkillLevel(obj, 28)) > 0) createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,28,1,offsetX + 5,offsetY - 5,0); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + //obj.startSkillCoolTime(28, sq_GetSkillLevel(obj, 28), -1); + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.sq_PlaySound("R_GN_COUNTDOWN"); + return true; + } + local b_useskill = obj.sq_IsUseSkill(28); + if(b_useskill){ + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,28); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(28); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + return true; + } + + return false; +} + +function checkExecutableSkill_RobotExs_bykk(obj) +{ + if (!obj){ + return false; + } + local size = obj.getVar("ExsS_OBJ").get_obj_vector_size(); + local maxnum = obj.sq_GetIntData(29,6); + // printp("size="+size.tostring()+", maxnum="+maxnum.tostring()+"\n"); + // if(size > 0){ + // obj.sq_PlaySound("GN_SOPHIA_SYNC"); + // local size = obj.getVar("ExsS_OBJ").get_obj_vector_size(); + // for(local i = 0; i < size; i++){ + // local activeObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("ExsS_OBJ").get_obj_vector(i)); + // if(activeObj){ + // for(local ui = 0; ui < 10; ui++){ + // local moveX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 150) + sq_getRandom(-50,60); + // local moveY = obj.getYPos() + sq_getRandom(-30,30); + // if(obj.isMovablePos(moveX, moveY)){ + // activeObj.getVar("move").clear_vector(); + // activeObj.getVar("move").push_vector(moveX); + // activeObj.getVar("move").push_vector(moveY); + // activeObj.addSetStatePacket(23, null, STATE_PRIORITY_FORCE, false, ""); + // break; + // } + // } + // } + // } + // } + if(size >= maxnum){ + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + local b_useskill = obj.sq_IsUseSkill(29); + if(b_useskill){ + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,29); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(29); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + return true; + } + + return false; +} + +function checkExecutableSkill_RobotExsEx_bykk(obj) +{ + if (!obj) return false; + local b_useskill = obj.sq_IsUseSkill(106); + if(b_useskill){ + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,106); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(106); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + return true; + } + return false; +} + +function checkExecutableSkill_RobotEz8Ex_bykk(obj) +{ + if(!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 105).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-240,240); + local offsetY = sq_getRandom(-30,60); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,105,1,offsetX,offsetY,0); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + //obj.startSkillCoolTime(28, sq_GetSkillLevel(obj, 28), -1); + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.sq_PlaySound("R_GN_COUNTDOWN"); + return true; + } + local b_useskill = obj.sq_IsUseSkill(105); + if(b_useskill){ + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,105); + } + } + return true; + } + + return false; +} + +function checkExecutableSkill_RobotTempester_bykk(obj) +{ + if (!obj) return false; + local number = obj.getVar("TEMPObj").get_obj_vector_size(); + local numberMax = sq_GetLevelData(obj, 63, 6, sq_GetSkillLevel(obj, 63)); + if(number >= numberMax){ + local state = obj.getState(); + if(state == 0 || state == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + // local skillnumber = sq_GetBonusRateWithPassive(obj, 63, 63, 6, 1.0) + 100; + if(number > 0 && sq_GetSkillLevel(obj, SKILL_GUNNER_VIRTUALRUSH) > 0 && sq_GetLevelData(obj, 63, 7, sq_GetSkillLevel(obj, 63)) > 0 && !sq_GetSkill(obj, 63).isInCoolTime()){ + obj.startSkillCoolTime(63, sq_GetSkillLevel(obj, 63), -1); + for(local i = 0; i < number; i++){ + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("TEMPObj").get_obj_vector(i)); + if(activeObj){ + local apdPath = "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester_buff.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); + local buffTime = sq_GetLevelData(obj, 63, 8, sq_GetSkillLevel(obj, 63)); + sq_EffectLayerAppendage(activeObj,sq_RGB(250,20,10),150,0,0,buffTime); + // AddAppendage.sq_AddEffectBack("character/mage/effect/animation/avatar/avatarauraloopbot_eff_01.ani");//背后 + // AddAppendage.sq_AddEffectFront("character/mage/effect/animation/avatar/avatarauralooptop_eff_01.ani");//身前 + AddAppendage.sq_SetValidTime(buffTime); + local normalAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester.nut"); + local totalDamage = normalAppendage.getVar("custom").get_vector(5); + local totalDamage2 = normalAppendage.getVar("custom").get_vector(6); + normalAppendage.getVar("custom").set_vector(5, totalDamage * 150 / 100); + normalAppendage.getVar("custom").set_vector(6, totalDamage2 * 150 / 100); + local t_01 = normalAppendage.getVar("skill_1").get_timer_vector(0); + local t_02 = normalAppendage.getVar("skill_2").get_timer_vector(0); + local bullet = t_01.getEventTerm(); + local missile = t_02.getEventTerm(); + print(bullet); + print(missile); + t_01.setEventTerm(bullet / 2); + t_02.setEventTerm(missile / 2); + + local moveX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 50); + local moveY = obj.getYPos(); + if(activeObj.isMovablePos(moveX, moveY)){ + activeObj.getVar("move").clear_vector(); + activeObj.getVar("move").push_vector(moveX); + activeObj.getVar("move").push_vector(moveY); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(activeObj, 8, pIntVec, STATE_PRIORITY_USER); + obj.sq_PlaySound("GN_TRMPESTER"); + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } + } + return true; + } + local b_useskill = obj.sq_IsUseSkill(63); + if(b_useskill){ + local chr = sq_GetMyMasterCharacter(); + if(!isSameObject(obj, chr)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(63); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,63); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(63); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + return true; + } + + return false; +} + +function checkExecutableSkill_MechaDrop_bykk(obj) +{ + if(!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 59).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-50,50); + local offsetY = sq_getRandom(-40,40); + local skill_level = sq_GetSkillLevel(obj, 59); + local number = obj.sq_GetLevelData(59, 3, skill_level); + local distanceX = 50; + if(number >= 30) distanceX = 40; + if(number >= 50) distanceX = 30; + local sperobot_number = obj.sq_GetLevelData(59, 4, skill_level); + obj.getVar("sperobot").clear_vector(); + for(local io = 0; io < sperobot_number; io ++){ + local numberlen = (number / sperobot_number).tointeger(); + local random_number = sq_getRandom(0 + io * numberlen, (io + 1) * numberlen - 1); + obj.getVar("sperobot").push_vector(random_number); + } + for(local i = 1; i < number + 1; i++){ + local rebotnumer = 3; + for(local ui = 0; ui < obj.getVar("sperobot").size_vector(); ui++){ + if((i - 1) == obj.getVar("sperobot").get_vector(ui)){ + rebotnumer = sq_getRandom(1,2).tointeger(); + break; + } + } + //printp("i="+i.tostring()+",,"+((i/3).tointeger()*24).tostring()+"\n"); + if(i % 3 == 1){ + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,59,rebotnumer,offsetX-150+(i/3).tointeger()*distanceX+sq_getRandom(-5,5),offsetY - 40 + sq_getRandom(-8,8),0); + } + else if(i % 3 == 2){ + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,59,rebotnumer,offsetX-150+(i/3).tointeger()*distanceX+sq_getRandom(-5,5),offsetY + sq_getRandom(-8,8),0); + } + else if(i % 3 == 0){ + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,59,rebotnumer,offsetX-175+(i/3).tointeger()*distanceX+sq_getRandom(-5,5),offsetY + 40 + sq_getRandom(-8,8),0); + } + } + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + //obj.startSkillCoolTime(59, sq_GetSkillLevel(obj, 59), -1); + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.sq_PlaySound("DROPSHIP_PASSING"); + obj.sq_PlaySound("DROPSHIP_RADIO_01"); + return true; + } + local b_useskill = obj.sq_IsUseSkill(59); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkExecutableSkill_SparrowFactory_bykk(obj) +{ + if(!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 83).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-50,50); + local offsetY = sq_getRandom(-30,60); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,83,1,offsetX,offsetY,0); + local number = obj.sq_GetIntData(83, 2); + for(local i = 0; i < number; i++){ + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,83,2,offsetX+sq_getRandom(-100,100),offsetY+sq_getRandom(-20,20),120); + } + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + //obj.startSkillCoolTime(83, sq_GetSkillLevel(obj, 83), -1); + if(obj.getState() == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(obj.getState() == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.sq_PlaySound("GN_SPARROW_FACTORY"); + return true; + } + local b_useskill = obj.sq_IsUseSkill(83); + if(b_useskill){ + if(sq_getGrowType(obj) == 3){ + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,83); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_IntVectPush(83); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + return true; + } + + return false; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_robotsexplosion_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_ROBOTSEXPLOSION); + if (isUse) + { + obj.sq_IsEnterSkillLastKeyUnits(SKILL_GUNNER_ROBOTSEXPLOSION); + obj.sq_AddSetStatePacket(SKILL_GUNNER_ROBOTSEXPLOSION, STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + +function onSetState_robotsexplosion_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTSEXPLOSION);//技能等级 + local castTime = sq_GetCastTime(obj, SKILL_GUNNER_ROBOTSEXPLOSION, skill_level) / 3;//得到技能里面的施放时间 + sq_StartDrawCastGauge(obj, castTime, true); + obj.getVar("robotsexplosion").setBool(0,true); +} + +function onEndCurrentAni_robotsexplosion_bykk(obj) +{ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function onProcCon_robotsexplosion_bykk(obj) +{ + if(!obj) return; + local stateTime = obj.sq_GetStateTimer(); + local bDownKey = obj.isDownSkillLastKey(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTSEXPLOSION); + local size = obj.sq_GetLevelData(SKILL_GUNNER_ROBOTSEXPLOSION, 0, skill_level) / 2; + local sizeRate = size.tofloat() / 210; + + if(!bDownKey && stateTime < 250 && obj.getVar("robotsexplosion").getBool(0) == true){ + for(local i =1; i < 4; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/robotsexplosion"+i.tostring()+".ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + obj.getVar("robotsexplosion").setBool(0,false); + obj.getVar("robotsexplosion").clear_vector(); + obj.setTimeEvent(0, 350 - stateTime, 1, false); + if(obj.getVar("virtualrush").getBool(0) == true){ + sendrobotstate_byKK(obj,3); + local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0)); + local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1)); + if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){ + hs1_obj01.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, ""); + } + else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){ + hs1_obj02.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_PlaySound("GN_VIRTUALRUSH_02"); + } + else{ + sendrobotstate_byKK(obj,1); + obj.sq_PlaySound("GN_FIRE"); + } + } + else if((!bDownKey && stateTime >= 250 && obj.getVar("robotsexplosion").getBool(0) == true) || (bDownKey && stateTime >= 1200 && obj.getVar("robotsexplosion").getBool(0) == true)){ + for(local i =1; i < 4; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/robotsexplosion"+i.tostring()+".ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + local aimPosX = obj.sq_GetAimPosX(posX, posY, false); + local aimPosY = obj.sq_GetAimPosY(posX, posY, false); + // printp("aimPosX="+aimPosX.tostring()+" aimPosY="+aimPosY.tostring()+"\n"); + obj.getVar("robotsexplosion").clear_vector(); + obj.getVar("robotsexplosion").push_vector(aimPosX); + obj.getVar("robotsexplosion").push_vector(aimPosY); + obj.getVar("robotsexplosion").setBool(0,false); + obj.setTimeEvent(0, 100, 1, false); + if(obj.getVar("virtualrush").getBool(0) == true){ + sendrobotstate_byKK(obj,5); + local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0)); + local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1)); + if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){ + hs1_obj01.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, ""); + } + else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){ + hs1_obj02.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_PlaySound("GN_VIRTUALRUSH_02"); + } + else{ + sendrobotstate_byKK(obj,2); + obj.sq_PlaySound("GN_FALLDOWN"); + } + } +} + +function onKeyFrameFlag_robotsexplosion_bykk(obj, flagIndex) +{ + if(!obj) return false; + if(flagIndex == 1){ + // + if(obj.getVar("robotsexplosion").getBool(0) == true){ + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local offsetX = 130; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = 800; + local vY = 300; + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + } + } + return true; +} + +function onTimeEvent_robotsexplosion_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + + switch(timeEventIndex){ + case 0: + obj.sq_RemoveAimPointMark(); + if(obj.getVar("virtualrush").getBool(0) == true){ + createPointFireExplosion_byKK(obj,3); + obj.getVar("VIRTUALRUSH_SUB1").clear_obj_vector(); + obj.getVar("VIRTUALRUSH_SUB2").clear_obj_vector(); + obj.getVar("virtualrush").setBool(0,false); + } + else{ + createPointFireExplosion_byKK(obj,1); + } + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_robotsexplosion_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_GUNNER_ROBOTSEXPLOSION){ + obj.sq_RemoveAimPointMark(); + } +} +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_robotrx60_bykk(obj) +{ + if (!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, SKILL_GUNNER_ROBOTRX60).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-150,150); + local offsetY = sq_getRandom(-30,30); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ROBOTRX60,1,offsetX,offsetY,0); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + obj.startSkillCoolTime(SKILL_GUNNER_ROBOTRX60, sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTRX60), -1); + obj.sq_PlaySound("GN_LADNRUNNER"); + return true; + } + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_ROBOTRX60); + if (isUse) + { + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,SKILL_GUNNER_ROBOTRX60); + } + else{ + obj.sq_AddSetStatePacket(STATE_GUNNER_ROBOTRX60, STATE_PRIORITY_USER, false); + } + return true; + } + + return false; +} + +function onSetState_robotrx60_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_SETROBOT); + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTRX60); + local level = obj.sq_GetLevelData(SKILL_GUNNER_ROBOTRX60, 0, skill_level); + summonmonster_mechanic(obj,100,0,0,0,77630,600000,level,0); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_ateam_bykk(obj) +{ + if (!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, SKILL_GUNNER_ATEAM).isInCoolTime()){ + local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0)); + local offsetX = sq_getRandom(-150,150); + local offsetY = sq_getRandom(-30,30); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,1,offsetX,offsetY-25,0); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,2,offsetX,offsetY+25,0); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,3,offsetX+60,offsetY-1,0); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,4,offsetX-50,offsetY-50,0); + createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,5,offsetX-50,offsetY+50,0); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1); + obj.startSkillCoolTime(SKILL_GUNNER_ATEAM, sq_GetSkillLevel(obj, SKILL_GUNNER_ATEAM), -1); + obj.sq_PlaySound("GN_LADNRUNNER"); + return true; + } + + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_ATEAM); + if (isUse) + { + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1); + if(skill_level > 0){ + sendSkillPacket_hs1(obj,SKILL_GUNNER_ATEAM); + } + else{ + obj.sq_AddSetStatePacket(STATE_GUNNER_ATEAM, STATE_PRIORITY_USER, false); + } + return true; + } + + return false; +} + +function onSetState_ateam_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_SETROBOT); + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ATEAM); + local level = obj.sq_GetLevelData(SKILL_GUNNER_ATEAM, 0, skill_level); + summonmonster_mechanic(obj,150, -25, 0, 0, 77625, 600000, level, 0); + summonmonster_mechanic(obj,150, 25, 0, 0, 77626, 600000, level, 0); + summonmonster_mechanic(obj,210, 0, 0, 0, 77627, 600000, level, 0); + summonmonster_mechanic(obj,100, -50, 0, 0, 77628, 600000, level, 0); + summonmonster_mechanic(obj,100, 50, 0, 0, 77629, 600000, level, 0); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_virtualrush_bykk(obj) +{ + if (!obj) return false; + if(obj.getVar("virtualrush").getBool(0) == true){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_GUNNER_VIRTUALRUSH); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true); + return true; + } + + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_VIRTUALRUSH); + if (isUse){ + sendSkillPacket_hs1(obj,SKILL_GUNNER_VIRTUALRUSH); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true); + return true; + } + + return false; +} + +function onSetState_virtualrush_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 1: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_BODY); + obj.sq_PlaySound("GN_VIRTUALRUSH_01"); + obj.getVar("virtualrush").setBool(0,true); + break; + case 2: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_EXPLOSION1); + obj.sq_PlaySound("GN_VIRTUALRUSH_02"); + obj.getVar("virtualrush").setBool(1,true); + break; + case 3: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_EXPLOSION2); + //obj.sq_PlaySound("GN_VIRTUALRUSH_03"); + local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0)); + local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1)); + if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){ + hs1_obj01.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, ""); + } + else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){ + hs1_obj02.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 4://空投支援 + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 0); + local speedRate = delaySum.tofloat() / 90.0; + local castTime = (1000.0 * speedRate).tointeger(); + sq_StartDrawCastGauge(obj, 100, true); + obj.setTimeEvent(1, castTime, 1, false); + obj.setTimeEvent(2, 100, 1, false); + obj.sq_PlaySound("DROPSHIP_PASSING"); + obj.sq_PlaySound("DROPSHIP_RADIO_01"); + break; + case 5://拦截机工厂 + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_SETROBOT); + sq_StartDrawCastGauge(obj, 100, true); + local skillIndex = sq_GetVectorData(datas, 1); + switch(skillIndex){ + case 83: + sq_BinaryStartWrite(); + sq_BinaryWriteDword(83);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 150, 0, 0, obj.getDirection()); + obj.sq_PlaySound("GN_SPARROW_FACTORY"); + break; + case 29: + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local bonusrate = sq_GetBonusRateWithPassive(obj, skillIndex, 29, 1, 1.0) + 100; + local lifetime = obj.sq_GetLevelData(skillIndex, 3, skill_level); + local resttime = obj.sq_GetIntData(skillIndex, 2); + local bullet_number = obj.sq_GetIntData(skillIndex, 1); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(29);//skillIndex + sq_BinaryWriteDword(4);//subtype + sq_BinaryWriteDword(bonusrate); + sq_BinaryWriteDword(lifetime); + sq_BinaryWriteDword(resttime); + sq_BinaryWriteDword(bullet_number); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, 0, 0, obj.getDirection()); + obj.sq_PlaySound("GN_VIPER"); + break; + case 106: + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local bonusrate = sq_GetBonusRateWithPassive(obj, skillIndex, -1, 1, 1.0) + 100; + local bonusrate2 = sq_GetBonusRateWithPassive(obj, skillIndex, -1, 4, 1.0) + 100; + local lifetime = obj.sq_GetLevelData(skillIndex, 3, skill_level); + local resttime = obj.sq_GetIntData(skillIndex, 2); + local bullet_number = obj.sq_GetIntData(skillIndex, 1); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(29);//skillIndex + sq_BinaryWriteDword(5);//subtype + sq_BinaryWriteDword(bonusrate); + sq_BinaryWriteDword(lifetime); + sq_BinaryWriteDword(resttime); + sq_BinaryWriteDword(bullet_number); + sq_BinaryWriteDword(bonusrate2); + if(sq_GetLevelData(obj, skillIndex, 8, skill_level) > 0){ + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, -5, 0, obj.getDirection()); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, 5, 0, obj.getDirection()); + } + else sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, 0, 0, obj.getDirection()); + obj.sq_PlaySound("GN_VIPER"); + break; + case 28: + local skill_level = sq_GetSkillLevel(obj, 28); + local level = obj.sq_GetLevelData(28, 0, skill_level); + summonmonster_mechanic(obj, 50, 0, 0, 0, 77621, 600000, level, 0); + if(sq_GetLevelData(obj, 28, 6, skill_level) > 0) summonmonster_mechanic(obj, 55, 0, -5, 0, 77621, 600000, level, 0); + obj.sq_PlaySound("R_GN_COUNTDOWN"); + break; + case 27: + local skill_level = sq_GetSkillLevel(obj, 27); + local level = obj.sq_GetLevelData(27, 0, skill_level); + local skill_level02 = sq_GetSkillLevel(obj, 42); + if(skill_level02 > 0){ + summonmonster_mechanic(obj, 50, -10, 0, 0, 77620, 600000, level, 0); + summonmonster_mechanic(obj, 50, 20, 0, 0, 77620, 600000, level, 0); + } + else{ + summonmonster_mechanic(obj, 50, 0, 0, 0, 77620, 600000, level, 0); + } + obj.sq_PlaySound("GN_LADNRUNNER"); + break; + case 63: + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local level = obj.sq_GetLevelData(skillIndex, 0, skill_level); + local number = obj.sq_GetLevelData(skillIndex, 6, skill_level); + local time = obj.sq_GetLevelData(skillIndex, 5, skill_level); + for(local i = 0; i < number; i++){ + summonmonster_mechanic(obj,100 + i * 30,0,150,0,77623,time,level,0);//GN_TRMPESTER 60018 + } + obj.sq_PlaySound("GN_TRMPESTER"); + break; + } + break; + } +} + +function onEndCurrentAni_virtualrush_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true); + break; + case 3: + // for(local i = 0; i < obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector_size(); i++){ + // local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(i)); + // effect_obj.setValid(false); + // } + obj.getVar("VIRTUALRUSH_SUB1").clear_obj_vector(); + obj.getVar("VIRTUALRUSH_SUB2").clear_obj_vector(); + obj.getVar("virtualrush").setBool(0,false); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 5: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } + +} + +function onProcCon_virtualrush_bykk(obj) +{ + if(!obj) return; + local stateTime = obj.sq_GetStateTimer(); + local substate = obj.getSkillSubState(); + local bDownKey = obj.isDownSkillLastKey(); + switch(substate){ + case 2: + if(!bDownKey && stateTime < 250 && obj.getVar("virtualrush").getBool(1) == true){ + obj.getVar("virtualrush").setBool(1,false); + obj.getVar("virtualrush").clear_vector(); + obj.setTimeEvent(0, 350 - stateTime, 1, false); + sendrobotstate_byKK(obj,3); + } + else if((!bDownKey && stateTime >= 250 && obj.getVar("virtualrush").getBool(1) == true) || (bDownKey && stateTime >= 1200 && obj.getVar("virtualrush").getBool(1) == true)){ + local aimPosX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false); + local aimPosY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false); + // printp("aimPosX="+aimPosX.tostring()+" aimPosY="+aimPosY.tostring()+"\n"); + obj.getVar("virtualrush").clear_vector(); + obj.getVar("virtualrush").push_vector(aimPosX); + obj.getVar("virtualrush").push_vector(aimPosY); + obj.getVar("virtualrush").setBool(1,false); + obj.setTimeEvent(0, 200, 1, false); + sendrobotstate_byKK(obj,4); + local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0)); + local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1)); + if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){ + sq_setCurrentAxisPos(hs1_obj01, 0, aimPosX); + sq_setCurrentAxisPos(hs1_obj01, 1, aimPosY); + } + else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){ + sq_setCurrentAxisPos(hs1_obj02, 0, aimPosX); + sq_setCurrentAxisPos(hs1_obj02, 1, aimPosY); + } + } + break; + } + + +} + +function onKeyFrameFlag_virtualrush_bykk(obj, flagIndex) +{ + if(!obj) return false; + if(flagIndex == 1){ + if(obj.getVar("virtualrush").getBool(1) == true){ + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + local offsetX = 130; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = 800; + local vY = 300; + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + } + } + return true; +} + +function onTimeEvent_virtualrush_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + + switch(timeEventIndex){ + case 0: + createPointFireExplosion_byKK(obj,2); + obj.sq_RemoveAimPointMark(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 2: + local baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), -150); + if(!obj.isMovablePos(baseX, obj.getYPos())) baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), -100); + if(!obj.isMovablePos(baseX, obj.getYPos())) baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), -50); + if(!obj.isMovablePos(baseX, obj.getYPos())) baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 0); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(59);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_BinaryWriteDword(baseX);//subtype + sq_BinaryWriteDword(obj.getYPos());//subtype + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, -300, 0, 0, obj.getDirection()); + break; + case 3: + + break; + } +} + +function onEndState_virtualrush_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_GUNNER_VIRTUALRUSH){ + obj.sq_RemoveAimPointMark(); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_holdandgo_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_HOLDANDGO); + if (isUse){ + obj.sq_AddSetStatePacket(STATE_GUNNER_HOLDANDGO, STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + +function onSetState_holdandgo_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HOLDANDGO); + local castTime = sq_GetCastTime(obj, SKILL_GUNNER_HOLDANDGO, skill_level) / 3; + sq_StartDrawCastGauge(obj, castTime, true); + // local skill = sq_GetSkill(obj, SKILL_GUNNER_HOLDANDGO); + // if(skill.isSealActiveFunction()){ + // skill.setSealActiveFunction(false);//? + // // if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut")){ + // // CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut", true); + // // } + // obj.getVar("holdandgo").setBool(0,true); + // obj.sq_PlaySound("HOLD_GO_CAST"); + // } + // else{ + // skill.setSealActiveFunction(true);//? + // // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut")){ + // // CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut"); + // // } + // obj.getVar("holdandgo").setBool(0,false); + // obj.sq_PlaySound("HOLD_GO_FINGER"); + // } + if(obj.getVar("holdandgo").getBool(0)){ + obj.getVar("holdandgo").setBool(0,false); + obj.sq_PlaySound("HOLD_GO_FINGER"); + } + else{ + obj.getVar("holdandgo").setBool(0,true); + obj.sq_PlaySound("HOLD_GO_CAST"); + } + // print(obj.getVar("holdandgo").getBool(0)); +} + +function onEndCurrentAni_holdandgo_bykk(obj) +{ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function onKeyFrameFlag_holdandgo_bykk(obj, flagIndex) +{ + if(!obj) return false; + if(flagIndex == 1){ + obj.setTimeEvent(0, 100, 1, false); + } + return true; +} + + +function onTimeEvent_holdandgo_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + + switch(timeEventIndex){ + case 0: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_dimensionrunner_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_DIMENSIONRUNNER); + if (isUse) + { + obj.sq_IsEnterSkillLastKeyUnits(SKILL_GUNNER_DIMENSIONRUNNER); + obj.sq_AddSetStatePacket(STATE_GUNNER_DIMENSIONRUNNER, STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + +function onSetState_dimensionrunner_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + obj.getVar("dimensionrunner").setBool(0,true); + //sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missileexplosiontalisman_03.ani",150,0,0); +} + +function onEndCurrentAni_dimensionrunner_bykk(obj) +{ + if(!obj) return; + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function onKeyFrameFlag_dimensionrunner_bykk(obj, flagIndex) +{ + if(!obj) return false; + if(flagIndex == 1 && obj.getVar("dimensionrunner").getBool(0) == true){ + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + local vX = 500; + local vY = 250; + + obj.sq_AddAimPointMark(posX, posY, vX, vY); + } + return true; +} + +function onProcCon_dimensionrunner_bykk(obj) +{ + if(!obj) return; + local stateTime = obj.sq_GetStateTimer(); + local bDownKey = obj.isDownSkillLastKey(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + if(!bDownKey && stateTime < 250 && obj.getVar("dimensionrunner").getBool(0) == true){//原地生成 + obj.getVar("dimensionrunner").setBool(0,false); + obj.setTimeEvent(0, 350 - stateTime, 1, false); + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 1, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 0, 1.0) + 100; + createSkillPassiveObj_nanjixie(obj,obj,SKILL_GUNNER_DIMENSIONRUNNER,1,totalDamage,6,totalDamage2,0,0,0); + } + else if((!bDownKey && stateTime >= 250 && obj.getVar("dimensionrunner").getBool(0) == true) || (bDownKey && stateTime >= 1200 && obj.getVar("dimensionrunner").getBool(0) == true)){//定点生成 + obj.getVar("dimensionrunner").setBool(0,false); + local aimPosX = obj.sq_GetAimPosX(posX, posY, false); + local aimPosY = obj.sq_GetAimPosY(posX, posY, false); + local offsetX = aimPosX - posX; + local offsetY = aimPosY - posY; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = posX - aimPosX; + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 1, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 0, 1.0) + 100; + createSkillPassiveObj_nanjixie(obj,obj,SKILL_GUNNER_DIMENSIONRUNNER,1,totalDamage,6,totalDamage2,offsetX,offsetY,0); + obj.setTimeEvent(0, 100, 1, false); + } +} + + +function onTimeEvent_dimensionrunner_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + + switch(timeEventIndex){ + case 0: + obj.sq_RemoveAimPointMark(); + obj.getVar("dimensionrunner").setBool(0, false); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + + +function onEndState_dimensionrunner_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_GUNNER_DIMENSIONRUNNER){ + obj.sq_RemoveAimPointMark(); + obj.getVar("dimensionrunner").setBool(0, false); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function checkExecutableSkill_hellmarch_bykk(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_HELLMARCH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_GUNNER_HELLMARCH, STATE_PRIORITY_USER, true); + return true; + } + + return false; +} + +function onSetState_hellmarch_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_BODY); + obj.sq_PlaySound("GN_HELLMARCH"); + local direction = obj.getDirection(); + createSkillPassiveObj_hellmarch_bykk(obj,1,0,4000,0,-150,0,-75,direction); + createSkillPassiveObj_hellmarch_bykk(obj,2,0,4000,0,-150,-175,-75,direction); + createSkillPassiveObj_hellmarch_bykk(obj,1,0,4000,0,-750,0,-75,sq_GetOppositeDirection(direction)); + createSkillPassiveObj_hellmarch_bykk(obj,2,0,4000,0,-750,-175,-75,sq_GetOppositeDirection(direction)); + obj.getVar("hellmarch").setBool(0, true); + print("set hellmarch"); + break; + case 1: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_EXPLOSION1); + break; + } +} + +function onEndCurrentAni_hellmarch_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_GUNNER_HELLMARCH, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onKeyFrameFlag_hellmarch_bykk(obj, flagIndex) +{ + if(!obj) return false; + obj.setTimeEvent(0, 100, 1, false); + return true; +} + +function onTimeEvent_hellmarch_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + + switch(timeEventIndex){ + case 0: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function createSkillPassiveObj_hellmarch_bykk(obj,subtype,totalDamage,etc_num1,etc_num2,x,y,z,direction) +{ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_HELLMARCH); + sq_BinaryWriteDword(subtype);//subtype + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(etc_num1); + sq_BinaryWriteDword(etc_num2); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, x, y, z, direction); +} + + +function checkExecutableSkill_G1(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_G1); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_GUNNER_G1, STATE_PRIORITY_USER, true); + return true; + } + return false; +} + +function checkCommandEnable_G1(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_G1(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + obj.sq_PlaySound("GN_G1"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local castTime = sq_GetCastTime(obj, SKILL_GUNNER_G1, sq_GetSkillLevel(obj, SKILL_GUNNER_G1)); + obj.setTimeEvent(0, castTime, 1, false); + sq_StartDrawCastGauge(obj, castTime, true); + break; + } +} + +function onEndCurrentAni_G1(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_G1(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_G1(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_GUNNER_G1); + local totalDamage = sq_GetLevelData(obj, SKILL_GUNNER_G1, 0, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_GUNNER_G1, 1, skillLevel) + 150; + local hitDelayRate = sq_GetLevelData(obj, SKILL_GUNNER_G1, 2, skillLevel); + local hitCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G1, 4); + local sizeRate = sq_GetIntData(obj, SKILL_GUNNER_G1, 7); + local offset = [-75,0,60]; + local Gset = obj.getVar("Gset").getInt(10); + switch(Gset){ + case SKILL_GUNNER_G2: + local size = obj.getVar("G2_obj").get_obj_vector_size(); + if(size > 0){ + local g2_addRate = sq_GetLevelData(obj, SKILL_GUNNER_G1, 3, skillLevel); + totalDamage = totalDamage * (100 + g2_addRate) / 100; + local loadSlot = obj.sq_GetSkillLoad(Gset); + if(loadSlot){ + local allCoolTime = loadSlot.getEndCoolTime(); + local nowCoolTime = loadSlot.getCurrentCoolTime(); + lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G1, 2) + 150; + } + offset = [50, 0, 60]; + obj.sq_RemoveSkillLoad(Gset); + for(local i = 0; i < size; i++){ + local G2_obj = obj.getVar("G2_obj").get_obj_vector(i); + if(G2_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G2_obj); + colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + } + break; + case SKILL_GUNNER_G3: + local size = obj.getVar("G3_obj").get_obj_vector_size(); + if(size > 0){ + local g3_addRate = sq_GetLevelData(obj, SKILL_GUNNER_G1, 4, skillLevel); + totalDamage = totalDamage * (100 + g3_addRate) / 100; + local loadSlot = obj.sq_GetSkillLoad(Gset); + if(loadSlot){ + local allCoolTime = loadSlot.getEndCoolTime(); + local nowCoolTime = loadSlot.getCurrentCoolTime(); + lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G1, 2) + 150; + } + obj.sq_RemoveSkillLoad(Gset); + for(local i = 0; i < size; i++){ + local G3_obj = obj.getVar("G3_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + } + size = obj.getVar("G3_att_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local G3_obj = obj.getVar("G3_att_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + colObj.setValid(false); + } + } + } + break; + } + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_G1);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(lifeTime); + sq_BinaryWriteDword(hitDelayRate); + sq_BinaryWriteDword(hitCoolTime); + sq_BinaryWriteDword(sizeRate); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, offset[0], offset[1], offset[2], obj.getDirection()); + obj.sq_AddSkillLoad(SKILL_GUNNER_G1, 16, 1, lifeTime); + local loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G1); + obj.getVar("Gset").setInt(10, SKILL_GUNNER_G1); + loadSlot.setStartCool(); + break; + } + return true; +} + +function onTimeEvent_G1(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_G1(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_GUNNER_G1){ + sq_EndDrawCastGauge(obj); + } +} + + +function checkExecutableSkill_G2(obj) +{ + if (!obj) return false; + local size = obj.getVar("G2_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local G2_obj = obj.getVar("G2_obj").get_obj_vector(i); + if(G2_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G2_obj); + colObj.stopTimeEvent(10); + colObj.setTimeEvent(2, 625, 1 ,false); + if(G2_obj.getState() == 22) colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + return false; + } + if(obj.getVar("G1_obj").get_obj_vector_size() < 1 && obj.getVar("G3_obj").get_obj_vector_size() < 1) return false; + // local Gset = obj.getVar("Gset").getInt(10); + // local loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G1); + // local nowCoolTime = loadSlot.getCurrentCoolTime(); + // if(nowCoolTime <= sq_GetIntData(obj, SKILL_GUNNER_G1, 3)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_G2); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_GUNNER_G2, STATE_PRIORITY_USER, true); + return true; + } + return true; +} + +function checkCommandEnable_G2(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_G2(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + obj.sq_PlaySound("GN_G2"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local castTime = sq_GetCastTime(obj, SKILL_GUNNER_G2, sq_GetSkillLevel(obj, SKILL_GUNNER_G2)); + obj.setTimeEvent(0, castTime, 1, false); + sq_StartDrawCastGauge(obj, castTime, true); + break; + } +} + +function onEndCurrentAni_G2(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_G2(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_G2(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_GUNNER_G2); + local totalDamage = sq_GetLevelData(obj, SKILL_GUNNER_G2, 0, skillLevel); + local totalDamage2 = sq_GetLevelData(obj, SKILL_GUNNER_G2, 1, skillLevel); + local chargeTime = sq_GetIntData(obj, SKILL_GUNNER_G2, 1); + local hitCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G2, 3); + local Gset = obj.getVar("Gset").getInt(10); + local loadSlot = obj.sq_GetSkillLoad(Gset); + if(!loadSlot) return true; + local allCoolTime = loadSlot.getEndCoolTime(); + local nowCoolTime = loadSlot.getCurrentCoolTime(); + local lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G2, 2) + 150; + obj.sq_RemoveSkillLoad(Gset); + switch(Gset){ + case SKILL_GUNNER_G1: + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 2, skillLevel)) / 100; + totalDamage2 = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 2, skillLevel)) / 100; + local G1_obj = obj.getVar("G1_obj").get_obj_vector(0); + if(G1_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G1_obj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + break; + case SKILL_GUNNER_G3: + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 3, skillLevel)) / 100; + totalDamage2 = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 3, skillLevel)) / 100; + local size = obj.getVar("G3_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local G3_obj = obj.getVar("G3_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + } + size = obj.getVar("G3_att_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local G3_obj = obj.getVar("G3_att_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + colObj.setValid(false); + } + } + } + break; + } + + obj.sq_AddSkillLoad(SKILL_GUNNER_G2, 18, 1, lifeTime); + loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G2); + obj.getVar("Gset").setInt(10, SKILL_GUNNER_G2); + loadSlot.setStartCool(); + for(local i = 0; i < 3; i++){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_G2);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(totalDamage2); + sq_BinaryWriteDword(chargeTime); + sq_BinaryWriteDword(hitCoolTime); + sq_BinaryWriteDword(i); + sq_BinaryWriteDword(lifeTime); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, -75, 0, 60, obj.getDirection()); + } + break; + } + return true; +} + +function onTimeEvent_G2(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_G2(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_GUNNER_G2){ + sq_EndDrawCastGauge(obj); + } +} + + +function checkExecutableSkill_G3(obj) +{ + if (!obj) return false; + local size = obj.getVar("G3_obj").get_obj_vector_size(); + if(size > 0){ + if(obj.getVar("G3_Bool").getBool(0)){ + obj.getVar("G3_Bool").setBool(0, false); + obj.getVar("G3_count").setInt(10, 0); + for(local i = 0; i < size; i++){ + local G3_obj = obj.getVar("G3_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + if(colObj.getState() == 22){ + obj.getVar("G3_count").setInt(10, obj.getVar("G3_count").getInt(10) + 1); + continue; + } + colObj.stopTimeEvent(13); + colObj.sq_PlaySound("G3_MOVE"); + if(colObj.getState() != 24) colObj.addSetStatePacket(20, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + local size2 = obj.getVar("G3_att_obj").get_obj_vector_size(); + if(size2 > 0){ + for(local ui = 0; ui < size2; ui++){ + local G3_att_obj = obj.getVar("G3_att_obj").get_obj_vector(ui); + if(G3_att_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_att_obj); + colObj.setValid(false); + } + } + } + if(obj.getVar("G3_count").getInt(10) == 6){ + local range = sq_GetIntData(obj, SKILL_GUNNER_G3, 4); + obj.getVar("G3_bosstar").clear_obj_vector(); + obj.getVar("G3_namedtar").clear_obj_vector(); + obj.getVar("G3_normaltar").clear_obj_vector(); + obj.getVar("G3_tar").clear_obj_vector(); + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){obj.getVar("G3_bosstar").push_obj_vector(activeObj);} + else if(sq_IsNamed(activeObj)){obj.getVar("G3_namedtar").push_obj_vector(activeObj);} + else{obj.getVar("G3_normaltar").push_obj_vector(activeObj);} + } + } + if(obj.getVar("G3_bosstar").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("G3_bosstar").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("G3_bosstar").get_obj_vector(i); + obj.getVar("G3_tar").push_obj_vector(targetObj); + } + } + if(obj.getVar("G3_namedtar").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("G3_namedtar").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("G3_namedtar").get_obj_vector(i); + obj.getVar("G3_tar").push_obj_vector(targetObj); + } + } + if(obj.getVar("G3_normaltar").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("G3_normaltar").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("G3_normaltar").get_obj_vector(i); + obj.getVar("G3_tar").push_obj_vector(targetObj); + } + } + if(obj.getVar("G3_tar").get_obj_vector_size() < 1) return false; + obj.getVar("G3_Bool").setBool(0, true); + for(local i = 0; i < 6; i++){ + local sub = i; + if(sq_GetLevelData(obj, SKILL_GUNNER_G3, 8, sq_GetSkillLevel(obj, SKILL_GUNNER_G3)) > 0) sub = 0; + local targetObj = obj.getVar("G3_tar").get_obj_vector(sub); + if(!targetObj) continue; + local G3_obj = obj.getVar("G3_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + if(colObj.getState() != 22){ + if(obj.getVar("G3_Bool").getBool(0) == false) obj.getVar("G3_Bool").setBool(0, true); + continue; + } + colObj.setTimeEvent(11, 400, 1, false); + colObj.sq_PlaySound("G3_MOVE"); + colObj.getVar("move").setInt(10, sq_GetXPos(colObj)); + colObj.getVar("move").setInt(11, sq_GetYPos(colObj)); + colObj.getVar("move").setInt(12, sq_GetZPos(colObj)); + colObj.getVar("move").setInt(13, sq_GetXPos(targetObj)); + colObj.getVar("move").setInt(14, sq_GetYPos(targetObj)); + colObj.getVar("move").setInt(15, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) + 60); + colObj.setTimeEvent(12, 10, 30, false); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + colObj.getVar("target").clear_obj_vector(); + colObj.getVar("target").push_obj_vector(targetObj); + } + } + } + } + else{ + local range = sq_GetIntData(obj, SKILL_GUNNER_G3, 4); + obj.getVar("G3_bosstar").clear_obj_vector(); + obj.getVar("G3_namedtar").clear_obj_vector(); + obj.getVar("G3_normaltar").clear_obj_vector(); + obj.getVar("G3_tar").clear_obj_vector(); + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){obj.getVar("G3_bosstar").push_obj_vector(activeObj);} + else if(sq_IsNamed(activeObj)){obj.getVar("G3_namedtar").push_obj_vector(activeObj);} + else{obj.getVar("G3_normaltar").push_obj_vector(activeObj);} + } + } + if(obj.getVar("G3_bosstar").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("G3_bosstar").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("G3_bosstar").get_obj_vector(i); + obj.getVar("G3_tar").push_obj_vector(targetObj); + } + } + if(obj.getVar("G3_namedtar").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("G3_namedtar").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("G3_namedtar").get_obj_vector(i); + obj.getVar("G3_tar").push_obj_vector(targetObj); + } + } + if(obj.getVar("G3_normaltar").get_obj_vector_size() > 0){ + for(local i = 0; i < obj.getVar("G3_normaltar").get_obj_vector_size(); i++){ + local targetObj = obj.getVar("G3_normaltar").get_obj_vector(i); + obj.getVar("G3_tar").push_obj_vector(targetObj); + } + } + if(obj.getVar("G3_tar").get_obj_vector_size() < 1) return false; + obj.getVar("G3_Bool").setBool(0, true); + for(local i = 0; i < 6; i++){ + local sub = i; + if(sq_GetLevelData(obj, SKILL_GUNNER_G3, 8, sq_GetSkillLevel(obj, SKILL_GUNNER_G3)) > 0) sub = 0; + local targetObj = obj.getVar("G3_tar").get_obj_vector(sub); + if(!targetObj) continue; + local G3_obj = obj.getVar("G3_obj").get_obj_vector(i); + if(G3_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj); + if(colObj.getState() != 22){ + if(obj.getVar("G3_Bool").getBool(0) == false) obj.getVar("G3_Bool").setBool(0, true); + continue; + } + colObj.setTimeEvent(11, 400, 1, false); + colObj.sq_PlaySound("G3_MOVE"); + colObj.getVar("move").setInt(10, sq_GetXPos(colObj)); + colObj.getVar("move").setInt(11, sq_GetYPos(colObj)); + colObj.getVar("move").setInt(12, sq_GetZPos(colObj)); + colObj.getVar("move").setInt(13, sq_GetXPos(targetObj)); + colObj.getVar("move").setInt(14, sq_GetYPos(targetObj)); + colObj.getVar("move").setInt(15, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) + 60); + colObj.setTimeEvent(12, 10, 30, false); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + colObj.getVar("target").clear_obj_vector(); + colObj.getVar("target").push_obj_vector(targetObj); + } + } + } + return false; + } + if(obj.getVar("G1_obj").get_obj_vector_size() < 1 && obj.getVar("G2_obj").get_obj_vector_size() < 1) return false; + // local Gset = obj.getVar("Gset").getInt(10); + // local loadSlot = obj.sq_GetSkillLoad(Gset); + // local nowCoolTime = loadSlot.getCurrentCoolTime(); + // if(nowCoolTime <= sq_GetIntData(obj, SKILL_GUNNER_G1, 3)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_G3); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_GUNNER_G3, STATE_PRIORITY_USER, true); + return true; + } + return false; +} + +function checkCommandEnable_G3(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_G3(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND); + obj.sq_PlaySound("GN_G3"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local castTime = sq_GetCastTime(obj, SKILL_GUNNER_G3, sq_GetSkillLevel(obj, SKILL_GUNNER_G3)); + obj.setTimeEvent(0, castTime, 1, false); + break; + } +} + +function onEndCurrentAni_G3(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_G3(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_G3(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local offset = [-75,0,60]; + local Gset = obj.getVar("Gset").getInt(10); + local loadSlot = obj.sq_GetSkillLoad(Gset); + if(!loadSlot) return true; + local allCoolTime = loadSlot.getEndCoolTime(); + local nowCoolTime = loadSlot.getCurrentCoolTime(); + local lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G3, 2) + 150; + local skillLevel = sq_GetSkillLevel(obj, SKILL_GUNNER_G3); + local totalDamage = sq_GetLevelData(obj, SKILL_GUNNER_G3, 0, skillLevel) * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G3, 2, skillLevel)) / 100; + local hitCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G3, 1); + if(sq_GetLevelData(obj, SKILL_GUNNER_G3, 4, skillLevel) > 0) hitCoolTime = sq_GetLevelData(obj, SKILL_GUNNER_G3, 4, skillLevel); + switch(Gset){ + case SKILL_GUNNER_G1: + if(Gset == SKILL_GUNNER_G1){ + local G1_obj = obj.getVar("G1_obj").get_obj_vector(0); + if(G1_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G1_obj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + break; + case SKILL_GUNNER_G2: + offset = [50,0,75]; + local size = obj.getVar("G2_obj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local G2_obj = obj.getVar("G2_obj").get_obj_vector(i); + if(G2_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(G2_obj); + colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + } + break; + } + obj.sq_RemoveSkillLoad(Gset); + obj.sq_AddSkillLoad(SKILL_GUNNER_G3, 20, 1, lifeTime); + loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G3); + obj.getVar("Gset").setInt(10, SKILL_GUNNER_G3); + loadSlot.setStartCool(); + for(local i = 0; i < 6; i++){ + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_GUNNER_G3);//skillIndex + sq_BinaryWriteDword(1);//subtype + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(hitCoolTime); + sq_BinaryWriteDword(i); + sq_BinaryWriteDword(allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G3, 2) + 150); + sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, offset[0], offset[1], offset[2], obj.getDirection()); + } + break; + } + return true; +} + +function onTimeEvent_G3(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_G3(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_GUNNER_G3){ + sq_EndDrawCastGauge(obj); + } +} + +//男机械结束 + + +function setCustomData_po_msc7bullet_bykk(obj, receiveData) +{ + if(!obj) return; + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword() * 120 / 100; + local speed = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, sizeRate); + obj.getVar("custom").setInt(3, speed); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); +} + +function setState_po_msc7bullet_bykk(obj, state, datas) +{ + if(!obj) return; + obj.getVar("state").setInt(0, state); + switch(state){ + case 20: + local aniPath = "passiveobject/gunner_skl95_bykk/animation/msc7/talisman/missile_01.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + // obj.sq_SetMoveParticle("particle/standbyreadygrenade.ptl", 0.0, 25.0); + sq_SetCustomRotate(obj, sq_ToRadian(25.0)); + local speed = obj.getVar("custom").getInt(3) * 130 / 100; + local timeMax = 10 * 1300 / speed; + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetZPos(obj)); + obj.setTimeEvent(1, timeMax, 20, true); + // if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + // else sq_SetVelocity(obj, 0, -speed.tofloat()); + // sq_SetVelocity(obj, 2, speed.tofloat() * 0.4); + // sq_SetSpeedToMoveParticle(obj,0,speed); + // sq_SetSpeedToMoveParticle(obj,2,0); + break; + case 21: + // sq_SetVelocity(obj, 0, 0.0); + // sq_SetVelocity(obj, 2, 0.0); + local aniPath = "passiveobject/gunner_skl95_bykk/animation/msc7/talisman/explosion_08.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(2).tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/gunner_skl95_bykk/animation/msc7/talisman/explosion_mldrs-95missilebboombottom_00.ani", 0, 0, -sq_GetZPos(obj)); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } +} + +function onEndCurrentAni_po_msc7bullet_bykk(obj) +{ + if(!obj) return; + local state = obj.getVar("state").getInt(0); + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 21) sq_SendDestroyPacketPassiveObject(obj); +} + +function onTimeEvent_po_msc7bullet_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: + local base_X = obj.getVar("move").getInt(0); + local base_Z = obj.getVar("move").getInt(1); + local dstX = sq_GetDistancePos(base_X, obj.getDirection(), timeEventCount * 18); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, base_Z + timeEventCount * 7); + if(timeEventCount >= 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } +} + +function procAppend_po_msc7bullet_bykk(obj) +{ + if(!obj) return; + return; + local state = obj.getVar("state").getInt(0); + switch(state){ + case 20: + local time = sq_GetObjectTime(obj); + if(time > 200 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } +} + +function setCustomData_po_msc7knockbackobject(obj, receiveData) +{ + if(!obj) return; + local totalDamage = receiveData.readDword(); + local rateDamagerAdd = receiveData.readDword(); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo); + rateDamager = rateDamager.tofloat() * (100 + rateDamagerAdd).tofloat() / 100.0; + sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager); + // sq_SetCurrentAttacknBackForce(attackInfo, 1200); +} + +function onEndCurrentAni_po_msc7knockbackobject(obj) +{ + if(!obj) return; + sq_SendDestroyPacketPassiveObject(obj); +} diff --git a/user/116.205.165.25/6_mage_1.c b/user/116.205.165.25/6_mage_1.c new file mode 100644 index 0000000..faa05a8 --- /dev/null +++ b/user/116.205.165.25/6_mage_1.c @@ -0,0 +1,3366 @@ + +//Battlemage_skill + + +function setState_Mage_battlemage_bykk(obj, state, datas, isResetTimer) +{ + if(state == 17){ + switch(sq_GetVectorData(datas, 0)){ + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(20); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + else if(state == 8){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_IntVectPush(sq_GetVectorData(datas, 0)); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + +function onEndCurrentAni_mage_buff_bykk(obj) +{ + if(sq_getGrowType(obj) == 3){ + local SkillIndex = obj.getBuffSkillIndex(); + if(SkillIndex != 40) return; + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERAUTOCREATE); + local apdPath = "character/mage/battlemage_bykk/ap/ap_chaserautocreate.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASERAUTOCREATE, false, apdPath, true); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CHASERAUTOCREATE, 0, skill_level); + if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASERAUTOCREATE, skill_level); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + } +} + +function createOnlyDrawObject_Battlemage_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_Battlemage_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function cearteSkillPassive_Battlemage_bykk(obj,passiveObj,objnum,x,y,z,direction,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + +function createBattlemageChaser(obj) +{ + local baseX = [-50,-75,-100,-125,-150,-175,-200], baseZ = [50,75,50,75,50,75,50]; + local count = obj.getVar("kksChaser").get_obj_vector_size() % 7; + local ycount = (obj.getVar("kksChaser").get_obj_vector_size() / 7).tointeger(); + local bX = -sq_getRandom(50,120), bY = -ycount, bZ = sq_getRandom(50,100) - (ycount * 3); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_CHASER); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 1, skill_level); + local sub = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 1; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) sub = 2; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) sub = 3; + local sizeRateSet = 0; + if(sq_getRandom(1, 1000) > 500) sizeRateSet = 1; + local prob = sq_GetLevelData(obj, SKILL_BYKK_CHASERAUTOCREATE, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERAUTOCREATE)); + if(sq_getRandom(1, 1000) > (1000 - prob) || sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0) sizeRateSet = 2; + switch(sizeRateSet){ + case 1: totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_CHASER, 7)) / 1000; break; + case 2: totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_CHASER, 8)) / 1000; break; + } + local addRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 23, skill_level); + local addRate2 = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 22, skill_level); + if(addRate > 0 && sub >= 2) totalDamage = totalDamage * (100 + addRate) / 100; + else if(addRate2 > 0 && sub == 1) totalDamage = totalDamage * (100 + addRate2) / 100; + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 18, skill_level); + local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 6, skill_level); + local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 5, skill_level); + local decreasespeedLevel = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 7, skill_level); + local decreasespeedProb = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 10, skill_level); + local decreasespeedRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 8, skill_level); + local decreasespeedTime = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 11, skill_level); + local attackbonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 2, skill_level); + local criticaldamageRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 3, skill_level); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 0, skill_level); + local expsizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_CHASER, 19, skill_level); + //print("expsizeRate = "+expsizeRate); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(SKILL_BYKK_CHASER); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(totalDamage); + sq_BinaryWriteDword(sub); + sq_BinaryWriteDword(sizeRateSet); + sq_BinaryWriteDword(lifeTime); + sq_BinaryWriteDword(movespeedRate); + sq_BinaryWriteDword(attackspeedRate); + sq_BinaryWriteDword(decreasespeedLevel); + sq_BinaryWriteDword(decreasespeedProb); + sq_BinaryWriteDword(decreasespeedRate); + sq_BinaryWriteDword(decreasespeedTime); + sq_BinaryWriteDword(attackbonusRate); + sq_BinaryWriteDword(criticaldamageRate); + sq_BinaryWriteDword(buffTime); + sq_BinaryWriteDword(bX); + sq_BinaryWriteDword(bY); + sq_BinaryWriteDword(bZ); + sq_BinaryWriteDword(expsizeRate); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJECT_BYKK_BATTLEMAGE, 0, bX, bY, bZ, obj.getDirection()); +} + +function shootBattlemageChaser(obj, damager, number) +{ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local size = obj.getVar("kksChaser").get_obj_vector_size(); + if(size < number) number = size; + for(local i = 0; i < number; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(chaserObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); + if(colObj.getState() <= 21){ + colObj.getVar("target").clear_obj_vector(); + colObj.getVar("target").push_obj_vector(activeObj); + if(colObj.isExistTimeEvent(10)) colObj.stopTimeEvent(10); + if(colObj.isExistTimeEvent(11)) colObj.stopTimeEvent(11); + if(colObj.isExistTimeEvent(12)) colObj.stopTimeEvent(12); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("kksChaser").remove_obj_vector(colObj); + } + } + } +} + +function changeBattlemageChaser(obj, sub) +{ + local size = obj.getVar("kksChaser").get_obj_vector_size(); + if(size < 1) return; + local addRate = sq_GetLevelData(obj, SKILL_BYKK_CHASER, 23, sq_GetSkillLevel(obj, SKILL_BYKK_CHASER)); + for(local i = 0; i < size; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(chaserObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); + if(colObj.getState() <= 21){ + local lifeTime = colObj.getVar("custom").getInt(13); + if(sub == 1) lifeTime = sq_GetLevelData(obj, SKILL_BYKK_CHASEREVOLUTION, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION)); + if(colObj.isExistTimeEvent(13)) colObj.stopTimeEvent(13); + colObj.setTimeEvent(13, lifeTime, 1, false); + colObj.getVar("custom").setInt(11, sub); + if(addRate > 0){ + switch(sub){ + case 0: + case 1: + local totalDamage = colObj.getVar("custom").getInt(10); + totalDamage = totalDamage / (100 + addRate) * 100; + colObj.getVar("custom").setInt(10, totalDamage); + break; + case 2: + case 3: + local totalDamage = colObj.getVar("custom").getInt(10); + totalDamage = totalDamage * (100 + addRate) / 100; + colObj.getVar("custom").setInt(10, totalDamage); + break; + } + } + colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } +} + + +function setDamageRate_BattleMage_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaser.nut") && sq_GetSkillLevel(obj, 174) <= 60) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHASER, 2, sq_GetSkillLevel(obj, SKILL_BYKK_CHASER))) / 1000; + print("bonusRate1 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_GODDNESSOFWAR, 1, sq_GetSkillLevel(obj, SKILL_BYKK_GODDNESSOFWAR))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ARMONIA, 0, sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA))) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_COMBOMASTERY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 18, sq_GetSkillLevel(obj, SKILL_BYKK_COMBOMASTERY))) / 1000; + print("bonusRate4 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_POLEMASTERY, 5, sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY))) / 1000; + print("bonusRate = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function onEnd_appendage_battlemage_chaser_bykk(appendage) +{ + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + setDamageRate_BattleMage_bykk(sqrChr); +} + +function getAttackAni_Mage(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetAttackAni(index); + if(index == 4){ + ani = obj.sq_getCustomAni(ANIMATION_ATTACK_SETCUSTOM); + return ani; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK) > 0) ani = obj.sq_getCustomAni(10 + index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local aniName = ["Attack1","Attack2","Attack3"]; + print(aniName[index]); + ani = getCurrentAnimation_precencia(obj, aniName[index], false, false); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + local aniName = ["Attack1_00","Attack2_00","Attack3_00"]; + print(aniName[index]); + ani = getCurrentAnimation_precencia(obj, aniName[index], false, true); + } + return ani; +} + +function getStayAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetStayAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Stay", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = sq_GetCustomAni(obj, 257); + return ani; + } + return ani; +} + +function getMoveAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetMoveAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Move", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + // ani = getCurrentAnimation_precencia(obj, "Move", false, true); + ani = sq_GetCustomAni(obj, 243); + return ani; + } + return ani; +} + +function getSitAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetSitAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Sit", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Sit", false, true); + return ani; + } + return ani; +} + +function getDamageAni_Mage(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetDamageAni(index); + local aniName = ["Damage1","Damage2"]; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, aniName[index], false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, aniName[index], false, true); + return ani; + } + return ani; +} + +function getDownAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDownAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Damage2", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Down", false, true); + return ani; + } + return ani; +} + +function getOverturnAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetOverturnAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Overturn", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Overturn", false, true); + return ani; + } + return ani; +} + +function getJumpAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Jump", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Jump", false, true); + return ani; + } + return ani; +} + +function getJumpAttackAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetJumpAttackAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "JumpAttack", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Jumpattack_01", false, true); + return ani; + } + return ani; +} + +function getRestAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetRestAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Rest", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Rest", false, true); + return ani; + } + if(sq_getGrowType(obj) == 1) ani = getElementalMaster_RestAni(obj); + return ani; +} + +function getThrowChargeAni_Mage(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetThrowChargeAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local aniName = ["OneHandThrow1","TwoHandThrow1","Cast1","Wink1"]; + ani = getCurrentAnimation_precencia(obj, aniName[index], false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Throw", false, true); + return ani; + } + return ani; +} + +function getThrowShootAni_Mage(obj, index) +{ + if(!obj) return null; + local ani = obj.sq_GetThrowShootAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local aniName = ["OneHandThrow2","TwoHandThrow2","Cast2","Wink2"]; + ani = getCurrentAnimation_precencia(obj, aniName[index], false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Throwshoot", false, true); + return ani; + } + return ani; +} + +function getDashAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Dash", false, false); + return ani; + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = sq_GetCustomAni(obj, 224); + return ani; + } + return ani; +} + +function getDashAttackAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetDashAttackAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Dashattack", false, false); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Dashattack_00", false, true); + } + return ani; +} + +function getGetItemAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetGetItemAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "GetItem", false, false); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "GetItem", false, true); + } + return ani; +} + +function getBuffAni_Mage(obj) +{ + if(!obj) return null; + local ani = obj.sq_GetBuffAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + ani = getCurrentAnimation_precencia(obj, "Buff", false, false); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + ani = getCurrentAnimation_precencia(obj, "Buff", false, true); + } + return ani; +} + +function getCurrentAnimation_precencia(obj, aniName, isRewind, isSeal) +{ + local ani = null; + local aniPath_01 = "character/mage/effect/animation/avatar/change_skin/", aName = "mage_precencia_off_" + aniName; + if(isSeal == true){aniPath_01 = "character/mage/animation/battlemage_bykk/precencia/"; aName = "mage_precencia_on_" + aniName;} + else{ + local skill = sq_GetSkill(obj, SKILL_BYKK_ARMONIA); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA); + if(skillLevel > 0 && !skill.isSealFunction()){ + aniPath_01 = "character/mage/effect/animation/battlemage_bykk/exticion_newbody/change_skin/"; aName = "mage_exticion_New_" + aniName; + } + } + ani = obj.getVar().GetAnimationMap(aName, aniPath_01 + aniName + ".ani"); + if(ani && isRewind) sq_Rewind(ani); + return ani; +} + +function onattack_Battlemage_k_k(obj, damager, bounding_box, is_stuck) +{ + if(is_stuck) return; + if(!obj || obj.getState() == STATE_DIE) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, CHASERLAUNCH_APDPATH)) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, CHASERLAUNCH_APDPATH, true); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, CHASERLAUNCH_APDPATH); + if(addAppendage){ + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CHASERLAUNCH, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERLAUNCH)); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.getVar("target").clear_obj_vector(); + addAppendage.getVar("target").push_obj_vector(damager); + } +} + +function procSkill_Battlemage_bykk(obj) +{ + if(obj.getVar("kksChaser").get_obj_vector_size() < 1 || !CNSquirrelAppendage.sq_IsAppendAppendage(obj, CHASERLAUNCH_APDPATH)){ + obj.setSkillCommandEnable(SKILL_BYKK_CHASERLAUNCH, false); + return; + } + if(sq_GetSkill(obj, SKILL_BYKK_CHASERLAUNCH).isInCoolTime()) return; + obj.setSkillCommandEnable(SKILL_BYKK_CHASERLAUNCH,true); + local stateNow = obj.getState(); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERLAUNCH); + if(stateNow == STATE_BYKK_RANDOMPIERCESTRIKEEX || stateNow == SKILL_BYKK_RANDOMPIERCESTRIKE || stateNow == SKILL_BYKK_DRAGONSPEAR){ + local number = sq_GetLevelData(obj, SKILL_BYKK_CHASERLAUNCH, 2, skillLevel); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_CHASERLAUNCH); + local bDownKey = obj.isDownSkillLastKey(); + if(bDownKey){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, CHASERLAUNCH_APDPATH); + if(addAppendage){ + local targetObj = addAppendage.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + shootBattlemageChaser(obj, targetObj, number); + obj.startSkillCoolTime(SKILL_BYKK_CHASERLAUNCH, skillLevel, -1); + } + } + } + } + else{ + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CHASERLAUNCH); + if(b_useskill != -1){ + local number = sq_GetLevelData(obj, SKILL_BYKK_CHASERLAUNCH, 2, skillLevel); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, CHASERLAUNCH_APDPATH); + if(addAppendage){ + local targetObj = addAppendage.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + shootBattlemageChaser(obj, targetObj, number); + obj.startSkillCoolTime(SKILL_BYKK_CHASERLAUNCH, skillLevel, -1); + } + } + } + } +} + +function onStart_appendage_battlemage_chaserautocreate(appendage) +{ + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_CHASERAUTOCREATE); + local createTime = sq_GetLevelData(sqrChr, SKILL_BYKK_CHASERAUTOCREATE, 5, skill_level); + appendage.getVar("time").clear_timer_vector(); + appendage.getVar("time").push_timer_vector(); + local t_01 = appendage.getVar("time").get_timer_vector(0); + t_01.setParameter(createTime, -1); + t_01.resetInstant(0); + return; +} + +function proc_appendage_battlemage_chaserautocreate(appendage) +{ + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local t_01 = appendage.getVar("time").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t_01 && t_01.isOnEvent(currentT)){ + local createMax = sq_GetIntData(sqrChr, SKILL_BYKK_CHASER, 0); + if(sqrChr.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(sqrChr); + } + return; +} + +function onAttackParent_appendage_battlemage_chaserautocreate(appendage, realAttacker, damager, boundingBox, isStuck) +{ + + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + if(realAttacker.getVar("skillIndex").getInt(0) == SKILL_BYKK_CHASER) return; + } + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_CHASERAUTOCREATE); + switch(sqrChr.getState()){ + case SKILL_BYKK_PRECENCIA: + switch(sqrChr.getSkillSubState()){ + case 10: + case 11: + case 12: + local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_CHASERAUTOCREATE, 2, skillLevel); + if(sq_getRandom(1,1000) > (1000 - prob)){ + local createMax = sq_GetIntData(sqrChr, SKILL_BYKK_CHASER, 0); + if(sqrChr.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(sqrChr); + } + break; + } + break; + default: + local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_CHASERAUTOCREATE, 3, skillLevel); + if(sq_getRandom(1,1000) > (1000 - prob)){ + local createMax = sq_GetIntData(sqrChr, SKILL_BYKK_CHASER, 0); + if(sqrChr.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(sqrChr); + } + break; + } +} + +function onEnd_appendage_battlemage_precenciaoff(appendage) +{ + local spectrumAppendage = appendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 + if(spectrumAppendage) spectrumAppendage.endCreateSpectrum();//清除 + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + sqrChr.stopSound(2333);//停止光環聲音 + + local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrChr, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"); + if(goddAppendage) goddAppendage.getVar().setBool(100, false); + + if(sqrChr.getState() == 0 || sqrChr.getState() == 8 || sqrChr.getState() == 14){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(1); + sqrChr.sq_IntVectPush(0); + sqrChr.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); + } +} + +function onEnd_appendage_battlemage_precenciaon(appendage) +{ + local spectrumAppendage = appendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 + if(spectrumAppendage) spectrumAppendage.endCreateSpectrum();//清除 + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + sqrChr.setObjectHeight(-1); + sqrChr.stopSound(2333);//停止光環聲音 + + local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrChr, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"); + if(goddAppendage) goddAppendage.getVar().setBool(100, false); + + if(sqrChr.getState() == 0 || sqrChr.getState() == 8 || sqrChr.getState() == 14){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(1); + sqrChr.sq_IntVectPush(1); + sqrChr.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); + } +} + +function drawAppend_appendage_battlemage_precenciaoff(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + if(!appendage.isValid()) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + if(appendage.getVar("setFail").getBool(0)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sq_GetIntData(sqrChr, SKILL_BYKK_PRECENCIA, 15) < 1){ + appendage.setValid(false); + return; + } + } + + local var = appendage.getVar(); + local backAni = var.GetAnimationMap("precenciabackAni_01", "character/mage/effect/animation/avatar/avatarauraloopbot_eff_01.ani"); + local backAni2 = var.GetAnimationMap("precenciabackAni_02", "character/mage/effect/animation/avatar/avataraurabody_eff_00.ani"); + local frontAni = var.GetAnimationMap("precenciafrontAni_01", "character/mage/effect/animation/avatar/avatarauralooptop_eff_01.ani"); + if (frontAni && isOver){ + sq_AnimationProc(frontAni); + sq_drawCurrentFrame(frontAni, x, y, isFlip); + } + else if(backAni && !isOver){ + sq_AnimationProc(backAni); + sq_AnimationProc(backAni2); + sq_drawCurrentFrame(backAni, x, y, isFlip); + sq_drawCurrentFrame(backAni2, x, y, isFlip); + } + return; +} + +function drawAppend_appendage_battlemage_precenciaon(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + if(!appendage.isValid()) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + if(appendage.getVar("setFail").getBool(0)){ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sq_GetIntData(sqrChr, SKILL_BYKK_PRECENCIA, 15) < 1){ + appendage.setValid(false); + return; + } + } + + local var = appendage.getVar(); + local backAni = var.GetAnimationMap("precenciabackAni_01", "character/mage/effect/animation/avatar/avatarauraloopbot_eff_01.ani"); + local backAni2 = var.GetAnimationMap("precenciabackAni_02", "character/mage/effect/animation/avatar/avataraurabody_eff_00.ani"); + local frontAni = var.GetAnimationMap("precenciafrontAni_01", "character/mage/effect/animation/avatar/avatarauralooptop_eff_01.ani"); + if (frontAni && isOver){ + sq_AnimationProc(frontAni); + sq_drawCurrentFrame(frontAni, x, y, isFlip); + } + else if(backAni && !isOver){ + sq_AnimationProc(backAni); + sq_AnimationProc(backAni2); + sq_drawCurrentFrame(backAni, x, y, isFlip); + sq_drawCurrentFrame(backAni2, x, y - 50, isFlip); + } + return; +} + +function onEnd_appendage_battlemage_pokethrow(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return; + } +} + +function drawAppend_appendage_battlemage_goddnessofwar(appendage, isOver, x, y, isFlip) +{ + // local parentObj = appendage.getParent(); + // local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + local var = appendage.getVar(); + local frontAni = var.GetAnimationMap("godfrontAni_01", "character/mage/effect/animation/battlemage_bykk/goddnessofwar/goddnessofwar_loop.ani"); + local frontAni2 = var.GetAnimationMap("godfrontAni_02", "character/mage/effect/animation/battlemage_bykk/goddnessofwar/goddnessofwar_loop_avatar.ani"); + if (frontAni && isOver){ + if(var.getBool(100)){ + sq_AnimationProc(frontAni2); + sq_drawCurrentFrame(frontAni2, x, y, isFlip); + } + else{ + sq_AnimationProc(frontAni); + sq_drawCurrentFrame(frontAni, x, y, isFlip); + } + } + return; +} + +function onEnd_appendage_battlemage_goddnessofwar(appendage) +{ + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + setDamageRate_BattleMage_bykk(sqrChr); + return; +} + +function drawAppend_appendage_battlemage_randompiercestrikeex(appendage, isOver, x, y, isFlip) +{ + local var = appendage.getVar(); + local frontAni = var.GetAnimationMap("randompiercestrikeex_01", "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/talisman/holdeffect/hold_lightning.ani"); + if (frontAni && isOver){ + sq_AnimationProc(frontAni); + sq_drawCurrentFrame(frontAni, x, y, isFlip); + } + return; +} + +function onStart_appendage_battlemage_weaponmastery(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local criticalRate_1 = sq_GetLevelData(obj, SKILL_BYKK_ENABLEFINISHATTACK, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK)); + local change_appendage = appendage.sq_getChangeStatus("enablefinishattack"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("enablefinishattack",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate_1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalRate_1 * 0.1).tofloat()); + } + + local weaponType = obj.getWeaponSubType(); + switch(weaponType){ + case 1: + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY); + if(skill_level > 0){ + local attackRate = sq_GetLevelData(obj, SKILL_BYKK_POLEMASTERY, 10, skill_level); + local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_POLEMASTERY, 6, skill_level); + local cooltime = sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 4) / 10; + local change_appendage = appendage.sq_getChangeStatus("weaponMastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("weaponMastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, attackRate); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (cooltime * -1).tofloat()); + } + } + break; + case 0: + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY); + if(skill_level > 0){ + local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_SPEARMASTERY, 4, skill_level); + local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_SPEARMASTERY, 5, skill_level); + local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_SPEARMASTERY, 7, skill_level); + local change_appendage = appendage.sq_getChangeStatus("weaponMastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("weaponMastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, bonusRate); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (bonusRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (bonusRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); + } + } + break; + } + return; +} + +function onAttackParent_appendage_battlemage_weaponmastery(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(isStuck) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + if(colObj.getVar("skillIndex").getInt(0) == SKILL_BYKK_CHASER){ + return; + } + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERLAUNCH); + local isAutoFire = sq_GetLevelData(obj, SKILL_BYKK_CHASERLAUNCH, 5, skillLevel); + if(isAutoFire > 0){ + local number = sq_GetLevelData(obj, SKILL_BYKK_CHASERLAUNCH, 2, skillLevel); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, CHASERLAUNCH_APDPATH); + if(addAppendage){ + local targetObj = addAppendage.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + shootBattlemageChaser(obj, targetObj, number); + } + } + } +} + + + +function onStart_appendage_battlemage_multirole(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local criticaldRate = sq_GetLevelData(obj, SKILL_BYKK_MULTIROLE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_MULTIROLE)); + local change_appendage = appendage.sq_getChangeStatus("multirole"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("multirole", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (criticaldRate * 0.1 / 0.667).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldRate * 0.1 / 0.667).tofloat()); + } +} + + +function onStart_appendage_battlemage_combomastery(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_COMBOMASTERY); + local phase1Count = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 30, skillLevel); + local phase2Count = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 31, skillLevel); + local phase3Count = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 32, skillLevel); + + local phase1attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 19, skillLevel); + local phase1moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 20, skillLevel); + local phase2attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 23, skillLevel); + local phase2moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 24, skillLevel); + local phase3attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 27, skillLevel); + local phase3moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_COMBOMASTERY, 28, skillLevel); + + appendage.getVar("custom").setInt(101, phase1Count); + appendage.getVar("custom").setInt(102, phase2Count); + appendage.getVar("custom").setInt(103, phase3Count); + appendage.getVar("custom").setInt(104, phase1attackSpeed); + appendage.getVar("custom").setInt(105, phase1moveSpeed); + appendage.getVar("custom").setInt(106, phase2attackSpeed); + appendage.getVar("custom").setInt(107, phase2moveSpeed); + appendage.getVar("custom").setInt(108, phase3attackSpeed); + appendage.getVar("custom").setInt(109, phase3moveSpeed); + appendage.getVar("combomastery_phase").setInt(10, 0); + appendage.getVar("combomastery_phase").setInt(11, 0); + + appendage.getVar("combomastery_count").setInt(10, 0); + appendage.getVar("combomastery_time").clear_ct_vector(); + appendage.getVar("combomastery_time").push_ct_vector(); + + obj.sq_AddSkillLoad(84, 62, 0, 500); +} + +function proc_appendage_battlemage_combomastery(appendage) +{ + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + local timer = appendage.getVar("combomastery_time").get_ct_vector(0); + if(!timer){ + appendage.getVar("combomastery_time").clear_ct_vector(); + appendage.getVar("combomastery_time").push_ct_vector(); + return; + } + local currentT = timer.Get(); + local combomTime = 1300 + sq_GetIntData(obj, SKILL_BYKK_COMBOINSTINCT, 0); + if(currentT > combomTime){ + if(appendage.getVar("combomastery_phase").getInt(10) >= 3 && (CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"))) return; + timer.Reset(); + timer.Start(10000,0); + appendage.getVar("combomastery_count").setInt(10, 0); + appendage.getVar("combomastery_phase").setInt(10, 0); + appendage.getVar("combomastery_phase").setInt(11, 0); + local change_appendage = appendage.sq_getChangeStatus("battlemage_combomastery"); + if(change_appendage) change_appendage.clearParameter(); + + local loadSlot = obj.sq_GetSkillLoad(84); + if(loadSlot){ + local number = loadSlot.getRemainLoadNumber(); + loadSlot.decreaseLoadCount(number); + } + } + else{ + local combomCount = appendage.getVar("combomastery_count").getInt(10); + local phase1Count = appendage.getVar("custom").getInt(101); + local phase2Count = appendage.getVar("custom").getInt(102); + local phase3Count = appendage.getVar("custom").getInt(103); + if(combomCount >= phase3Count) appendage.getVar("combomastery_phase").setInt(10, 3); + else if(combomCount >= phase2Count) appendage.getVar("combomastery_phase").setInt(10, 2); + else if(combomCount >= phase1Count) appendage.getVar("combomastery_phase").setInt(10, 1); + + if(appendage.getVar("combomastery_phase").getInt(10) != appendage.getVar("combomastery_phase").getInt(11)){ + appendage.getVar("combomastery_phase").setInt(11, appendage.getVar("combomastery_phase").getInt(10)); + local loadSlot = obj.sq_GetSkillLoad(84); + if(loadSlot){ + local number = loadSlot.getRemainLoadNumber(); + loadSlot.decreaseLoadCount(number); + loadSlot.increaseLoadCount(110 + appendage.getVar("combomastery_phase").getInt(10)); + } + local attackspeedRate = 0, movespeedRate = 0; + switch(appendage.getVar("combomastery_phase").getInt(11)){ + case 1: attackspeedRate = appendage.getVar("custom").getInt(104); movespeedRate = appendage.getVar("custom").getInt(105); break; + case 2: attackspeedRate = appendage.getVar("custom").getInt(106); movespeedRate = appendage.getVar("custom").getInt(107); break; + case 3: attackspeedRate = appendage.getVar("custom").getInt(108); movespeedRate = appendage.getVar("custom").getInt(109); break; + } + + local change_appendage = appendage.sq_getChangeStatus("battlemage_combomastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("battlemage_combomastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(10, false, (attackspeedRate).tofloat()); + change_appendage.addParameter(11, false, (movespeedRate).tofloat()); + } + } + } +} + +function onAttackParent_appendage_battlemage_combomastery(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(isStuck) return; + local parentObj = appendage.getParent(); + if(!parentObj){appendage.setValid(false); return;} + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + appendage.getVar("combomastery_count").setInt(10, appendage.getVar("combomastery_count").getInt(10) + 1); + local combomCount = appendage.getVar("combomastery_count").getInt(10); + print("COMBOM = "+combomCount); + local timer = appendage.getVar("combomastery_time").get_ct_vector(0); + if(timer){ + timer.Reset(); + timer.Start(10000,0); + } +} + + + +function onStartDungeon_Battlemage_bykk(obj) +{ + if(sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0){ + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERAUTOCREATE); + local apdPath = "character/mage/battlemage_bykk/ap/ap_chaserautocreate.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASERAUTOCREATE, false, apdPath, true); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CHASERAUTOCREATE, 0, skill_level); + if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASERAUTOCREATE, skill_level); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_COMBOMASTERY) > 0){ + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASERAUTOCREATE, false, "character/mage/battlemage_bykk/ap/ap_battlemage_combomastery.nut", true); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); + } + setDamageRate_BattleMage_bykk(obj); +} + +function procSkill_Battlemage(obj) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + obj.setSkillCommandEnable(15, false); + obj.setSkillCommandEnable(16, false); + obj.setSkillCommandEnable(17, false); + obj.setSkillCommandEnable(18, false); + obj.setSkillCommandEnable(20, false); + obj.setSkillCommandEnable(11, false); + obj.setSkillCommandEnable(25, false); + } + if(obj.getVar("chaserClusterObj01").get_obj_vector_size() > 0){ + if(obj.getState() != STATE_STAND || obj.getState() != STATE_DASH){ + obj.setSkillCommandEnable(SKILL_BYKK_CHASERCLUSTER,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CHASERCLUSTER); + if(b_useskill != -1){ + obj.sq_PlaySound("WZ_CHASER_EXPLOSION"); + local attackObj = obj.getVar("chaserClusterObj01").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + local size = obj.getVar("chaserClusterObj02").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effectObj = obj.getVar("chaserClusterObj02").get_obj_vector(i); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.isExistTimeEvent(0)) colObj.stopTimeEvent(0); + if(colObj.getState() <= 21) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + } + procSkill_Battlemage_bykk(obj); +} + +function reset_battlemage_bykk(obj) +{ + if(sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserautocreate.nut")){ + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERAUTOCREATE); + local apdPath = "character/mage/battlemage_bykk/ap/ap_chaserautocreate.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASERAUTOCREATE, false, apdPath, true); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CHASERAUTOCREATE, 0, skill_level); + if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASERAUTOCREATE, skill_level); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + } + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_COMBOMASTERY) > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_battlemage_combomastery.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASERAUTOCREATE, false, "character/mage/battlemage_bykk/ap/ap_battlemage_combomastery.nut", true); + } +} + + +function setCustomData_po_battlemage_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + if(sqrChr.getVar("kksChaser").get_obj_vector_size() < 0) sqrChr.getVar("kksChaser").clear_obj_vector(); + if(!sqrChr.getVar("kksChaser").is_obj_vector(obj)) sqrChr.getVar("kksChaser").push_obj_vector(obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local movespeedRate = receiveData.readDword(); + local attackspeedRate = receiveData.readDword(); + local decreasespeedLevel = receiveData.readDword(); + local decreasespeedProb = receiveData.readDword(); + local decreasespeedRate = receiveData.readDword(); + local decreasespeedTime = receiveData.readDword(); + local attackbonusRate = receiveData.readDword(); + local criticaldamageRate = receiveData.readDword(); + local buffTime = receiveData.readDword(); + local baseX = receiveData.readDword(); + local baseY = receiveData.readDword(); + local baseZ = receiveData.readDword(); + local expsizeRate = receiveData.readDword(); + + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sub); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, lifeTime); + obj.getVar("custom").setInt(14, baseX); + obj.getVar("custom").setInt(15, baseY); + obj.getVar("custom").setInt(16, baseZ); + obj.getVar("custom").setInt(17, expsizeRate); + obj.getVar("buff").setInt(10, movespeedRate); + obj.getVar("buff").setInt(11, attackspeedRate); + obj.getVar("buff").setInt(12, decreasespeedLevel); + obj.getVar("buff").setInt(13, decreasespeedProb); + obj.getVar("buff").setInt(14, decreasespeedRate); + obj.getVar("buff").setInt(15, decreasespeedTime); + obj.getVar("buff").setInt(16, attackbonusRate); + obj.getVar("buff").setInt(17, criticaldamageRate); + obj.getVar("buff").setInt(18, buffTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + switch(subtype){ + case 1: + local delay = receiveData.readDword(); + local ani = sq_CreateAnimation("","character/mage/effect/animation/battlemage_bykk/chasersexplosion/charge.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0, delay, 1, false); + break; + case 2:// + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/chasersexplosion/floor.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(sub < 1) createOnlyDrawObjectEX_Battlemage_bykk(obj,"passiveobject/battlemage_bykk/animation/chasersexplosion/exp.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + switch(subtype){ + case 1: + local sub = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local delay = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = 5000 / delay; + local aniPath = "passiveobject/battlemage_bykk/animation/swing/swingarmonia_shoot.ani" + if(sub > 0) aniPath = "passiveobject/battlemage_bykk/animation/swing/swingarmonia_shoot_precencia.ani" + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknBackForce(attackInfo, 1500); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, obj.getDirection()); + obj.setTimeEvent(0, 50, -1, false); + break; + } + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/pokethrowsub1.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/battlemage_bykk/animation/pokethrowsub2.ani", 0, 0, 0); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + case 11: + case 12: + case 13: + case 14: + if(sqrChr.getVar("kksshs").get_obj_vector_size() < 0) sqrChr.getVar("kksshs").clear_obj_vector(); + if(!sqrChr.getVar("kksshs").is_obj_vector(obj)) sqrChr.getVar("kksshs").push_obj_vector(obj); + if(subtype < 3 || subtype == 11 || subtype == 12) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else{ + local aniPath = "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/fullcharge_front.ani"; + if(subtype == 4) aniPath = "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/fullcharge_back.ani"; + else if(subtype == 13) aniPath = "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/precencia/fullcharge_aura.ani"; + else if(subtype == 14) aniPath = "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/precencia/precencia_fullcharge_back.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + } + break; + case 20: + local totalDamage = receiveData.readDword(); + local upForce = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/battlemage_bykk/animation/strengthhandstrike/shootingstar.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknUpForce(attackInfo, upForce); + sq_moveWithParent(sqrChr, obj); + break; + case 21: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/battlemage_bykk/animation/strengthhandstrike/shootingstar.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delay / 50, 40, true); + break; + case 22: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/battlemage_bykk/animation/strengthhandstrike/shootingstarexplosion_04.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -50, -20, -50, 100, 40, 100); + break; + } + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/dragondance/dragonspear_exp_03.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local zpos = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, sub); + obj.getVar("custom").setInt(13, zpos); + obj.getVar("custom").setInt(14, speedRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/dragonspearfinal.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/dragonspearfinalnone.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/dragonspearfinalxor.ani"),true); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/quasarexplosion/precencia/precencia_quasarexplosion_boom.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + switch(subtype){ + case 1: + if(sqrChr.getVar("chaserClusterObj01").get_obj_vector_size() < 0) sqrChr.getVar("chaserClusterObj01").clear_obj_vector(); + if(!sqrChr.getVar("chaserClusterObj01").is_obj_vector(obj)) sqrChr.getVar("chaserClusterObj01").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local createMax = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + print("lifeTime2 ="+lifeTime); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, createMax); + obj.getVar("custom").setInt(12, sizeRate); + obj.setTimeEvent(0, lifeTime, 1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + if(sqrChr.getVar("chaserClusterObj02").get_obj_vector_size() < 0) sqrChr.getVar("chaserClusterObj02").clear_obj_vector(); + if(!sqrChr.getVar("chaserClusterObj02").is_obj_vector(obj)) sqrChr.getVar("chaserClusterObj02").push_obj_vector(obj); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(12, sizeRate); + obj.setTimeEvent(0, lifeTime, 1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local aniPath = [ + "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/talisman/finishthunder/a_thunder_a.ani", + "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/talisman/finishthunder/b_thunder_b.ani", + "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/talisman/finishthunder/c_thunder_c.ani" + ]; + local ani = sq_CreateAnimation("",aniPath[sq_getRandom(0,2)]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, 80, 1, false); + } + break; + } + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + switch(subtype){ + case 1:// + local totalDamage = receiveData.readDword(); + local delay = receiveData.readDword(); + local speedRate = 12000.0 / delay.tofloat(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "character/mage/effect/animation/battlemage_bykk/swingex/precencia/swingeffect_twinkle_04.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local delay = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = 7000.0 / delay.tofloat(); + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "character/mage/effect/animation/battlemage_bykk/swingex/newswingeff_eff_08.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + switch(subtype){ + case 1: + if(sqrChr.getVar("kksfsChaser").get_obj_vector_size() < 0) sqrChr.getVar("kksfsChaser").clear_obj_vector(); + if(!sqrChr.getVar("kksfsChaser").is_obj_vector(obj)) sqrChr.getVar("kksfsChaser").push_obj_vector(obj); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/battlemage_bykk/animation/fusionchaser/precencia/explosion/fusionchaseree_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/battlemage_bykk/animation/fusionchaser/fw.ani"); + if(subtype == 4) ani = sq_CreateAnimation("", "passiveobject/battlemage_bykk/animation/fusionchaser/dl.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local delay = currentAni.getDelaySum(0, 1); + obj.setTimeEvent(3, delay, 1, false); + break; + } + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + createOnlyDrawObjectEX_Battlemage_bykk(obj,"passiveobject/battlemage_bykk/animation/doubleswing/double_swing_sub_down_dodge.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/doubleswing/double_swing_sub_up_dodge.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local sub = receiveData.readDword(); + local sub2 = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + if(sub2 > 0) totalDamage2 = (lifeTime / hitTime) * totalDamage + totalDamage2; + obj.getVar("custom").setInt(10, totalDamage2); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/timerbomb/1_monmu_dodge.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0) obj.setTimeEvent(1, 50, 1, false); + else{ + obj.setTimeEvent(0, hitTime, -1, true); + obj.setTimeEvent(1, lifeTime, 1, false); + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local ani = sq_CreateAnimation("","character/mage/effect/animation/battlemage_bykk/avatar/avataratkfinishtop_eff_j.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/battlemage_bykk/avatar/avataratkfinishbot_eff_t.ani"),true); + obj.setTimeEvent(1, 1000, 1, false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/avatar/avatarfinish_star_b.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function setState_po_battlemage_bykk(obj, state, datas) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0, state); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + local chaser_aniPath = [ + ["passiveobject/battlemage_bykk/animation/chaserdefaultappear.ani","passiveobject/battlemage_bykk/animation/evolutionchaser/evolutionchaserstart01_02.ani","passiveobject/battlemage_bykk/animation/chaseravatar/defaultchaserstart_03.ani","passiveobject/battlemage_bykk/animation/precencia/primitivechaser/start/ccon_00.ani"], + ["passiveobject/battlemage_bykk/animation/chaserdefaultstay.ani","passiveobject/battlemage_bykk/animation/evolutionchaser/evolutionchaserloop_02.ani","passiveobject/battlemage_bykk/animation/chaseravatar/defaultchaserloop_02.ani","passiveobject/battlemage_bykk/animation/precencia/primitivechaser/loop/cc_00.ani"], + ["passiveobject/battlemage_bykk/animation/chaserdefaultdisappear.ani","passiveobject/battlemage_bykk/animation/evolutionchaser/evolutionchaserend_00.ani","passiveobject/battlemage_bykk/animation/chaseravatar/defaultchaserend_00.ani","passiveobject/battlemage_bykk/animation/precencia/primitivechaser/end/ccoff_00.ani"], + ["passiveobject/battlemage_bykk/animation/chaserdefaultattack.ani","passiveobject/battlemage_bykk/animation/evolutionchaser/evolutionchaserspinsawloop_02.ani","passiveobject/battlemage_bykk/animation/chaseravatar/defaultchaserend_00.ani","passiveobject/battlemage_bykk/animation/precencia/primitivechaser/attack/attack_00.ani"], + ["passiveobject/battlemage_bykk/animation/chaserbomb.ani","passiveobject/battlemage_bykk/animation/chaserlaunchpowered/explosionevo_04.ani","passiveobject/battlemage_bykk/animation/chaserlaunchpowered/explosion_01.ani","passiveobject/battlemage_bykk/animation/precencia/primitivechaser/explosion/ccpp_00.ani"] + ]; + local sub = obj.getVar("custom").getInt(11); + local ani = sq_CreateAnimation("",chaser_aniPath[state - 20][sub]); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local sizeRateSet = obj.getVar("custom").getInt(12); + local sizeRate_all = [[100,60,125,125],[150,80,125,125],[250,120,125,125]]; + local sizeRate = sizeRate_all[sizeRateSet][sub].tofloat() / 100.0; + if(state != 23){ + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + switch(state){ + case 20://開始 + if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 15, -1, true); + break; + case 21://持續 + local lifeTime = obj.getVar("custom").getInt(13); + obj.setTimeEvent(13, lifeTime, 1, false); + break; + case 22://結束 + break; + case 23://攻擊 + if(obj.getVar("target").get_obj_vector_size() > 0){ + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + if(delaySum > 300) delaySum = 300; + obj.setTimeEvent(14, delaySum / 20, 20, true); + } + break; + case 24://爆炸 + local hitMax = 1; + if(sub == 1) hitMax = sq_GetIntData(sqrChr, SKILL_BYKK_CHASEREVOLUTION, 7); + if(hitMax > 1){ + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + obj.setTimeEvent(0, delaySum / hitMax, hitMax - 1, false); + } + local atkIndex = [5,6,5,34]; + local totalDamage = obj.getVar("custom").getInt(10); + if(sub == 1){ + totalDamage = totalDamage * (65 + sq_GetLevelData(sqrChr, SKILL_BYKK_CHASER, 5, sq_GetSkillLevel(sqrChr, 22))) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[sub])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local decreasespeedLevel = obj.getVar("buff").getInt(12); + local decreasespeedProb = obj.getVar("buff").getInt(13); + local decreasespeedRate = obj.getVar("buff").getInt(14); + local decreasespeedTime = obj.getVar("buff").getInt(15); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW,decreasespeedProb,decreasespeedLevel,decreasespeedTime,decreasespeedRate); + switch(sub){ + case 0: sq_CreateParticle("passiveobject/battlemage_bykk/animation/chaserlaunchpowered/avatarchaserlaunchpowered.ptl", obj, 0, 0, 0, true, 30, 0, 1); break; + case 1: sq_CreateParticle("passiveobject/battlemage_bykk/animation/evolutionchaser/starparticle.ptl", obj, 0, 0, 0, true, 30, 0, 1); break; + case 2: sq_CreateParticle("passiveobject/battlemage_bykk/animation/chaseravatar/boomdefaultparticle.ptl", obj, 0, 0, 0, true, 30, 0, 1); break; + } + local expsizeRate = obj.getVar("custom").getInt(17); + print("obj-expsizeRate = "+expsizeRate); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = expsizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + switch(subtype){ + case 1: + case 2: + case 11: + case 12: + local aniPath = [ + ["character/mage/effect/animation/battlemage_bykk/strengthhandstrike/start_front.ani","character/mage/effect/animation/battlemage_bykk/strengthhandstrike/loop_front.ani"], + ["character/mage/effect/animation/battlemage_bykk/strengthhandstrike/start_back.ani","character/mage/effect/animation/battlemage_bykk/strengthhandstrike/loop_back.ani"], + ["character/mage/effect/animation/battlemage_bykk/strengthhandstrike/precencia/start_front.ani","character/mage/effect/animation/battlemage_bykk/strengthhandstrike/precencia/precencia_loop_front.ani"], + ["character/mage/effect/animation/battlemage_bykk/strengthhandstrike/precencia/start_back.ani","character/mage/effect/animation/battlemage_bykk/strengthhandstrike/precencia/precencia_loop_back.ani"] + ]; + local tz = 1; + if(subtype > 10) tz = 9; + local ani = sq_CreateAnimation("",aniPath[subtype - tz][state - 20]); + obj.setCurrentAnimation(ani); + break; + } + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","character/mage/effect/animation/avatar/dragonspear/chaser2.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/avatar/dragonspear/chaser1.ani"),true); + local delay = (obj.getVar("custom").getInt(12) * 200 + 1200) / obj.getVar("custom").getInt(14) * 100; + obj.setTimeEvent(0, delay, 1, false); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/battlemage_bykk/animation/dragonspearexplosion.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sizeRate = obj.getVar("custom").getInt(11); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + switch(subtype){ + case 1: + local aniPath = ["passiveobject/battlemage_bykk/animation/chasercluster/chaserclustermainloop.ani","passiveobject/battlemage_bykk/animation/chasercluster/chaserclustermainexplosion.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + if(state > 20){ + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = obj.getVar("custom").getInt(11); + obj.setTimeEvent(1, 600 / hitMax, hitMax, true); + } + break; + case 2: + local aniPath = ["passiveobject/battlemage_bykk/animation/chasercluster/chaserclusterstart_00.ani","passiveobject/battlemage_bykk/animation/chasercluster/chaserclusterloop_00.ani","passiveobject/battlemage_bykk/animation/chasercluster/chaserclusterend_00.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + break; + } + + local sizeRate = obj.getVar("custom").getInt(12); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + switch(subtype){ + case 1: + local sub = obj.getVar("custom").getInt(10); + local aniPath = [ + ["character/mage/effect/animation/battlemage_bykk/fusionchaser/nn_cast.ani","character/mage/effect/animation/battlemage_bykk/fusionchaser/a/nnfusionchaserfull_loop.ani","character/mage/effect/animation/battlemage_bykk/fusionchaser/precencia/pp_cast.ani"], + ["passiveobject/battlemage_bykk/animation/fusionchaser/full/normalspin_fcspin_normal.ani","passiveobject/battlemage_bykk/animation/fusionchaser/full/icespin_fcspin_normal.ani","passiveobject/battlemage_bykk/animation/fusionchaser/precencia/spin/fcspin2_00.ani"], + ["passiveobject/battlemage_bykk/animation/fusionchaser/full/normalspin_r_fcspin_normal.ani","passiveobject/battlemage_bykk/animation/fusionchaser/full/icespin_r_fcspin_normal.ani","passiveobject/battlemage_bykk/animation/fusionchaser/precencia/spin/fcspin2_r_00.ani"] + ]; + local ani = sq_CreateAnimation("", aniPath[state - 20][sub]); + obj.setCurrentAnimation(ani); + if(state == 21){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath[state - 19][sub]),true); + } + break; + } + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onEndCurrentAni_po_battlemage_bykk(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + case 23: obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + switch(subtype){ + case 1: + case 2: + case 11: + case 12: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 3: + case 4: + case 13: + case 14: + case 20: + case 21: + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + switch(subtype){ + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + switch(subtype){ + case 1: + switch(state){ + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } +} + +function onTimeEvent_po_battlemage_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 10://判斷距離 + if(sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local baseX = obj.getVar("custom").getInt(14), baseY = obj.getVar("custom").getInt(15), baseZ = obj.getVar("custom").getInt(16); + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),baseX)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr) - baseY); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - baseZ); + local direction = sqrChr.getDirection(); + if(obj.getDirection() != direction) obj.setDirection(direction); + if(disX > 10){ + local baseM = 25; + local moveX = disX / baseM + 1; + if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),baseX)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 0){ + local baseM = 25; + local moveY = disY / baseM + 1; + if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disZ > 0){ + local baseM = 25; + local moveZ = disZ / baseM + 1; + if(sq_GetZPos(obj) - baseZ > sq_GetZPos(sqrChr)) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) - moveZ); + else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + moveZ); + } + if(disX <= 10 && disY <= 0 && disZ <= 0){ + obj.stopTimeEvent(10); + obj.setTimeEvent(11,300,-1,false); + } + break; + case 11://移動 + local baseX = obj.getVar("custom").getInt(14), baseY = obj.getVar("custom").getInt(15), baseZ = obj.getVar("custom").getInt(16); + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),baseX)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr) - baseY); + local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - baseZ); + if(disX > 10 || disY > 0 || disZ > 5){ + obj.stopTimeEvent(11); + obj.stopTimeEvent(12); + obj.setTimeEvent(10,15,-1,false); + } + else{ + if(!obj.isExistTimeEvent(12)) obj.setTimeEvent(12, 100, -1, true); + } + break; + case 12: + local v = sq_GetUniformVelocity(0, 2, timeEventCount % 20, 5); + if(timeEventCount % 20 > 5) v = sq_GetUniformVelocity(2, 0, timeEventCount % 20 - 5, 5); + if(timeEventCount % 20 > 10) v = sq_GetUniformVelocity(0, -2, timeEventCount % 20 - 10, 5); + if(timeEventCount % 20 > 15) v = sq_GetUniformVelocity(-2, 0, timeEventCount % 20 - 15, 5); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + v); + break; + case 13://轉至結束 + if(obj.getState() < 22) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 14://移動到目標 + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local moveX = sq_GetUniformVelocity(sq_GetXPos(obj), sq_GetXPos(targetObj), timeEventCount, 20); + local moveY = sq_GetUniformVelocity(sq_GetYPos(obj), sq_GetYPos(targetObj), timeEventCount, 20); + local moveZ = sq_GetUniformVelocity(sq_GetZPos(obj), sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 1, moveY); + sq_setCurrentAxisPos(obj, 2, moveZ); + } + if(timeEventCount >= 20) obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 15: + local moveX = sq_GetUniformVelocity(sq_GetXPos(obj), obj.getVar("moveSet").getInt(10), timeEventCount, 15); + local moveZ = sq_GetUniformVelocity(sq_GetZPos(obj), obj.getVar("moveSet").getInt(11), timeEventCount, 15); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 2, moveZ); + if(timeEventCount >= 15){ + obj.setTimeEvent(16, obj.getVar("moveSet").getInt(14) / 3, 1, false); + } + break; + case 16: + obj.setTimeEvent(17, obj.getVar("moveSet").getInt(14) / 45, 15, true); + break; + case 17: + local moveX = sq_GetUniformVelocity(sq_GetXPos(obj), obj.getVar("moveSet").getInt(12), timeEventCount, 15); + local moveZ = sq_GetUniformVelocity(sq_GetZPos(obj), obj.getVar("moveSet").getInt(13), timeEventCount, 15); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 2, moveZ); + if(timeEventCount >= 15){ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + + } + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + switch(timeEventIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(sqrChr, "character/mage/effect/animation/battlemage_bykk/chasersexplosion/smash.ani", 0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + switch(timeEventIndex){ + case 0: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE || timeEventCount >= 30) sq_SendDestroyPacketPassiveObject(obj); + local baseX = obj.getVar("move").getInt(10); + local direction = obj.getVar("move").getInt(11); + if(direction == ENUM_DIRECTION_LEFT){ + local nowX = sq_GetXPos(obj); + if(nowX < baseX){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + obj.stopTimeEvent(0); + obj.setTimeEvent(1, 50, 1, false); + } + else obj.getVar("move").setInt(10, nowX); + } + else if(direction == ENUM_DIRECTION_RIGHT){ + local nowX = sq_GetXPos(obj); + if(nowX > baseX){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + obj.stopTimeEvent(0); + obj.setTimeEvent(1, 50, 1, false); + } + else obj.getVar("move").setInt(10, nowX); + } + break; + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + switch(timeEventIndex){ + case 0: + local v = sq_GetUniformVelocity(0, 500, timeEventCount, 40); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + switch(timeEventIndex){ + case 0: + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetZPos(obj)); + local speedRate = obj.getVar("custom").getInt(14); + local delay = 4 / speedRate * 100; + obj.setTimeEvent(1, delay, 30, true); + break; + case 1: + local moveX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 300); + local moveZ = obj.getVar("custom").getInt(13); + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), moveX, timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(11), moveZ, timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + switch(timeEventIndex){ + case 0: + if(subtype == 1) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.resetHitObjectList(); + if(timeEventCount >= obj.getVar("custom").getInt(11)){ + if(obj.getVar("custom").getInt(11) != 1) sq_SendDestroyPacketPassiveObject(obj); + else obj.setTimeEvent(2, 100, 1, false); + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + switch(timeEventIndex){ + case 0: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj)); + break; + } + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + switch(timeEventIndex){ + case 0: + if(sqrChr){ + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 80)); + if(timeEventCount >= 30 && state == 20) sq_SendDestroyPacketPassiveObject(obj); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + switch(timeEventIndex){ + case 0: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + obj.stopTimeEvent(0); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + obj.setTimeEvent(2, 100, 1, false); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + switch(timeEventIndex){ + case 1: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + break; + } + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } +} + +function onAttack_po_battlemage_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_ARMONIA) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, CHASER_APDPATH)) break; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrChr, CHASER_APDPATH); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, -1, false, CHASER_APDPATH, true); + // setDamageRate_BattleMage_bykk(obj); + } + local buffTime = obj.getVar("buff").getInt(18); + if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_ARMONIA) < 1) addAppendage.sq_SetValidTime(buffTime); + else addAppendage.sq_SetValidTime(0); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_BYKK_CHASER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_CHASER)); + CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, sqrChr, true); + + local movespeedRate = obj.getVar("buff").getInt(10); + local attackspeedRate = obj.getVar("buff").getInt(11); + local criticaldamageRate = obj.getVar("buff").getInt(17); + local change_appendage = addAppendage.sq_getChangeStatus("kkschaser"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("kkschaser",sqrChr, sqrChr, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticaldamageRate*0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticaldamageRate*0.1).tofloat()); + } + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + switch(subtype){ + case 21: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(10) * 22 / 100; + cearteSkillPassive_Battlemage_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0, sq_GetCenterZPos(boundingBox) - 10,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,22,totalDamage,0,0,0,0,0,0,0); + } + break; + } + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_SetShake(obj, 5, 50); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + switch(subtype){ + case 2: + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + obj.sq_PlaySound("AVATAR_FINISH_EFFECT"); + local apdPath = "character/mage/battlemage_bykk/ap/ap_avatarfinish.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, SKILL_BYKK_AVATARFINISH, false, apdPath, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); + addAppendage.sq_SetValidTime(2000); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARFINISH, -1, 1, 1.0) + 100; + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + cearteSkillPassive_Battlemage_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,sq_GetObjectHeight(damager) / 2,sqrChr.getDirection(),SKILL_BYKK_AVATARFINISH,1,totalDamage,group,uniqueId,0,0,0,0,0); + break; + } + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } + + if(skillIndex != SKILL_BYKK_CHASER){ + if(isStuck) return; + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, CHASERLAUNCH_APDPATH)) CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, -1, false, CHASERLAUNCH_APDPATH, true); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrChr, CHASERLAUNCH_APDPATH); + if(addAppendage){ + local buffTime = sq_GetLevelData(sqrChr, SKILL_BYKK_CHASERLAUNCH, 0, sq_GetSkillLevel(sqrChr, SKILL_BYKK_CHASERLAUNCH)); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.getVar("target").clear_obj_vector(); + addAppendage.getVar("target").push_obj_vector(damager); + } + } +} + +function onKeyFrameFlag_po_battlemage_bykk(obj, flagIndex) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } +} + +function procAppend_po_battlemage_bykk(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(skillIndex){ + case SKILL_BYKK_THRUST://龍牙 + break; + case SKILL_BYKK_CHASER://炫紋 + break; + case SKILL_BYKK_CHASERSEXPLOSION://炫紋強壓 + break; + case SKILL_BYKK_UPPERSWING://天擊 + break; + case SKILL_BYKK_SWING://碎霸 + break; + case SKILL_BYKK_HANDSTRIKE://落花掌 + break; + case SKILL_BYKK_POKETHROW://圓舞棍 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE://流星閃影擊 + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE://強襲流星打 + break; + case SKILL_BYKK_DRAGONSPEAR://煌龍偃月 + break; + case SKILL_BYKK_QUASAREXPLOSION://星紋隕爆 + break; + case SKILL_BYKK_CHASERCLUSTER://炫紋簇 + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX://流星雷連擊 + break; + case SKILL_BYKK_SWINGEX://閃擊碎霸 + break; + case SKILL_BYKK_FUSIONCHASER://炫紋融合 + break; + case SKILL_BYKK_CHASEREVOLUTION://炫紋進化 + break; + case SKILL_BYKK_DOUBLESWING://雙重錘擊 + break; + case SKILL_BYKK_TIMERBOMB://炫紋爆彈 + break; + case SKILL_BYKK_AVATARDANCE://使徒之舞 + break; + case SKILL_BYKK_AVATARFINISH://一騎當千碎霸 + break; + case SKILL_BYKK_CHASERLAUNCHPOWERED://炫紋聚合 + break; + case SKILL_BYKK_PRECENCIA://太古化身 + break; + case SKILL_BYKK_LAYOFPRIMITIVE://炫紋之源:太古神光 + break; + } +} + + + + +function onSetState_mage_attack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local index = obj.sq_GetVectorData(datas, 0); + // if(index == 0){ + // local set = obj.sq_GetVectorData(datas, 1); + // print("test :"+set); + // if(set == 100){ + // obj.setTimeEvent(1, 10, 1, false); + // } + // } + // print("index = "+index); + if(index == 50){ + obj.sq_SetCurrentAnimation(205); + obj.getVar("setattack").setInt(0, index); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + // sq_SetVelocity(obj, 0, 0.0); + return; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK) > 0){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local aniName = ["Attack1","Attack2","Attack3"]; + local ani = getCurrentAnimation_precencia(obj, aniName[index], false, false); + obj.setCurrentAnimation(ani); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + local aniName = [206,207,208]; + obj.sq_SetCurrentAnimation(aniName[index]); + } + else obj.sq_SetCurrentAnimation(10 + index); + local atkIndex = [9,10,11], speedRate = [20,50,20]; + local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[index])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetVelocity(obj, 0, speedRate[index].tofloat()); + } +} + +function onEndCurrentAni_mage_attack(obj) +{ + local substate = obj.getVar("setattack").getInt(0) + if(substate == 50){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + return; +} + +function onTimeEvent_mage_attack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onAttack_mage_dashattack(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onAttack_mage_jumpattack(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; +} + +function onAfterSetState_mage_dashattack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + local speed = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speed = 1.3; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 1.6; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); +} + +function onAfterSetState_mage_jumpattack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + local speed = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speed = 1.3; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 1.6; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); +} + + + +function checkExecutableSkill_Avatardance(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AVATARDANCE); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Avatardance(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Avatardance(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + local aniSet = [ + [84,85,86,87,88,89,90,91,297], + ["AvatarDance_A","AvatarDance_B","AvatarDance_C","AvatarDance_D","AvatarDance_E01","AvatarDance_E02","AvatarDance_F01","AvatarDance_F02","AvatarDance_ChaserPush"], + [212,213,214,216,217,215] + ]; + switch(obj.getVar("skillSub").getInt(100)){ + case 0: obj.sq_SetCurrentAnimation(aniSet[0][subState]); break; + case 1: + local Ani = getCurrentAnimation_precencia(obj, aniSet[1][subState], false, false); + obj.setCurrentAnimation(Ani); + break; + case 2: + obj.sq_SetCurrentAnimation(aniSet[2][subState]); + switch(subState){ + case 1: obj.sq_PlaySound("WZ_PRECENCIA_AVATARDANCE_1_0"+sq_getRandom(1, 2).tostring()); obj.sq_PlaySound("PRECENCIA_AVATARDANCE_1"); obj.sq_PlaySound("PRECENCIA_AVATARDANCE_2"); break; + case 2: obj.sq_PlaySound("WZ_PRECENCIA_AVATARDANCE_1_0"+sq_getRandom(3, 4).tostring()); obj.sq_PlaySound("PRECENCIA_AVATARDANCE_3"); obj.sq_PlaySound("PRECENCIA_AVATARDANCE_4"); break; + case 3: obj.sq_PlaySound("R_WZ_PRECENCIA_AVATARDANCE_2"); obj.sq_PlaySound("PRECENCIA_AVATARDANCE_5"); break; + case 4: obj.sq_PlaySound("WZ_PRECENCIA_AVATARDANCE_3"); obj.sq_PlaySound("PRECENCIA_AVATARDANCE_6"); break; + } + break; + } + local speedRate = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speedRate = 1.3; + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speedRate = 1.5; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + if(subState == 6 && obj.getVar("skillSub").getInt(100) < 2){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("avatardance_move").setInt(11, sq_GetZPos(obj)); + if(obj.isExistTimeEvent(1)) obj.stopTimeEvent(1); + obj.setTimeEvent(2, delay / 60, 30, true); + } + else if(subState == 4 && obj.getVar("skillSub").getInt(100) == 2){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 4); + obj.getVar("avatardance_move").setInt(11, sq_GetZPos(obj)); + if(obj.isExistTimeEvent(1)) obj.stopTimeEvent(1); + obj.setTimeEvent(2, delay / 60, 30, true); + } + else if(subState == 7 && obj.getVar("skillSub").getInt(100) < 2){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/avatardance/avatardance_d_eff03.ani"), 0, 0); + } +} + +function onEndCurrentAni_Avatardance(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + local sub = sq_GetLevelData(obj, SKILL_BYKK_AVATARDANCE, 13, sq_GetSkillLevel(obj, SKILL_BYKK_AVATARDANCE)); + local stateMax = 7; + if(obj.getVar("skillSub").getInt(100) == 2){ + stateMax = 4; + } + if(sub > 0 && ((subState == 3 && obj.getVar("skillSub").getInt(100) < 2) || (subState == 2 && obj.getVar("skillSub").getInt(100) == 2))){ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_IntVectPush(8); + else obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARDANCE, STATE_PRIORITY_AUTO, true); + } + else{ + if(subState < stateMax){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARDANCE, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + } +} + +function onProcCon_Avatardance(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Avatardance(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_PlaySound("AVATAR_DANCE_SUMMONSPEAR"); + sq_flashScreen(obj, 180, 0, 0, 102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_a_eff01.ani", 0, 1, 0); + break; + case 102: sq_flashScreen(obj, 0, 0, 60, 76, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 103: + obj.sq_PlaySound("R_WZ_ATK"); + obj.sq_PlaySound("AVATAR_DANCE_01"); + sq_SetMyShake(obj, 6, 150); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_b_back_eff01.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_b_eff01.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 104: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_c_eff01.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 105: obj.sq_PlaySound("AVATAR_DANCE_02"); sq_SetMyShake(obj, 6, 150); break; + case 106: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_d_eff03.ani", 0, 1, 0); break; + case 107: + obj.sq_PlaySound("R_WZ_ATK"); + obj.sq_PlaySound("AVATAR_DANCE_03"); + sq_SetMyShake(obj, 6, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 2, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 108: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_e01_moveeff01.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_e01_eff01.ani", 0, 1, 0); + break; + case 109: + local speed = 100.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 110: + obj.sq_PlaySound("AVATAR_DANCE_04"); + sq_SetMyShake(obj, 5, 120); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_e02_backeff03.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatardance/avatardance_e02_eff03.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 3, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("avatardance_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("avatardance_move").setInt(11, sq_GetZPos(obj)); + obj.setTimeEvent(1, delay / 80, 40, true); + break; + case 111: + if(obj.getVar("skillSub").getInt(100) == 1) break; + obj.sq_PlaySound("R_WZ_AVATAR_DANCE_FIN"); + sq_SetMyShake(obj, 8, 400); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatardance/avatardance_f02_flooreff01.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatardance/avatardance_f02_eff05.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 4, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 112: + obj.sq_PlaySound("AVATAR_DANCE_FINISH"); + if(obj.getVar("skillSub").getInt(100) == 1){ + obj.sq_PlaySound("R_WZ_AVATAR_DANCE_FIN"); + sq_SetMyShake(obj, 8, 400); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatardance/avatardance_f02_flooreff01.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatardance/avatardance_f02_eff05.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 4, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + break; + case 201: + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_1"); + sq_SetMyShake(obj, 6, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 202: + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_2"); + sq_SetMyShake(obj, 6, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 203: + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_3"); + sq_SetMyShake(obj, 6, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 2, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatardance/precencia/avatardance_c_04.ani", 0, 1, 0); + break; + case 204: + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_4"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 3, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 5); + obj.getVar("avatardance_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("avatardance_move").setInt(11, sq_GetZPos(obj)); + obj.setTimeEvent(3, delay / 10, 10, true); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatardance/precencia/avatardance_d_08.ani", 0, 1, 0); + break; + case 205: + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_5"); + break; + case 206: + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_6"); + sq_SetMyShake(obj, 8, 400); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 4, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 207: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_PlaySound("PRECENCIA_AVATARDANCE_3"); + obj.sq_PlaySound("R_WZ_ATK"); + } + else{ + obj.sq_PlaySound("AVATAR_DANCE_03"); + obj.sq_PlaySound("R_WZ_AVATAR_DANCE_FIN"); + } + sq_SetMyShake(obj, 6, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 3, 1.0) + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARDANCE, -1, 4, 1.0) + 200; + totalDamage = totalDamage * 130 / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_flashScreen(obj, 20, 90, 20, 127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 150); + break; + case 208: obj.sq_PlaySound("AVATAR_DANCE_CHARGE_TALISMAN"); break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + return true; +} + +function onTimeEvent_Avatardance(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vx = sq_GetUniformVelocity(0, 200, timeEventCount, 40); + local vz = sq_GetUniformVelocity(0, 200, timeEventCount, 40); + local dstX = sq_GetDistancePos(obj.getVar("avatardance_move").getInt(10), obj.getDirection(), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 2: + local vz = sq_GetUniformVelocity(obj.getVar("avatardance_move").getInt(11), 0, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + local vx = sq_GetUniformVelocity(0, 200, timeEventCount, 10); + local vz = sq_GetUniformVelocity(0, 100, timeEventCount, 10); + local dstX = sq_GetDistancePos(obj.getVar("avatardance_move").getInt(10), obj.getDirection(), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onEndState_Avatardance(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_AVATARDANCE){ + sq_SimpleMoveToNearMovablePos(obj,1200); + } +} + + +function checkExecutableSkill_Avatarfinish(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AVATARFINISH); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_IntVectPush(0); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARFINISH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Avatarfinish(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Avatarfinish(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(295); + obj.sq_PlaySound("AVATAR_FINISH_CAST"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 5900 / delay; + local aniPath = ["character/mage/effect/animation/battlemage_bykk/avatar/avatarfinish_normal_ready_02.ani","character/mage/effect/animation/battlemage_bykk/avatar/avatarfinish_normal_ready_03.ani","character/mage/effect/animation/battlemage_bykk/avatar/avatarfinish_normal_ready_04.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local ypos = 1; + if(i > 1) ypos = -1; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, ypos, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "AvatarFinish_Body", false, false); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_AVATAR_FINISH"); + obj.sq_PlaySound("AVATAR_FINISH"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 8000 / delay; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARFINISH, -1, 0, 1.0) + 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 4)) / 1000; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_AVATARFINISH,2,totalDamage,speedRate,0,0,0,0,0,0); + obj.setTimeEvent(0, 1000 / speedRate, 1, false); + } + else{ + obj.sq_SetCurrentAnimation(211); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 8700 / delay; + for(local i = 18; i < 27; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/avatar_inishxx1_"+i.tostring()+".ani", 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARFINISH, -1, 0, 1.0) + 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 4)) / 1000; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + } + sq_flashScreen(obj,650,150,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + obj.sq_SetCurrentAnimation(296); + break; + } +} + +function onEndCurrentAni_Avatarfinish(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARFINISH, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARFINISH, STATE_PRIORITY_AUTO, true); + break; + } + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Avatarfinish(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Avatarfinish(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 111: + obj.sq_PlaySound("PRCENCIA_AVATAR_CAST"); + break; + case 301: + obj.sq_PlaySound("AVATAR_FINISH_CAST"); + sq_flashScreen(obj,0,80,80,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 303: + obj.sq_PlaySound("AVATAR_FINISH"); + sq_flashScreen(obj,60,60,420,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 8, 160); + break; + } + return true; +} + +function onTimeEvent_Avatarfinish(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + sq_flashScreen(obj,60,60,420,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 8, 160); + break; + } +} + +function onEndState_Avatarfinish(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Avatarfinish(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + obj.sq_PlaySound("AVATAR_FINISH_EFFECT"); + local apdPath = "character/mage/battlemage_bykk/ap/ap_avatarfinish.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_BYKK_AVATARFINISH, false, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); + addAppendage.sq_SetValidTime(2000); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AVATARFINISH, -1, 1, 1.0) + 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 4)) / 1000; + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,sq_GetObjectHeight(damager) / 2,obj.getDirection(),SKILL_BYKK_AVATARFINISH,1,totalDamage,group,uniqueId,0,0,0,0,0); +} + + + + +function checkExecutableSkill_ChaserAutoCreate(obj) +{ + // if (!obj) return false; + // local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHASERAUTOCREATE); + // if (isUse){ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(SKILL_BYKK_CHASERAUTOCREATE, STATE_PRIORITY_IGNORE_FORCE, true); + // return true; + // } + // return false; +} + +function checkCommandEnable_ChaserAutoCreate(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ChaserAutoCreate(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + break; + } +} + +function onEndCurrentAni_ChaserAutoCreate(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_CHASERAUTOCREATE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_ChaserAutoCreate(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_ChaserAutoCreate(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_ChaserAutoCreate(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ChaserAutoCreate(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_Chasercluster(obj) +{ + if (!obj) return false; + if(obj.getVar("chaserClusterObj01").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_CHASERCLUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHASERCLUSTER); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_CHASERCLUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Chasercluster(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Chasercluster(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(219); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "ChaserClusterBodyStart_09", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(82); + } + local flashScreenObj = sq_flashScreen(obj,80,1300,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("flashobj").clear_obj_vector(); + obj.getVar("flashobj").push_obj_vector(flashScreenObj); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(220); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "ChaserClusterBodyEnd_06", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(83); + } + break; + } + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + + local speed = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speed = 0.3 + speed; + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); +} + +function onEndCurrentAni_Chasercluster(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Chasercluster(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Chasercluster(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("CHASER_CLUSTER_SWISH"); + obj.sq_PlaySound("R_WZ_CHASER_CLUSTER"); + sq_SetMyShake(obj, 5, 100); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/chaserclusterbodystartobj_07.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERCLUSTER, -1, 0, 1.0) + 100; + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASERCLUSTER, 2); + if(sq_GetLevelData(obj, SKILL_BYKK_CHASERCLUSTER, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERCLUSTER)) > 0) createMax = 1; + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_CHASERCLUSTER, 0); + if(sq_GetLevelData(obj, SKILL_BYKK_CHASERCLUSTER, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERCLUSTER)) > 0) lifeTime = 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CHASERCLUSTER, 13); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,232,0,50,obj.getDirection(),SKILL_BYKK_CHASERCLUSTER,1,totalDamage,createMax,lifeTime,sizeRate,0,0,0,0); + local xpos = [140,180,240,303,325,310,370,365], zpos = [45,140,75,130,95,40,70,150], size = [130,95,150,100,60,105,110,75]; + if(sq_GetLevelData(obj, SKILL_BYKK_CHASERCLUSTER, 2, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERCLUSTER)) > 0){ + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,232,0,100,obj.getDirection(),SKILL_BYKK_CHASERCLUSTER,2,lifeTime,300,0,0,0,0,0,0); + } + else{ + for(local i = 0; i < 8; i++){ + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,xpos[i],0,zpos[i],obj.getDirection(),SKILL_BYKK_CHASERCLUSTER,2,lifeTime,size[i],0,0,0,0,0,0); + } + } + break; + case 2://引爆 + case 13://引爆 + //if(flagIndex == 2) obj.sq_PlaySound("WZ_CHASER_EXPLOSION"); + local attackObj = obj.getVar("chaserClusterObj01").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + local size = obj.getVar("chaserClusterObj02").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local effectObj = obj.getVar("chaserClusterObj02").get_obj_vector(i); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.isExistTimeEvent(0)) colObj.stopTimeEvent(0); + if(colObj.getState() <= 21) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + case 11: sq_flashScreen(obj, 350, 150, 100, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 12: + obj.sq_PlaySound("WZ_PRECENCIA_CHASERCLUSTER_1"); + sq_SetMyShake(obj, 5, 120); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/precencia/chasercluster_13.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/precencia/chasercluster_12.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/precencia/chasercluster_11.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/precencia/chasercluster_10.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/precencia/chasercluster_09.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/chasercluster/precencia/chasercluster_08.ani", 0, 1, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERCLUSTER, -1, 0, 1.0) + 100; + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASERCLUSTER, 2); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_CHASERCLUSTER, 0); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CHASERCLUSTER, 13); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,232,0,50,obj.getDirection(),SKILL_BYKK_CHASERCLUSTER,1,totalDamage,createMax,lifeTime,sizeRate,0,0,0,0); + local xpos = [140,180,240,303,325,310,370,365], zpos = [45,140,75,130,95,40,70,175], size = [150,75,175,100,80,120,125,60]; + for(local i = 0; i < 8; i++){ + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,xpos[i],0,20 + zpos[i],obj.getDirection(),SKILL_BYKK_CHASERCLUSTER,2,lifeTime,size[i],0,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_Chasercluster(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Chasercluster(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_Chaserevolution(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHASEREVOLUTION); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_GODDNESSOFWAR, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Chaserevolution(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Chaserevolution(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +function onEndCurrentAni_Chaserevolution(obj) +{ + if(!obj) return; +} + +function onProcCon_Chaserevolution(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Chaserevolution(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Chaserevolution(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Chaserevolution(obj, new_state) +{ + if(!obj) return; +} + + + +function checkExecutableSkill_ChaserLaunch(obj) +{ + if (!obj) return false; + // local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, CHASERLAUNCH_APDPATH); + // if(addAppendage){ + // local targetObj = addAppendage.getVar("target").get_obj_vector(0); + // if(targetObj){ + // shootBattlemageChaser(obj, targetObj); + // obj.startSkillCoolTime(SKILL_BYKK_CHASERLAUNCH, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERLAUNCH), -1); + // return true; + // } + // else return false; + // } + // else return false; + return true; +} + +function checkCommandEnable_ChaserLaunch(obj) +{ + if (!obj) return false; + // if(obj.getVar("kksChaser").get_obj_vector_size() < 1) return false; + // if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, CHASERLAUNCH_APDPATH)) return false; + return true; +} + +function onSetState_ChaserLaunch(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +function onEndCurrentAni_ChaserLaunch(obj) +{ + if(!obj) return; +} + +function onProcCon_ChaserLaunch(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_ChaserLaunch(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_ChaserLaunch(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ChaserLaunch(obj, new_state) +{ + if(!obj) return; +} + diff --git a/user/116.205.165.25/6_mage_10.c b/user/116.205.165.25/6_mage_10.c new file mode 100644 index 0000000..8ea4b68 --- /dev/null +++ b/user/116.205.165.25/6_mage_10.c @@ -0,0 +1,2862 @@ + +function setCustomData_po_witch_bykk_kak(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("skillIndex").clear_vector(); + obj.getVar("skillIndex").push_vector(skillIndex); + obj.getVar("subtype").clear_vector(); + obj.getVar("subtype").push_vector(subtype); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + switch(subtype){ + case 1://雲 + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local successType = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = 100 + sq_GetLevelData(sqrChr, SKILL_BYKK_ACIDCLOUD, 6, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ACIDCLOUD)); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(lifeTime); + local lightningtime = sq_GetLevelData(sqrChr, SKILL_BYKK_ACIDCLOUD, 9, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ACIDCLOUD)); + if(successType >= 3){ + local speedRate = sq_GetLevelData(sqrChr, SKILL_BYKK_LAPISPHILOSOPHORUM, 3, sq_GetSkillLevel(sqrChr, SKILL_BYKK_LAPISPHILOSOPHORUM)); + lightningtime = (lightningtime.tofloat() * (1000.0 - speedRate.tofloat()) / 1000.0).tointeger(); + } + obj.getVar("custom").push_vector(lightningtime); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(totalDamage2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0,lifeTime,1,false); + if(successType >= 1) obj.setTimeEvent(1,hitTime,-1,false); + else obj.setTimeEvent(1,hitTime * 2,-1,false); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://冰雨雲 + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local successType = receiveData.readDword(); + local prob = receiveData.readDword();0 + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(lifeTime); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(level); + obj.getVar("custom").push_vector(time); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(hitTime); + if(sq_GetLevelData(sqrChr, SKILL_BYKK_ACIDCLOUD, 8, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ACIDCLOUD)) > 0) obj.getVar("custom").push_vector(1); + //obj.setTimeEvent(0,lifeTime,1,false); + obj.setTimeEvent(1,hitTime,-1,false); + obj.setMapFollowParent(obj.getParent()); + obj.setMapFollowType(1); + sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3://雷電 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/thunder.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 4: + case 5: + case 6: + case 7: + if(subtype == 7){ + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(obj.getZPos()); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local successType = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(range); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(totalDamage2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + obj.setTimeEvent(1,333,1,false); + obj.setTimeEvent(2,800,1,false); + break; + case 2: + local range = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-up1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-up2.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-up3.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-down1.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-down2.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-down3.ani"),true); + + local sizeRate = range.tofloat() / 400.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 寬度跟高度率 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/antigravitystartersub.ani"); + obj.setCurrentAnimation(ani); + break; + case 4: + local successType = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-normal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + switch(successType){ + case 0: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-failed.ani"),true); + break; + case 1: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-success.ani"),true); + break; + case 2: + case 3: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-success.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-great.ani"),true); + break; + } + sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + break; + } + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + switch(subtype){ + case 1: + local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/001_down_n.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/001_up_d.ani"),true); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/002_up_n.ani",0,-1,-1); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/002_down_d.ani",0,-1,-1); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + break; + case 2: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local lifeTime = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); + obj.setTimeEvent(0,lifeTime,1,false); + obj.setTimeEvent(1,lifeTime - 1500,1,false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(3,lifeTime + 480,1,false); + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(level); + obj.getVar("custom").push_vector(time); + obj.getVar("custom").push_vector(lifeTime); + obj.getVar("custom").push_vector(speedRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + switch(subtype){ + case 1: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + local time = receiveData.readDword(); + obj.setTimeEvent(0,time,1,false); + obj.setTimeEvent(1,50,-1,false); + sqrChr.getVar("broomspinObj").clear_obj_vector(); + sqrChr.getVar("broomspinObj").push_obj_vector(obj); + local parentObj = obj.getParent(); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_BYKK_BROOMSPIN, false,"Appendage/Character/ap_common_suck.nut", false); + if(appendage){ + appendage.sq_SetValidTime(time); + CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); + local auraAppendage = appendage.sq_getAuraMaster("broonspinAura"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("broonspinAura",parentObj, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(450, 450, 100, 100); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/broomspincrash/floor.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/broomspincrash/crash.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/broomspincrash/over.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/broomspincrash/under.ani",0,0,0); + break; + } + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + switch(subtype){ + case 1: + case 4: + local successType = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local level = receiveData.readDword(); + local damageRate = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(time); + obj.getVar("custom").push_vector(damage); + obj.getVar("custom").push_vector(level); + obj.getVar("custom").push_vector(damageRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local successType = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local sub = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/witch_bykk/animation/elecrabbit/explosion/explosion_dodge.ani"; + if(sub >= 1) aniPath = "passiveobject/witch_bykk/animation/elecrabbit/talisman/explosion/explosion_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy1.ptl"); + obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy2.ptl"); + obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy3.ptl"); + obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy4.ptl"); + obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy5.ptl"); + obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy6.ptl"); + obj.sq_SetObjectParticlePos(0, 0, 50); + obj.sq_PlaySound("ELETRIC_RABBIT_EXP"); + break; + } + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local successType = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local level = receiveData.readDword(); + local sub = sq_GetIntData(sqrChr, SKILL_BYKK_ENHANCEDMAGICMISSILE, 11); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(time); + obj.getVar("custom").push_vector(damage); + obj.getVar("custom").push_vector(damageRate); + obj.getVar("custom").push_vector(level); + if(sub > 0){ + obj.getVar("custom").push_vector(2); + obj.getVar("custom").push_vector(1); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + switch(subtype){ + case 1: + sqrChr.getVar("fluorecollider").clear_obj_vector(); + sqrChr.getVar("fluorecollider").push_obj_vector(obj); + local sub = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local successType = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local range = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(range); + obj.getVar("custom").push_vector(sub); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(lifeTime); + local friendlyfa_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FRIENDLYFAMILIAR); + if(friendlyfa_level > 0){ + local speedRate = sq_GetLevelData(sqrChr, SKILL_BYKK_FRIENDLYFAMILIAR, 8, friendlyfa_level); + obj.getVar("custom").push_vector(speedRate); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(successType >= 2){ + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FLUORECOLLIDER); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_FLUORECOLLIDER, 6, skill_level) / 10; + local time = sq_GetLevelData(sqrChr,SKILL_BYKK_FLUORECOLLIDER, 8, skill_level); + local damage = sq_GetLevelData(sqrChr,SKILL_BYKK_FLUORECOLLIDER, 9, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time,damage); + } + obj.setTimeEvent(1,hitTime / 2,-1,false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + switch(subtype){ + case 1: + sqrChr.getVar("heatingfurnace").clear_obj_vector(); + sqrChr.getVar("heatingfurnace").push_obj_vector(obj); + obj.getVar("custom").clear_vector(); + for(local i = 0;i < 10; i++){ + obj.getVar("custom").push_vector(0); + } + local Delay = receiveData.readDword(); + local successType = receiveData.readDword(); + local homunculus = receiveData.readDword(); + obj.getVar("custom").set_vector(0,Delay); + obj.getVar("custom").set_vector(1,successType); + obj.getVar("custom").set_vector(2,homunculus); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://失敗 + local aniPath = "passiveobject/witch_bykk/animation/heatingfurnace/fail_new/";// + local ani = sq_CreateAnimation("",aniPath + "heatingfurnacenewnew_39.ani"); + obj.setCurrentAnimation(ani);// + local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "heatingfurnacenewnew_33.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,70,ENUM_DRAWLAYER_NORMAL); + obj.setTimeEvent(0,720,1,false); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local add_hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(10, add_hitMax); + break; + case 3://石塊 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local successType = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + local aniPath1 = "passiveobject/character/mage/animation/heatingfurnace/stone_piece_collision.ani"; + if(successType >= 1) aniPath1 = "passiveobject/character/mage/animation/heatingfurnace/stone_piece_none.ani"; + local ani = sq_CreateAnimation("",aniPath1); + obj.setCurrentAnimation(ani);// + local currentAni = obj.getCurrentAnimation(); + local aniPath = "passiveobject/character/mage/animation/heatingfurnace/"; + switch(successType){//根據生成類型附加效果 + case 0: + if(sq_getRandom(1,100) >= 50) currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed1.ani"),true); + else currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed2.ani"),true); + break; + case 1: + if(sq_getRandom(1,100) >= 50){ + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed1.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_normal1.ani"),true); + } + else{ + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed2.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_normal2.ani"),true); + } + break; + case 2: + case 3: + if(sq_getRandom(1,100) >= 50){ + currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_great1.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_normal1.ani"),true); + } + else{ + currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_great2.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_normal2.ani"),true); + } + break; + } + local angle = receiveData.readDword(); + local angleMax = receiveData.readDword(); + local sub = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(angle); + obj.getVar("custom").push_vector(angleMax); + obj.getVar("custom").push_vector(sub); + local anglea = 360 / angleMax * angle; + local speed_X = 110 + sq_getRandom(0,40); + local speed_Z = 250 + sq_getRandom(0,100); + local direction = obj.getDirection(); + local tiaozheng = 0; + local tiaozheng2 = angleMax * 5; + if(sub > 0){ + switch(sub){ + case 1: anglea = 45;if(angle > angleMax / 4 * 3) tiaozheng = 100; break; + case 2: anglea = 90;if(angle > angleMax / 2) tiaozheng = 100; break; + case 3: anglea = 135;if(angle > angleMax / 2 && angle < angleMax / 4 * 3) tiaozheng = 100; break; + case 4: anglea = 0;if(angle < angleMax / 2 || angle > angleMax / 4 * 3) tiaozheng = 100; break; + case 6: anglea = 180;if(angle > angleMax / 2 && angle < angleMax / 4 * 3) tiaozheng = 100; break; + case 7: anglea = -45;if(angle < angleMax / 4) tiaozheng = 100; break; + case 8: anglea = -90;if(angle < angleMax / 2) tiaozheng = 100; break; + case 9: anglea = -135;if(angle > angleMax / 4 && angle < angleMax / 2) tiaozheng = 100; break; + } + } + + // obj.getVar("custom").push_vector(anglea); + // obj.getVar("custom").push_vector(speed_X); + // obj.getVar("custom").push_vector(speed_Z); + // obj.getVar("custom").push_vector(sq_GetXPos(obj)); + // obj.getVar("custom").push_vector(sq_GetYPos(obj)); + // obj.getVar("custom").push_vector(sq_GetZPos(obj)); + obj.sq_SetMoveParticle("particle/heatingfurnace_stone.ptl", (anglea).tofloat(), 0.0); + sq_SetSpeedToMoveParticle(obj,0,speed_X + tiaozheng + tiaozheng2); + sq_SetSpeedToMoveParticle(obj,1,tiaozheng * 15 / 10); + sq_SetSpeedToMoveParticle(obj,2,speed_Z); + // obj.setTimeEvent(0,10,4,false); + break; + case 4://爆炸 + local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local successType = receiveData.readDword(); + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + local currentAni = obj.getCurrentAnimation();//得到當前ani + local sizeRate = receiveData.readDword(); + local angle = receiveData.readDword(); + local angleMax = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + if(sub > 0){ + if(angle == 0){ + if(successType >= 1) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + totalDamage = totalDamage * angleMax; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 200, 1, true); + obj.setTimeEvent(2, 50, 1, true); + obj.setTimeEvent(3, 15, 2, true); + obj.setTimeEvent(4, 100, 1, true); + } + else{ + sq_SetFrameDelayTime(currentAni, 0, 50); + } + } + else if(sub == 0){ + if(successType >= 1) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 200, 1, true); + if(successType <= 1) obj.setTimeEvent(2, 50, 1, true); + if(successType <= 1) obj.setTimeEvent(3, 15, 1, true); + if(successType <= 2) obj.setTimeEvent(4, 100, 1, true); + } + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻擊框,x y z比率 + break; + case 5://尾巴 + local anglea = receiveData.readDword(); + local speed_X = receiveData.readDword(); + local speed_Z = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath1 = "passiveobject/witch_bykk/animation/heatingfurnace/",aniPath2 = "stone_tail1.ani"; + switch(sub){ + case 2:aniPath2 = "stone_tail2.ani"; break; + case 3:aniPath2 = "stone_tail3.ani"; break; + case 4:aniPath2 = "stone_tail4.ani"; break; + } + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/heatingfurnace_stone_effcet.ptl", (anglea).tofloat(), 0.0); + sq_SetSpeedToMoveParticle(obj,0,speed_X); + sq_SetSpeedToMoveParticle(obj,2,speed_Z); + break; + case 6://護石爆炸 + local totalDamage = receiveData.readDword(); + totalDamage = totalDamage / 8; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstfront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstback_01.ani"),true); + obj.setTimeEvent(0,180,1,false); + break; + case 7://護石爆炸 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local number_max = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, number_max); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstfront_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstback_01.ani"),true); + obj.setTimeEvent(0,180 / speedRate * 100,1,false); + local pAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 宽度跟高度率 + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);//攻击框,x y z比率 + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + switch(subtype){ + case 11://光電鳗電1 + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + obj.setTimeEvent(0,50,hitMax,true); + break; + case 12://光電鳗電2 + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + obj.getVar().clear_vector(); + obj.getVar().push_vector(totalDamage); + obj.getVar().push_vector(prob); + obj.getVar().push_vector(level); + obj.getVar().push_vector(time); + obj.getVar().push_vector(damage); + obj.setTimeEvent(1,150,hitMax,true); + break; + case 13://光電鳗電3 + local ani = sq_CreateAnimation("","monster/character/mage/witch_bykk/fluore/animation/b/fluore_blightning"+sq_getRandom(1,3).tostring()+".ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); + break; + case 21://暗影夜貓攻擊1 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skilla_attackloop_fluto.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2,50,3,false); + break; + case 22://暗影夜貓攻擊2 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skilla_lastattack_fluto.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 23://暗影夜貓攻擊3 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skillb_pluto.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_HOLD, prob, level, time); + break; + case 24: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skilla_attackloop_fluto.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2,120,-1,false); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(targetObj, obj); + break; + case 31://冰霜雪人雲 + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(hitMax); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 32://冰霜雪人風暴 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/jackfrostaskill/skillbloop_11.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(hitMax); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(targetObj, obj); + obj.setTimeEvent(2,100,-1,false); + break; + case 41://傑克爆彈 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 42: + local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, 1.5, 1.5, 1.5); + break; + } + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local damageRate2 = receiveData.readDword(); + local sub = receiveData.readDword(); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + local totalDamage3 = (totalDamage.tofloat() * damageRate2.tofloat() / 100.0).tointeger(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(totalDamage3); + obj.getVar("custom").push_vector(sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + switch(subtype){ + case 1: + local castTime = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(castTime); + sqrChr.getVar("jackohalloween_pumpkin").clear_obj_vector(); + sqrChr.getVar("jackohalloween_pumpkin").push_obj_vector(obj); + // obj.setMapFollowParent(sqrChr); + // obj.setMapFollowType(1); + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(11, lifeTime); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,0,obj.getDirection(),SKILL_BYKK_JACKOHALLOWEEN,2,totalDamage,hitTime,hitMax,0,0,0,0,0,0); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local parentObj = obj.getParent(); + parentObj.getVar("jackohalloween_lava").clear_obj_vector(); + parentObj.getVar("jackohalloween_lava").push_obj_vector(obj); + sq_moveWithParent(parentObj, obj); + // obj.setMapFollowParent(sqrChr); + // obj.setMapFollowType(1); + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(hitTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + switch(subtype){ + case 1://石塊 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lapisphilosophorumexplosion.ani"); + obj.setCurrentAnimation(ani); + local sizeRate_rec = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate_rec.tofloat() / 100.0 * 1.35; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2://必定失敗爆炸 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1,240,1,false); + break; + case 3://成功 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.setTimeEvent(2,lifeTime,1,false); + obj.setTimeEvent(3,hitTime,-1,false); + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_LAVAPOTION); + local totalDamage2 = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 13, skill_level); + local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 4, skill_level) / 10; + local time = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 6, skill_level); + local damage = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 7, skill_level); + local speedRate = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 11, skill_level); + local jumpRate = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 12, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, sq_GetSkillLevel(sqrChr, 174), time,damage); + local sizeRate = receiveData.readDword(); + local successType = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(speedRate); + obj.getVar("custom").push_vector(jumpRate); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("targetObj").clear_obj_vector(); + if(sq_GetZPos(obj) > 0){ + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(sq_GetXPos(obj)); + obj.getVar("move").push_vector(sq_GetZPos(obj)); + obj.getVar("move").push_vector(100); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(sq_GetXPos(obj)); + obj.getVar("move").push_vector(sq_GetYPos(obj)); + obj.getVar("move").push_vector(sq_GetZPos(obj)); + obj.getVar("move").push_vector(sq_getRandom(0,180)); + obj.getVar("move").push_vector(sq_getRandom(0,30)); + obj.getVar("move").push_vector(sq_getRandom(70,150)); + obj.getVar("move").push_vector(sq_getRandom(0,1)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + switch(subtype){ + case 0: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrush.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,200,1,false); + break; + case 1: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushaircast_body.ani"); + obj.setCurrentAnimation(ani); + break; + case 9: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushtalismanlandattack_body.ani"); + obj.setCurrentAnimation(ani); + break; + case 10: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushtalismanready_body.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,100,1,false); + break; + case 11: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushtalismanattack_body.ani"); + obj.setCurrentAnimation(ani); + break; + case 20: + local sub = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local level = receiveData.readDword(); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sub); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(level); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(time); + obj.getVar("custom").push_vector(damage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + if(subtype == 0 || subtype == 1 || subtype == 9 || subtype == 10 || subtype == 11){ + local delayTime = receiveData.readDword(); + local speedRate = 12000.0 / delayTime.tofloat(); + if(subtype == 1) speedRate = 6000.0 / delayTime.tofloat(); + if(subtype == 9) speedRate = 12000.0 / delayTime.tofloat(); + if(subtype == 10) speedRate = 5000.0 / delayTime.tofloat(); + if(subtype == 11) speedRate = 12000.0 / delayTime.tofloat(); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local extra_num = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local damageRate2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + print(sizeRate); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + local totalDamage3 = (totalDamage.tofloat() * damageRate2.tofloat() / 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH); + local blind_prob = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,4,skill_level); + local blind_level = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,5,skill_level); + local blind_time = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,6,skill_level); + local blind_stuckrate = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,8,skill_level); + local lightning_prob = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,10,skill_level); + local lightning_time = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,11,skill_level); + local lightning_damage = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,12,skill_level); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(extra_num); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(totalDamage3); + obj.getVar("custom").push_vector(blind_prob); + obj.getVar("custom").push_vector(blind_level); + obj.getVar("custom").push_vector(blind_time); + obj.getVar("custom").push_vector(blind_stuckrate); + obj.getVar("custom").push_vector(lightning_prob); + obj.getVar("custom").push_vector(lightning_time); + obj.getVar("custom").push_vector(lightning_damage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + switch(subtype){ + case 1://失敗形態 + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://普通形態 + case 12://普通形態 + local successType = receiveData.readDword(); + local moveX = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(successType); + obj.getVar("custom").push_vector(sq_GetXPos(obj)); + obj.getVar("custom").push_vector(sq_GetZPos(obj)); + obj.getVar("custom").push_vector(moveX); + obj.getVar("custom").push_vector(totalDamage); + sqrChr.getVar("megadrill").clear_obj_vector(); + sqrChr.getVar("megadrill").push_obj_vector(obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3://震蕩波 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/crashfloor.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local sub = receiveData.readDword(); + if(sub > 1){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/crashcrash.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/crashdust.ani"),true); + } + break; + case 4: + local Delay = receiveData.readDword(); + obj.setTimeEvent(0,Delay,1,false); + break; + } + break; + case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 + switch(subtype){ + case 1: + local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_d1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_n1.ani"),true); + local delayTime = receiveData.readDword(); + for(local i = 0; i < 11; i++){ + sq_SetFrameDelayTime(currentAni, i, delayTime); + } + return; + break; + case 2: + local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_d2.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_n2.ani"),true); + local delayTime = receiveData.readDword(); + for(local i = 0; i < 4; i++){ + sq_SetFrameDelayTime(currentAni, i, delayTime); + } + return; + break; + case 3: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapper.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delayTime = receiveData.readDword(); + for(local i = 0; i < 11; i++){ + sq_SetFrameDelayTime(currentAni, i, delayTime); + } + sq_moveWithParent(sqrChr, obj); + break; + case 4: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapperjump.ani"); + obj.setCurrentAnimation(ani); + local delayTime = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + for(local i = 0; i < 4; i++){ + sq_SetFrameDelayTime(currentAni, i, delayTime); + } + sq_moveWithParent(sqrChr, obj); + break; + case 10: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/attack1.ani"); + obj.setCurrentAnimation(ani); + local delayTime = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + return; + break; + case 11: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/attack2.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + return; + break; + case 12: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/tacklerun.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(targetObj, obj); + obj.setTimeEvent(0,1000,1,false); + obj.setTimeEvent(1,300,-1,false); + return; + break; + case 13: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout1.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout2.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout3.ani"),true); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + return; + break; + case 14: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_goblin/goblin_arrow10.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/goblin_fastthrowstone.ptl", 0.0, 0.0); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + return; + break; + case 15: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_goblin/dark_effect1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-17,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_goblin/dark_effect2.ani"),true); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local sub = receiveData.readDword(); + switch(sub){ + case 0: obj.sq_SetMoveParticle("particle/goblin_dagger.ptl", 0.0, 0.0); break; + case 1: obj.sq_SetMoveParticle("particle/goblin_daggerdown.ptl", 0.0, 0.0); break; + case 2: obj.sq_SetMoveParticle("particle/goblin_daggerup.ptl", 0.0, 0.0); break; + } + return; + break; + } + local totalDamage = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local successType = receiveData.readDword(); + local isSeal = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(level); + obj.getVar("custom").push_vector(time); + obj.getVar("custom").push_vector(successType); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, prob, level, time); + local pAni = obj.getCurrentAnimation(); + local sizeSet = (1.0+successType*0.1)*(100.0+sizeRate.tofloat())/100.0; + sq_SetAttackBoundingBoxSizeRate(pAni, sizeSet, sizeSet, sizeSet); + local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER); + local monsterprob = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,5,skill_level); + local monstertime = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,7,skill_level); + local sub_number1 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,9,skill_level); + local sub_number2 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,10,skill_level); + local monsterlevel = sq_GetSkillLevel(sqrChr, 174); + obj.getVar("custom").push_vector(monsterprob); + obj.getVar("custom").push_vector(monstertime); + obj.getVar("custom").push_vector(monsterlevel); + obj.getVar("custom").push_vector(isSeal); + obj.getVar("custom").push_vector(sub_number1); + obj.getVar("custom").push_vector(sub_number2); + obj.getVar("custom").push_vector(0); + break; + case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 + switch(subtype){ + case 1: + local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_landn.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_landd.ani"),true); + break; + case 2: + local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_jumpn.ani"); + obj.setCurrentAnimation(ani); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_jumpd.ani"),true); + break; + case 3: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapperex.ani"); + obj.setCurrentAnimation(ani); + sq_moveWithParent(sqrChr, obj); + break; + case 4: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapperjumpex.ani"); + obj.setCurrentAnimation(ani); + sq_moveWithParent(sqrChr, obj); + break; + case 5: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.setTimeEvent(0,50,5,true); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 100); + sq_SetFrameDelayTime(currentAni, 1, 300); + return; + break; + case 6: + local totalDamage = receiveData.readDword(); + //sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + //sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/flyflapex_land_ground_crack.ani"); + obj.setCurrentAnimation(ani); + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/flyflapex_land_front.ani"),true); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 寬度跟高度率 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + return; + break; + case 7: + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/flyflapex_land_ground_crack_dummy.ani"); + obj.setCurrentAnimation(ani); + return; + break; + } + local delayTime = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local successType = receiveData.readDword(); + local isSeal = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(successType); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + local speedRate = 98000.0 / delayTime.tofloat(); + if(subtype == 2) speedRate = 36000.0 / delayTime.tofloat(); + pAni.setSpeedRate(speedRate); + local sizeSet = (1.0+successType*0.1)*(100.0+sizeRate.tofloat())/100.0; + sq_SetAttackBoundingBoxSizeRate(pAni, sizeSet, sizeSet, sizeSet); + local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER); + local monsterprob = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,5,skill_level); + local monstertime = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,7,skill_level); + local sub_number1 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,9,skill_level); + local sub_number2 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,10,skill_level); + local monstertime = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,7,skill_level); + local monsterlevel = sq_GetSkillLevel(sqrChr, 174); + obj.getVar("custom").push_vector(monsterprob); + obj.getVar("custom").push_vector(monstertime); + obj.getVar("custom").push_vector(monsterlevel); + obj.getVar("custom").push_vector(isSeal); + obj.getVar("custom").push_vector(sub_number1); + obj.getVar("custom").push_vector(sub_number2); + obj.getVar("custom").push_vector(0); + break; + case SKILL_BYKK_UROBOROS://二覺 + switch(subtype){ + case 1://結束爆炸 + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/uroboros/explosion/disappear_body_front01.ani",0,-1,-1); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(400.0); + obj.setTimeEvent(0,210,1,false); + local totalDamage = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + break; + case 2: + local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/uroboros/attack/attackset02_center.ani"); + obj.setCurrentAnimation(ani); + sqrChr.getVar("uroboros").clear_obj_vector(); + sqrChr.getVar("uroboros").push_obj_vector(obj); + sq_moveWithParent(sqrChr, obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + local totalDamage = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + local hitTime = receiveData.readDword(); + obj.setTimeEvent(1,hitTime,-1,false); + break; + case 3: + local sub = receiveData.readDword(); + local aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_dark_dodge.ani"; + if(sub == 2) aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_fire_dodge.ani"; + if(sub == 3) aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_ice_dodge.ani"; + if(sub == 0) aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_light_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + print("totalDamage1111 = "+totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("R_UROBOROS_SPARK_EXP"); + break; + case 4: + local Delay = receiveData.readDword(); + obj.setTimeEvent(2,Delay,1,false); + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + //print(element_kk_fire+","+element_kk_water+","+element_kk_dark+","+element_kk_light); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function setState_po_witch_bykk_kak(obj, state, datas) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(state); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/start_cloud.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/cloud.ani"); + obj.setCurrentAnimation(ani); + local successType = obj.getVar("custom").get_vector(0); + local lifeTime = obj.getVar("custom").get_vector(1) - 480; + switch(successType){ + case 0://失敗 + sq_CreateParticle("passiveobject/witch_bykk/particle/acidrain.ptl", obj, 0, 0, 0, true, 80, 0, lifeTime / 80); + obj.setTimeEvent(3,800,1,false); + break; + case 1://成功 + case 2://大成功 + sq_CreateParticle("passiveobject/witch_bykk/particle/acidrain.ptl", obj, 0, 0, 0, true, 20, 0, lifeTime / 20); + obj.setTimeEvent(3,800,1,false); + if(successType >= 2) obj.setTimeEvent(2,obj.getVar("custom").get_vector(2),-1,false); + break; + } + local sizeRate = obj.getVar("custom").get_vector(3); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/start.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("ACIDCLOUD_CREATE"); + break; + } + break; + case 2: + //sqrChr.getVar("Debug_SubState").set_vector(9,state); + switch(state){ + case 20://開始 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudstart_body.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("ACIDCLOUD_CREATE"); + if(obj.getVar("custom").get_vector(7) > 0) obj.setTimeEvent(6, obj.getVar("custom").get_vector(0), 1, false); + break; + case 21://靜止 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudstay_body.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2,100,-1,false); + break; + case 22://右移動 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudmovea_body.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3,35,-1,false); + break; + case 23://左移動 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudmoveb_body.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3,35,-1,false); + break; + case 24://開始攻擊 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudattackstart_body.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(5,obj.getVar("custom").get_vector(7) * 3,-1,false); + obj.setTimeEvent(7, obj.getVar("custom").get_vector(7), -1, false); + break; + case 25://持續攻擊 + local totalDamage = obj.getVar("custom").get_vector(6); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/hailloop_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudattackloop_body.ani"),true); + //obj.setTimeEvent(4,100,-1,false); + local prob = obj.getVar("custom").get_vector(3); + local level = obj.getVar("custom").get_vector(4); + local time = obj.getVar("custom").get_vector(5); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + if(obj.getVar("custom").get_vector(7) > 0) return; + local timer = obj.getVar().get_ct_vector(0); + if(!timer){ + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + timer = obj.getVar().get_ct_vector(0); + } + timer.Reset();//初始化 + timer.Start(10000,0);//計時開始 + break; + case 26://結束攻擊 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudattackend_body.ani"); + obj.setCurrentAnimation(ani); + obj.stopTimeEvent(5); + obj.stopTimeEvent(7); + if(obj.getVar("custom").get_vector(7) > 0) return; + local timer = obj.getVar().get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + local savetime = obj.getVar("custom").get_vector(1); + obj.getVar("custom").set_vector(1, savetime + currentT); + } + break; + case 27://結束 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudend_body.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("ACIDCLOUD_DISAPPEARANCE"); + break; + } + break; + case 4: + case 5: + case 6: + case 7: + switch(state){ + case 20: + local aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjecta_00.ani"; + if(subtype == 5) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectb_00.ani"; + if(subtype == 6) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectc_00.ani"; + if(subtype == 7) aniPath = "passiveobject/witch_bykk/animation/acidcloud/redcandy/hailstoneattack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(subtype == 7){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/acidcloud/redcandy/icefrag_00.ani"),true); + } + obj.setTimeEvent(1, 10, 35, true); + break; + case 21: + local aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectgrounda_00.ani"; + if(subtype == 5) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectgroundb_00.ani"; + if(subtype == 6) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectgroundc_00.ani"; + if(subtype == 7) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/iceexplosion_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(subtype == 4 || subtype == 5 || subtype == 6) sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectbottom_00.ani",0,-1,-1); + if(subtype == 7) sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/acidcloud/redcandy/iceexplosionbottom_00.ani",0,-1,-1); + break; + } + break; + } + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/pluto.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/pluto-eye.ani",0,1,1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/pluto-light.ani",0,1,1); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/pluto-spark.ani",0,1,1); + obj.setTimeEvent(0,800,1,false); + local range = obj.getVar("custom").get_vector(0); + local sizeRate = range.tofloat() / 600.0; + local pAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, 1.0); + pAni.setSpeedRate(150.0); + break; + case 21: + // obj.sq_PlaySound("ANTIGRAVITY_EXP"); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/endpluto_06.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + // obj.sq_AddObjectParticleCreater("particle/antigravitystarterparticle-1.ptl"); + // obj.sq_AddObjectParticleCreater("particle/antigravitystarterparticle-2.ptl"); + break; + } + break; + } + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + switch(subtype){ + case 2: + switch(state){ + case 20://開始 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneofront_neonewcapefrontnormal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneoback_neonewcapebacknormal.ani"),true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + break; + case 21://持續 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneofrontloop_neonewcapefrontnormal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneobackloop_neonewcapebacknormal.ani"),true); + break; + case 22://結束 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneoendfrontfail_neonewcapefrontnormal.ani"); + if(obj.getVar().getBool(0)) ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneoendfrontsuccess_neonewcapefrontnormal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(obj.getVar().getBool(0)) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneoendbacksuccess_neonewcapebacknormal_02.ani"),true); + else currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneoendbackfail_neonewcapebacknormal_01.ani"),true); + break; + case 23://持續 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneofrontloop_neonewcapefrontnormal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneobackloop_neonewcapebacknormal.ani"),true); + break; + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclouscast_fluto.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousstart_fluto.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(0); + local prob = obj.getVar("custom").get_vector(1); + local level = obj.getVar("custom").get_vector(2); + local time = obj.getVar("custom").get_vector(3); + local lifeTime = obj.getVar("custom").get_vector(4); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,2,totalDamage,lifeTime,prob,level,time,0,0,0,1); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousloop_fluto.ani"); + obj.setCurrentAnimation(ani); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousend_newsparkle.ani"); + obj.setCurrentAnimation(ani); + break; + case 24: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousdisappear_fluto.ani"); + obj.setCurrentAnimation(ani); + break; + } + local pAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("custom").get_vector(5); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/start/"; + local successType = obj.getVar("custom").get_vector(0); + local aniPath2 = "fail_start_elecrabbit.ani" + if(successType == 1) aniPath2 = "success_start_elecrabbit.ani"; + if(successType >= 2) aniPath2 = "great_start_elecrabbit.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(successType >= 1){ + switch(successType){ + case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_02.ani"),true); break; + case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "great_thunder_02.ani"),true); break; + } + } + break; + case 21: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/loop/"; + local successType = obj.getVar("custom").get_vector(0); + local aniPath2 = "fail_loop_elecrabbit.ani" + if(successType == 1) aniPath2 = "success_loop_elecrabbit.ani"; + if(successType >= 2) aniPath2 = "great_loop_elecrabbit.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + switch(successType){ + case 0: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "fail_thunder_01.ani"),true); break; + case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_01.ani"),true); break; + case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "great_thunder_01.ani"),true); break; + } + local totalDamage = obj.getVar("custom").get_vector(1); + local prob = obj.getVar("custom").get_vector(2); + local time = obj.getVar("custom").get_vector(3); + local damage = obj.getVar("custom").get_vector(4); + local level = obj.getVar("custom").get_vector(5); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); + obj.setTimeEvent(0,200,3,false); + obj.sq_PlaySound("ELETRIC_RABBIT_SHOCK"); + break; + case 22: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/end/"; + local successType = obj.getVar("custom").get_vector(0); + local aniPath2 = "fail_elecrabbit.ani" + if(successType == 1) aniPath2 = "success_elecrabbit.ani"; + if(successType >= 2) aniPath2 = "great_elecrabbit.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + switch(successType){ + case 0: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "fail_thunder_03.ani"),true); break; + case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_03.ani"),true); break; + case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "great_thunder_03.ani"),true); break; + } + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/start/"; + local successType = obj.getVar("custom").get_vector(0); + local aniPath2 = "fail_ground_03.ani" + if(successType == 1) aniPath2 = "success_ground_03.ani"; + if(successType >= 2) aniPath2 = "great_ground_03.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/loop/"; + local successType = obj.getVar("custom").get_vector(0); + local aniPath2 = "fail_ground_01.ani" + if(successType == 1) aniPath2 = "success_ground_01.ani"; + if(successType >= 2) aniPath2 = "great_ground_01.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/end/"; + local successType = obj.getVar("custom").get_vector(0); + local aniPath2 = "fail_ground_02.ani" + if(successType == 1) aniPath2 = "success_ground_02.ani"; + if(successType >= 2) aniPath2 = "great_ground_02.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + break; + } + break; + case 4: + switch(state){ + case 20: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/talisman/start/"; + local successType = obj.getVar("custom").get_vector(0); + local ani = sq_CreateAnimation("",aniPath1 + "success_start_elecrabbit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_02.ani"),true); + break; + case 21: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/talisman/loop/"; + local successType = obj.getVar("custom").get_vector(0); + local ani = sq_CreateAnimation("",aniPath1 + "success_loop_elecrabbit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_01.ani"),true); + local totalDamage = obj.getVar("custom").get_vector(1); + local prob = obj.getVar("custom").get_vector(2); + local time = obj.getVar("custom").get_vector(3); + local damage = obj.getVar("custom").get_vector(4); + local level = obj.getVar("custom").get_vector(5); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); + obj.setTimeEvent(0,200,3,false); + obj.sq_PlaySound("ELETRIC_RABBIT_SHOCK"); + break; + case 22: + local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/talisman/end/"; + local successType = obj.getVar("custom").get_vector(0); + local ani = sq_CreateAnimation("",aniPath1 + "success_elecrabbit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_03.ani"),true); + break; + } + break; + } + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/witch_bykk/animation/enhancedmagicmissile/new/success_n.ani"; + if(obj.getVar("custom").get_vector(0) >= 2) aniPath = "passiveobject/witch_bykk/animation/enhancedmagicmissile/new/great_n.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("custom").get_vector(0) >= 2)obj.getVar("targetObj").clear_obj_vector(); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/new/dummy.ani"); + obj.setCurrentAnimation(ani); + local sub = obj.getVar("custom").get_vector(6); + obj.setTimeEvent(0,150 * (2 / (sub + 2)),2 + sub,false); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge0.ani",10,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge1.ani",10,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge2.ani",10,0,0); + if(obj.getVar("custom").get_vector(0) >= 2){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge3.ani",10,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge4.ani",10,0,0); + } + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/new/dummy.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(71.08)); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/endfamiliar_03.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetCurrentAttackBonusRate(obj); + local prob = obj.getVar("custom").get_vector(1); + local time = obj.getVar("custom").get_vector(2); + local damage = obj.getVar("custom").get_vector(3); + local damageRate = obj.getVar("custom").get_vector(4); + local level = obj.getVar("custom").get_vector(5); + totalDamage = totalDamage * damageRate / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time,damage); + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + local sub = obj.getVar("custom").get_vector(7); + obj.setTimeEvent(1,200 * (2/ (2 + sub)),2 + sub,false); + break; + case 24: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail_n.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail_d.ani"),true); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail1.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail2.ani",0,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + switch(subtype){ + case 1: + local aniPath = "passiveobject/witch_bykk/animation/fluorecollider/"; + switch(state){ + case 20://start + local ani = sq_CreateAnimation("",aniPath + "create_body.ani"); + obj.setCurrentAnimation(ani);// + local speedRate = obj.getVar("custom").get_vector(5); + local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "create_area.ani",false,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + local range = obj.getVar("custom").get_vector(1); + local pAni = pooledObj.getCurrentAnimation(); + local sizeRate = range.tofloat() / 300.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + obj.getVar("effect").clear_obj_vector(); + obj.getVar("effect").push_obj_vector(pooledObj); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "create_body_glow.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath + "create_wheel.ani"),true); + + if(speedRate > 0) currentAni.setSpeedRate(100000.0 / (1000.0 - speedRate.tofloat())); + break; + case 21://loop + local ani = sq_CreateAnimation("",aniPath + "stay_body.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_body_glow.ani"),true); + local successType = obj.getVar("custom").get_vector(0); + local sub = obj.getVar("custom").get_vector(2); + if(sub >= 1) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluorecollider/stay_wheel_under.ani"),true); + else currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath + "stay_wheel_under.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_over1.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_over2.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_spark1.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_spark2.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle1.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle2.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle3.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle4.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_lightning_rod.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_electric.ani"),true); + switch(successType){ + case 0: + if(sub == 0){ + local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "shock.ani",false,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),-70),sq_GetYPos(obj) + 2,32,ENUM_DRAWLAYER_NORMAL); + obj.getVar("effect").push_obj_vector(pooledObj); + } + break; + case 2: + case 3: + currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stay_bulb_great.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stay_electric_great.ani"),true); + case 1: + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_bulb_success1.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_bulb_success2.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_electric_success.ani"),true); + break; + } + local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "thunder_spark.ani",false,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),10),sq_GetYPos(obj) + 1,195,ENUM_DRAWLAYER_NORMAL); + obj.getVar("effect").push_obj_vector(pooledObj); + local lifeTime = obj.getVar("custom").get_vector(4); + obj.setTimeEvent(0,lifeTime,1,false); + obj.getVar("targetObj").clear_obj_vector(); + obj.setTimeEvent(2,180,-1,false); + local range = obj.getVar("custom").get_vector(1); + local sizeRate = range.tofloat() / 300.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 22://end + obj.stopTimeEvent(1); + obj.stopTimeEvent(2); + local ani = sq_CreateAnimation("",aniPath + "exp.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(3); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_AddObjectParticleCreater("particle/fluorecolliderdestroy1.ptl"); + obj.sq_AddObjectParticleCreater("particle/fluorecolliderdestroy2.ptl"); + obj.sq_AddObjectParticleCreater("particle/fluorecolliderdestroy3.ptl"); + obj.sq_SetObjectParticlePos(0, 1, 50); + local size = obj.getVar("effect").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("effect").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle1.ptl", obj, 0, -1, 50, true, 5, 0, 2); + sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle2.ptl", obj, 0, -1, 50, true, 20, 0, 4); + sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle3.ptl", obj, 0, -1, 50, true, 100, 0, 16); + sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle4.ptl", obj, 0, -1, 50, true, 10, 0, 2); + break; + } + break; + } + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + switch(subtype){ + case 1: + local aniPath = "passiveobject/witch_bykk/animation/heatingfurnace/"; + switch(state){ + case 20://cast + local ani = sq_CreateAnimation("",aniPath + "body_n_startup.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "foot_n_startup.ani"),true); + if(true) currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "homunculus/foot_n_startup.ani"),true); + local Delay = obj.getVar("custom").get_vector(0); + local speedRate = 800.0 / Delay.tofloat() * 100.0; + currentAni.setSpeedRate(200.0); + break; + case 21://loop + local ani = sq_CreateAnimation("",aniPath + "body_n_loop.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "eye_n_loop.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "normal_d_up.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "foot_n_loop.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "dust.ani"),true); + if(obj.getVar("custom").get_vector(2) > 0){//助手鼓風機 + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "homunculus/foot_n_loop.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "homunculus/lanternjump.ani"),true); + } + local successType = obj.getVar("custom").get_vector(1); + if(successType >= 2){//大成功、超大成功時 + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "great_bulb.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "great_d_up_fire.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "great_d_up.ani"),true); + } + // obj.getVar("effect").clear_obj_vector(); + // for(local i = 1; i < 5; i++){ + // local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "smoke"+i.tostring()+".ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + // obj.getVar("effect").push_obj_vector(pooledObj); + // } + //obj.setTimeEvent(0,6000,1,false); + break; + case 22://end + local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani);// + obj.sq_AddObjectParticleCreater("particle/heatingfurnacefail1.ptl"); + obj.sq_AddObjectParticleCreater("particle/heatingfurnacefail2.ptl"); + obj.sq_AddObjectParticleCreater("particle/heatingfurnacefail3.ptl"); + obj.sq_SetObjectParticlePos(0, 1, 50); + // local size = obj.getVar("effect").get_obj_vector_size(); + // for(local i = 0; i < size; i++){ + // local pooledObj = obj.getVar("effect").get_obj_vector(i); + // if(pooledObj) pooledObj.setValid(false); + // } + break; + } + break; + } + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + switch(subtype){ + case 31: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/jackfrostaskill/start_cloud.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/jackfrostaskill/cloud.ani"); + obj.setCurrentAnimation(ani); + local hitMax = obj.getVar("custom").get_vector(0); + obj.setTimeEvent(2,150,hitMax,true); + obj.setTimeEvent(3,150*hitMax+100,1,false); + sq_CreateParticle("passiveobject/witch_bykk/particle/acidrain.ptl", obj, 0, 0, 0, true, 80, 0, (150*hitMax+100) / 80); + obj.setTimeEvent(4,800,1,false); + break; + } + break; + case 41: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/lantern/launchjolstart.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/homonculous/lantern/launchjolfirestart.ani",0,0,0); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/lantern/launchjolmove.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/lantern/launchjolfiremove.ani"),true); + obj.sq_SetMoveParticle("particle/goblin_fastthrowstone.ptl", 0.0, 0.0); + break; + } + break; + } + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + local aniPath = "passiveobject/witch_bykk/animation/jackfrosticewater/"; + local effect_aniPath = "character/mage/effect/animation/witch_bykk/jackfrosticewater/"; + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath1 = "start/jackfrosticewaterstartback_03.ani"; + if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "start/talisman/jackfrosticewaterstartback_03.ani"; + local ani = sq_CreateAnimation("",aniPath + aniPath1); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(obj.getVar("custom").get_vector(2) > 0){ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "start/talisman/jackfrosticewaterstartfloor_03.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "start/talisman/jackfrosticewaterstartfloortwister_01.ani"),true); + } + else{ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "start/jackfrosticewaterstartfloor_03.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "start/jackfrosticewaterstartfloortwister_01.ani"),true); + } + obj.setTimeEvent(3,150,1,false); + obj.sq_PlaySound("JACKFROST_ICEWATER_START"); + break; + case 21: + local aniPath1 = "loop/jackfrosticewaterloopback_01.ani"; + if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "loop/talisman/jackfrosticewaterloopback_01.ani"; + local ani = sq_CreateAnimation("",aniPath + aniPath1); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "loop/jackfrosticewaterloopfloor_01.ani"),true); + if(obj.getVar("custom").get_vector(2) > 0){ + currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "loop/talisman/jackfrosticewaterloopfloortwister_01.ani"),true); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "loop/talisman/jackfrosticewaterloopfront_06.ani"),true); + } + else{ + currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "loop/jackfrosticewaterloopfloortwister_01.ani"),true); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "loop/jackfrosticewaterloopfront_06.ani"),true); + } + obj.setTimeEvent(0,5000,1,false); + if(obj.getVar("custom").get_vector(2) > 0) obj.setTimeEvent(4,250,-1,false); + else obj.setTimeEvent(4,500,-1,false); + break; + case 22: + obj.removeAllTimeEvent(); + local totalDamage = obj.getVar("custom").get_vector(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath1 = "end/jackfrosticewaterendback_03.ani"; + if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "end/talisman/jackfrosticewaterendback_03.ani"; + local ani = sq_CreateAnimation("",aniPath + aniPath1); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "end/jackfrosticewaterendfloor_01.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "end/jackfrosticewaterendfloortwister_01.ani"),true); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "end/jackfrosticewaterendfront_10.ani"),true); + local parentObj = obj.getParent(); + if(!parentObj) break; + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "appendage/character/ap_common_suck.nut"); + //obj.sq_PlaySound("JACKFROST_ICEWATER_EXP"); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath1 = "start/jackfrosticewaterstartparticle_08.ani"; + if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "start/talisman/jackfrosticewaterstartparticle_08.ani"; + local ani = sq_CreateAnimation("",aniPath + aniPath1); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3,150,1,false); + local currentAni = obj.getCurrentAnimation(); + break; + case 21: + local aniPath1 = "loop/jackfrosticewaterloopparticle_01.ani"; + if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "loop/talisman/jackfrosticewaterloopparticle_01.ani"; + local ani = sq_CreateAnimation("",aniPath + aniPath1); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,4500,1,false); + local currentAni = obj.getCurrentAnimation(); + break; + case 22: + local aniPath1 = "end/jackfrosticewaterendparticle_12.ani"; + if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "end/talisman/jackfrosticewaterendparticle_12.ani"; + local ani = sq_CreateAnimation("",aniPath + aniPath1); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + local aniPath = "passiveobject/witch_bykk/animation/jackohalloween/"; + local effect_aniPath = "character/mage/effect/animation/witch_bykk/jackohalloween/"; + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("",aniPath + "jackohalloweenready.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local castAniTime = currentAni.getDelaySum(false); + local castTime = obj.getVar("custom").get_vector(0); + local speedRate = castAniTime.tofloat() / castTime.tofloat() * 100.0; + //print(speedRate); + currentAni.setSpeedRate(speedRate); + break; + case 21: + if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3); + local ani = sq_CreateAnimation("",aniPath + "jackohalloweenstart_12.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_00.ani",0,-1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_13.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_14.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_20.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_21.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_30.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_31.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_32.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_33.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_37.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_38.ani",0,1,0); + break; + case 22: + local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitstarta_jackohollween.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0, obj.getVar("custom").getInt(11), 1, false); + if(obj.getVar().getBool(0)){ + local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); + if(lava_Obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); + colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + case 23: + local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitstartb_jackohollween.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitstartb_fire015_01.ani"),true); + local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); + if(lava_Obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 24: + local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitloop_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(3,1000,1,false); + break; + case 25: + if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3); + local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitend_jackohollween.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitend_fire015_01.ani"),true); + local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); + if(lava_Obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); + colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 26: + local ani = sq_CreateAnimation("",aniPath + "jackoholloweenend_jackohollween.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20://wait + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_wait.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setLoop(true); + local parentObj = obj.getParent(); + sq_SetCurrentDirection(obj, parentObj.getDirection()); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(parentObj)); + obj.sq_PlaySound("JACKOHALLOWEEN_FIRE"); + break; + case 21://start + local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_start.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1,300,1,false); + local totalDamage = obj.getVar("custom").get_vector(0); + local hitTime = obj.getVar("custom").get_vector(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(4,hitTime,-1,false); + obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP_START"); + break; + case 22://loop + local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_loop.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(5,500,-1,true); + break; + case 23://end + obj.removeAllTimeEvent(); + local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_end.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP_END"); + break; + } + break; + } + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + switch(subtype){ + case 4: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal2.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great2.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal2.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great2.ani"),true); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal_break.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great_break.ani"),true); + sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle1.ptl", obj, 0, 1, 1, true, 5, 0, 2); + sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle2.ptl", obj, 0, 1, 1, true, 20, 0, 4); + sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle3.ptl", obj, 0, 1, 1, true, 100, 0, 16); + sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle4.ptl", obj, 0, 1, 1, true, 10, 0, 2); + break; + } + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lavapotionair_fall.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/start_d_up.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/start_n_down.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/02_d_up.ani"),false); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/02_n_down.ani"),false); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_n_down.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_d_up.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_02_d_up.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_02_n_down.ani"),true); + if(obj.getVar("custom").get_vector(1) >= 3) obj.setTimeEvent(4,300,-1,false); + break; + case 23: + if(obj.isExistTimeEvent(4)) obj.stopTimeEvent(4); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_d_up.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_n_down.ani"),true); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_02_d_up.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_02_n_down.ani"),true); + break; + } + if(state != 20){ + local currentAni = obj.getCurrentAnimation(); + local tiaozheng = 1.0; + if(obj.getVar("custom").get_vector(1) >= 2) tiaozheng = 1.35 + local sizeRate = obj.getVar("custom").get_vector(0).tofloat() / 100.0 * tiaozheng; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + switch(subtype){ + case 1://失敗形態 + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail_n.ani",-150,0,180); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail_d.ani",-150,-1,179); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail1.ani",-150,2,182); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail2.ani",-150,1,181); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 230); + sq_SetFrameDelayTime(currentAni, 1, 230); + break; + case 21://35 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailstart_57.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailstart_48.ani"),true); + // print(currentAni.getDelaySum(false)); + local totalDamage = obj.getVar("custom").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0,1400,1,false); + obj.setTimeEvent(1,500,1,false); + obj.setTimeEvent(2,50,-1,false); + obj.setTimeEvent(3,300,1,false); + break; + case 22://36 + obj.stopTimeEvent(2); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailend_07.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailendbttom_01.ani"),true); + local totalDamage = obj.getVar("custom").get_vector(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("custom").get_vector(2) > 0){ + local parentObj = obj.getParent(); + if(!parentObj) break; + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "appendage/character/ap_common_suck.nut"); + } + break; + } + break; + case 2://普通形態 + switch(state){ + case 20://動畫 + local successType = obj.getVar("custom").get_vector(0); + local aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/success_n.ani"; + if(successType >= 2) aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/great_n.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(successType == 1) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/success_d.ani"),true); + else{ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great_d.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great1.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great2.ani"),true); + } + break; + case 21://生成 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appear.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local successType = obj.getVar("custom").get_vector(0); + switch(successType){ + case 1: + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appeardrillsuccess.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appearglowsuccess.ani"),true); + break; + case 2: + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appeardrillgreat.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appearglowgreat.ani"),true); + break; + } + break; + case 22://停止狀態 + case 23://前進狀態 + case 24://後退狀態 + obj.getVar().setBool(0,false); + obj.sq_PlaySound("MEGA_DRILL_LOOP",1001); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/move.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setLoop(true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/body.ani"),true); + currentAni.addLayerAnimation(10,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/bodycover.ani"),true); + local successType = obj.getVar("custom").get_vector(0); + switch(successType){ + case 1: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillsuccess.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistonsuccess.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/glowsuccess.ani"),true); + break; + case 2: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat1.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat2.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat3.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistongreat.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/glowgreat.ani"),true); + break; + } + switch(state){ + case 22: + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/stop_wheel1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/stop_wheel2.ani"),true); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/stop_wheel3.ani"),true); + obj.stopTimeEvent(0); + break; + case 23: + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/wheel1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/wheel2.ani"),true); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/wheel3.ani"),true); + obj.setTimeEvent(0,400,-1,true); + break; + case 24: + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/backwheel1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/backwheel2.ani"),true); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/backwheel3.ani"),true); + obj.setTimeEvent(0,400,-1,true); + break; + } + break; + case 25://爆炸 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/explosion.ani"); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + obj.stopSound(1001); + obj.sq_PlaySound("MEGA_DRILL_ICEEXP"); + local totalDamage = obj.getVar("custom").get_vector(4); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(3,80,2,false); + obj.setTimeEvent(4,80,1,true); + obj.setTimeEvent(5,80,1,true); + obj.setTimeEvent(6,80,1,true); + obj.setTimeEvent(7,80,1,true); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy0.ptl", obj, -50,0,20, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy1.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy2.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy3.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy4.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy5.ptl", obj, 0,0,50, true, 30, 0, 2); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy6.ptl", obj, 0,0,50, true, 30, 0, 2); + break; + } + break; + case 12://助手形態 + switch(state){ + case 20://動畫 + local successType = obj.getVar("custom").get_vector(0); + local aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/success_n.ani"; + if(successType >= 2) aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/great_n.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(successType == 1) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/success_d.ani"),true); + else{ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great_d.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great1.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great2.ani"),true); + } + break; + case 21://生成 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appear.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local successType = obj.getVar("custom").get_vector(0); + switch(successType){ + case 1: + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appeardrillsuccess.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appearglowsuccess.ani"),true); + break; + case 2: + currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appeardrillgreat.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appearglowgreat.ani"),true); + break; + } + obj.setTimeEvent(1,500,-1,false); + break; + case 22://停止狀態 + case 23://前進狀態 + case 24://後退狀態 + obj.getVar().setBool(0,false); + obj.sq_PlaySound("MEGA_DRILL_LOOP",1001); + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/move.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setLoop(true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/body.ani"),true); + currentAni.addLayerAnimation(10,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/bodycover.ani"),true); + // + local successType = obj.getVar("custom").get_vector(0); + switch(successType){ + case 1: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillsuccess.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistonsuccess.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/glowsuccess.ani"),true); + break; + case 2: + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat1.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat2.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat3.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistongreat.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/glowgreat.ani"),true); + currentAni.addLayerAnimation(4,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/lightgreat1.ani"),true); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/lightgreat2.ani"),true); + break; + } + switch(state){ + case 22: + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/stop_wheel1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/stop_wheel2.ani"),true); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/stop_wheel3.ani"),true); + obj.stopTimeEvent(0); + break; + case 23: + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/wheel1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/wheel2.ani"),true); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/wheel3.ani"),true); + obj.setTimeEvent(0,400,-1,true); + break; + case 24: + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/backwheel1.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/backwheel2.ani"),true); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/backwheel3.ani"),true); + obj.setTimeEvent(0,400,-1,true); + break; + } + break; + case 25://爆炸 + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/explosion.ani"); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + obj.stopSound(1001); + obj.sq_PlaySound("MEGA_DRILL_ICEEXP"); + local totalDamage = obj.getVar("custom").get_vector(4); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(3,80,2,false); + obj.setTimeEvent(4,80,1,true); + obj.setTimeEvent(5,80,1,true); + obj.setTimeEvent(6,80,1,true); + obj.setTimeEvent(7,80,1,true); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy0.ptl", obj, -50,0,20, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy1.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy2.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy3.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy4.ptl", obj, 0,0,50, true, 30, 0, 1); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy5.ptl", obj, 0,0,50, true, 30, 0, 2); + sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy6.ptl", obj, 0,0,50, true, 30, 0, 2); + sq_CreateParticle("character/mage/effect/animation/witch_bykk/homonculous/megadrill/jackfrost/megadrilldestroy0.ptl", obj, 0,0,75, true, 30, 0, 1); + break; + } + break; + } + break; + case SKILL_BYKK_UROBOROS://二覺 + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + switch(subtype){ + case 20: + switch(state){ + case 20: + local aniPath1 = "passiveobject/witch_bykk/animation/lollipopcrush/"; + local aniPath2 = "whitestart_dw_start.ani"; + local sub = obj.getVar("custom").get_vector(0); + if(sub == 1) aniPath2 = "blackstart_d_start.ani"; + else if(sub == 2) aniPath2 = "bosestart_start.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath1 = "passiveobject/witch_bykk/animation/lollipopcrush/"; + local aniPath2 = "whiteloop_dw_body.ani"; + local sub = obj.getVar("custom").get_vector(0); + if(sub == 1) aniPath2 = "blackloop_db_body.ani"; + else if(sub == 2) aniPath2 = "boseloop_body.ani"; + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,1000,1,false); + obj.setTimeEvent(1,500,1,false); + break; + case 22: + obj.stopTimeEvent(0); + local aniPath1 = "passiveobject/witch_bykk/animation/lollipopcrush/"; + local aniPath2 = "whiteend_dw_boom.ani",attackIndex = 57; + local sub = obj.getVar("custom").get_vector(0); + if(sub == 1){aniPath2 = "blackend_db_boomback.ani";attackIndex = 58;} + else if(sub == 2){aniPath2 = "boseend_back.ani";attackIndex = 58;} + local ani = sq_CreateAnimation("",aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = obj.getVar("custom").get_vector(2); + local prob = obj.getVar("custom").get_vector(3); + local time = obj.getVar("custom").get_vector(4); + local damage = obj.getVar("custom").get_vector(5); + switch(sub){ + case 0: + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); + break; + case 1: + case 2: + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); + break; + } + break; + } + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onEndCurrentAni_po_witch_bykk_kak(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 2: + switch(state){ + case 20: + case 24: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 26: + if(obj.getVar().getBool(0)) obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 27: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: + case 5: + case 6: + case 7: + switch(state){ + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + obj.removeAllTimeEvent(); + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local damager = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); + if(damager || damager.getState() != STATE_DIE) damager.getVar("anti").setBool(0,false); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + case 3: + case 4: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + switch(subtype){ + case 1: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: + switch(state){ + case 20: + case 21: + case 23: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + switch(subtype){ + case 1: + case 4: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + local totalDamage = obj.getVar("custom").get_vector(1); + local damageRate = obj.getVar("custom").get_vector(6); + totalDamage = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + if(subtype == 1) cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,3,0,totalDamage,0,0,0,0,0,0,2); + if(subtype == 4) cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,3,1,totalDamage,0,0,0,0,0,0,2); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + switch(subtype){ + case 1: + switch(state){ + case 20: + case 22: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + if(obj.getVar("custom").get_vector(0) >= 2){ + if(obj.getVar("targetObj").get_obj_vector_size() > 0){ + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(sq_GetXPos(obj)); + obj.getVar("move").push_vector(sq_GetZPos(obj)); + obj.getVar("move").push_vector(100); + obj.getVar("move").push_vector(300); + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + } + else obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 23: + case 24: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + case 23: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + case 4: + case 6: + case 7: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + if((subtype == 31 && state == 20) || (subtype == 41 && state == 20)){obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");return;} + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + case 22: + case 23: + case 25: + // if(state == 21){ + // obj.getVar().clear_ct_vector(); + // obj.getVar().push_ct_vector(); + // local timer = obj.getVar().get_ct_vector(0); + // timer.Reset(); + // timer.Start(10000,0); + // } + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 26: + sqrChr.getVar("jackohalloween_pumpkin").clear_obj_vector(); + local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); + if(lava_Obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); + sq_SendDestroyPacketPassiveObject(colObj); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + switch(state){ + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + switch(subtype){ + case 4: + if(state == 22) sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + if(state == 21) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 23){ + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); + if(targetObj || targetObj.getState() != STATE_DIE) targetObj.getVar("lavapotion").setBool(0,false); + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + switch(subtype){ + case 1: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + case 12: + switch(state){ + case 20: + case 21: + if(state == 20) obj.sq_PlaySound("MEGA_DRILL_STARTING"); + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 25: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_UROBOROS://二覺 + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + if(subtype == 0 || subtype == 1 || subtype == 9 || subtype == 10 || subtype == 11) sq_SendDestroyPacketPassiveObject(obj); + if(subtype == 20){ + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 22) sq_SendDestroyPacketPassiveObject(obj); + } + break; + case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 + case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 + switch(subtype){ + case 3: + case 4: + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_GetLevelData(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER, 11, sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) break; + if(obj.getVar("custom").get_vector(10) < 1){ + local isSeal = obj.getVar("custom").get_vector(7); + if(isSeal == 1){ + local monsterId = [GOBLIN_BYKK_ID,TAU_BYKK_ID]; + local homunculus_skill = sq_GetSkill(sqrChr, SKILL_BYKK_HOMUNCULUS) + if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_HOMUNCULUS) > 0 && !homunculus_skill.isSealFunction()) monsterId = [LANTERN_BYKK_ID,FLUORE_BYKK_ID,FLUTO_BYKK_ID,JACKFROST_BYKK_ID]; + local monstertime = obj.getVar("custom").get_vector(5); + local monsterlevel = obj.getVar("custom").get_vector(6); + for(local i = 0; i < obj.getVar("custom").get_vector(9); i++){ + if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ + summonmonster_witch_bykk(sqrChr,sqrChr,200,0,-sq_GetZPos(sqrChr),0,monsterId[sq_getRandom(0,(monsterId.len()-1))],monstertime,monsterlevel,0); + sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) + 1); + print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); + } + } + } + } + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } +} diff --git a/user/116.205.165.25/6_mage_11.c b/user/116.205.165.25/6_mage_11.c new file mode 100644 index 0000000..194f0f4 --- /dev/null +++ b/user/116.205.165.25/6_mage_11.c @@ -0,0 +1,1622 @@ + +function onTimeEvent_po_witch_bykk_kak(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: + obj.sq_PlaySound("ACIDCLOUD_DISAPPEARANCE"); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2://leidian + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/acidcloud/cloudspark"+(timeEventCount % 3 + 1).tostring()+".ani",sq_getRandom(-75,75),0,0); + local targetObj = obj.sq_FindFirstTarget(-120, 120, 60, 400); + if(targetObj){ + local totalDamage = obj.getVar("custom").get_vector(4); + local sizeRate = obj.getVar("custom").get_vector(3); + cearteSkillPassive_Witch_bykk(sqrChr,targetObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,3,totalDamage,sizeRate,0,0,0,0,0,0,1); + } + break; + case 3: + local lifeTime = obj.getVar("custom").get_vector(1) - 480; + local successType = obj.getVar("custom").get_vector(0); + if(successType == 0) sq_CreateParticle("passiveobject/witch_bykk/particle/acidraindrop.ptl", obj, 0, 0, 0 - obj.getZPos(), true, 40, 0, lifeTime / 40); + else sq_CreateParticle("passiveobject/witch_bykk/particle/acidraindrop.ptl", obj, 0, 0, 0 - obj.getZPos(), true, 10, 0, lifeTime / 10); + break; + } + break; + case 2: + switch(timeEventIndex){ + case 0: + obj.removeAllTimeEvent(); + obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2: + local targetObj; + obj.getVar("targetObj").clear_obj_vector(); + local targetObj_num = -1; + local objectManager = obj.getObjectManager();//得到對象管理器 + local objectNumber = objectManager.getCollisionObjectNumber();//總數 + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= 800 && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= 400){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj) || sq_IsNamed(activeObj)) obj.getVar("targetObj").push_obj_vector(object); + } + } + if(obj.getVar("targetObj").get_obj_vector_size() > 0) targetObj = obj.getVar("targetObj").get_obj_vector(0); + else targetObj = obj.sq_FindFirstTarget(-9999, 19998, 9999, 9999); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(activeObj); + obj.stopTimeEvent(2); + if(sq_GetXPos(obj) > sq_GetXPos(activeObj)) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + case 3: + local targetObj = obj.getVar("targetObj").get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)); + if(disX > 50){ + local baseM = 20; + if(obj.getVar("custom").get_vector(7) > 0) baseM = 14; + local moveX = disX / baseM + 1; + if(sq_GetXPos(obj) > sq_GetXPos(activeObj)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 30){ + local baseM = 20; + if(obj.getVar("custom").get_vector(7) > 0) baseM = 14; + local moveY = disY / baseM + 1; + if(sq_GetYPos(obj) > sq_GetYPos(activeObj)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disX <= 50 && disY <= 30){ + obj.stopTimeEvent(3); + obj.setTimeEvent(4,100,-1,false); + if(obj.getState() != 24) obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + } + else{ + obj.stopTimeEvent(3); + obj.setTimeEvent(4,100,-1,false); + if(obj.getState() != 21) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 4: + local targetObj = obj.getVar("targetObj").get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE){ + obj.stopTimeEvent(4); + obj.setTimeEvent(3,35,-1,false); + if(obj.getState() != 26) obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local disX = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)); + if(disX > 50 && disY > 30){ + obj.stopTimeEvent(4); + obj.setTimeEvent(3,35,-1,false); + //if(obj.getState() != 26) obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + case 5: + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-100,100),sq_getRandom(-10,0)-1,-40,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,sq_getRandom(4,6),0,0,0,0,0,0,0,0,0); + break; + case 6: + obj.removeAllTimeEvent(); + obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 7: + if(sq_getRandom(1,100) < 75) break; + local totalDamage = obj.getVar("custom").get_vector(2); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-100,100),sq_getRandom(-10,0)-1,-80,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,7,totalDamage,0,0,0,0,0,0,0,0); + break; + } + break; + case 4: + case 5: + case 6: + case 7: + switch(timeEventIndex){ + case 1: + // local pAni = obj.getCurrentAnimation();//得到ani + // local currentT = sq_GetCurrentTime(pAni);//當前時間 + //local fireT = 350;//總時間 + local hight = obj.getVar("custom").get_vector(0); + local v = sq_GetUniformVelocity(hight, 0, timeEventCount, 35); + sq_setCurrentAxisPos(obj, 2, v); + if(timeEventCount >= 35) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + switch(timeEventIndex){ + case 0: + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local damager = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); + if(damager || damager.getState() != STATE_DIE){ + if(damager.getZPos() <= 5 && damager.getVar("anti").getBool(0) == false){ + damager.getVar("anti").setBool(0,true); + local totalDamage = obj.getVar("custom").get_vector(2); + cearteSkillPassive_Witch_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,3,totalDamage,0,0,0,0,0,0,0,1); + } + } + } + break; + case 1: + local successType = obj.getVar("custom").get_vector(1); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,155,8,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,30,50,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,-40,-40,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,-155,5,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); + break; + case 2: + obj.sq_PlaySound("ANTIGRAVITY_STEAM"); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke1.ani",-25,0,120); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke2.ani",15,0,50); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke3.ani",-15,0,50); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke4.ani",0,0,30); + break; + } + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local targetObj_num = 0; + obj.getVar("targetObj").clear_obj_vector(); + local objectManager = obj.getObjectManager();//得到對象管理器 + local objectNumber = objectManager.getCollisionObjectNumber();//總數 + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)) <= 200 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)) <= 100 && sq_GetZPos(activeObj) <= 50 && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)) > 0 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)) > 0){ + targetObj_num = targetObj_num + 1; + obj.getVar("targetObj").push_obj_vector(activeObj); + } + } + } + if(targetObj_num > 0){ + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandfront_handfront_01_01.ani",0,1,1); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandback_handback.ani",0,-1,-1); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandfront_wind01.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandfloor_focus03.ani",0,0,0); + obj.getVar().setBool(0,true); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + obj.setTimeEvent(2,300,1,false); + } + break; + case 2: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); + if(activeObj){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj,"character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); + if(AddAppendage) continue; + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_BYKK_BLACKMANTLE, false, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut", true); + if(AddAppendage){ + sq_MoveToAppendageForce(activeObj, obj, obj, 0, 0, activeObj.getZPos() - obj.getZPos(), 100, true, AddAppendage); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 10, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(500); + } + } + } + break; + case 3: + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + switch(timeEventIndex){ + case 0: + local parentObj = obj.getParent(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut"); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50)); + sq_setCurrentAxisPos(obj, 1, sqrChr.getYPos()); + break; + } + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + local sub = obj.getVar("custom").get_vector(6); + if(obj.getVar("custom").get_vector(0) >= 2 && timeEventCount >= 2 + sub) obj.setTimeEvent(2,100,1,false); + break; + case 1: + local size = obj.getVar("targetObj").get_obj_vector_size(); + if(size <= 0) break; + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("targetObj").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local drawObj = createOnlyDrawObject_witch_bykk(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/linkelectric.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) - 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + setLightning_witch_bykk(obj, drawObj, targetObj); + sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + break; + case 2: + if(obj.getVar("targetObj").get_obj_vector_size() > 0){ + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(sq_GetXPos(obj)); + obj.getVar("move").push_vector(sq_GetZPos(obj)); + obj.getVar("move").push_vector(100); + obj.getVar("move").push_vector(300); + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + } + else obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2: + local size = obj.getVar("targetObj").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("targetObj").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local aniPath = "passiveobject/witch_bykk/animation/fluorecollider/thunder7.ani"; + local aniPath2 = "passiveobject/witch_bykk/animation/fluorecollider/thunder"+sq_getRandom(1,6).tostring()+".ani"; + local drawObj = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),10),sq_GetYPos(obj),195,ENUM_DRAWLAYER_NORMAL); + local drawObj2 = createOnlyDrawObject_witch_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),10),sq_GetYPos(obj),195,ENUM_DRAWLAYER_NORMAL); + setLightning_witch_bykk(obj, drawObj, activeObj); + setLightning_witch_bykk(obj, drawObj2, activeObj); + } + } + break; + } + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: + if(true) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");//超大成功時 + else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 2: + switch(timeEventIndex){ + case 0: + local hitMax = 15 + obj.getVar("custom").getInt(10); + local time = 750; + obj.setTimeEvent(1, time / (hitMax + 1), hitMax, false); + break; + case 1: + obj.resetHitObjectList(); + break; + } + break; + case 3: + switch(timeEventIndex){ + case 0: + // local successType = obj.getVar("custom").get_vector(0); + // if(successType >= 1){ + // local anglea = obj.getVar("custom").get_vector(1); + // local speed_X = obj.getVar("custom").get_vector(2); + // local speed_Z = obj.getVar("custom").get_vector(3); + // local Xpos = obj.getVar("custom").get_vector(4); + // local Ypos = obj.getVar("custom").get_vector(5); + // local Zpos = obj.getVar("custom").get_vector(6); + // sq_BinaryStartWrite(); + // sq_BinaryWriteDword(SKILL_BYKK_HEATINGFURNACE); + // sq_BinaryWriteDword(5); + // sq_BinaryWriteDword(anglea); + // sq_BinaryWriteDword(speed_X); + // sq_BinaryWriteDword(speed_Z); + // sq_BinaryWriteDword(timeEventCount); + // sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJECT_BYKK_WITCH, 0, Xpos, Ypos - timeEventCount, Zpos - timeEventCount); + // } + break; + } + break; + case 4: + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + switch(timeEventIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 2: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + case 6: + switch(timeEventIndex){ + case 0: + obj.setTimeEvent(1,80,8,false); + break; + case 1: + obj.resetHitObjectList(); + break; + } + break; + case 7: + switch(timeEventIndex){ + case 0: + local number_max = obj.getVar("custom").getInt(10); + local pAni = obj.getCurrentAnimation(); + local delaysum = pAni.getDelaySum(3, 17); + obj.setTimeEvent(1,delaysum / (number_max + 1),number_max, true); + break; + case 1: + obj.resetHitObjectList(); + break; + } + break; + } + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + switch(timeEventIndex){ + case 0: + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); + if(targetObj){ + local aniPath = "monster/character/mage/witch_bykk/fluore/animation/a/fluore_athunder7.ani"; + local aniPath2 = "monster/character/mage/witch_bykk/fluore/animation/a/fluore_athunder"+sq_getRandom(1,6).tostring()+".ani"; + local drawObj = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + local drawObj2 = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + setLightning_witch_bykk(obj, drawObj, targetObj); + setLightning_witch_bykk(obj, drawObj2, targetObj); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(obj) / 2); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + local totalDamage = obj.getVar("custom").get_vector(0); + local prob = obj.getVar("custom").get_vector(1); + local level = obj.getVar("custom").get_vector(2); + local time = obj.getVar("custom").get_vector(3); + local damage = obj.getVar("custom").get_vector(4); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-100,100),sq_getRandom(-50,50),0,obj.getDirection(),SKILL_BYKK_HOMUNCULUS,13,totalDamage,prob,level,time,damage,0,0,0,0); + break; + case 2: + obj.resetHitObjectList(); + break; + case 3: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: + local hitMax = obj.getVar("custom").get_vector(0); + sq_CreateParticle("passiveobject/witch_bykk/particle/acidraindrop.ptl", obj, 0, 0, 0 - obj.getZPos(), true, 10, 0, (150*hitMax+100) / 10); + break; + } + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = obj.getVar("custom").get_vector(0); + local sub = obj.getVar("custom").get_vector(2); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_JACKFROSTICEWATER,2,totalDamage,sub,0,0,0,0,0,0,0); + break; + case 3: + if(obj.getVar().getBool(0)){obj.resetHitObjectList();break;}; + local inputConut = sqrChr.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + local inputMax = 10; + if(inputConut > inputMax){ + obj.setTimeEvent(3,75,-1,false); + obj.getVar().setBool(0,true); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(150.0); + } + else obj.setTimeEvent(3,150,1,false); + + obj.resetHitObjectList(); + break; + case 4: + obj.stopSound(2333); + obj.sq_PlaySound("JACKFROST_ICEWATER_ROLL_LOOP",2333); + break; + } + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.setTimeEvent(2,600,-1,true); + break; + case 2: + local offset_x = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),450); + local offset_y = sq_GetYPos(obj); + local offset_z = sq_GetZPos(obj); + local path1 = "character/mage/effect/animation/witch_bykk/jackohalloween/jackohalloweenlavafloorbottom_lavafloor.ani"; + local path2 = "character/mage/effect/animation/witch_bykk/jackohalloween/jackohalloweenlavafloortop_circle.ani"; + createOnlyDrawObject_witch_bykk(obj,path1,true,obj.getDirection(),offset_x,offset_y,offset_z,ENUM_DRAWLAYER_BOTTOM); + createOnlyDrawObject_witch_bykk(obj,path2,true,obj.getDirection(),offset_x,offset_y,offset_z,ENUM_DRAWLAYER_NORMAL); + break; + case 3: + if(sqrChr){ + local sqrChr_offset_X = sq_GetDistancePos(sq_GetXPos(sqrChr),obj.getDirection(),-50); + local disX = sq_Abs(sq_GetXPos(obj) - sqrChr_offset_X); + local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); + if(disX > 30){ + local moveX = disX / 20 + 1; + if(sq_GetXPos(obj) > sqrChr_offset_X) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); + else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); + } + if(disY > 10){ + local moveY = disY / 20 + 1; + if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); + else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); + } + if(disX > 30 || disY > 10) obj.setTimeEvent(3,30,1,false); + else obj.setTimeEvent(3,1000,1,false); + } + break; + case 4: + obj.resetHitObjectList(); + break; + case 5: + obj.stopSound(1103); + if(timeEventCount % 2 == 1) obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP",1103); + else obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP_02",1103); + break; + } + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + switch(timeEventIndex){ + case 0: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lavapotionfail_22.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lavapotionfailbottom_01.ani"),true); + break; + case 2: + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + obj.resetHitObjectList(); + break; + case 4: + if(timeEventCount % 2 == 0){ + obj.stopSound(7701); + obj.sq_PlaySound("FIRE_EXPLOSION_CREATE",7701); + local sizeRate = obj.getVar("custom").get_vector(0); + local totalDamage = obj.getVar("custom").get_vector(4); + local successType = obj.getVar("custom").get_vector(1); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,1,totalDamage,sizeRate,0,0,successType,0,0,0,1); + } + local sizeRate = obj.getVar("custom").get_vector(0).tofloat() / 100.0 * 1.35; + local offset_x = (30.0 * sizeRate).tointeger(); + local offset_y = (5.0 * sizeRate).tointeger(); + local setx = sq_getRandom(-offset_x,offset_x); + local sety = sq_getRandom(-offset_y,offset_y); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/lavapotion/lavapotionfire.ani",setx,sety,0); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,setx,sety + 1,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,4,0,0,0,0,0,0,0,0,0); + break; + } + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + createOnlyDrawObject_witch_bykk(obj,"passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailstartbottom.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM) + break; + case 2: + obj.resetHitObjectList(); + break; + case 3: + if(obj.getVar("custom").get_vector(2) > 0){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/newmegadrilltwist_01.ani"),true); + local parentObj = obj.getParent(); + if(!parentObj) break; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + 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(800, 800, 300, 100); + } + } + break; + } + break; + case 2: + case 12: + switch(timeEventIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/fluore2_dust"+sq_getRandom(1,3).tostring()+".ani",0,-1,-1); + break; + case 1: + // obj.setTimeEvent(2,50,-1,false); + break; + case 2: + // local parentObj = obj.getParent(); + // if(parentObj){ + // if(timeEventCount % 2 == 1){ + // sq_setCurrentAxisPos(obj, 0, sq_GetXPos(parentObj)); + // sq_setCurrentAxisPos(obj, 2, sq_GetZPos(parentObj)); + // } + // else{ + // sq_setCurrentAxisPos(obj, 0, sq_GetXPos(parentObj) + 5); + // sq_setCurrentAxisPos(obj, 2, sq_GetZPos(parentObj) + 5); + // } + // } + if(timeEventCount % 2 == 1) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + 1); + else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj)); + break; + case 3: + obj.resetHitObjectList(); + break; + case 4: + case 5: + case 6: + case 7: + local sizeRate = 1.5; + local pooledObj1 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/icefireexplosionparticle"+(timeEventIndex-3).tostring()+".ani",50,0,50); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/icefireexplosionparticle"+(timeEventIndex-3).tostring()+".ani",-46,0,40); + local pooledObj3 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/icefireexplosionparticle"+(timeEventIndex-3).tostring()+".ani",-36,0,100); + local aniA = [pooledObj1,pooledObj2,pooledObj3]; + for(local i = 0; i < 3; i++){ + local pAni = aniA[i].getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + break; + } + break; + case 4: + if(timeEventIndex == 0){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(2); + sqrChr.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_UROBOROS://二覺 + switch(timeEventIndex){ + case 0: + local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/uroboros/explosion_dodge.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_CreateParticle("character/mage/effect/animation/witch_bykk/uroboros/particle/uroborossub.ptl", obj, 0, 0, 100, true, 1, 0, 1); + obj.sq_PlaySound("UROBOROS_EXP"); + break; + case 1: + local aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_dark.ani"; + local aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_dark.ani"; + if(timeEventCount % 4 == 2){aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_fire.ani";aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_fire.ani";} + if(timeEventCount % 4 == 3){aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_ice.ani";aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_ice.ani";} + if(timeEventCount % 4 == 0){aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_light.ani";aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_light.ani";} + local totalDamage = obj.getVar("custom").get_vector(0); + local targetObj = obj.sq_FindFirstTarget(-300, 600, 100, 600); + if(targetObj){ + sq_AddDrawOnlyAniFromParent(obj,aniPath2,0,1,1); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local drawObj = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj) + 20,ENUM_DRAWLAYER_NORMAL); + obj.sq_PlaySound("R_UROBOROS_SPARK"); + setUroLightning_witch_bykk(obj, drawObj, activeObj); + cearteSkillPassive_Witch_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_UROBOROS,3,timeEventCount % 4,totalDamage,0,0,0,0,0,0,1); + local targetObj2 = obj.sq_FindNextTarget(targetObj, 200, 100); + if(targetObj2){ + local activeObj2 = sq_GetCNRDObjectToActiveObject(targetObj2); + local drawObj2 = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj) + 20,ENUM_DRAWLAYER_NORMAL); + obj.sq_PlaySound("R_UROBOROS_SPARK"); + setUroLightning_witch_bykk(obj, drawObj2, activeObj2); + cearteSkillPassive_Witch_bykk(sqrChr,activeObj2,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_UROBOROS,3,timeEventCount % 4,totalDamage,0,0,0,0,0,0,1); + } + } + break; + case 2: + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(2); + sqrChr.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS , STATE_PRIORITY_USER, true); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + if(!sqrChr) return; + local targetObj; + if(sqrChr.getVar("Lollipopcrush_Boss").get_obj_vector_size() > 0){ + targetObj = sqrChr.getVar("Lollipopcrush_Boss").get_obj_vector(0); + } + else if(sqrChr.getVar("Lollipopcrush_Named").get_obj_vector_size() > 0){ + targetObj = sqrChr.getVar("Lollipopcrush_Named").get_obj_vector(0); + } + else{ + targetObj = obj.sq_FindFirstTarget(-9999, 19998, 9999, 9999); + } + if(!targetObj){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_LOLLIPOPCRUSH, 16) > 0){ + targetObj = sqrChr; + local sub = obj.getVar("custom").get_vector(0); + local whitecandy_num = sqrChr.getVar("whitecandy_num").get_vector(0); + local blackcandy_num = sqrChr.getVar("blackcandy_num").get_vector(0); + local bosscandy_num = sqrChr.getVar("bosscandy_num").get_vector(0); + switch(sub){ + case 0: + sqrChr.getVar("whitecandy_num").set_vector(0,whitecandy_num+1); + break; + case 1: + sqrChr.getVar("blackcandy_num").set_vector(0,blackcandy_num+1); + break; + case 2: + sqrChr.getVar("bosscandy_num").set_vector(0,bosscandy_num+1); + break; + } + } + else return; + } + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(targetObj); + obj.getVar().setBool(0,true); + break; + } + break; + case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 + switch(timeEventIndex){ + case 0: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + obj.resetHitObjectList(); + break; + } + break; + case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 + switch(timeEventIndex){ + case 0: + local offset_x = [125,125,-125,-125,210,210,-210,-210,275,275,-275,-275,310,310,-310,-310,315,315,-310,-310]; + local offset_y = [-35,35,35,-35,-60,60,60,-60,-80,80,80,-80,-95,95,95,-95,-105,105,105,-105]; + local sizeRate = [100,75,50,35,20]; + local basea = (timeEventCount-1)*4; + local totalDamage = obj.getVar("custom").get_vector(0) / timeEventCount; + for(local i = 0; i < 4; i++){ + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,offset_x[basea + i],offset_y[basea + i],0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,6,totalDamage*sizeRate[timeEventCount - 1]/100,sizeRate[timeEventCount - 1],0,0,0,0,0,0,1); + } + break; + } + break; + } +} + +function onAttack_po_witch_bykk_kak(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + //enableClearDeadEnemies(obj, damager); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + switch(subtype){ + case 1: + if(obj.getVar("targetObj").get_obj_vector_size() <= 0) obj.getVar("targetObj").clear_obj_vector(); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)) obj.getVar("targetObj").push_obj_vector(damager); + else return; + local successType = obj.getVar("custom").get_vector(1); + local holdandup = 0; + if(successType >= 1) holdandup = 300;// + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/hearthings.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(damager, "appendage/character/hearthings.nut"); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/witch_skill_bykk/passiveobj/ap_antigravity.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/mage/witch_skill_bykk/passiveobj/ap_antigravity.nut"); + } + CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "appendage/character/hearthings.nut", true); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_BYKK_ANTIGRAVITYSTARTER, false, "appendage/character/hearthings.nut", true); + if(AddAppendage){ + AddAppendage.getAppendageInfo().setValidTime(100); + sq_HoldAndDelayDie(damager, obj, true, true, true, 0, holdandup, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(successType >= 2) obj.setTimeEvent(0,80,-1,false); + } + break; + } + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + switch(subtype){ + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.isExistTimeEvent(1)){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(damager,"character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); + if(AddAppendage) CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_BYKK_BLACKMANTLE, false, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut", true); + if(AddAppendage){ + sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos() - obj.getZPos(), 100, true, AddAppendage); + sq_HoldAndDelayDie(damager, obj, true, true, true, 10, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(3000); + } + } + break; + } + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + switch(subtype){ + case 1: + if(obj.getVar("custom").get_vector(0) >= 2){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager,"passiveobject/witch_bykk/animation/enhancedmagicmissile/endelectric.ani",0,0, sq_GetCenterZPos(boundingBox)); + obj.getVar("targetObj").push_obj_vector(damager); + } + } + break; + } + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + switch(subtype){ + case 1: + switch(state){ + case 21: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ + obj.getVar("targetObj").push_obj_vector(damager); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(obj.getVar("custom").get_vector(0) >= 2){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/mage/witch_skill_bykk/passiveobj/ap_fluorecollider.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false,"character/mage/witch_skill_bykk/passiveobj/ap_fluorecollider.nut", true); + AddAppendage.sq_SetValidTime(1000); + sq_HoldAndDelayDie(activeObj, obj, true, false, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + } + break; + } + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + if(subtype == 41) sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + switch(subtype){ + case 3: + if(damager.getVar("lavapotion").getBool(0) == false && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + damager.getVar("lavapotion").setBool(0,true); + obj.getVar("targetObj").push_obj_vector(damager); + local speedRate = obj.getVar("custom").get_vector(2); + local jumpRate = obj.getVar("custom").get_vector(3); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -speedRate.tofloat(), 5000); + if(ap){ + ap.getAppendageInfo().setValidTime(10000);//設置有效時間 + ap.sq_Append(damager, obj);//設置屬性的父對象 + } + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_JUMP_POWER, true, -jumpRate.tofloat(), 5000); + if(ap2){ + ap2.getAppendageInfo().setValidTime(10000);//設置有效時間 + ap2.sq_Append(damager, obj);//設置屬性的父對象 + } + } + break; + } + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + break; + case SKILL_BYKK_UROBOROS://二覺 + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr.getVar("uroborosTar").is_obj_vector(damager)){ + sqrChr.getVar("uroborosTar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, "appendage/character/ap_common_hold.nut", true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + switch(subtype){ + case 0: + case 1: + case 9: + case 10: + case 11: + local candy_num = sqrChr.getVar("candynumber").get_vector(0); + local candy_max = sqrChr.getVar("candynumber").get_vector(1); + local bosscandy_num = sqrChr.getVar("candynumber").get_vector(2); + local bosscandy_max = sqrChr.getVar("candynumber").get_vector(3); + local totalDamage = obj.getVar("custom").get_vector(1); + local totalDamage2 = obj.getVar("custom").get_vector(2); + if(candy_num < candy_max){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(bosscandy_num < bosscandy_max && sq_getRandom(1,100) > 70){ + sqrChr.getVar("candynumber").set_vector(2,bosscandy_num + 1); + local level = obj.getVar("custom").get_vector(3); + local prob = obj.getVar("custom").get_vector(4); + local time = obj.getVar("custom").get_vector(5); + local damage = obj.getVar("custom").get_vector(6); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,2,totalDamage2,level,prob,time,damage,0,0,2); + } + else{ + sqrChr.getVar("candynumber").set_vector(0,candy_num + 1); + local sub = sq_getRandom(0,1); + switch(sub){ + case 0: + local level = obj.getVar("custom").get_vector(4); + local prob = obj.getVar("custom").get_vector(7); + local time = obj.getVar("custom").get_vector(8); + local damage = obj.getVar("custom").get_vector(9); + cearteSkillPassive_Witch_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-150,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,level,prob,time,damage,0,0,2); + break; + case 1: + local level = obj.getVar("custom").get_vector(3); + local prob = obj.getVar("custom").get_vector(4); + local time = obj.getVar("custom").get_vector(5); + local damage = obj.getVar("custom").get_vector(6); + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,level,prob,time,damage,0,0,2); + break; + } + } + } + } + break; + case 20: + local sub = obj.getVar("custom").get_vector(0); + if(sub >= 1 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local blind_stuckrate = obj.getVar("custom").get_vector(5); + local blind_time = obj.getVar("custom").get_vector(4); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_STUCK , true, -blind_stuckrate.tofloat(), 0); + if (ap){ + ap.getAppendageInfo().setValidTime(blind_time); + ap.sq_Append(damager, obj); + } + } + break; + } + break; + case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 + switch(subtype){ + case 3: + case 4: + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + local prob = obj.getVar("custom").get_vector(0); + local level = obj.getVar("custom").get_vector(1); + local time = obj.getVar("custom").get_vector(2); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLIND, prob.tofloat(), level, false, time); + if(sq_GetLevelData(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER, 11, sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) break; + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local sub_number1 = obj.getVar("custom").get_vector(8); + local isSeal = obj.getVar("custom").get_vector(7); + local mon_number = obj.getVar("custom").get_vector(10); + if(sub_number1 > 0 && !isStuck && isSeal == 1){ + obj.getVar("custom").set_vector(10, mon_number + 1); + local monsterId = [GOBLIN_BYKK_ID,TAU_BYKK_ID]; + local homunculus_skill = sq_GetSkill(sqrChr, SKILL_BYKK_HOMUNCULUS) + if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_HOMUNCULUS) > 0 && !homunculus_skill.isSealFunction()) monsterId = [LANTERN_BYKK_ID,FLUORE_BYKK_ID,FLUTO_BYKK_ID,JACKFROST_BYKK_ID]; + local monstertime = obj.getVar("custom").get_vector(5); + local monsterlevel = obj.getVar("custom").get_vector(6); + for(local i = 0; i < sub_number1; i++){ + if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ + summonmonster_witch_bykk(sqrChr,activeObj,0,0,-sq_GetZPos(sqrChr),0,monsterId[sq_getRandom(0,(monsterId.len()-1))],monstertime,monsterlevel,0); + sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) + 1); + print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); + } + + } + } + } + break; + case 14: + case 15: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 + switch(subtype){ + case 3: + case 4: + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_GetLevelData(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER, 11, sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) break; + local sub_number1 = obj.getVar("custom").get_vector(8); + local isSeal = obj.getVar("custom").get_vector(7); + local mon_number = obj.getVar("custom").get_vector(10); + if(sub_number1 > 0 && !isStuck && isSeal == 1 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + obj.getVar("custom").set_vector(10, mon_number + 1); + local monsterId = [GOBLIN_BYKK_ID,TAU_BYKK_ID]; + local homunculus_skill = sq_GetSkill(sqrChr, SKILL_BYKK_HOMUNCULUS) + if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_HOMUNCULUS) > 0 && !homunculus_skill.isSealFunction()) monsterId = [LANTERN_BYKK_ID,FLUORE_BYKK_ID,FLUTO_BYKK_ID,JACKFROST_BYKK_ID]; + local monstertime = obj.getVar("custom").get_vector(5); + local monsterlevel = obj.getVar("custom").get_vector(6); + for(local i = 0; i < sub_number1; i++){ + if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ + summonmonster_witch_bykk(sqrChr,activeObj,0,0,-sq_GetZPos(sqrChr),0,monsterId[sq_getRandom(0,(monsterId.len()-1))],monstertime,monsterlevel,0); + sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) + 1); + print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); + } + } + } + break; + } + break; + } +} + +function onKeyFrameFlag_po_witch_bykk_kak(obj, flagIndex) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + local effect_aniPath = "character/mage/effect/animation/witch_bykk/jackfrosticewater/"; + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "start/jackfrosticewaterstartfront_14.ani"),true); + obj.setTimeEvent(1,400,1,false); + obj.setTimeEvent(2,200,1,false); + local parentObj = obj.getParent(); + if(!parentObj) break; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + 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(200, 200, 300, 100);//300,300,150,100 + } + break; + } + break; + } + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),-50)); + break; + } + break; + } + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + switch(subtype){ + case 2: + case 12: + switch(flagIndex){ + case 1: + //生成OBJ + local totalDamage = 10000; + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,3,totalDamage,1,0,0,0,0,0,0,1); + break; + case 2: + break; + } + break; + } + break; + case SKILL_BYKK_UROBOROS://二覺 + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + break; + case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),75)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 85); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-45)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 50); + break; + case 3: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-55)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 40); + break; + case 4: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-60)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 25); + break; + case 5: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),75)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 20); + break; + case 6: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),80)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 15); + break; + case 7: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),85)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 10); + break; + } + break; + case 2: + switch(flagIndex){ + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-60)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 40); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-53)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 14); + break; + case 3: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),75)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 25); + break; + case 4: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),55)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr)); + break; + } + break; + case 11: + if(flagIndex == 1) obj.resetHitObjectList(); + break; + } + break; + case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),55)); + sq_setCurrentAxisPos(obj, 2, 110); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-72)); + sq_setCurrentAxisPos(obj, 2, 30); + break; + case 3: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-90)); + sq_setCurrentAxisPos(obj, 2, 22); + break;dd + case 4: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-70)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr)*0 - 22); + break; + case 5: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),130)); + sq_setCurrentAxisPos(obj, 2, 0); + break; + case 6: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),122)); + sq_setCurrentAxisPos(obj, 2, -25); + break; + case 7: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),125)); + sq_setCurrentAxisPos(obj, 2, -10); + break; + case 8: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),125)); + sq_setCurrentAxisPos(obj, 2,-10); + break; + } + break; + case 2: + switch(flagIndex){ + case 1: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-39)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 25); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-40)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 15); + break; + case 3: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-33)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 23); + break; + case 4: + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-42)); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 30); + break; + } + break; + } + break; + } +} + +function procAppend_po_witch_bykk_kak(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 + switch(subtype){ + case 2: + switch(state){ + case 25: + if(obj.getVar("custom").get_vector(7) > 0) return; + local timer = obj.getVar().get_ct_vector(0); + if(timer){ + local settime = obj.getVar("custom").get_vector(1); + local currentT = timer.Get(); + local fireT = obj.getVar("custom").get_vector(0); + if(currentT + settime >= fireT){ + obj.removeAllTimeEvent(); + obj.getVar().setBool(0,true); + obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + } + } + break; + } + break; + case 4: + case 5: + case 6: + case 7: + // switch(state){ + // case 20: + // local pAni = obj.getCurrentAnimation();//得到ani + // local currentT = sq_GetCurrentTime(pAni);//當前時間 + // local fireT = 350;//總時間 + // local hight = obj.getVar("custom").get_vector(0); + // local v = sq_GetUniformVelocity(hight, 0, currentT, fireT); + // sq_setCurrentAxisPos(obj, 2, v); + // if(obj.getZPos() <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + // break; + // } + break; + } + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 + break; + case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 + break; + case SKILL_BYKK_BROOMSPIN://旋轉掃把 + break; + case SKILL_BYKK_ELECTRICRABBIT://光電兔 + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 + switch(subtype){ + case 1: + switch(state){ + case 22: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//當前時間 + local fireT = 150;//總時間 + local srcX = obj.getVar("move").get_vector(0);//初始x坐標 + local srcZ = obj.getVar("move").get_vector(1);//初始z坐標 + local MoveX = obj.getVar("move").get_vector(2);//移動多少x距離 + local MoveZ = obj.getVar("move").get_vector(3);//移動多少z距離 + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);//根據方向運算當前數值 + sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 + sq_setCurrentAxisPos(obj, 2, srcZ + vz);//設置當前z坐標 + if(currentT >= fireT) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 + break; + case SKILL_BYKK_FUSIONCRAFT://技藝融合 + break; + case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 + switch(subtype){ + case 3: + if(sq_GetZPos(obj) <= 15 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0,true); + local totalDamage = obj.getVar("custom").get_vector(1); + local successType = obj.getVar("custom").get_vector(0); + local sizeRate = obj.getVar("custom").get_vector(2); + local angle = obj.getVar("custom").get_vector(3); + local angleMax = obj.getVar("custom").get_vector(4); + local sub = obj.getVar("custom").get_vector(5); + if(successType >= 1) cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,50,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,4,totalDamage,successType,sizeRate,angle,angleMax,sub,0,0,1); + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_failed_break.ani",0,0,-20); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_failed_break.ani",0,0,-20); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal_break.ani",0,1,-19); + break; + case 2: + case 3: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great_break.ani",0,0,-20); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_BYKK_HOMUNCULUS://魔道學助手 + break; + case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 + break; + case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 + switch(subtype){ + case 1: + switch(state){ + case 22: + if(obj.getVar().getBool(0)){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcX = obj.getVar("move").get_vector(0); + local MoveX = obj.getVar("move").get_vector(1); + local v = sq_GetUniformVelocity(0, -MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(currentT >= fireT) obj.getVar().setBool(0,false); + } + break; + } + + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(11) * 15 / 10 && state < 25){ + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 + switch(subtype){ + case 4: + switch(state){ + case 20: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 300;//總時間 + local srcX = obj.getVar("move").get_vector(0); + local srcY = obj.getVar("move").get_vector(1); + local srcZ = obj.getVar("move").get_vector(2); + local MoveX = obj.getVar("move").get_vector(3) / 2; + local MoveY = obj.getVar("move").get_vector(4) / 2; + local MoveZ = obj.getVar("move").get_vector(5); + local direction = obj.getVar("move").get_vector(6); + local obj_direction = obj.getDirection(); + if(direction != obj_direction){ + MoveX = -MoveX; + MoveY = -MoveY; + } + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); + local vz = sq_GetAccel(0, MoveZ, currentT, fireT,true); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, srcY + vy); + sq_setCurrentAxisPos(obj, 2, srcZ + vz); + if(currentT >= fireT){ + obj.getVar("move").set_vector(0,sq_GetXPos(obj)); + obj.getVar("move").set_vector(1,sq_GetYPos(obj)); + obj.getVar("move").set_vector(2,sq_GetZPos(obj)); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 21: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 300;//總時間 + local srcX = obj.getVar("move").get_vector(0); + local srcY = obj.getVar("move").get_vector(1); + local srcZ = obj.getVar("move").get_vector(2); + local MoveX = obj.getVar("move").get_vector(3) / 2; + local MoveY = obj.getVar("move").get_vector(4) / 2; + local direction = obj.getVar("move").get_vector(6); + local obj_direction = obj.getDirection(); + if(direction != obj_direction){ + MoveX = -MoveX; + MoveY = -MoveY; + } + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); + local vz = sq_GetAccel(srcZ, 0, currentT, fireT,false); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, srcY + vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 3: + switch(state){ + case 20: + if(obj.getVar("move").size_vector() > 0){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 240;//總時間 + local srcX = obj.getVar("move").get_vector(0); + local srcZ = obj.getVar("move").get_vector(1); + local MoveX = obj.getVar("move").get_vector(2); + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 + switch(subtype){ + case 2: + case 12: + switch(state){ + case 21: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(0, 4); + if(currentT >= fireT) return; + local srcX = obj.getVar("custom").get_vector(1); + local srcZ = obj.getVar("custom").get_vector(2); + local MoveX = obj.getVar("custom").get_vector(3); + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } + break; + } + break; + case SKILL_BYKK_UROBOROS://二覺 + break; + case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 + switch(subtype){ + case 20: + switch(state){ + case 21: + if(obj.getVar().getBool(0)){ + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni) - 500; + local fireT = 500; + if(sq_GetDistanceObject(obj, targetObj, false) < 20){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, true); + local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, true); + local Z1 = sq_GetAccel(obj.getZPos(), targetObj.getZPos() + sq_GetObjectHeight(targetObj) / 2, currentT, fireT, true); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + sq_setCurrentAxisPos(obj, 2, Z1); + if(sq_GetXPos(targetObj) > sq_GetXPos(obj)) sq_SetCurrentDirection(obj, 0); + else sq_SetCurrentDirection(obj, 1); + } + } + break; + } + break; + } + break; + } + + if(obj.getZPos() >= 6000){ + local parentObj = obj.getParent(); + local pChr = obj.getTopCharacter(); + local id = parentObj.getCollisionObjectIndex(); + if(!id || !pChr) return; + if(pChr.isMyControlObject()) { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(id); + sq_BinaryWriteDword(sq_GetGroup(parentObj)); + sq_BinaryWriteDword(sq_GetUniqueId(parentObj)); + sq_SendChangeSkillEffectPacket(pChr, SKILL_BYKK_TRANSFORMFLAPPER); + sq_SendDestroyPacketPassiveObject(obj); + } + sq_SendDestroyPacketPassiveObject(obj); + } +} + +function onAfterAttack_po_witch_bykk(obj, damager, boundingBox, isStuck) +{ + if (!obj) return 0; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + switch(skillIndex){ + case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 + case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 + switch(subtype){ + case 3: + case 4: + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + if(sq_GetLevelData(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER, 11, sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) break; + local isSeal = obj.getVar("custom").get_vector(7); + if(isSeal == 1){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local successType = obj.getVar("custom").get_vector(3); + if(successType >= 1){ + local monsterId = [GOBLIN_BYKK_ID,TAU_BYKK_ID]; + local homunculus_skill = sq_GetSkill(sqrChr, SKILL_BYKK_HOMUNCULUS) + if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_HOMUNCULUS) > 0 && !homunculus_skill.isSealFunction()) monsterId = [LANTERN_BYKK_ID,FLUORE_BYKK_ID,FLUTO_BYKK_ID,JACKFROST_BYKK_ID]; + if(activeObj.getHp() <= 0){ + local monsterprob = obj.getVar("custom").get_vector(4); + if(sq_getRandom(1,1000) > (1000 - monsterprob)){ + local monstertime = obj.getVar("custom").get_vector(5); + local monsterlevel = obj.getVar("custom").get_vector(6); + if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ + summonmonster_witch_bykk(sqrChr,activeObj,0,0,-sq_GetZPos(sqrChr),0,monsterId[sq_getRandom(0,(monsterId.len()-1))],monstertime,monsterlevel,0);// + sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) + 1); + print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); + } + } + } + } + } + } + break; + } + break; + case SKILL_BYKK_LOLLIPOPCRUSH: + switch(subtype){ + case 0: + case 1: + case 9: + case 10: + case 11: + local extra_num = obj.getVar("custom").get_vector(0); + local totalDamage = obj.getVar("custom").get_vector(1); + if(extra_num > 0){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(activeObj.getHp() <= 0){ + local sub = sq_getRandom(0,1); + if(sq_getRandom(1,100) > 70) sub = 2,totalDamage = obj.getVar("custom").get_vector(2); + switch(sub){ + case 0: + local level = obj.getVar("custom").get_vector(4); + local prob = obj.getVar("custom").get_vector(7); + local time = obj.getVar("custom").get_vector(8); + local damage = obj.getVar("custom").get_vector(9); + for(local i = 0; i < extra_num; i++){ + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,level,prob,time,damage,0,0,2); + } + break; + case 1: + case 2: + local level = obj.getVar("custom").get_vector(3); + local prob = obj.getVar("custom").get_vector(4); + local time = obj.getVar("custom").get_vector(5); + local damage = obj.getVar("custom").get_vector(6); + for(local i = 0; i < extra_num; i++){ + cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,0,0,0,0,0,0,2); + } + break; + } + } + } + } + break; + } + break; + } + return 0; +} + + diff --git a/user/116.205.165.25/6_mage_12.c b/user/116.205.165.25/6_mage_12.c new file mode 100644 index 0000000..36bd7e2 --- /dev/null +++ b/user/116.205.165.25/6_mage_12.c @@ -0,0 +1,3301 @@ + + +/////////////////////////witch + + +function cearteSkillPassive_Witch_bykk(obj,passiveObj,objnum,x,y,z,direction,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum) +{ + if(!obj || !passiveObj) return; + if(pushv1 == null) pushv1 = 0; + if(pushv2 == null) pushv2 = 0; + if(pushv3 == null) pushv3 = 0; + if(pushv4 == null) pushv4 = 0; + if(pushv5 == null) pushv5 = 0; + if(pushv6 == null) pushv6 = 0; + if(pushv7 == null) pushv7 = 0; + if(pushv8 == null) pushv8 = 0; + if(bonusnum > 0){ + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + // print("bonusRate1 = "+bonusRate); + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0){ + local bonusrate2 = sq_GetLevelData(obj, SKILL_BYKK_HOMUNCULUS, 6, homunculus_level); + local bonus_skillIndex = [SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_BLACKMANTLE,SKILL_BYKK_TRANSFORMFLAPPER,SKILL_BYKK_TRANSFORMFLAPPEREX,SKILL_BYKK_LOLLIPOPCRUSH,SKILL_BYKK_UROBOROS,SKILL_BYKK_ELECTRICRABBIT,SKILL_BYKK_JACKFROSTICEWATER,SKILL_BYKK_JACKOHALLOWEEN]; + for(local i = 0; i < bonus_skillIndex.len(); i++){ + if(skillIndex == bonus_skillIndex[i]){bonusRate = bonusRate + bonusrate2.tofloat() / 1000;break;} + } + } + // print("bonusRate2 = "+bonusRate); + local lapisphilosophorum_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM); + if(lapisphilosophorum_level > 0){ + local bonusrate3 = sq_GetLevelData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 16, lapisphilosophorum_level); + local bonus_skillIndex2 = [SKILL_BYKK_ACIDCLOUD,SKILL_BYKK_ANTIGRAVITYSTARTER,SKILL_BYKK_ELECTRICRABBIT,SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_FLUORECOLLIDER,SKILL_BYKK_HEATINGFURNACE,SKILL_BYKK_LAVAPOTION,SKILL_BYKK_MEGADRILL,SKILL_BYKK_TRANSFORMFLAPPER,SKILL_BYKK_TRANSFORMFLAPPEREX]; + local success_num = [pushv4,pushv3,pushv1,pushv2,pushv3,pushv2,pushv5,pushv1,pushv6,pushv3]; + for(local i = 0; i < bonus_skillIndex2.len(); i++){ + if(skillIndex == bonus_skillIndex2[i]){ + if(bonus_skillIndex2[i] == SKILL_BYKK_ACIDCLOUD && sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY) > 0){bonusRate = bonusRate + bonusrate3.tofloat() / 1000;break;} + if(success_num[i] >= 1){bonusRate = bonusRate + bonusrate3.tofloat() / 1000;break;} + } + } + } + // print("bonusRate3 = "+bonusRate); + switch (bonusnum) { + case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; + case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; + case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; + case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; + case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; + case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; + case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; + case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; + } + } + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + z = z - obj.getZPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + +function bonus_witch_bykk(obj) +{ + return 0; + local bonusRate = 0; + local skill_level1 = sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR); + local skill_level2 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); + if(skill_level1 > 0) bonusRate = bonusRate + sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 9, skill_level1); + if(skill_level2 > 0) bonusRate = bonusRate + sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 0, skill_level2); + if(obj.getVar("mpregenrateup_buff").getBool(0)){ + local skill_level3 = sq_GetSkillLevel(obj, 41); + local add_Rate41 = sq_GetLevelData(obj, 41, 4, skill_level3); + bonusRate = bonusRate + add_Rate41; + } + + return bonusRate; +} + +function setDamageRate_Witch_bykk(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_FRIENDLYFAMILIAR, 9, sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_REDCANDY, 0, sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SWEETCANDYBAR, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR))) / 1000; + print("bonusRate3 = "+bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/witch_skill_bykk/passiveskill/ap_mpregenrateup.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, 41, 4, sq_GetSkillLevel(obj, 41))) / 1000; + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function onAfterSetState_Throw_witch_bykk(obj, state, datas, isResetTimer) +{ + local skillIndex = obj.getThrowIndex(); + switch (skillIndex) { + case SKILL_BYKK_ACIDCLOUD: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_LAVAPOTION: + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + if(skill_level > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case SKILL_BYKK_MEGADRILL: + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + if(skill_level > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case 41: + if(sq_getGrowType(obj) == 4){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(21); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } +} + +function setState_Mage_witch_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(state == 39){ + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS),homunculus_skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0 && !homunculus_skill.isSealFunction()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(state == 35){ + local skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); + local redcandy_level = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); + if(redcandy_level > 0 && !skill.isSealFunction()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(state == 36){ + if(sq_GetLevelData(obj, SKILL_BYKK_TRANSFORMFLAPPER, 12, sq_GetSkillLevel(obj, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) obj.getVar("transBool").setBool(0, true); + else obj.getVar("transBool").setBool(0, false); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPER, STATE_PRIORITY_IGNORE_FORCE, true); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(state == 41){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(state == 43){ + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + if(skill_level > 0){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HEATINGFURNACE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(state == 49){ + if(sq_GetLevelData(obj, SKILL_BYKK_TRANSFORMFLAPPEREX, 12, sq_GetSkillLevel(obj, SKILL_BYKK_TRANSFORMFLAPPEREX)) > 0) obj.getVar("transBoolex").setBool(0, true); + else obj.getVar("transBoolex").setBool(0, false); + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPEREX, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(state == 17){ + if(sq_GetVectorData(datas, 0) == 2 && sq_getGrowType(obj) == 4){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(22); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function getSuccessType_bykk(obj,skillIndex) +{ + local winRate = sq_GetIntData(obj, skillIndex, 1); + local bigwinRate = sq_GetIntData(obj, skillIndex, 2); + local loseRate = 1000 - winRate - bigwinRate; + local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR);//幸运棒棒糖 + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION);//成功预感 + local skllevel3 = sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR);//亲和法米利尔 + local win_addRate1 = sq_GetLevelData(obj,SKILL_BYKK_SWEETCANDYBAR, 2, skllevel1); + local bigwin_addRate1 = sq_GetLevelData(obj,SKILL_BYKK_SWEETCANDYBAR, 3, skllevel1); + local win_addRate2 = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 1, skllevel2); + local bigwin_addRate2 = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 2, skllevel2); + local win_addRate3 = sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 1, skllevel3); + local bigwin_addRate3 = sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 2, skllevel3); + if(skllevel3 > 0){winRate= winRate + win_addRate3;bigwinRate= bigwinRate + bigwin_addRate3;} + if(obj.getVar("successpremonition").getBool(0)){ + obj.getVar("successpremonition").setBool(0, false); + winRate = winRate + win_addRate2 ; + bigwinRate = bigwinRate + bigwin_addRate2; + } + if(skllevel1 > 0){ + winRate = (winRate.tofloat() * (1000.0 + win_addRate1.tofloat()) / 1000.0).tointeger(); + bigwinRate = (bigwinRate.tofloat() * (1000.0 + bigwin_addRate1.tofloat()) / 1000.0).tointeger(); + } + if(winRate + bigwinRate >= 1000){ + winRate = 1000 - bigwinRate; + loseRate = 0; + } + else{ + loseRate = 1000 - winRate - bigwinRate; + } + // print("bigwinRate = "+bigwinRate+" && winRate = "+winRate+" && loseRate = "+loseRate); + local ramdon_number = sq_getRandom(1,1000); + if(ramdon_number > loseRate && ramdon_number <= (loseRate + winRate)){ + return 1; + } + if(ramdon_number > (loseRate + winRate) && ramdon_number <= (loseRate + winRate + bigwinRate)){ + return 2; + } + return 0; +} + +function proc_appendage_antigravity_bykk(appendage) +{ + if (!appendage) return; + +} + +function onCreateObject_Throw(obj, createObject) +{ + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + if(colObj.getCollisionObjectIndex() == 23043){ + local bonusRate = sq_GetCurrentAttackBonusRate(colObj); + local attackInfo = sq_GetCurrentAttackInfo(colObj); + if(attackInfo){ + sq_SetCurrentAttackPower(attackInfo, 0); + sq_SetCurrentAttackBonusRate(attackInfo, 10000); + } + print(sq_GetCurrentAttackBonusRate(colObj)); + } + } +} + +function createOnlyDrawObject_witch_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath);//创建ani + local pooledObj = sq_CreatePooledObject(ani,isTrue);//创建绘画对象 参数2:应该是ani结束时true 就销毁反之false不销毁 + sq_SetCurrentDirection(pooledObj, direction);//设置方向 + pooledObj.setCurrentPos(x,y,z);//设置pos + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);//设置图层 + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);//增加对象 + return pooledObj; +} + +function setLightning_witch_bykk(obj, drawObj, targetObj) +{ + if(!obj) return; + //if(!pTargetChr) return; + + local X = drawObj.getXPos(); + local Y = drawObj.getYPos(); + local Z = drawObj.getZPos(); + + + local pAni = drawObj.getCurrentAnimation(); + local frameIndex = pAni.GetCurrentFrameIndex(); + + local posX = targetObj.getXPos(); + local posY = targetObj.getYPos() + 1; + local posZ = targetObj.getZPos() + (sq_GetObjectHeight(targetObj) / 2); + + if(posX == -1) return; + + local offset = posX - X; + + if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT); + else drawObj.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); + local nW = sq_Abs( cos_x.tointeger() ); + local nH = sq_Abs( sin_y.tointeger() ); + local wRate = width.tofloat() / nW.tofloat(); + local hRate = h.tofloat() / nH.tofloat(); + pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); +} + +function setUroLightning_witch_bykk(obj, drawObj, targetObj) +{ + if(!obj) return; + //if(!pTargetChr) return; + + local X = drawObj.getXPos(); + local Y = drawObj.getYPos(); + local Z = drawObj.getZPos(); + + local pAni = drawObj.getCurrentAnimation(); + + local posX = targetObj.getXPos(); + local posY = targetObj.getYPos() + 1; + local posZ = 90; + + if(posX == -1) return; + + local offset = posX - X; + + if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT); + else drawObj.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_SetCustomRotate(drawObj, angle); + pAni.setImageRate(1.0, 1.0); + local dis = 185; + local cos_x = dis.tofloat() * sq_Cos(angle); + local sin_y = dis.tofloat() * sq_Sin(angle); + local nW = sq_Abs( cos_x.tointeger() ); + local nH = sq_Abs( sin_y.tointeger() ); + local wRate = width.tofloat() / nW.tofloat(); + local hRate = h.tofloat() / nH.tofloat(); + pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); +} + +function onStartMap_Witch_bykk(obj) +{ + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.getDirection() != obj.getDirection()) sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,4,50,0,0,0,0,0,0,0,0); + } + if(obj.getVar("jackohalloween_pumpkin").get_obj_vector_size() > 0){ + local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("jackohalloween_pumpkin").get_obj_vector(0)); + if(colObj && colObj.getState() <= 24){ + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local colObj2 = sq_GetCNRDObjectToCollisionObject(colObj.getVar("jackohalloween_lava").get_obj_vector(0)); + if(colObj2) colObj2.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else obj.getVar("jackohalloween_pumpkin").clear_obj_vector(); + } + local attackObj = obj.getVar("uroboros").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(colObj.getDirection() != obj.getDirection()) sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); + obj.getVar("uroboros").setBool(0, true); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_UROBOROS,4,50,0,0,0,0,0,0,0,0); + } +} + +function onStartDungeon_Witch_bykk(obj) +{ + // bonus_witch_bykk(obj); + if(sq_GetSkillLevel(obj,SKILL_BYKK_LOLLIPOPCRUSH) > 0){ + obj.getVar("whitecandy_num").clear_vector(); + obj.getVar("blackcandy_num").clear_vector(); + obj.getVar("bosscandy_num").clear_vector(); + obj.getVar("whitecandy_num").push_vector(0); + obj.getVar("blackcandy_num").push_vector(0); + obj.getVar("bosscandy_num").push_vector(0); + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR) > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_SWEETCANDYBAR, false, "character/mage/witch_skill_bykk/passiveskill/ap_sweetcandybar.nut", true); + } + obj.getVar("countofhomunculus").setInt(11, 0); + setDamageRate_Witch_bykk(obj); +} + +//人物复活 +function reset_witch_bykk(obj) +{ + if(!obj) return; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/witch_skill_bykk/passiveskill/ap_mpregenrateup.nut")){ + obj.getVar("mpregenrateup_buff").setBool(0,false); + // bonus_witch_bykk(obj); + } + setDamageRate_Witch_bykk(obj); +} + +function summonmonster_witch_bykk(obj,monsterobj,x,y,z,substate,monsterId,summontime,level,team) +{ + if(obj.getVar("Summonnum").size_vector() == 0){ + obj.getVar("Summonnum").clear_vector(); + obj.getVar("Summonnum").push_vector(0); + } + + sq_BinaryStartWrite(); + sq_BinaryWriteByte(substate); + sq_BinaryWriteDword(monsterId); + sq_BinaryWriteWord(team); + sq_BinaryWriteWord(level); + sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0)); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(summontime); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, monsterobj)){ + destX_01 = monsterobj.getXPos() - obj.getXPos(); + destY_01 = monsterobj.getYPos() - obj.getYPos(); + if(monsterobj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - monsterobj.getXPos(); + } + sq_SendCreatePassiveObjectPacket(obj, 48024, 0, destX_01 + x, destY_01 + y, z, monsterobj.getDirection()); + obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1); +} + +function changeskilleffect_witch_bykk(obj, skillIndex, reciveData) +{ + switch(skillIndex){ + case SKILL_BYKK_TRANSFORMFLAPPER: + local id = reciveData.readDword(); + local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword())); + + monster_obj.setMapFollowParent(obj); + monster_obj.setMapFollowType(1); + + switch(id){ + case TAU_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_tau.nut", "TAU", SKILL_BYKK_TRANSFORMFLAPPER); + break; + case GOBLIN_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_goblin.nut", "GOBLIN", SKILL_BYKK_TRANSFORMFLAPPER); + break; + case FLUORE_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_fluore.nut", "FLUORE", SKILL_BYKK_HOMUNCULUS); + break; + case FLUTO_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_fluto.nut", "FLUTO", SKILL_BYKK_HOMUNCULUS); + break; + case LANTERN_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_lantern.nut", "LANTERN", SKILL_BYKK_HOMUNCULUS); + break; + case JACKFROST_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_jackfrost.nut", "JACKFROST", SKILL_BYKK_HOMUNCULUS); + break; + case LANTERNRUNNER_BYKK_ID: + setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_lanternrunner.nut", "LANTERNRUNNER", SKILL_BYKK_HOMUNCULUS); + break; + } + break; + } +} + + + +function setMonsterAppendage_witch_bykk(obj, monster_obj, appendagepath, monstername, skill_index) +{ + if(!obj) return; + if(!monster_obj) return; + if(appendagepath == null || monstername == null || skill_index == null) return; + appendagepath = appendagepath.tostring(); + monstername = monstername.tostring(); + local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true); + AddAppendage.getVar("sqrChr").clear_obj_vector(); + AddAppendage.getVar("sqrChr").push_obj_vector(obj); + setMonsterInfo_witch_byKK(obj, monster_obj, skill_index, AddAppendage); + local monsternum = obj.getVar(monstername).get_obj_vector_size(); + if(monsternum > 0){ + obj.getVar(monstername).push_obj_vector(monster_obj); + } + else{ + obj.getVar(monstername).clear_obj_vector(); + obj.getVar(monstername).push_obj_vector(monster_obj); + } + } +} + +function setMonsterInfo_witch_byKK(obj, monster_obj, skill_index, appendage) +{ + if(!obj) return; + + local monster_id = monster_obj.getCollisionObjectIndex(); + switch(monster_id){ + case FLUORE_BYKK_ID: + case FLUTO_BYKK_ID: + case JACKFROST_BYKK_ID: + case LANTERN_BYKK_ID: + if(sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 43) > 0){ + local speedRate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 43); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, speedRate.tofloat() , 0); + if(ap) ap.sq_Append(monster_obj, obj); + local speedRate2 = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 44); + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, speedRate2.tofloat() , 0); + if(ap2) ap2.sq_Append(monster_obj, obj); + } + + local coolt01 = 2000, coolt02 = 5000; + if(monster_id == LANTERN_BYKK_ID){coolt01 = 1000; coolt02 = 15000;} + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(2000, -1); + t_01.resetInstant(0); + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(5000, -1); + t_02.resetInstant(0); + appendage.getVar().clear_ct_vector(); + appendage.getVar().push_ct_vector(); + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + break; + } +} + +function monsterattack_witch_ksk(monsterObj,attackIndex) +{ + if(!monsterObj) return; + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, attackIndex); + sq_AddSetStatePacketActiveObject(monsterObj, 8, pIntVec, STATE_PRIORITY_USER); +} + +function proc_appendage_kak_tau(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} +} + +function onSourceKeyFrameFlag_appendage_kak_tau(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 1: + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,10,200+skill_level*10,0,0,0,0,0,0,0,1); + break; + case 2: + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,11,500+skill_level*25,0,0,0,0,0,0,0,1); + break; + case 3: + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,12,800+skill_level*40,group,uniqueId,0,0,0,0,0,1); + break; + case 4: + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,200,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,13,300+skill_level*15,0,0,0,0,0,0,0,1); + break; + } +} + +function proc_appendage_kak_goblin(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} +} + +function onSourceKeyFrameFlag_appendage_kak_goblin(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 1: + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,40,0,50,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,14,400+skill_level*20,0,0,0,0,0,0,0,1); + break; + case 2: + local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); + for(local i = 0; i < 3; i++){ + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,40,0,50,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,15,600+skill_level*30,i,0,0,0,0,0,0,1); + } + break; + } +} + +function proc_appendage_kak_homunculus_fluore(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME_WITCH) return; + timer.Reset(); + timer.Start(10000,0); + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_02,t_01]; + local attackIndex = [3,0]; + local distanceX = [100,500]; + local distanceXmin = [0,0]; + local distanceY = [30,300]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_witch_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 1: + local timer = appendage.getVar().get_ct_vector(0); + local currentT1 = timer.Get(); + local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,9,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); + if(currentT1 >= hitMax * 150) monsterattack_witch_ksk(parentObj,2); + break; + case 4: + local timer = appendage.getVar().get_ct_vector(0); + local currentT1 = timer.Get(); + local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,12,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); + if(currentT1 >= hitMax * 300) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + } +} + +function onSourceKeyFrameFlag_appendage_kak_homunculus_fluore(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 11: + local timer = appendage.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,9,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 7, 1.0) + 100; + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,25,0,50,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,11,totalDamage,hitMax,group,uniqueId,0,0,0,0,1); + monsterattack_witch_ksk(parentObj,1); + break; + case 21: + local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,12,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 10, 1.0) + 100; + local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS); + local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,14,skill_level); + local level = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,15,skill_level); + local time = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,16,skill_level); + local damage = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,17,skill_level); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,12,totalDamage,hitMax,prob,level,time,damage,0,0,1); + monsterattack_witch_ksk(parentObj,4); + break; + } +} + +function proc_appendage_kak_homunculus_fluto(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME_WITCH) return; + timer.Reset(); + timer.Start(10000,0); + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_02,t_01]; + local attackIndex = [6,0]; + local distanceX = [200,200]; + local distanceXmin = [0,0]; + local distanceY = [50,200]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_witch_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 0://移动 + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local X1 = sq_GetAccel(parentObj.getXPos(), targetObj.getXPos(), currentT, fireT, true); + local Y1 = sq_GetAccel(parentObj.getYPos(), targetObj.getYPos(), currentT, fireT, true); + if(parentObj.isMovablePos(X1, Y1)){ + sq_setCurrentAxisPos(parentObj, 0, X1); + sq_setCurrentAxisPos(parentObj, 1, Y1); + } + else{ + monsterattack_witch_ksk(parentObj,1); + } + } + break; + } + break; + } +} + +function onSourceKeyFrameFlag_appendage_kak_homunculus_fluto(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 11: + monsterattack_witch_ksk(parentObj,1); + break; + case 12: + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 34, 1.0) + 100; + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,21,totalDamage,0,0,0,0,0,0,0,1); + monsterattack_witch_ksk(parentObj,2); + break; + case 13: + monsterattack_witch_ksk(parentObj,3); + break; + case 14: + monsterattack_witch_ksk(parentObj,4); + break; + case 15: + monsterattack_witch_ksk(parentObj,5); + break; + case 16: + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 33, 1.0) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,24,totalDamage,group,uniqueId,0,0,0,0,0,1); + break; + case 17: + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 35, 1.0) + 100; + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,22,totalDamage,0,0,0,0,0,0,0,1); + break; + case 21://OBJ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 36, 1.0) + 100; + local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS); + local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,40,skill_level); + local level = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,38,skill_level); + local time = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,39,skill_level); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,23,totalDamage,prob,level,time,0,0,0,0,1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/witch_bykk/fluto/animation/b/hit_target-normal.ani",0,0,0); + break; + } +} + +function proc_appendage_kak_homunculus_jackfrost(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME_WITCH) return; + timer.Reset(); + timer.Start(10000,0); + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_02,t_01]; + local attackIndex = [1,0]; + local distanceX = [200,150]; + local distanceXmin = [0,0]; + local distanceY = [30,50]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_witch_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + } +} + +function onSourceKeyFrameFlag_appendage_kak_homunculus_jackfrost(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 11://OBJ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 23, 1.0) + 100; + local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,25,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,50,0,200,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,31,totalDamage,hitMax,0,0,0,0,0,0,1); + break; + case 21://OBJ + local timer = appendage.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 26, 1.0) + 100; + local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS); + local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,28,skill_level); + local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,30,skill_level); + local level = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,31,skill_level); + local time = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,32,skill_level); + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,32,totalDamage,hitMax,prob,level,time,group,uniqueId,0,1); + monsterattack_witch_ksk(parentObj,2); + break; + case 22: + if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(parentObj, 0, -50.0); + else sq_SetVelocity(parentObj, 0, 50.0); + break; + case 23: + monsterattack_witch_ksk(parentObj,3); + break; + } +} + +function proc_appendage_kak_homunculus_lantern(appendage) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + if(!sq_IsMyControlObject(sqrChr)) return; + + local timer = appendage.getVar().get_ct_vector(0); + if(timer){ + local currentT1 = timer.Get(); + if(currentT1 == 0){ + timer.Reset(); + timer.Start(10000,0); + monsterattack_witch_ksk(parentObj,0); + } + if(currentT1 >= 29000){ + appendage.getVar().clear_ct_vector(); + monsterattack_witch_ksk(parentObj,sq_getRandom(2,3)); + } + } + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME_WITCH) return; + timer.Reset(); + timer.Start(10000,0); + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_02,t_01]; + local attackIndex = [sq_getRandom(2,3),1]; + local distanceX = [20,200]; + local distanceXmin = [0,0]; + local distanceY = [20,20]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_witch_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 2: + // + break; + } + break; + } +} + +function onSourceKeyFrameFlag_appendage_kak_homunculus_lantern(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 11://AP + if(appendage.getVar().getBool(0) == false) appendage.getVar().setBool(0,true); + break; + case 21://OBJ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 22, 1.0) + 100; + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,15,0,45,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,41,totalDamage,0,0,0,0,0,0,0,1); + break; + case 31: + parentObj.sendDestroyPacket(true); + break; + case 32://OBJ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 19, 1.0) + 100; + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,45,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,42,totalDamage,0,0,0,0,0,0,0,1); + break; + case 41://summon + local monsterlevel = sq_GetSkillLevel(sqrChr,174); + local num = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 20, 1.0) + 100; + for(local i = 0; i < num; i++){ + summonmonster_witch_bykk(sqrChr,parentObj,0,0,-sq_GetZPos(sqrChr),0,LANTERNRUNNER_BYKK_ID,10000,monsterlevel,0); + } + parentObj.sendDestroyPacket(true); + break; + } +} + +function drawAppend_appendage_kk_homunculus_lantern_bykk(appendage, isOver, x, y, isFlip) +{ + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + if(appendage.getVar().getBool(0)){ + local var = appendage.getVar(); + local Ani_01 = var.GetAnimationMap("animation_01", "monster/character/mage/witch_bykk/homunculuslantern/animation/a/lantern_aloop_groundauraloop.ani"); + local hight = parentObj.getZPos(); + if(Ani_01 && !isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y + hight, isFlip); + } + } +} + +function onSourceKeyFrameFlag_appendage_kak_homunculus_lanternrunner(appendage,flagIndex) +{ + if (!appendage) return; + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + + if(!parentObj){appendage.setValid(false);return;} + if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} + + switch(flagIndex){ + case 11://OBJ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 19, 1.0) + 100; + cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HEATINGFURNACE,4,totalDamage,2,120,0,0,0,0,0,1); + parentObj.sendDestroyPacket(true); + break; + } +} + +function onEnd_appendage_kk_goblin_bykk(appendage) +{ + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(sqrChr.getVar("countofhomunculus").getInt(11) < 1) return; + sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) - 1); + print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); +} + +function drawAppend_appendage_sweetcandybar_bykk(appendage, isOver, x, y, isFlip) +{ + local obj = appendage.getParent(); + if (!obj) { + appendage.setValid(false); + return; + } + local var = appendage.getVar(); + local Ani = var.GetAnimationMap("candynormal", "character/mage/effect/animation/witch_bykk/sweetcandybar/candy-normal.ani"); + if (Ani && isOver) { + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y - 140, isFlip); + } +} + +function onStart_appendage_friendlyfamiliar_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(SKILL_BYKK_FRIENDLYFAMILIAR); + local value1 = sq_GetLevelData(parentObj, SKILL_BYKK_FRIENDLYFAMILIAR, 9, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("friendlyfamiliar"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("friendlyfamiliar",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + } +} + +function onStart_appendage_homunculus_bykk(appendage) +{ + // +} + +function onStart_appendage_lapisphilosophorum_bykk(appendage) +{ + // +} + +function onStart_appendage_redcandy_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(SKILL_BYKK_REDCANDY); + local value1 = sq_GetLevelData(parentObj, SKILL_BYKK_REDCANDY, 0, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("redcandy"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("redcandy",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + } +} + +function onStart_appendage_successpremonition_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(SKILL_BYKK_SUCCESSPREMONITION); + local value1 = sq_GetLevelData(parentObj, SKILL_BYKK_SUCCESSPREMONITION, 4, skillLevel); + local value2 = sq_GetLevelData(parentObj, SKILL_BYKK_SUCCESSPREMONITION, 5, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("successpremonition"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("successpremonition",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, true, (value2 / 0.667).tofloat()); + } +} + +function onStart_appendage_mpregenrateup_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(41); + + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, 41, skillLevel); + appendage.setEnableIsBuff(true); + appendage.setBuffIconImage(29); //sprite_common_commoneffect + + setDamageRate_Witch_bykk(parentObj); +} + +function procSkill_Witch_bykk(obj) +{ + //obj.setSkillCommandEnable(SKILL_BYKK_JACKOHALLOWEEN, false); + if(sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 12) > 0) obj.setSkillCommandEnable(109, false); + if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 9, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) obj.setSkillCommandEnable(SKILL_BYKK_JACKOHALLOWEEN, false); + if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 10, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) obj.setSkillCommandEnable(SKILL_BYKK_UROBOROS, false); +} + + + +function checkExecutableSkill_AcidCloud_bykk(obj) +{ + local state = obj.getState(); + if(state == 6 && !sq_GetSkill(obj, SKILL_BYKK_ACIDCLOUD).isInCoolTime()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + + +function onSetState_AcidCloud_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_ACIDCLOUD, skill_level); + sq_StartDrawCastGauge(obj, castTime, true); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetDelaySum(animation); + 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); + break; + case 1: + obj.sq_PlaySound("WZ_ACID_CLOUD"); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + local ani = obj.getCurrentAnimation(); + local delay = ani.getDelaySum(0,4); + obj.setTimeEvent(0,240,1,false); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 3: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); + break; + case 4: + obj.sq_SetCurrentAnimation(ANIMATION_ATTACK_SETCUSTOM); + local attackInfo = sq_GetCustomAttackInfo(obj, 1); + sq_SetCurrentAttackInfo(obj, attackInfo); + break; + } +} + +function onEndCurrentAni_AcidCloud_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_USER, true); + break; + case 1: + case 4: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +function onProcCon_AcidCloud_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + local castTime = obj.getVar("custom_bykk").get_vector(0); + if(stateTime >= castTime){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_USER, true); + } + break; + } +} + +function onKeyFrameFlag_AcidCloud_bykk(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + switch(substate){ + case 3: + if(flagIndex == 1){ + local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); + local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); + local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); + local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); + if(skllevel1 > 0){ + if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) leftTime = leftTime + 5000; + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); + local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); + local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); + if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,75,0,280 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); + } + else{ + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_n.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_d.ani",0,1,151); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_n.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_d.ani",0,1,151); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_d.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_n.ani",0,1,151); + break; + } + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); + if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); + if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = 0; + if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); + } + + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } + break; + } +} + +function onTimeEvent_AcidCloud_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch (timeEventIndex) { + case 0: + local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); + local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); + local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); + local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); + if(skllevel1 > 0){ + if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) leftTime = leftTime + 3000; + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); + local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); + local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); + if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,75,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); + } + else{ + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_n.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_d.ani",0,1,151); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_n.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_d.ani",0,1,151); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_d.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_n.ani",0,1,151); + break; + } + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); + if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); + if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = 0; + if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); + } + + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + break; + } +} + +function onEndState_AcidCloud_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_ACIDCLOUD){ + sq_EndDrawCastGauge(obj); + } +} + +function checkExecutableSkill_AntiGravityStarter_bykk(obj) +{ + //print("AntiGravityStarter > true"); + local state = obj.getState(); + local homunculus_level = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); + if(state == 6 && homunculus_level > 0 && !sq_GetSkill(obj, SKILL_BYKK_ANTIGRAVITYSTARTER).isInCoolTime()){ + obj.startSkillCoolTime(SKILL_BYKK_ANTIGRAVITYSTARTER, sq_GetSkillLevel(obj, SKILL_BYKK_ANTIGRAVITYSTARTER), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_AntiGravityStarter_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(40); + local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + if(successType == 3){ + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; + local totalDamage2 = 0; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; + totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); + break; + case 1: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + obj.setTimeEvent(1,100,1,false); + break; + case 2: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/homonculous/antigravity/plutocast.ani",100,0,0); + obj.setTimeEvent(0,150,1,false); + break; + case 3: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); + break; + } + + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0 && (substate == 2 || substate == 3)){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } +} + +function onEndCurrentAni_AntiGravityStarter_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 2: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_USER, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + break; + } +} + +function onProcCon_AntiGravityStarter_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_AntiGravityStarter_bykk(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + switch(substate){ + case 3: + if(flagIndex == 1){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/homonculous/antigravity/plutocast.ani",150,0,0 - sq_GetZPos(obj)); + local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + if(successType == 3){ + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; + local totalDamage2 = 0; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; + totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,200,0,0 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,200,0,0 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_AntiGravityStarter_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + if(timeEventIndex == 0){ + local range = 600; + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + if(successType == 3){ + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; + local totalDamage2 = 0; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; + totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(timeEventIndex == 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_USER, true); + } +} + +function onEndState_AntiGravityStarter_bykk(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_BlackMantle_bykk(obj) +{ + //print("BlackMantle > true"); + return 0; +} + +function onSetState_BlackMantle_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BLACKMANTLE); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLACKMANTLE, SKILL_BYKK_BLACKMANTLE, 0, 1.0) + 100; + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0){ + local bonusrate2 = sq_GetLevelData(obj, SKILL_BYKK_HOMUNCULUS, 6, homunculus_level); + bonusRate = bonusRate + bonusrate2.tofloat() / 1000; + } + totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); + local attackInfo = sq_GetCustomAttackInfo(obj, 25); + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(attackInfo, totalDamage); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BLACKMANTLE); + local prob = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 1, skill_level); + local level = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 2, skill_level); + local time = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 3, skill_level); + local speedRate = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 7, skill_level) + 100; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BLACKMANTLEHOMUNCULUS); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 10: + // + local Ani = obj.sq_GetThrowChargeAni(0); + obj.setCurrentAnimation(Ani); + break; + case 11: + // obj.sq_PlaySound("WZ_ACID_CLOUD"); + local Ani = obj.sq_GetThrowShootAni(0); + obj.setCurrentAnimation(Ani); + + //local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "ui/ap/ap_character.nut"); + //if(AddAppendage) print(1); + //else CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "ui/ap/ap_character.nut", true); + + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); + if(successType == 0) successType = 1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; + local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); + local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level); + local level = sq_GetSkillLevel(obj, 174) + 20; + local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); + local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); + break; + case 12: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ENHANCEDMAGICMISSILEAIR_BODY); + break; + case 21: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, 41);//技能等级 + local castTime = sq_GetCastTime(obj, 41, skill_level);//得到技能里面的施放时间 + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetDelaySum(animation); + 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); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + obj.setTimeEvent(1,delaySum,1,false); + break; + case 22: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, 41);//技能等级 + local castTime = sq_GetCastTime(obj, 41, skill_level);//得到技能里面的施放时间 + if(castTime > 1000) castTime = 1000; + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 1, castTime); + sq_StartDrawCastGauge(obj, castTime, true); + obj.setTimeEvent(2,castTime,1,false); + break; + case 23: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + break; + } + + if(substate != 10 && substate != 21 && substate != 22){ + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_BlackMantle_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_USER, true); + break; + case 11: + case 23: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 12: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + break; + } +} + +function onProcCon_BlackMantle_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BlackMantle_bykk(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,120,0,30,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,1,2,0,0,0,0,0,0,0,0); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3,3); + local speedRate = 3000 / delay; + print("speedRate = "+speedRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLACKMANTLE, SKILL_BYKK_BLACKMANTLE, 0, 1.0) + 100; + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BLACKMANTLE); + local prob = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 1, skill_level) / 10; + local level = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 2, skill_level); + local time = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 3, skill_level); + local leftTime = 2000,homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS),homunculus_skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0 && !homunculus_skill.isSealFunction()){ + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,30,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,3,leftTime,totalDamage,prob,level,time,speedRate,0,0,0); + obj.setTimeEvent(0,480 / speedRate * 100,1,false); + } + else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,130,0,30,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,2,totalDamage,leftTime,prob,level,time,speedRate,0,0,1); + break; + case 12: + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); + if(successType == 0) successType = 1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; + local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); + local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level) / 10; + local level = sq_GetSkillLevel(obj, 174) + 20; + local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); + local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,44,0,-10,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + } +} + +function onTimeEvent_BlackMantle_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + if(timeEventIndex == 0) obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + else if(timeEventIndex == 1){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 41, false, "character/mage/witch_skill_bykk/passiveskill/ap_mpregenrateup.nut", true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(23); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_USER, true); + } + else if(timeEventIndex == 2){ + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 41, false, "character/mage/witch_skill_bykk/passiveskill/ap_magicaltempoup.nut", true); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) + if(skill_level <= 0){ + local lifeTime = sq_GetLevelData(obj, 2, 0, sq_GetSkillLevel(obj, 2)); + addAppendage.sq_SetValidTime(lifeTime); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(23); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_USER, true); + } +} + +function onEndState_BlackMantle_bykk(obj, new_state) +{ + if(!obj) return; +} + +function onCreateObject_BlackMantle_bykk(obj, createObject) +{ + if(!obj) return; + // local sq_var = obj.getVar(); + // if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + // local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + // if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ + // obj.getVar("blackmantle").clear_obj_vector(); + // obj.getVar("blackmantle").push_obj_vector(colObj); + // } + // } +} + +function onAttack_BlackMantle_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(damager,"character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); + if(AddAppendage) CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_BYKK_BLACKMANTLE, false, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut", true); + if(AddAppendage){ + sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 100, true, AddAppendage); + sq_HoldAndDelayDie(damager, obj, true, true, true, 10, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(1000); + } + } + break; + } +} + + + + +function checkExecutableSkill_BroomSpin_bykk(obj) +{ + // print("BroomSpin > true"); + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_BROOMSPIN); + if(b_useskill){ + local state = obj.getState(); + if(state == 0 || state == 14 || state == 8){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(state == 6){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_IGNORE_FORCE, true); + return 0; + } + return 1; + } + return 0; +} + +function onSetState_BroomSpin_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + //以下平地状态 + case 0: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWREADY_BODY); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewready_01.ani",0,0,0); + local attackInfo = sq_GetCustomAttackInfo(obj, 26); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 5, 1.0) + 100; + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("WZ_BROOM_SPIN"); + break; + case 1: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWA_BODY); + break; + case 2: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWB_BODY); + break; + case 3: + local appendage = obj.getVar("BroomSpinAp").getAppendage(0); + if(appendage) appendage.setValid(false); + obj.removeAllTimeEvent(); + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWC_BODY); + obj.sq_PlaySound("WZ_BROOM_SPIN_LANDING"); + local attackInfo = sq_GetCustomAttackInfo(obj, 26); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 6, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 4: + local appendage = obj.getVar("BroomSpinAp").getAppendage(0); + if(appendage) appendage.setValid(false); + obj.removeAllTimeEvent(); + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINQUICKSTAND); + break; + //以下空中状态 + case 10: + obj.sq_StopMove(); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(34); + obj.sq_PlaySound("WZ_BROOM_SPIN"); + local currentAni = obj.getCurrentAnimation(); + local size = sq_AniLayerListSize(currentAni); + for(local i = 0; i < size; i++){ + local pAniL = sq_getAniLayerListObject(currentAni, i); + if(pAniL) currentAni.removeLayerAnimation(pAniL); + } + currentAni.addLayerAnimation(0,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/broomspin/ready.ani"),true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 0, 1.0) + 100; + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); + local attackInfo = sq_GetCustomAttackInfo(obj, 26); + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(attackInfo, totalDamage); + local hight = obj.getZPos(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(hight); + local time = hight / 3; + obj.setTimeEvent(1,time,-1,false); + break; + case 11: + obj.sq_StopMove(); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(35); + local currentAni = obj.getCurrentAnimation(); + local size = sq_AniLayerListSize(currentAni); + for(local i = 0; i < size; i++){ + local pAniL = sq_getAniLayerListObject(currentAni, i); + if(pAniL) currentAni.removeLayerAnimation(pAniL); + } + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/broomspin/attack.ani"),true); + obj.setTimeEvent(2,20,-1,false); + obj.setTimeEvent(4,200,1,false); + break; + case 12: + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(36); + if(obj.isExistTimeEvent(4)) obj.stopTimeEvent(4); + local currentAni = obj.getCurrentAnimation(); + local size = sq_AniLayerListSize(currentAni); + for(local i = 0; i < size; i++){ + local pAniL = sq_getAniLayerListObject(currentAni, i); + if(pAniL) currentAni.removeLayerAnimation(pAniL); + } + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/broomspin/delay.ani"),true); + local pAni = obj.getCurrentAnimation(); + local Delay = pAni.getDelaySum(false); + obj.setTimeEvent(0,Delay,1,false); + break; + case 13: + obj.removeAllTimeEvent(); + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(37); + local hight = obj.getVar("custom").get_vector(0); + if(hight >= 120){ + obj.sq_PlaySound("WZ_BROOM_SPIN_LANDING"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_BROOMSPIN,2,100,0,0,0,0,0,0,0,1); + } + break; + } + + if((substate == 3 || substate == 4 || substate == 12) && obj.getVar("broomspin").getBool(1)){ + obj.getVar("broomspin").setBool(1, false); + local skillIndex = obj.getVar("custom").get_vector(0); + switch(skillIndex){ + case SKILL_BYKK_ACIDCLOUD: + local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); + local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); + local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); + local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); + if(skllevel1 > 0){ + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); + local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); + local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,0,1); + } + else{ + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); + if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); + if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = 0; + if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); + } + break; + case SKILL_BYKK_LAVAPOTION: + local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; + local sizeRate = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,8); + local hitTime = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,6); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_LAVAPOTION, 0, skill_level); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_LAVAPOTION,3,totalDamage,lifeTime,hitTime,sizeRate,successType,0,0,0,1); + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER: + local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; + if(successType == 3){ + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; + local totalDamage2 = 0; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; + totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE: + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); + if(successType == 0) successType = 1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; + local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); + local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level); + local level = sq_GetSkillLevel(obj, 174) + 20; + local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); + local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); + break; + case SKILL_BYKK_JACKOHALLOWEEN: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKOHALLOWEEN, SKILL_BYKK_JACKOHALLOWEEN, 0, 1.0) + 100; + local hitTime = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,5); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_JACKOHALLOWEEN,1,120,totalDamage,hitTime,0,0,0,0,0,2); + break; + } + obj.startSkillCoolTime(skillIndex, sq_GetSkillLevel(obj, skillIndex), -1); + } +} + +function onEndCurrentAni_BroomSpin_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.setTimeEvent(2,20,-1,false); + obj.setTimeEvent(4,200, 1,false); + obj.getVar("Witch_BroomSpin").clear_ct_vector(); + obj.getVar("Witch_BroomSpin").push_ct_vector(); + local timer = obj.getVar("Witch_BroomSpin").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + local appendage = sq_AttractToMe(obj, 200, 120, 300); + obj.getVar("BroomSpinAp").setAppendage(0,appendage); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 2: + obj.sq_IntVectClear(); + local timer = obj.getVar("Witch_BroomSpin").get_ct_vector(0); + if(timer){ + local currentT = timer.Get(); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_BROOMSPIN, 5) - 1000; + if(currentT <= lifeTime) obj.sq_IntVectPush(1); + else{ + obj.getVar("Witch_BroomSpin").clear_ct_vector(); + if(obj.getVar("broomspin").getBool(0)) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(4); + } + } + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 3: + case 4: + obj.getVar("broomspin").setBool(0,false); + local appendage = obj.getVar("BroomSpinAp").getAppendage(0); + if(appendage) appendage.setValid(false); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 12: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(13); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 13: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_BroomSpin_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + case 2: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + + break; + case 11: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + } + + local stateTime = obj.sq_GetStateTimer(); + local hight = obj.getVar("custom").get_vector(0); + local fireT = hight * 7; + local v = sq_GetUniformVelocity(hight, 20, stateTime, fireT); + sq_setCurrentAxisPos(obj, 2, v); + + if(obj.getZPos() <= 20){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(12); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + } + + break; + } + if((substate == 1 || substate == 2 || substate == 11) && obj.getVar("broomspin").getBool(1) == false){ + local skillIndex = [SKILL_BYKK_ACIDCLOUD,SKILL_BYKK_LAVAPOTION,SKILL_BYKK_ANTIGRAVITYSTARTER,SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_JACKOHALLOWEEN]; + for(local i = 0; i < skillIndex.len(); i++){ + obj.setSkillCommandEnable(skillIndex[i],true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(skillIndex[i]); + obj.getVar("broomspin").setBool(1, true); + } + } + } +} + +function onKeyFrameFlag_BroomSpin_bykk(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + if(sq_GetCurrentFrameIndex(obj) <= 1) sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",-111,0,3); + else sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",67,0,11); + break; + case 2: + switch(flagIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",-109,0,0); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",0,0,18); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",127,0,0); + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",0,0,-18); + break; + } + break; + case 3: + switch(flagIndex){ + case 1: + sq_flashScreen(obj,10,20,20,76, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 2://shock wave + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_BROOMSPIN,2,totalDamage,0,0,0,0,0,0,0,1); + break; + case 3: + sq_SetMyShake(obj,2,80); + break; + } + break; + } +} + +function onTimeEvent_BroomSpin_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch (timeEventIndex) { + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(13); + obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2://移动 + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - 6,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 6); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT) obj.setDirection(ENUM_DIRECTION_LEFT); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + 6,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 6); + if(obj.getDirection() == ENUM_DIRECTION_LEFT) obj.setDirection(ENUM_DIRECTION_RIGHT); + } + else{ + local moveX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),1); + if(obj.isMovablePos(moveX,sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, moveX); + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 3)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - 3); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 3)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + 3); + } + break; + case 3: + local moveX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),2); + if(obj.isMovablePos(moveX,sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, moveX); + break; + case 4://加快 + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 4; + local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_BROOMSPIN,2); + local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_BROOMSPIN,1); + + local currentAni = obj.getCurrentAnimation(); + if(inputConut >= inputMax){ + obj.setTimeEvent(4, gapByInputMin, 1,false); + currentAni.setSpeedRate(300.0); + if(obj.getVar("broomspin").getBool(0) == false) obj.getVar("broomspin").setBool(0, true); + } + else{ + obj.setTimeEvent(4, gapByInputMax, 1,false); + currentAni.setSpeedRate(100.0); + } + + obj.resetHitObjectList(); + break; + } +} + +function onEndState_BroomSpin_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_BROOMSPIN){ + local appendage = obj.getVar("BroomSpinAp").getAppendage(0); + if(appendage) appendage.setValid(false); + } +} + + + + + +function checkExecutableSkill_Electricrabbit_bykk(obj) +{ + if (!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_ELECTRICRABBIT); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Electricrabbit_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0://set + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_FLUORECOLLIDERCAST); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ELECTRICRABBIT); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_ELECTRICRABBIT, skill_level); + local currentAni = obj.getCurrentAnimation(); + local castAniTime = currentAni.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("WZ_ELETRIC_RABBIT_CAST"); + obj.getVar("electricrabbit").clear_obj_vector(); + break; + case 1://start + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITSTART); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ELECTRICRABBIT); + print("successType = "+successType); + obj.getVar("electricrabbit").clear_vector(); + obj.getVar("electricrabbit").push_vector(successType); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 7, 1.0) + 100; + if(successType == 1){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 1, 1.0) + 100;totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 8, 1.0) + 100;} + if(successType >= 2){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 2, 1.0) + 100;totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 9, 1.0) + 100;} + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_ELECTRICRABBIT); + local prob = sq_GetLevelData(obj,SKILL_BYKK_ELECTRICRABBIT, 3, skill_level); + local damage = sq_GetLevelData(obj,SKILL_BYKK_ELECTRICRABBIT, 4, skill_level); + local time = sq_GetLevelData(obj,SKILL_BYKK_ELECTRICRABBIT, 6, skill_level); + local level = sq_GetSkillLevel(obj,174) + 20; + if(sq_GetIntData(obj, SKILL_BYKK_ELECTRICRABBIT, 12) > 0){ + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,115,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,4,successType,totalDamage,prob,time,damage,level,damageRate,0,2); + obj.setTimeEvent(1,100,1,false); + } + else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,115,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,1,successType,totalDamage,prob,time,damage,level,damageRate,0,2); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,115,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,2,successType,0,0,0,0,0,0,0,0); + obj.sq_PlaySound("R_WZ_ELETRIC_RABBIT"); + + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + break; + case 2://loop + local successType = obj.getVar("electricrabbit").get_vector(0); + switch(successType){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITLOOPFAIL); + break; + case 1: + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITLOOP); + break; + } + break; + case 3://end + local successType = obj.getVar("electricrabbit").get_vector(0); + switch(successType){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITENDFAIL); + break; + case 1: + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITEND); + break; + } + local sub = obj.sq_GetVectorData(datas, 1); + if(sub > 0){ + local size = obj.getVar("electricrabbit").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("electricrabbit").get_obj_vector(i)); + if(colObj) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + break; + } +} + +function onEndCurrentAni_Electricrabbit_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(substate + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); + break; + case 3: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Electricrabbit_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 2: + if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); + return; + } + } + break; + } +} + +function onKeyFrameFlag_Electricrabbit_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_Electricrabbit_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_Electricrabbit_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_ELECTRICRABBIT){ + sq_EndDrawCastGauge(obj); + } +} + +function onCreateObject_Electricrabbit_bykk(obj, createObject) +{ + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ + obj.getVar("electricrabbit").push_obj_vector(colObj); + } + } +} + +function checkExecutableSkill_Emergencyescape_bykk(obj) +{ + if (!obj) return false; + return 0; +} + +function onSetState_Emergencyescape_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +function onEndCurrentAni_Emergencyescape_bykk(obj) +{ + if(!obj) return; +} + +function onProcCon_Emergencyescape_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Emergencyescape_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_Emergencyescape_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Emergencyescape_bykk(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_EnhancedMagicMissile_bykk(obj) +{ + //print("EnhancedMagicMissile > true"); + local state = obj.getState(); + if(!sq_GetSkill(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE).isInCoolTime()){ + obj.sq_IntVectClear(); + if(state == 6) obj.sq_IntVectPush(12); + else if(state == 0 || state == 8 || state == 14) obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_EnhancedMagicMissile_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + // + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + // obj.sq_PlaySound("WZ_ACID_CLOUD"); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + // local ani = obj.getCurrentAnimation(); + // local delay = ani.getDelaySum(0,4); + // obj.setTimeEvent(0,240,1,false); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_EnhancedMagicMissile_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_ENHANCEDMAGICMISSILE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_EnhancedMagicMissile_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_EnhancedMagicMissile_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_EnhancedMagicMissile_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_EnhancedMagicMissile_bykk(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_FluoreCollider_bykk(obj) +{ + //print("FluoreCollider > true"); + return 0; +} + +function onSetState_FluoreCollider_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0://释放读条 + obj.sq_SetCurrentAnimation(43); + sq_SetCustomDamageType(obj, true, 1); + break; + case 1://老形态-出现 + obj.sq_SetCurrentAnimation(44); + local animation = obj.getCurrentAnimation(); + local friendlyfa_level = sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR); + local setDelay = 910; + if(friendlyfa_level > 0){ + local speedRate = (1000 - sq_GetLevelData(obj, SKILL_BYKK_FRIENDLYFAMILIAR, 8, friendlyfa_level)); + setDelay = (setDelay.tofloat() * speedRate.tofloat() / 1000.0).tointeger(); + } + sq_SetFrameDelayTime(animation, 0, setDelay); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 2, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 3, 1.0) + 100; + if(successType >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 4, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 5, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 6); + local range = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 13); + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0){ + local add_Rate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 4); + lifeTime = (lifeTime.tofloat() * (1000.0 + add_Rate.tofloat()) / 1000.0).tointeger(); + } + if(successType == 3 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0){ + local decr_Rate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 9, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + hitTime = hitTime * (1000 - decr_Rate) / 1000; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,70,-1,0,obj.getDirection(),SKILL_BYKK_FLUORECOLLIDER,1,0,lifeTime,successType,hitTime,totalDamage,damageRate,range,0,5); + break; + case 2://老形态-成功运行 + obj.sq_SetCurrentAnimation(45); + sq_setCurrentAxisPos(obj, 2, 30); + obj.sq_ZStop(); + obj.setTimeEvent(2,400,1,false); + break; + case 3://老形态-失败运行 + obj.sq_SetCurrentAnimation(46); + sq_setCurrentAxisPos(obj, 2, 30); + obj.sq_ZStop(); + break; + case 4://老形态-运行结束 + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWC_BODY); + local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); + if(passiveObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 5://新形态 + // obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.setTimeEvent(1,100,1,false); + break; + } + + if(substate != 0 && substate != 1 && substate != 4){ + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_FluoreCollider_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS), homunculus = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0 && !homunculus.isSealFunction()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); + } + break; + case 1: + sq_SetCustomDamageType(obj, true, 0); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); + obj.setTimeEvent(0,lifeTime,1,false); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); + if(successType >= 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(successType); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); + } + break; + case 4: + case 5: + sq_SetCustomDamageType(obj, true, 0); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_FluoreCollider_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 2: + case 3: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(skill_level > 0){ + if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); + if(passiveObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); + colObj.getVar("custom").set_vector(2,1); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else{ + if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + } +} + +function onKeyFrameFlag_FluoreCollider_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_FluoreCollider_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + if(timeEventIndex == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); + } + else if(timeEventIndex == 1){ + local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 2, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 3, 1.0) + 100; + if(successType >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 4, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 5, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 6) / 2; + local range = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 13); + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0){ + local decr_Rate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 3); + lifeTime = (lifeTime.tofloat() * (1000.0 - decr_Rate.tofloat()) / 1000.0).tointeger(); + } + if(successType == 3 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0){ + local decr_Rate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 9, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + hitTime = hitTime * (1000 - decr_Rate) / 1000; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,70,-1,0,obj.getDirection(),SKILL_BYKK_FLUORECOLLIDER,1,1,lifeTime,successType,hitTime,totalDamage,damageRate,range,0,5); + } + else if(timeEventIndex == 2){ + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 4; + local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_FLUORECOLLIDER,6) / 2; + local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_FLUORECOLLIDER,6); + + local currentAni = obj.getCurrentAnimation(); + if(inputConut >= inputMax){ + obj.setTimeEvent(2, gapByInputMin, 1,false); + currentAni.setSpeedRate(200.0); + local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); + if(passiveObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + colObj.stopTimeEvent(2); + colObj.setTimeEvent(2,gapByInputMin,1,false); + } + } + else{ + obj.setTimeEvent(2, gapByInputMax, 1,false); + currentAni.setSpeedRate(100.0); + local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); + if(passiveObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(100.0); + colObj.stopTimeEvent(2); + colObj.setTimeEvent(2,gapByInputMax,1,false); + } + } + } +} + +function onEndState_FluoreCollider_bykk(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_FusionCraft_bykk(obj) +{ + print("FusionCraft > true"); + return 0; +} + +function onSetState_FusionCraft_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +function onEndCurrentAni_FusionCraft_bykk(obj) +{ + if(!obj) return; +} + +function onProcCon_FusionCraft_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FusionCraft_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_FusionCraft_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FusionCraft_bykk(obj, new_state) +{ + if(!obj) return; +} + +function checkExecutableSkill_HeatingFurnace_bykk(obj) +{ + // print("HeatingFurnace > true"); + return 0; +} + +function onSetState_HeatingFurnace_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0://cast + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACECAST); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_HEATINGFURNACE); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + if(successType == 0 && sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR) > 0){ + obj.setTimeEvent(3,100,1,false); + break; + } + switch(successType){ + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/success_d.ani",50,1,-20); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/success_n.ani",50,1,-20); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great_d.ani",50,1,-30); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great_n.ani",50,1,-30); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great_n+.ani",50,1,-30); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great1.ani",50,1,-30); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great2.ani",50,1,-30); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/bigsuccess_familier01.ani",100,1,50); + break; + } + + obj.getVar("heatingfurnace").clear_vector(); + obj.getVar("heatingfurnace").push_vector(successType); + obj.getVar("heatingfurnace").push_vector(0); + local stone_Max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,6); + obj.getVar("heatingfurnace").push_vector(stone_Max); + + obj.setTimeEvent(0,200,1,false); + sq_SetCustomDamageType(obj, true, 1); + break; + case 1://loop + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACEJUMP); + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_HEATINGFURNACE); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_HEATINGFURNACE, 0, skill_level); + obj.setTimeEvent(1,lifeTime,1,false); + obj.setTimeEvent(2,150,1,false); + break; + case 2://end + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACENEWBODY); + local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); + if(passiveObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 1, 1.0); + local successType = obj.getVar("heatingfurnace").get_vector(0); + local sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,12); + if(successType >= 2){sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,13);totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 5, 1.0);} + // if(sq_GetLevelData(obj, SKILL_BYKK_HEATINGFURNACE, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEATINGFURNACE)) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,6,totalDamage,0,0,0,0,0,0,0,1); + // else + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,50,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,4,totalDamage,successType,sizeRate,0,0,0,0,0,1); + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/witch_skill_bykk/ap/ap_heatingfurnace.nut"); + break; + case 10: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACECAST); + break; + case 50: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACECAST); + local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,1,bitterscandy_level); + add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 4, 1.0) + 100; + totalDamage = (totalDamage.tofloat() * add_Rate).tointeger(); + local skill_level2 = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); + local add_Rate2 = sq_GetLevelData(obj,SKILL_BYKK_HOMUNCULUS, 0, skill_level2); + if(skill_level2 > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate2.tofloat()) / 1000.0).tointeger(); + local add_hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 7, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,-1,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,2,totalDamage,add_hitMax,0,0,0,0,0,0,1); + obj.setTimeEvent(4,150,1,false); + sq_SetCustomDamageType(obj, true, 1); + break; + case 51: + sq_setCurrentAxisPos(obj, 2, 20); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACENEWBODY); + obj.setTimeEvent(5,400,1,false); + break; + } + + if(substate == 1 || substate == 50){ + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_HeatingFurnace_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 2: + case 51: + sq_SetCustomDamageType(obj, true, 0); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 50: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(51); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); + break; + } +} + +function onProcCon_HeatingFurnace_bykk(obj) +{ + if(!obj) return; + if(!obj.isMyControlObject()) return; + + local substate = obj.getSkillSubState(); + switch(substate){ + case 10: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime < 50) return; + local maxTime = sq_GetIntData(obj,SKILL_BYKK_BITTERSCANDYBAR,0); + local bDownKey = obj.isDownSkillLastKey(); + if(stateTime >= maxTime){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(50); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); + return; + } + if(!bDownKey){ + if(stateTime < maxTime){//成功 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); + return; + } + else{//失败 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(50); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); + return; + } + } + break; + case 1: + //按C后判断: + //2、是否有引爆试验,有则引爆。 + if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); + return; + } + } + case 0: + //加快 + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + case 51: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(false);//总时间 + local srcZ = sq_GetZPos(obj);//初始x坐标 + local v = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + if(currentT >= 700) sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onKeyFrameFlag_HeatingFurnace_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_HeatingFurnace_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_HEATINGFURNACE, false, "character/mage/witch_skill_bykk/ap/ap_heatingfurnace.nut", true); + local castTime = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,6); + local friendlyfa_level = sq_GetSkillLevel(obj,SKILL_BYKK_FRIENDLYFAMILIAR); + if(friendlyfa_level > 0){ + local speedRate = sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 7, friendlyfa_level); + castTime = castTime * (1000 - speedRate) / 1000; + } + obj.setTimeEvent(6,castTime,1,false); + + local successType = obj.getVar("heatingfurnace").get_vector(0); + local homunculus = 0; + if(sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS) > 0) homunculus = 1; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,-1,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,1,castTime,successType,homunculus,0,0,0,0,0,0); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); + break; + case 2: + local stone_Max = obj.getVar("heatingfurnace").get_vector(2); + local count = obj.getVar("heatingfurnace").get_vector(1); + if(count < stone_Max){ + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 2; + local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,10); + local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,11); + local successType = obj.getVar("heatingfurnace").get_vector(0); + if(successType == 3){ + local lapi_level = sq_GetSkillLevel(obj,SKILL_BYKK_LAPISPHILOSOPHORUM); + local speedRate = sq_GetLevelData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 4, lapi_level); + gapByInputMin = gapByInputMin * (1000 - speedRate) / 1000; + gapByInputMax = gapByInputMax * (1000 - speedRate) / 1000; + } + + if(inputConut >= inputMax){ + obj.setTimeEvent(2, gapByInputMin, 1,false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(200.0); + local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); + if(passiveObj){ + local pAni = passiveObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + } + } + else{ + obj.setTimeEvent(2, gapByInputMax, 1,false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(100.0); + local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); + if(passiveObj){ + local pAni = passiveObj.getCurrentAnimation(); + pAni.setSpeedRate(100.0); + } + } + + if(!sq_GetSkill(obj, SKILL_BYKK_HEATINGFURNACE).isSealFunction() || sq_GetIntData(obj, SKILL_BYKK_HEATINGFURNACE, 20) > 0){ + local number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,3); + if(successType == 1) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,4); + if(successType >= 2) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,5); + if(successType == 3){ + local lapi_level = sq_GetSkillLevel(obj,SKILL_BYKK_LAPISPHILOSOPHORUM) + number_max = number_max + sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM,11,lapi_level); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 0.8) + 100; + local sizeRate = 75; + if(successType == 1){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 1.0) + 100; + sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,12); + } + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 3, 1.0) + 100; + sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,13); + if(successType == 3) sizeRate = sizeRate + sq_GetLevelData(obj, SKILL_BYKK_HEATINGFURNACE, 8, sq_GetSkillLevel(obj, SKILL_BYKK_HEATINGFURNACE)); + } + local speedRate = 100; + if(inputConut >= inputMax) speedRate = 300; + totalDamage = totalDamage * 4; + number_max = number_max / 4; + sizeRate = sizeRate / 3; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,7,totalDamage,sizeRate,number_max,speedRate,0,0,0,0,1); + return; + } + + count = count + 1; + obj.getVar("heatingfurnace").set_vector(1,count); + + local sub = 0; + if(obj.isMyControlObject()){ + if(obj.getDirection() == ENUM_DIRECTION_LEFT){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 7; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 1; + else sub = 4; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 9; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 3; + else sub = 6; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 8; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2; + } + else if(obj.getDirection() == ENUM_DIRECTION_RIGHT){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 9; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 3; + else sub = 6; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 7; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 1; + else sub = 4; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 8; + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2; + } + } + + local number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,3); + if(successType == 1) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,4); + if(successType >= 2) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,5); + if(successType == 3){ + local lapi_level = sq_GetSkillLevel(obj,SKILL_BYKK_LAPISPHILOSOPHORUM) + number_max = number_max + sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM,11,lapi_level); + } + local baseangle = sq_getRandom(1,8) * 10; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 0.8) + 100; + local totalDamage2 = 0; + local damageRate = 100; + local sizeRate = 100; + if(successType == 1){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 1.0) + 100; + sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,12); + } + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 3, 1.0) + 100; + sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,13); + if(successType == 3) sizeRate = sizeRate + sq_GetLevelData(obj, SKILL_BYKK_HEATINGFURNACE, 8, sq_GetSkillLevel(obj, SKILL_BYKK_HEATINGFURNACE)); + } + // print(sizeRate); + // if(number_max % 4 == 0){number_max = number_max / 4; totalDamage = totalDamage * 4;} + // else if(number_max % 3 == 0){number_max = number_max / 3; totalDamage = totalDamage * 3;} + // else + if(number_max % 2 == 0){number_max = number_max / 2; totalDamage = totalDamage * 2;sizeRate = sizeRate * 120 / 100;} + for(local i = 0; i < number_max; i++){ + local angle = 360 / number_max * i + baseangle; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 20.0).tointeger() + sq_getRandom(-5,5); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 20.0).tointeger(); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100 + x,y,120,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,3,totalDamage,successType,i,number_max,sub,damageRate,sizeRate,0,1); + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); + } + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(50); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(51); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); + break; + case 5: + if(!sq_GetSkill(obj, SKILL_BYKK_HEATINGFURNACE).isSealFunction() || sq_GetIntData(obj, SKILL_BYKK_HEATINGFURNACE, 20) > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 4, 0.5); + local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,1,bitterscandy_level); + add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; + if(bitterscandy_level > 0) add_Rate = add_Rate * 1.19; + totalDamage = (totalDamage.tofloat() * add_Rate).tointeger(); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,6,totalDamage,0,0,0,0,0,0,0,1); + } + break; + case 6: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); + break; + } +} + +function onEndState_HeatingFurnace_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_HEATINGFURNACE){ + local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); + if(passiveObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/witch_skill_bykk/ap/ap_heatingfurnace.nut"); + } +} + + + diff --git a/user/116.205.165.25/6_mage_13.c b/user/116.205.165.25/6_mage_13.c new file mode 100644 index 0000000..b088c25 --- /dev/null +++ b/user/116.205.165.25/6_mage_13.c @@ -0,0 +1,2132 @@ + +function checkExecutableSkill_Jackfrosticewater_bykk(obj) +{ + if (!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_JACKFROSTICEWATER); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Jackfrosticewater_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERCAST_BODY); + local offset_x = 175; + for(local i = 0; i < 175; i++){ + if(obj.isMovablePos(sq_GetDistancePos(obj.getXPos(), obj.getDirection(), offset_x), sq_GetYPos(obj))) break; + else offset_x = offset_x - 1; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKFROSTICEWATER, SKILL_BYKK_JACKFROSTICEWATER, 2, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKFROSTICEWATER, SKILL_BYKK_JACKFROSTICEWATER, 3, 1.0) + 100; + local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKFROSTICEWATER, SKILL_BYKK_JACKFROSTICEWATER, 4, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sub = 0; + if(sq_GetIntData(obj, SKILL_BYKK_JACKFROSTICEWATER, 9) > 0) sub = 1; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,offset_x,-1,0,obj.getDirection(),SKILL_BYKK_JACKFROSTICEWATER,1,totalDamage,damageRate,damageRate2,sub,0,0,0,0,1); + obj.getVar("jackfrosticewater").clear_obj_vector(); + obj.getVar("jackfrosticewater").clear_vector(); + obj.getVar("jackfrosticewater").push_vector(offset_x); + break; + case 1: + sq_setCurrentAxisPos(obj, 2, 200); + obj.sq_ZStop(); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/jackfrosticewater/start/jackfrosticewatercast_smoke.ani",0,0,0); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERSTARTBACK_BODY); + if(sq_GetIntData(obj, SKILL_BYKK_JACKFROSTICEWATER, 9) > 0){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(500.0); + } + break; + case 2: + sq_setCurrentAxisPos(obj, 2, 200); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERLOOPBACK_BODY); + if(sq_GetIntData(obj, SKILL_BYKK_JACKFROSTICEWATER, 9) > 0){ + obj.setTimeEvent(2,192,1,false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(500.0); + } + else obj.setTimeEvent(2,960,1,false); + break; + case 3: + obj.stopTimeEvent(2); + sq_setCurrentAxisPos(obj, 2, 200); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERLOOPBACKBOUNCE01A_BODY); + local sub = obj.sq_GetVectorData(datas, 1); + if(sub > 0){ + local size = obj.getVar("jackfrosticewater").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("jackfrosticewater").get_obj_vector(i)); + if(colObj) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + break; + case 4: + //obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERLOOPBACKBOUNCE02_BODY); + break; + } + + if(substate == 3){ + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_Jackfrosticewater_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + if(sq_GetLevelData(obj, SKILL_BYKK_JACKFROSTICEWATER, 5, sq_GetSkillLevel(obj, SKILL_BYKK_JACKFROSTICEWATER)) > 0){ + obj.setTimeEvent(3,300,1,false); + } + else{ + obj.setTimeEvent(0,100,1,true); + obj.setTimeEvent(1,300,1,false); + } + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(substate + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); + break; + case 4: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Jackfrosticewater_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + case 2: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.getVar().clear_vector(); + obj.getVar().push_vector(sq_GetXPos(obj)); + obj.getVar().push_vector(200); + obj.getVar().push_vector(275); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); + return; + } + } + break; + case 3: + local stateTime = obj.sq_GetStateTimer(); + local fireT = 500; + local srcX = obj.getVar().get_vector(0); + local srcZ = obj.getVar().get_vector(1); + local moveX = obj.getVar().get_vector(2); + if(moveX > 0) moveX = -moveX; + local vx = sq_GetAccel(0, moveX, stateTime, fireT, true); + local vz = sq_GetUniformVelocity(srcZ, 0, stateTime, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{obj.getVar().set_vector(0,sq_GetXPos(obj));obj.getVar().set_vector(2,0);} + sq_setCurrentAxisPos(obj, 2, vz); + if(sq_GetZPos(obj) <= 15){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); + } + break; + } +} + +function onKeyFrameFlag_Jackfrosticewater_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_Jackfrosticewater_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/jackfrosticewater/start/jackfrosticewatercast_smoke.ani",0,0,0); + sq_setCurrentAxisPos(obj, 2, 500); + obj.sq_ZStop(); + break; + case 1: + local offset_x = obj.getVar("jackfrosticewater").get_vector(0); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getXPos(), obj.getDirection(), offset_x)); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); + break; + case 2: + obj.getVar().clear_vector(); + obj.getVar().push_vector(sq_GetXPos(obj)); + obj.getVar().push_vector(200); + obj.getVar().push_vector(275); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); + break; + case 3: + local size = obj.getVar("jackfrosticewater").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("jackfrosticewater").get_obj_vector(i)); + if(colObj) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_Jackfrosticewater_bykk(obj, new_state) +{ + if(!obj) return; +} + + +function onCreateObject_Jackfrosticewater_bykk(obj, createObject) +{ + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ + obj.getVar("jackfrosticewater").push_obj_vector(colObj); + } + } +} + + + +function checkExecutableSkill_Jackohalloween_bykk(obj) +{ + if (!obj) return false; + local pumpkinObj = obj.getVar("jackohalloween_pumpkin").get_obj_vector(0); + if(pumpkinObj){ + if(pumpkinObj.getState() <= 24){ + local colObj = sq_GetCNRDObjectToCollisionObject(pumpkinObj); + sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); + colObj.getVar("move").clear_vector(); + colObj.getVar("move").push_vector(sq_GetXPos(colObj)); + colObj.getVar("move").push_vector(100); + colObj.getVar().setBool(0,true); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return 1; + } + else{obj.getVar("jackohalloween_pumpkin").clear_obj_vector();} + } + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_JACKOHALLOWEEN); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKOHALLOWEEN, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Jackohalloween_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKOHALLOWEENBODY_CAST); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_JACKOHALLOWEEN); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_JACKOHALLOWEEN, skill_level); + local currentAni = obj.getCurrentAnimation(); + local castAniTime = currentAni.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); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/jackohalloween/jackohalloweenready_01.ani",0,0,0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKOHALLOWEEN, SKILL_BYKK_JACKOHALLOWEEN, 0, 1.0) + 100; + local hitTime = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,5); + local lifeTime = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,6); + local hitMax = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_JACKOHALLOWEEN,1,castTime,totalDamage,hitTime,lifeTime,hitMax,0,0,0,2); + obj.sq_PlaySound("R_WZ_JACKOHALLOWEEN"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKOHALLOWEENBODY_SHOOT); + obj.sq_PlaySound("JACKOHALLOWEEN_CRUSH"); + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + break; + } +} + +function onEndCurrentAni_Jackohalloween_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_JACKOHALLOWEEN, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Jackohalloween_bykk(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Jackohalloween_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_Jackohalloween_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Jackohalloween_bykk(obj, new_state) +{ + if(!obj) return; +} + +function onCreateObject_Jackohalloween_bykk(obj, createObject) +{ + // if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + // local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + // if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ + // obj.getVar("jackohalloween").push_obj_vector(colObj); + // } + // } +} + + + + +function checkExecutableSkill_LavaPotion_bykk(obj) +{ + // print("LavaPotion > true"); + local state = obj.getState(); + if(state == 6 && !sq_GetSkill(obj, SKILL_BYKK_LAVAPOTION).isInCoolTime()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_LavaPotion_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + // print("substate = "+substate); + obj.setSkillSubState(substate); + switch(substate){ + case 0://地面施放讀條 + local Ani = obj.sq_GetThrowChargeAni(0); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_LAVAPOTION, skill_level); + sq_StartDrawCastGauge(obj, castTime, true); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetDelaySum(animation); + 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); + break; + case 1://地面施放完成 + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(0); + obj.setCurrentAnimation(Ani); + local successType = obj.sq_GetVectorData(datas, 1); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + // print("successType = "+successType); + print(sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21)); + local sizeRate = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,8); + local hitTime = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,6); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_LAVAPOTION, 0, skill_level); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_LAVAPOTION,3,totalDamage,lifeTime,hitTime,sizeRate,successType,0,0,0,1); + break; + case 2://苦糖失敗形態 + sq_EndDrawCastGauge(obj); + local Ani = obj.sq_GetThrowShootAni(0); + obj.setCurrentAnimation(Ani); + local animation = sq_GetCurrentAnimation(obj); + local aniTime = sq_GetDelaySum(animation); + sq_SetBodyEffect(obj, obj, true, sq_RGB(0,0,0), 480, aniTime + 2000, 0, sq_ALPHA(255)); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/lavapotion/lava_potion_throw_d_up.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/lavapotion/lava_potion_throw_n_down.ani",0,0,0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 2, 1.0) + 100; + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR, 0, skill_level); + if(skill_level > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate.tofloat()) / 1000.0).tointeger(); + local skill_level2 = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); + local add_Rate2 = sq_GetLevelData(obj,SKILL_BYKK_HOMUNCULUS, 0, skill_level2); + if(skill_level2 > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate2.tofloat()) / 1000.0).tointeger(); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,2,totalDamage,0,0,0,0,0,0,0,1); + // cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,4,0,0,0,0,0,0,0,0,0); + break; + case 3: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lavapotion/lavapotionair_potion.ani",50,0,0); + break; + case 10: + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LAVAPOTION); + local Ani = obj.sq_GetThrowChargeAni(0); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_LAVAPOTION, skill_level); + sq_StartDrawCastGauge(obj, castTime, true); + break; + } + + if(substate != 0 || substate != 10){ + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_LavaPotion_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_USER, true); + break; + case 1: + case 2: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + break; + } +} + +function onProcCon_LavaPotion_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 10: + local maxTime = sq_GetIntData(obj,SKILL_BYKK_BITTERSCANDYBAR,0); + local stateTime = obj.sq_GetStateTimer(); + local bDownKey = obj.isDownSkillLastKey(); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetDelaySum(animation); + if(stateTime >= startTime){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); + return; + } + if(!bDownKey){ + if(stateTime < maxTime){//成功 + local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); + if(successType >= 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(successType); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); + return; + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); + return; + } + } + else{//失败 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); + return; + } + } + break; + } +} + +function onKeyFrameFlag_LavaPotion_bykk(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + switch(substate){ + case 3: + if(flagIndex == 1){ + //`Create Potion` 10 0 79 + local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); + if(successType == 0) successType = 1; + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + // print("successType = "+successType); + local sizeRate = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,8); + local hitTime = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,6); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_LAVAPOTION, 0, skill_level); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,10,0,79,obj.getDirection(),SKILL_BYKK_LAVAPOTION,3,totalDamage,lifeTime,hitTime,sizeRate,successType,0,0,0,1); + } + break; + } +} + +function onTimeEvent_LavaPotion_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_LavaPotion_bykk(obj, new_state) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 10: + if(new_state != SKILL_BYKK_LAVAPOTION) sq_EndDrawCastGauge(obj); + break; + } +} + +function checkExecutableSkill_Lollipopcrush_bykk(obj) +{ + if (!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_LOLLIPOPCRUSH); + if(b_useskill){ + local state = obj.getState(); + if(state == 6){ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 16) > 0 && sq_GetZPos(obj) <= 40) obj.sq_IntVectPush(9); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_LOLLIPOPCRUSH, STATE_PRIORITY_USER, true); + } + else{ + obj.sq_IntVectClear(); + if(sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 16) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_LOLLIPOPCRUSH, STATE_PRIORITY_USER, true); + } + return 1; + } + return 0; +} + +function onSetState_Lollipopcrush_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSH); + break; + case 1: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHAIRCAST_BODY); + break; + case 9: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHTALISMANLANDATTACK_BODY); + break; + case 10: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHTALISMANREADY_BODY); + break; + case 11: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHTALISMANATTACK_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(substate != 10){ + obj.getVar("Lollipopcrush_Boss").clear_obj_vector(); + obj.getVar("Lollipopcrush_Named").clear_obj_vector(); + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)) obj.getVar("Lollipopcrush_Boss").push_obj_vector(object); + else if(sq_IsNamed(activeObj)) obj.getVar("Lollipopcrush_Named").push_obj_vector(object); + } + } + // print("boss:"+obj.getVar("Lollipopcrush_Boss").get_obj_vector_size()); + // print("named:"+obj.getVar("Lollipopcrush_Named").get_obj_vector_size()); + local candy_max = sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 12); + local bosscandy_max = sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 11); + obj.getVar("candynumber").clear_vector(); + obj.getVar("candynumber").push_vector(0); + obj.getVar("candynumber").push_vector(candy_max); + obj.getVar("candynumber").push_vector(0); + obj.getVar("candynumber").push_vector(bosscandy_max); + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_Lollipopcrush_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 1: + case 9: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_BYKK_LOLLIPOPCRUSH, STATE_PRIORITY_USER, true); + break; + case 11: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Lollipopcrush_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local vz = sq_GetUniformVelocity(0, 20, currentT, fireT); + sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 + break; + } +} + +function onKeyFrameFlag_Lollipopcrush_bykk(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + switch(flagIndex){ + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 0, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 3, 1.0) + 100; + local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 13, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local extra_num = sq_GetIntData(obj,SKILL_BYKK_LOLLIPOPCRUSH,8); + local currentAni = obj.getCurrentAnimation(),delayTime = 0; + switch(substate){ + case 0: + delayTime = currentAni.getDelaySum(16,16);//120 + sq_SetMyShake(obj,5,700); + break; + case 1: + delayTime = currentAni.getDelaySum(12,12);//60 + break; + case 9: + delayTime = currentAni.getDelaySum(1,1);//120 + sq_SetMyShake(obj,5,700); + local offset_x = 175; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offset_x = -175; + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushfloor_floor.ani",175,0,0); + create_lollipopcandy_bykk(obj); + break; + case 10: + delayTime = currentAni.getDelaySum(12,12);//50 + break; + case 11: + delayTime = currentAni.getDelaySum(1,1);//120 + sq_SetMyShake(obj,5,700); + local speedRate = 12000.0 / delayTime.tofloat(); + local aniPath1 = "character/mage/effect/animation/witch_bykk/lollipopcrush/talisman/lollipopcrush_"; + local aniPath2 = ["candy_back_attack.ani","candy_body_attack.ani","c_hit_attack.ani","c_line_attack.ani","c_boom_attack.ani","c_hit2_attack.ani"]; + for(local i = 0; i < aniPath2.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,aniPath1 + aniPath2[i],0,(i+1),0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + } + break; + } + local sizeRate = 100 + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, -1, 15, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,substate,delayTime,totalDamage,extra_num,damageRate,damageRate2,sizeRate,0,0,2); + + break; + case 2: + switch(substate){ + case 0: + sq_flashScreen(obj, 20, 80, 10, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + sq_SetMyShake(obj,1,60); + break; + case 10: + sq_flashScreen(obj, 20, 80, 10, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 11: + local offset_x = 175; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offset_x = -175; + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushfloor_floor.ani",175,0,0); + create_lollipopcandy_bykk(obj); + break; + } + break; + case 3: + switch(substate){ + case 0: + local offset_x = 175; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) offset_x = -175; + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushfloor_floor.ani",175,0,0); + create_lollipopcandy_bykk(obj); + break; + case 1: + local currentAni = obj.getCurrentAnimation(),delayTime = currentAni.getDelaySum(11,11),speedRate = 6000.0 / delayTime.tofloat(); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushairattack_04.ani",0,0,0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + create_lollipopcandy_bykk(obj); + break; + } + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushairattack_06.ani",0,0,0); + break; + } +} + +function onTimeEvent_Lollipopcrush_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, -50, 0, 0, true, 10, 0, 7); + sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, -50, 0, 0, true, 10, 0, 7); + break; + } +} + +function onEndState_Lollipopcrush_bykk(obj, new_state) +{ + if(!obj) return; +} + +function create_lollipopcandy_bykk(obj) +{ + local whitecandy_num = obj.getVar("whitecandy_num").get_vector(0); + local blackcandy_num = obj.getVar("blackcandy_num").get_vector(0); + local bosscandy_num = obj.getVar("bosscandy_num").get_vector(0); + // print("whitecandy_num = "+whitecandy_num+" && blackcandy_num = "+blackcandy_num+" && bosscandy_num = "+bosscandy_num); + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_LOLLIPOPCRUSH); + local blind_prob = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,4,skill_level); + local blind_level = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,5,skill_level); + local blind_time = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,6,skill_level); + local blind_stuckrate = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,8,skill_level); + local lightning_prob = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,10,skill_level); + local lightning_time = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,11,skill_level); + local lightning_damage = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,12,skill_level); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 3, 1.0) + 100; + local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 13, 1.0) + 100; + if(whitecandy_num > 0){ + for(local i = 0; i < whitecandy_num; i++){ + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,0,totalDamage2,blind_level,lightning_prob,lightning_time,lightning_damage,0,0,2); + } + obj.getVar("whitecandy_num").set_vector(0,0); + } + if(blackcandy_num > 0){ + for(local i = 0; i < blackcandy_num; i++){ + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,1,totalDamage2,blind_level,blind_prob,blind_time,blind_stuckrate,0,0,2); + } + obj.getVar("blackcandy_num").set_vector(0,0); + } + if(bosscandy_num > 0){ + for(local i = 0; i < bosscandy_num; i++){ + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,2,totalDamage3,blind_level,blind_prob,blind_time,blind_stuckrate,0,0,2); + } + obj.getVar("bosscandy_num").set_vector(0,0); + } +} + + + +function checkExecutableSkill_MegaDrill_bykk(obj) +{ + //print("MegaDrill > true"); + local state = obj.getState(); + if(state == 6 && !sq_GetSkill(obj, SKILL_BYKK_MEGADRILL).isInCoolTime()){ + if(sq_GetIntData(obj, SKILL_BYKK_MEGADRILL, 2) > 500) return 0; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(20); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + return 0; +} + +function onSetState_MegaDrill_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0://地面召唤-开始读条 + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + sq_SetCustomDamageType(obj, true, 1); + break; + case 1://地面召唤-召唤 + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + local successType = obj.getVar("megadrill").get_vector(0); + local offset_x = 150; + if(!obj.isMovablePos(sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 150),sq_GetYPos(obj))) offset_x = 0; + obj.getVar("megadrill").set_vector(1,offset_x); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 5, 1.0) + 100; + local skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); + if(sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS) > 0 && !skill.isSealFunction()) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,-1,180,obj.getDirection(),SKILL_BYKK_MEGADRILL,12,successType,offset_x,totalDamage,0,0,0,0,0,3); + else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,-1,180,obj.getDirection(),SKILL_BYKK_MEGADRILL,2,successType,offset_x,totalDamage,0,0,0,0,0,3); + break; + case 2://驾驶 + local successType = obj.getVar("megadrill").get_vector(0); + //sq_SetCustomDamageType(obj, true, 1); + local attackInfo = sq_GetCustomAttackInfo(obj, 52); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 3, 1.0) + 100; + if(obj.getVar("megadrill").get_vector(0) >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 4, 1.0) + 100; + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + local lapisphilosophorum_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM); + if(lapisphilosophorum_level > 0){ + local bonusrate3 = sq_GetLevelData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 16, lapisphilosophorum_level); + bonusRate = bonusRate + bonusrate3.tofloat() / 1000; + } + totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_MEGADRILLSUCCESSB); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/witch_bykk/megadrill/bodycover.ani"), 0, 0); + if(successType >= 2){ + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/witch_bykk/megadrill/lightgreat1.ani"), -50, 25); + } + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + switch(successType){ + case 1: + sq_AddAttackBox(currentAni, -10, -25, 0, 140, 50, 75); + break; + case 2: + case 3: + sq_AddAttackBox(currentAni, -20, -50, 0, 280, 100, 100); + break; + } + obj.setTimeEvent(2,20,-1,false); + obj.setTimeEvent(3,100,1,false); + obj.setTimeEvent(5,100,1,false); + break; + case 3://结束 + obj.stopTimeEvent(2); + obj.stopTimeEvent(3); + obj.stopTimeEvent(5); + local appendage = obj.getVar().getAppendage(0); + if(appendage) appendage.setValid(false); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWC_BODY); + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 4://跳跃 + local successType = obj.getVar("megadrill").get_vector(0); + switch(successType){ + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_MEGADRILLSUCCESS); + break; + case 2: + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_MEGADRILLGREAT); + break; + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setLoop(true); + break; + case 10://蓄力 + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + break; + case 11://失败释放 + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.setTimeEvent(0,1000,1,true); + break; + case 20://空中释放 + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); + break; + } + + if(substate == 1 || substate == 11 || substate == 20){ + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + } +} + +function onEndCurrentAni_MegaDrill_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + //sq_SetCustomDamageType(obj, true, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); + break; + case 1: + obj.setTimeEvent(4,860,1,false); + obj.setTimeEvent(6,400,1,false); + break; + case 3: + case 11: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 20: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + break; + } +} + +function onProcCon_MegaDrill_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 10: + local stateTime = obj.sq_GetStateTimer(); + local maxTime = sq_GetIntData(obj,SKILL_BYKK_BITTERSCANDYBAR,0); + local bDownKey = obj.isDownSkillLastKey(); + if(stateTime >= maxTime){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); + return; + } + if(!bDownKey){ + if(stateTime < maxTime){//成功 + local successType = getSuccessType_bykk(obj,SKILL_BYKK_MEGADRILL); + if(successType == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); + return; + } + else{ + obj.getVar("megadrill").clear_vector(); + obj.getVar("megadrill").push_vector(successType); + obj.getVar("megadrill").push_vector(0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); + return; + } + } + else{//失败 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); + return; + } + } + break; + case 2: + case 4: + local timer = obj.getVar("Witch_MegaDrill").get_ct_vector(0); + if(timer){ + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_MEGADRILL); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_MEGADRILL,1,skill_level); + local currentT = timer.Get(); + //print("currentT = "+currentT); + if(currentT >= lifeTime){ + sq_setCurrentAxisPos(obj, 2, 50); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + return; + } + else if(!sq_GetSkill(obj, SKILL_BYKK_MEGADRILL).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_BYKK_MEGADRILL,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_MEGADRILL); + if(b_useskill != -1){ + timer.Reset(); + timer.Start(10000,0); + obj.startSkillCoolTime(SKILL_BYKK_MEGADRILL, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL), -1); + } + } + } + + if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 13, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0 && substate == 2){ + local skillIndex = [SKILL_BYKK_ACIDCLOUD,SKILL_BYKK_ANTIGRAVITYSTARTER,SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_FLUORECOLLIDER,SKILL_BYKK_LAVAPOTION]; + for(local i = 0; i < skillIndex.len(); i++){ + if(!sq_GetSkill(obj, skillIndex[i]).isInCoolTime()){ + obj.setSkillCommandEnable(skillIndex[i],true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + obj.startSkillCoolTime(skillIndex[i], sq_GetSkillLevel(obj, skillIndex[i]), -1); + switch(skillIndex[i]){ + case SKILL_BYKK_ACIDCLOUD: + local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); + local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); + local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); + local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); + if(skllevel1 > 0){ + if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) leftTime = leftTime + 3000; + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); + local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); + local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); + if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,75,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); + } + else{ + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_n.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_d.ani",0,1,151); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_n.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_d.ani",0,1,151); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_d.ani",0,2,152); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_n.ani",0,1,151); + break; + } + local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); + if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); + if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); + local totalDamage2 = 0; + if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); + } + break; + case SKILL_BYKK_ANTIGRAVITYSTARTER: + local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + if(successType == 3){ + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; + local totalDamage2 = 0; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; + if(successType >= 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; + totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,200,0,0 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,200,0,0 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); + break; + case SKILL_BYKK_ENHANCEDMAGICMISSILE: + local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); + if(successType == 0) successType = 1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; + local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); + local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level); + local level = sq_GetSkillLevel(obj, 174) + 20; + local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); + local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); + break; + case SKILL_BYKK_FLUORECOLLIDER: + local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 2, 1.0) + 100; + if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 3, 1.0) + 100; + if(successType >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 4, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 5, 1.0) + 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 6) / 2; + local range = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 13); + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0){ + local decr_Rate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 3); + lifeTime = (lifeTime.tofloat() * (1000.0 - decr_Rate.tofloat()) / 1000.0).tointeger(); + } + if(successType == 3 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0){ + local decr_Rate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 9, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); + hitTime = hitTime * (1000 - decr_Rate) / 1000; + } + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,70,-1,0,obj.getDirection(),SKILL_BYKK_FLUORECOLLIDER,1,1,lifeTime,successType,hitTime,totalDamage,damageRate,range,0,5); + break; + case SKILL_BYKK_LAVAPOTION: + local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); + if(successType == 0) successType = 1; + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; + local sizeRate = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,8); + local hitTime = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,6); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); + local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_LAVAPOTION, 0, skill_level); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_LAVAPOTION,3,totalDamage,lifeTime,hitTime,sizeRate,successType,0,0,0,1); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); + } + } + } + } + + if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + sq_setCurrentAxisPos(obj, 2, 50); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + return; + } + } + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); + } + } + + //加快 + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + if(substate == 2){// && sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 6, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0 + sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true); + if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); + } + } + + if(substate == 4){ + local currentT = obj.sq_GetStateTimer(); + if(currentT <= 300){ + local fireT = 300;//总时间 + local v = sq_GetAccel(0, 100, currentT, fireT, true); + sq_setCurrentAxisPos(obj, 2, v); + } + else{ + local currentT1 = currentT - 300 + local fireT = 300;//总时间 + local v = sq_GetAccel(100, 0, currentT1, fireT, false); + sq_setCurrentAxisPos(obj, 2, v); + } + if(currentT >= 600){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 3, 1.5); + if(obj.getVar("megadrill").get_vector(0) >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 4, 1.5); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,3,totalDamage,0,0,0,0,0,0,0,1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); + } + } + break; + } +} + +function onKeyFrameFlag_MegaDrill_bykk(obj, flagIndex) +{ + if(!obj) return false; + local substate = obj.getSkillSubState(); + switch(substate){ + case 20: + if(flagIndex == 1){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 7, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 2, 1.0); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sub = 1; + if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 8, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) sub = 0; + local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,2,bitterscandy_level); + add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; + totalDamage = (totalDamage.tofloat() * add_Rate).tointeger(); + local skill_level2 = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); + local add_Rate2 = sq_GetLevelData(obj,SKILL_BYKK_HOMUNCULUS, 0, skill_level2); + if(skill_level2 > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate2.tofloat()) / 1000.0).tointeger(); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0 - obj.getZPos(),obj.getDirection(),SKILL_BYKK_MEGADRILL,1,totalDamage,damageRate,sub,0,0,0,0,0,1); + } + break; + } +} + +function onTimeEvent_MegaDrill_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 7, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 2, 1.0); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sub = 1; + if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 8, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) sub = 0; + local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); + local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,2,bitterscandy_level); + add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; + totalDamage = (totalDamage.tofloat() * add_Rate).tointeger(); + local skill_level2 = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); + local add_Rate2 = sq_GetLevelData(obj,SKILL_BYKK_HOMUNCULUS, 0, skill_level2); + if(skill_level2 > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate2.tofloat()) / 1000.0).tointeger(); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,1,totalDamage,damageRate,sub,0,0,0,0,0,1); + break; + case 1: + sq_setCurrentAxisPos(obj, 2, 50); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_JUMP , STATE_PRIORITY_USER, true); + break; + case 2://移动 + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + local speed01 = 2, speed02 = 4; + if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 12, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0){ + speed01 = speed01 * (100 + sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 12, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL))) / 100; + speed02 = speed02 * (100 + sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 12, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL))) / 100; + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - speed01)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - speed01); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - speed02); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(obj.getDirection() == ENUM_DIRECTION_LEFT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} + else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} + } + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + speed02); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} + else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} + } + return; + } + else{ + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + speed01)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + speed01); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - speed02); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(obj.getDirection() == ENUM_DIRECTION_LEFT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} + else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} + } + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + speed02); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} + else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} + } + return; + } + else{ + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - speed02); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(obj.getDirection() == ENUM_DIRECTION_LEFT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} + else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} + } + return; + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + speed02); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(obj.getDirection() == ENUM_DIRECTION_RIGHT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} + else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} + } + return; + } + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(colObj.getState() != 22) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 3://攻击加快 + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 2; + local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_MEGADRILL,11); + local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_MEGADRILL,10); + + if(inputConut >= inputMax){ + obj.setTimeEvent(3, gapByInputMin, 1,false); + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(300.0); + if(colObj.getVar().getBool(0) == false && obj.getVar("megadrill").get_vector(0) >= 2){ + colObj.getVar().setBool(0,true); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract1back.ani"),true); + pAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract1front.ani"),true); + pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract2back.ani"),true); + pAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract2front.ani"),true); + } + } + if(obj.getVar("megadrill").get_vector(0) >= 2 && !obj.getVar("attract").getAppendage(0)){ + local range = 100 * (100 + sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 11, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL))) / 100; + local appendage = sq_AttractToMe(obj, range, 80, 1000); + obj.getVar("attract").setAppendage(0,appendage); + } + } + else{ + obj.setTimeEvent(3, gapByInputMax, 1,false); + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local pAni = colObj.getCurrentAnimation(); + pAni.setSpeedRate(100.0); + } + local appendage = obj.getVar("attract").getAppendage(0); + if(appendage) appendage.setValid(false); + } + + obj.resetHitObjectList(); + break; + case 4: + local offset_x = obj.getVar("megadrill").get_vector(1); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),offset_x)); + sq_setCurrentAxisPos(obj, 2, 0); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/cloud.ani",0,0,-sq_GetZPos(obj)); + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_MEGADRILL, false, "character/mage/witch_skill_bykk/ap/ap_megadrill.nut", true); + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + sq_setCurrentAxisPos(colObj, 2, sq_GetZPos(obj)-5); + sq_moveWithParent(obj, colObj); + } + obj.getVar("Witch_MegaDrill").clear_ct_vector(); + obj.getVar("Witch_MegaDrill").push_ct_vector(); + local timer = obj.getVar("Witch_MegaDrill").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); + break; + case 5: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 2; + local gapByInputMin = 600; + local gapByInputMax = 1200; + + if(inputConut >= inputMax) obj.setTimeEvent(5,gapByInputMin,1,false); + else obj.setTimeEvent(5,gapByInputMax,1,false); + + local pooledObj; + if(sq_getRandom(1,100) >= 30) pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/smoke"+sq_getRandom(1,2).tostring()+".ani",-85,0,100); + else pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/smoke"+sq_getRandom(1,2).tostring()+".ani",-100,0,50); + sq_moveWithParent(obj, pooledObj); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/smoke"+sq_getRandom(1,2).tostring()+".ani",50,0,75); + local pAni = pooledObj2.getCurrentAnimation(); + pAni.setImageRateFromOriginal(-1.0, 1.0); + sq_moveWithParent(obj, pooledObj2); + break; + case 6: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/cloud.ani",0,0,-sq_GetZPos(obj)); + sq_setCurrentAxisPos(obj, 2, 500); + obj.sq_ZStop(); + break; + } +} + +function onEndState_MegaDrill_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_MEGADRILL){ + sq_SetCustomDamageType(obj, true, 0); + local effectObj = obj.getVar("megadrill").get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + colObj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + } + local appendage = obj.getVar("attract").getAppendage(0); + if(appendage) appendage.setValid(false); + obj.getVar("megadrill").setBool(0,false); + local apdPath = "character/mage/witch_skill_bykk/ap/ap_megadrill.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + } +} + + + + +function checkExecutableSkill_TransformFlapper_bykk(obj) +{ + //print("TransformFlapper > true"); + return 0; +} + +function onSetState_TransformFlapper_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(38); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPER); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; + obj.getVar("transformflapper").clear_vector(); + obj.getVar("transformflapper").push_vector(successType); + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_n.ani",100,0,75); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_d.ani",100,-1,74); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",100,-2,73); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_n.ani",100,0,75); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_d.ani",100,-1,74); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",100,-2,73); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_n.ani",100,0,75); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_d.ani",100,-1,74); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",100,-2,73); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/bigsuccess_familier01.ani",100,0,75); + break; + } + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + local delayTime = currentAni.getDelaySum(1, 1); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPER, SKILL_BYKK_TRANSFORMFLAPPER, 0, 1.0) + 100; + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local prob = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,1,skill_level); + local level = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,2,skill_level); + local time = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,3,skill_level); + local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,8,skill_level); + local isSeal = 1; + if(transformflapper_skill.isSealFunction()) isSeal = 0; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,1,delayTime,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,3,delayTime,totalDamage,prob,level,time,successType,isSeal,sizeRate,2); + obj.setTimeEvent(1,currentAni.getDelaySum(0,7),1,false); + break; + case 1: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(39); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local currentAni = obj.getCurrentAnimation(); + local delayTime = currentAni.getDelaySum(1, 1); + sq_ClearAttackBox(currentAni); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPER, SKILL_BYKK_TRANSFORMFLAPPER, 0, 1.0) + 100; + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local prob = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,1,skill_level); + local level = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,2,skill_level); + local time = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,3,skill_level); + local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,8,skill_level); + local isSeal = 1; + if(transformflapper_skill.isSealFunction()) isSeal = 0; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,2,delayTime,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,4,delayTime,totalDamage,prob,level,time,successType,isSeal,sizeRate,2); + break; + } + + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } +} + +function onEndCurrentAni_TransformFlapper_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 1: + local successType = obj.getVar("transformflapper").get_vector(0); + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + } + if(obj.getVar("transBool").getBool(0)){ + obj.getVar("transBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPER, STATE_PRIORITY_USER, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + } + break; + } +} + +function onProcCon_TransformFlapper_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local vz = sq_GetUniformVelocity(0, 20, currentT, fireT); + sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 + // if(currentT >= fireT) obj.sq_ZStop(); + break; + } +} + +function onKeyFrameFlag_TransformFlapper_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_TransformFlapper_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + case 1: + local successType = obj.getVar("transformflapper").get_vector(0); + local aniPath = ["character/mage/effect/animation/witch_bykk/transformflapper/flyflap_groundwave.ani","character/mage/effect/animation/witch_bykk/transformflapper/bottom_down.ani","character/mage/effect/animation/witch_bykk/transformflapper/bottom_up.ani"]; + for(local i = 0; i < 3; i++){ + local effectObj = createOnlyDrawObject_witch_bykk(obj,aniPath[i],true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),100+successType*15),sq_GetYPos(obj) + i,0 + i,ENUM_DRAWLAYER_BOTTOM); + local pAni = effectObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(1.0+successType*0.2, 1.0+successType*0.2); + } + break; + } +} + +function onEndState_TransformFlapper_bykk(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_TransformFlapper_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local prob = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,1,skill_level); + local level = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,2,skill_level); + local time = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,3,skill_level); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLIND, prob.tofloat(), level, false, time); + } +} + +function onAfterAttack_TransformFlapper_bykk(obj,damager,boundingBox,isStuck) +{ + if(!obj) return 0; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(activeObj.getHp() <= 0){ + print("DEAD"); + print("X = "+sq_GetXPos(activeObj)+"&& Y = "+sq_GetYPos(activeObj)); + } + } + return 1; +} + +function checkExecutableSkill_TransformFlapperEx_bykk(obj) +{ + //print("TransformFlapperEx > true"); + return 0; +} + +function onSetState_TransformFlapperEx_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(61); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPEREX); + if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; + obj.getVar("transformflapper").clear_vector(); + obj.getVar("transformflapper").push_vector(successType); + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_n.ani",75,0,75); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_d.ani",75,-1,74); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,73); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_n.ani",75,0,75); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_d.ani",75,-1,74); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,73); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_n.ani",75,0,75); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_d.ani",75,-1,74); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,73); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/bigsuccess_familier01.ani",75,0,75); + break; + } + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + local delayTime = currentAni.getDelaySum(false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 0, 1.0) + 100; + local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 8, 1.0) + 100; + local isSeal = 1; + if(transformflapper_skill.isSealFunction()) isSeal = 0; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,1,delayTime,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,3,delayTime,totalDamage,successType,isSeal,sizeRate,0,0,0,2); + if(sq_GetIntData(obj, SKILL_BYKK_TRANSFORMFLAPPEREX, 3) > 0) obj.setTimeEvent(2,currentAni.getDelaySum(0,9),1,false); + else obj.setTimeEvent(1,currentAni.getDelaySum(0,7),1,false); + break; + case 1: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(62); + local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local currentAni = obj.getCurrentAnimation(); + local delayTime = currentAni.getDelaySum(false); + sq_ClearAttackBox(currentAni); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 0, 1.0) + 100; + local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 8, 1.0) + 100; + local isSeal = 1; + if(transformflapper_skill.isSealFunction()) isSeal = 0; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,2,delayTime,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,4,delayTime,totalDamage,successType,isSeal,sizeRate,0,0,0,2); + if(sq_GetIntData(obj, SKILL_BYKK_TRANSFORMFLAPPEREX, 3) > 0) obj.setTimeEvent(2,currentAni.getDelaySum(0,2),1,false); + break; + } + + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } +} + +function onEndCurrentAni_TransformFlapperEx_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + // break; + case 1: + local successType = obj.getVar("transformflapper").get_vector(0); + switch(successType){ + case 0: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + case 2: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); + break; + } + if(obj.getVar("transBoolex").getBool(0)){ + obj.getVar("transBoolex").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPEREX, STATE_PRIORITY_USER, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + } + break; + } +} + +function onProcCon_TransformFlapperEx_bykk(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local pAni = obj.getCurrentAnimation();//得到ani + local currentT = sq_GetCurrentTime(pAni);//当前时间 + local fireT = pAni.getDelaySum(0, 5);//总时间 + local vz = sq_GetUniformVelocity(0, 20, currentT, fireT); + sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 + break; + } +} + +function onKeyFrameFlag_TransformFlapperEx_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_TransformFlapperEx_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + case 1: + local successType = obj.getVar("transformflapper").get_vector(0); + local aniPath1 = "character/mage/effect/animation/witch_bykk/transformflapperex/land/"; + local aniPath2 = ["flyflapex_land_ground_crack.ani","flyflapex_land_front.ani"]; + for(local i = 0; i < 2; i++){ + local effectObj = createOnlyDrawObject_witch_bykk(obj,aniPath1 + aniPath2[i],true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),150+successType*15),sq_GetYPos(obj) + i,0 + i,ENUM_DRAWLAYER_BOTTOM); + local pAni = effectObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(1.0+successType*0.1, 1.0+successType*0.1); + } + break; + case 2: + local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 0, 1.0) + 100) * 33 / 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,5,0,0,0,0,0,0,0,0,0); + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,7,totalDamage,0,0,0,0,0,0,0,0); + break; + } +} + +function onEndState_TransformFlapperEx_bykk(obj, new_state) +{ + if(!obj) return; +} + + + +function checkExecutableSkill_Uroboros_bykk(obj) +{ + if (!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_UROBOROS); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Uroboros_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local timer = obj.getVar("uroboros").get_ct_vector(0); + if(timer) obj.getVar("uroboros").clear_ct_vector(); + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSSTART); + local attackInfo = sq_GetCustomAttackInfo(obj, 50); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("uroboros_move").clear_vector(); + obj.getVar("uroboros_move").push_vector(sq_GetXPos(obj)); + obj.sq_PlaySound("WZ_UROBOROS"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSREADY); + obj.sq_PlaySound("WZ_UROBOROS_RIDE"); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_UROBOROS, 3) * (100 - UROBOROS_TIAOZHENG4) / 100; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 1, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,185,obj.getDirection(),SKILL_BYKK_UROBOROS,2,totalDamage,hitTime,0,0,0,0,0,0,0); + obj.setTimeEvent(2,20,-1,true); + obj.setTimeEvent(3,2000,-1,true); + obj.setTimeEvent(4,700,-1,true); + local appendage = sq_AttractToMe(obj, 600, 100, 1200); + obj.getVar("uroborosSet").setAppendage(0,appendage); + obj.getVar("uroborosTar").clear_obj_vector(); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSIDLE); + if(obj.getVar("uroboros").getBool(0)){ + obj.getVar("uroboros").setBool(0, false); + local attackInfo = sq_GetCustomAttackInfo(obj, 51); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 0, 1.0) + 100; + local bonusRate = 1; + local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); + if(homunculus_level > 0){ + local bonusrate2 = sq_GetLevelData(obj, SKILL_BYKK_HOMUNCULUS, 6, homunculus_level); + bonusRate = bonusRate + bonusrate2.tofloat() / 1000; + } + totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); + sq_SetCurrentAttackInfo(obj, attackInfo); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1,100,-1,false); + if(!obj.isExistTimeEvent(2)) obj.setTimeEvent(2,20,-1,true); + if(!obj.isExistTimeEvent(3)) obj.setTimeEvent(3,2000,-1,true); + if(!obj.isExistTimeEvent(4)) obj.setTimeEvent(4,700,-1,true); + } + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSENERGETIC); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(150.0); + local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); + local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); + if(skllevel2 > 0){ + if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ + obj.getVar("successpremonition").setBool(0,true); + } + } + break; + case 100: + obj.sq_SetCurrentAnimation(205); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); + else obj.getVar("element_kk").setInt(0, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); + else obj.getVar("element_kk").setInt(1, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); + else obj.getVar("element_kk").setInt(2, 0); + if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); + else obj.getVar("element_kk").setInt(3, 0); + break; + } + +} + +function onEndCurrentAni_Uroboros_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(substate + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); + if(substate == 0){ + obj.getVar("uroboros").clear_ct_vector(); + obj.getVar("uroboros").push_ct_vector(); + local timer = obj.getVar("uroboros").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + obj.getVar("uroboros").setBool(0, true); + } + else if(substate == 1) obj.setTimeEvent(1,100,1,false); + break; + case 100: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, true); + break; + } +} + +function onProcCon_Uroboros_bykk(obj) +{ + if(!obj) return; + //加快 + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + + local timer = obj.getVar("uroboros").get_ct_vector(0); + if(timer){ + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_UROBOROS, 0) + UROBOROS_TIAOZHENG3; + local currentT = timer.Get(); + if(currentT >= lifeTime){ + obj.stopSound(4399); + local attackObj = obj.getVar("uroboros").get_obj_vector(0); + if(attackObj){attackObj = sq_GetCNRDObjectToCollisionObject(attackObj);attackObj.setValid(false);} + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 3, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,0,obj.getDirection(),SKILL_BYKK_UROBOROS,1,totalDamage,0,0,0,0,0,0,0,1); + obj.getVar("uroboros").setBool(0, false); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + return; + } + } + + + local substate = obj.getSkillSubState(); + switch(substate){ + case 2: + case 3: + if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.stopSound(4399); + local attackObj = obj.getVar("uroboros").get_obj_vector(0); + if(attackObj){attackObj = sq_GetCNRDObjectToCollisionObject(attackObj);attackObj.setValid(false);} + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 3, 1.0) + 100; + cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,0,obj.getDirection(),SKILL_BYKK_UROBOROS,1,totalDamage,0,0,0,0,0,0,0,1); + obj.getVar("uroboros").setBool(0, false); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + return; + } + } + break; + } +} + +function onKeyFrameFlag_Uroboros_bykk(obj, flagIndex) +{ + if(!obj) return false; +} + +function onTimeEvent_Uroboros_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + break; + case 1: + local inputConut = obj.getRapidInputFrequency(); + inputConut = inputConut.tointeger(); + + local inputMax = 2; + local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_UROBOROS,4) * UROBOROS_TIAOZHENG1 / 100; + local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_UROBOROS,2) * UROBOROS_TIAOZHENG2 / 100; + + if(inputConut >= inputMax){ + obj.setTimeEvent(1, gapByInputMin, 1,false); + if(obj.getSkillSubState() != 3){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); + } + } + else{ + obj.setTimeEvent(1, gapByInputMax, 1,false); + if(obj.getSkillSubState() != 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); + } + } + + obj.resetHitObjectList(); + break; + case 2: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() - 5,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 5); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos() + 5,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 5); + } + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 3)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - 3); + obj.getVar("uroboros").setBool(0, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 3)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + 3); + obj.getVar("uroboros").setBool(0, true); + } + break; + case 3: + obj.stopSound(4399); + obj.sq_PlaySound("UROBOROS_ROTATE_LOOP",4399); + break; + case 4: + local save_posX = obj.getVar("uroboros_move").get_vector(0); + local base_X = sq_GetXPos(obj); + local aniPath = ["character/mage/effect/animation/witch_bykk/uroboros/move/movedust_01.ani", "character/mage/effect/animation/witch_bykk/uroboros/move/movedustbig_01.ani"]; + if(base_X != save_posX){ + if(base_X > save_posX) createOnlyDrawObject_witch_bykk(obj,aniPath[sq_getRandom(0,1)],true,ENUM_DIRECTION_RIGHT,sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),-80),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + else createOnlyDrawObject_witch_bykk(obj,aniPath[sq_getRandom(0,1)],true,ENUM_DIRECTION_LEFT,sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(), 80),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); + obj.getVar("uroboros_move").set_vector(0, sq_GetXPos(obj)); + } + break; + } +} + +function onEndState_Uroboros_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_UROBOROS){ + local appendage = obj.getVar("uroborosSet").getAppendage(0); + if(appendage) appendage.setValid(false); + local size = obj.getVar("uroborosTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("uroborosTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "appendage/character/ap_common_hold.nut"); + } + } + } +} + + +function procSkill_Witch(obj) +{ + procSkill_Witch_bykk(obj); +} + +/////////////////////////witch_end + + diff --git a/user/116.205.165.25/6_mage_2.c b/user/116.205.165.25/6_mage_2.c new file mode 100644 index 0000000..2fb2ca1 --- /dev/null +++ b/user/116.205.165.25/6_mage_2.c @@ -0,0 +1,3354 @@ + + +function checkExecutableSkill_ChasersExplosion(obj) +{ + if (!obj) return false; + local size = obj.getVar("kksChaser").get_obj_vector_size(); + if(size < 1){ + if (obj.isMessage()) sq_AddMessage(3573); + return false; + } + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHASERSEXPLOSION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHASERSEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ChasersExplosion(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ChasersExplosion(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(221); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + obj.sq_PlaySound("WZ_PRECENCIA_CHASERPRESS_1"); + obj.sq_PlaySound("PRECENCIA_CHASERPRESS_1_CAST"); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "ChasersExplosion", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(8); + obj.sq_PlaySound("WZ_CHASERP_02"); + } + + local speed = 1.0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speed = 0.3 + speed; + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local size = obj.getVar("kksChaser").get_obj_vector_size(); + obj.getVar("chasersexp").setInt(10, size); + local delaySum = 300; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 2); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.setTimeEvent(0, delay / 10, 10, true); + obj.setTimeEvent(1, delay, 1, false); + } + else{ + obj.setTimeEvent(10, delay, 1, false); + } + sq_SetFrameDelayTime(currentAni, 6, delaySum); + obj.getVar("ChasersExplosion_damage").setInt(10, 0); + break; + } +} + +function onEndCurrentAni_ChasersExplosion(obj) +{ + if(!obj) return; + if(sq_GetZPos(obj) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(100); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } +} + +function onProcCon_ChasersExplosion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + break; + } +} + +function onKeyFrameFlag_ChasersExplosion(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 11: + obj.sq_PlaySound("R_WZ_PRECENCIA_CHASERPRESS_2"); + obj.sq_PlaySound("PRECENCIA_CHASERPRESS_2_CHASER"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERSEXPLOSION, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION); + local baseSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 0); + print("baseSRate = "+baseSRate); + local addSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 2) / 10; + // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10; + baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate; + + print("test1 = "+obj.getVar("chasersexp").getInt(10)); + print("test2 = "+addSRate); + print("test3 = "+baseSRate); + // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100; + // totalDamage = totalDamage * obj.getVar("ChasersExplosion_damage").getInt(10) / 100; + print("totalDamage = "+totalDamage); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,2,totalDamage,baseSRate,1,0,0,0,0,0); + break; + case 12: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION); + local baseSRate = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 1, skillLevel); + local addSRate = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 3, skillLevel) / 10; + // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10; + baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate; + createOnlyDrawObjectEX_Battlemage_bykk(obj,"character/mage/effect/animation/battlemage_bykk/chasersexplosion/precencia/chaserexplosionbottom_09.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj)*0,ENUM_DRAWLAYER_BOTTOM,baseSRate,baseSRate); + createOnlyDrawObjectEX_Battlemage_bykk(obj,"character/mage/effect/animation/battlemage_bykk/chasersexplosion/precencia/chaserexplosionfront_07.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj)*0,ENUM_DRAWLAYER_NORMAL,baseSRate,baseSRate); + sq_SetMyShake(obj, 8, 160); + break; + case 13: obj.sq_PlaySound("PRECENCIA_CHASERPRESS_3_FINISH"); break; + } + return true; +} + +function onTimeEvent_ChasersExplosion(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local vz = sq_GetUniformVelocity(0, 50, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 6); + local delay2 = currentAni.getDelaySum(3, 9); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,-70,0,50,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,1,delay,0,0,0,0,0,0,0); + obj.setTimeEvent(2, delay2, 1, false); + local baseX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -75); + local baseZ = 88; + local size = obj.getVar("kksChaser").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(chaserObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); + if(colObj.getState() > 22) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + colObj.removeAllTimeEvent(); + local angle = 360 / size * i; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 60.0).tointeger(); + local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 60.0).tointeger(); + colObj.getVar("moveSet").setInt(10, baseX + x); + colObj.getVar("moveSet").setInt(11, baseZ + z); + colObj.getVar("moveSet").setInt(12, baseX); + colObj.getVar("moveSet").setInt(13, baseZ); + colObj.getVar("moveSet").setInt(14, delay); + colObj.setTimeEvent(15, delay / 45, 15, true); + // local totalDamage = obj.getVar("ChasersExplosion_damage").getInt(10) + colObj.getVar("custom").getInt(10); + // obj.getVar("ChasersExplosion_damage").setInt(10, totalDamage); + // print(obj.getVar("ChasersExplosion_damage").getInt(10)); + } + } + break; + case 2: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERSEXPLOSION, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION); + local baseSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 0); + print("baseSRate = "+baseSRate); + local addSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 2) / 10; + // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10; + baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate; + // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100; + // totalDamage = totalDamage * obj.getVar("ChasersExplosion_damage").getInt(10) / 100; + + print("test1 = "+obj.getVar("chasersexp").getInt(10)); + print("test2 = "+addSRate); + print("test3 = "+baseSRate); + print("totalDamage = "+totalDamage); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,75,1,0,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,2,totalDamage,baseSRate,0,0,0,0,0,0); + break; + case 10: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 6); + local baseX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 5); + local baseZ = 240; + local size = obj.getVar("kksChaser").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(chaserObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); + if(colObj.getState() > 22) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + colObj.removeAllTimeEvent(); + local angle = 360 / size * i; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 80.0).tointeger(); + local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 80.0).tointeger(); + colObj.getVar("moveSet").setInt(10, baseX + x); + colObj.getVar("moveSet").setInt(11, baseZ + z); + colObj.getVar("moveSet").setInt(12, baseX); + colObj.getVar("moveSet").setInt(13, baseZ); + colObj.getVar("moveSet").setInt(14, delay); + colObj.setTimeEvent(15, delay / 45, 15, true); + // local totalDamage = obj.getVar("ChasersExplosion_damage").getInt(10) + colObj.getVar("custom").getInt(10); + // obj.getVar("ChasersExplosion_damage").setInt(10, totalDamage); + // print(obj.getVar("ChasersExplosion_damage").getInt(10)); + } + } + break; + } +} + +function onEndState_ChasersExplosion(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_CHASERSEXPLOSION && new_state != STATE_DIE){ + local createMax = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 16, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION)); + for(local i = 0; i < createMax; i++){ + createBattlemageChaser(obj); + } + } +} + + + + +function checkExecutableSkill_DoubleSwing(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DOUBLESWING); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DoubleSwing(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DoubleSwing(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Doubleswing1", false, false); + obj.setCurrentAnimation(Ani); + } + else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(226); + else obj.sq_SetCurrentAnimation(65); + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Doubleswing2", false, false); + obj.setCurrentAnimation(Ani); + } + else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(227); + else obj.sq_SetCurrentAnimation(66); + break; + } + local speed = 1.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local atkIndex = [35,36]; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, subState, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } +} + +function onEndCurrentAni_DoubleSwing(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DoubleSwing(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DoubleSwing(obj, flagIndex) +{ + if(!obj) return false; + if(flagIndex == 1){ + sq_SetMyShake(obj, 5, 100); + switch(obj.getSkillSubState()){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/doubleswing/doubleswing1_02.ani", 0, 1, 0); + obj.sq_PlaySound("R_WZ_PRECENCIA_DOUBLESWING_1"); + obj.sq_PlaySound("PRECENCIA_DOUBLESWING_1"); + } + else obj.sq_PlaySound("WZ_DOUBLE_SWING_01"); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_PlaySound("R_WZ_PRECENCIA_DOUBLESWING_2"); + obj.sq_PlaySound("PRECENCIA_DOUBLESWING_2"); + } + else obj.sq_PlaySound("R_WZ_DOUBLE_SWING_02"); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 2, 1.0) + 100; + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_DOUBLESWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING)); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,150,0,0,obj.getDirection(),SKILL_BYKK_DOUBLESWING,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } + } + return true; +} + +function onTimeEvent_DoubleSwing(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DoubleSwing(obj, new_state) +{ + if(!obj) return; +} + + + + +function checkExecutableSkill_DragonSpear(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DRAGONSPEAR); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.getVar("dragonspearTar").clear_obj_vector(); + obj.getVar("dragonspearTar_fix").clear_obj_vector(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONDANCE) > 0 && !sq_GetSkill(obj, SKILL_BYKK_DRAGONDANCE).isSealFunction()){ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(12); + else{ + if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + } + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + return false; +} + + +function checkCommandEnable_DragonSpear(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DragonSpear(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://普通形態 + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "DragonSpear", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(17); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack1.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack2.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10000,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack3.ani"), 0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1://煌龍亂舞普通形態 + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "DragonSpearNew_Body", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(99); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("DragonSpearBool").setBool(0, true); + break; + case 2://煌龍亂舞護石形態 + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "DragonSpearNew_Body_Talisman", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(284); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("DragonSpearBool").setBool(0, true); + break; + case 10://三覺形態準備 + obj.sq_SetCurrentAnimation(234); + break; + case 11://三覺形態釋放 + obj.sq_SetCurrentAnimation(233); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 12://三覺形態煌龍亂舞開始 + obj.sq_SetCurrentAnimation(232); + obj.getVar("DragonSpearBool").setBool(0, true); + break; + case 13://三覺形態煌龍亂舞過程 + obj.sq_SetCurrentAnimation(231); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 14://三覺形態煌龍亂舞過程(護石) + obj.sq_SetCurrentAnimation(230); + break; + case 15://三覺形態煌龍亂舞結束 + obj.sq_SetCurrentAnimation(229); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)).tofloat() / 100; + if(obj.getVar("skillSub").getInt(100) == 1) speedRate = 0.3 + speedRate; + else if(obj.getVar("skillSub").getInt(100) == 2) speedRate = 0.5 + speedRate; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + if(subState == 0 || subState == 11 && sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) < 1){ + local currentAni = obj.getCurrentAnimation(); + obj.sq_SetXScrollStart(300, currentAni.getDelaySum(0, 6)); + } +} + +function onEndCurrentAni_DragonSpear(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 11: + case 15: + obj.sq_SetXScrollStop(0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + if(subState == 0){ + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatar/dragonspear/speardisappear1.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatar/dragonspear/speardisappear2.ani", 0, 1, 0); + } + break; + case 10: + case 12: + case 14: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_AUTO, true); + break; + case 13: + obj.sq_IntVectClear(); + if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(subState + 1); + else obj.sq_IntVectPush(subState + 2); + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DragonSpear(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 12: + case 13: + if(obj.getVar("DragonSpearBool").getBool(0)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("DragonSpearBool").setBool(0, false); + } + } + break; + } +} + +function onKeyFrameFlag_DragonSpear(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + obj.sq_PlaySound("YELLOWD_CHARGE"); + obj.sq_PlaySound("R_WZ_DRAGONDANCE"); + break; + case 1001://生成龍刀 + break; + case 1002://生成龍珠後攻擊 + if(obj.getVar("dragonspearTar_fix").get_obj_vector_size() < 1 && obj.getVar("dragonspearTar").get_obj_vector_size() < 1 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0){ + obj.setTimeEvent(1, 300, 1, false); + break; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 1, 1.0) + 100; + local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100; + local currentAni = obj.getCurrentAnimation(); + local speedRate = 72000 / currentAni.getDelaySum(0, 0); + local createMax = sq_GetIntData(obj, SKILL_BYKK_DRAGONSPEAR, 0); + local baseAngle = sq_getRandom(0, 90); + for(local i = 0; i < createMax; i++){ + local angle = 360 / createMax * i + baseAngle; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); + local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300+x,0,50+z,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,2,totalDamage,sizeRate,i,50,speedRate,0,0,0); + } + local delay = (2300 + createMax * 200) / speedRate * 100; + obj.setTimeEvent(0, delay, 1, false); + break; + case 2001: + case 3001: + obj.sq_PlaySound("YELLOWD_CHARGE"); + obj.sq_PlaySound("R_WZ_DRAGONDANCE"); + break; + case 2002: + case 3002: + obj.sq_PlaySound("DRAGONDANCE_STAB"); + sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 4, 80); + break; + case 2003: + case 2007: + case 3003: + case 3008: + obj.sq_PlaySound("DRAGONDANCE_SWISH"); + sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 4, 100); + obj.resetHitObjectList(); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + if(flagIndex == 2003 || flagIndex == 3003) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, 0.0); + break; + case 2004: + case 2005: + case 3004: + obj.sq_PlaySound("DRAGONDANCE_SWISH"); + sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 4, 80); + obj.resetHitObjectList(); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + if(flagIndex == 2004 || flagIndex == 3004) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, 0.0); + break; + case 2006: + case 3006: + obj.resetHitObjectList(); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 2007: + case 3007: + obj.resetHitObjectList(); + sq_SetVelocity(obj, 0, 0.0); + break; + case 2008: + case 3009: + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 2009: + case 3010: + obj.sq_PlaySound("DRAGONDANCE_FINISH"); + sq_flashScreen(obj, 0, 80, 100, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 15, 180); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2010: + case 3011: + sq_SetVelocity(obj, 0, 0.0); + break; + case 3012: + obj.sq_PlaySound("R_WZ_DRAGONDANCE_FIN"); + obj.sq_PlaySound("DRAGONDANCE_FINISH"); + obj.sq_PlaySound("BLAST_SWORD_EXP"); + sq_flashScreen(obj, 10, 100, 10, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 120); + //`add finish exp` 149 1 -7 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100; + totalDamage = totalDamage * 18 / 100; + local sizeRate = 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,149,1,-7,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1101: + obj.sq_PlaySound("YELLOWD_CHARGE"); + obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONSPEAR_1"); + break; + case 1102://生成龍珠後攻擊 + if(obj.getVar("dragonspearTar_fix").get_obj_vector_size() < 1 && obj.getVar("dragonspearTar").get_obj_vector_size() < 1 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0){ + obj.setTimeEvent(1, 300, 1, false); + break; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 1, 1.0) + 100; + local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100; + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5100 / currentAni.getDelaySum(0, 0); + local createMax = sq_GetIntData(obj, SKILL_BYKK_DRAGONSPEAR, 0); + local baseAngle = sq_getRandom(0, 90); + for(local i = 0; i < createMax; i++){ + local angle = 360 / createMax * i + baseAngle; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); + local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300+x,0,100+z,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,2,totalDamage,sizeRate,i,100,speedRate,0,0,0); + } + local delay = (2000 + createMax * 200) / speedRate * 100; + obj.setTimeEvent(0, delay, 1, false); + break; + case 1201: obj.sq_PlaySound("YELLOWD_CHARGE"); break; + case 1202: obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONDANCE_1"); break; + case 1301: + case 1303: + case 1305: + obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1"); + sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 80); + if(flagIndex > 1301) obj.resetHitObjectList(); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 1302: sq_SetVelocity(obj, 0, 0.0); break; + case 1304: + case 1306: + case 1307: + if(flagIndex == 1306) obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_2"); + else if(flagIndex == 1307) obj.resetHitObjectList(); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 1308: + obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONDANCE_2"); + obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_3"); + sq_flashScreen(obj, 0, 80, 200, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 20, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) < 1) break; + totalDamage = totalDamage * 18 / 100; + local sizeRate = 130; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,220,0,-2,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,1,totalDamage,sizeRate,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_25.ani", 0, 1, -1); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_24.ani", 0, 1, -1); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_00.ani", 0, 1, -1000); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_01.ani", 0, 1, -1000); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_05.ani", 0, 1, 0); + break; + case 1401: + obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1"); + sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 80); + if(obj.getSkillSubState() == 14) obj.resetHitObjectList(); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_14.ani", 0, -1, 0); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 1402: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_13.ani", 0, -1, 0); + break; + case 1403: + obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1"); + obj.resetHitObjectList(); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_22.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_23.ani", 0, -1, 0); + sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 80); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 1404: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_24.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_25.ani", 0, -1, 0); + break; + case 1405: + obj.resetHitObjectList(); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_24.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_25.ani", 0, -1, 0); + if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} + local speed = 300.0; + if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; + sq_SetVelocity(obj, 0, speed); + break; + case 4001: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragonspear_06.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragonspear_07.ani", 0, 1, 0); + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + return true; +} + +function onTimeEvent_DragonSpear(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 4, 1.0) + 100; + local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100; + local zpos = 50; + if(obj.getSkillSubState() == 11) zpos = 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300,0,zpos,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,3,totalDamage,sizeRate,0,0,0,0,0,0); + case 1: + if(obj.getSkillSubState() == 0){ + obj.sq_SetXScrollStop(0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + else{ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(15); + } + break; + } +} + +function onEndState_DragonSpear(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_DRAGONSPEAR){ + local size = obj.getVar("dragonspearTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("dragonspearTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, DRAGONSPEAR_APDPATH); + } + } + } +} + + +function onAttack_DragonSpear(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex >= 10) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 11: + if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ + if(!obj.getVar("dragonspearTar").is_obj_vector(damager)) obj.getVar("dragonspearTar").push_obj_vector(damager); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, DRAGONSPEAR_APDPATH, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , addAppendage); + local zpos = 0; + if(subState == 11) zpos = 50; + local currentAni = obj.getCurrentAnimation();; + local delay = currentAni.getDelaySum(frameIndex, 10); + sq_MoveToAppendageForce(damager, obj, obj, 300, 0, zpos, delay / 2, true, addAppendage); + } + else if(sq_IsFixture(damager) || !sq_IsHoldable(obj,damager) || !sq_IsGrabable(obj,damager)){ + if(!obj.getVar("dragonspearTar_fix").is_obj_vector(damager)) obj.getVar("dragonspearTar_fix").push_obj_vector(damager); + } + break; + } +} + + +function checkExecutableSkill_FusionChaser(obj) +{ + if (!obj) return false; + local size = obj.getVar("kksChaser").get_obj_vector_size(); + if(size < 2){ + if (obj.isMessage()) sq_AddMessage(3573); + return false; + } + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FUSIONCHASER); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_FUSIONCHASER); + obj.getVar("fusionchaser").setBool(0, false); + obj.getVar("fusionchaser").setBool(10, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_FUSIONCHASER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FusionChaser(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FusionChaser(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.getVar("fusioncs").setInt(10, 0); + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(235); + obj.sq_PlaySound("R_WZ_PRECENCIA_FUSIONCHASER_1"); + obj.sq_PlaySound("PRECENCIA_FUSIONCHASER_CAST"); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Fusionchaser", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(64); + obj.sq_PlaySound("WZ_FUSION"); + } + break; + } + local sub = 2; + for(local i = 0; i < sub; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(!chaserObj){ + sub = sub + 1; + continue; + } + chaserObj.setValid(false); + } + local speed = 1.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + // local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB); + // local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TIMERBOMB, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 6, 100000); +} + +function onEndCurrentAni_FusionChaser(obj) +{ + if(!obj) return; + if(obj.getVar("fusioncs").getInt(10) == 0 && sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 9, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){ + local sub = 2,sizeRate = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 4) / 2; + if(obj.getVar("skillSub").getInt(100) < 2){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 4; + else sub = 3; + sizeRate = sizeRate * 2; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 0, 1.0) + 100; + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 8, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER))) / 100; + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 1)) / 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,50,1,75,obj.getDirection(),SKILL_BYKK_FUSIONCHASER,sub,totalDamage,sizeRate,0,0,0,0,0,0); + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + + +function onProcCon_FusionChaser(obj) +{ + if(!obj) return; + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex == 6){ + if(obj.getVar("fusionchaser").getBool(0) == false){ + obj.getVar("fusionchaser").setBool(0, true); + local sub = 0,xpos = -10, zpos = 120; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 1; + else if(obj.getVar("skillSub").getInt(100) == 2){ + sub = 2; xpos = 0; zpos = 160; + } + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,xpos,0,zpos,obj.getDirection(),SKILL_BYKK_FUSIONCHASER,1,sub,0,0,0,0,0,0,0); + } + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + local stateTime = obj.sq_GetStateTimer(); + if(stateTime <= 500 || sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 7, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0) obj.getVar("fusionchaser").setBool(10, true); + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(7); + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_PlaySound("PRECENCIA_FUSIONCHASER_SHOT"); + obj.sq_PlaySound("WZ_PRECENCIA_FUSIONCHASER_2"); + } + } + else{ + if(obj.getVar("skillSub").getInt(100) == 2){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(4); + } + } + } +} + +function onKeyFrameFlag_FusionChaser(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.getVar("fusionChaser_move").setInt(10, sq_GetXPos(obj)); + local currentAni = obj.getCurrentAnimation(); + local poleAniFrameNumber = sq_GetAniFrameNumber(currentAni, 0); + local delay = currentAni.getDelaySum(9, poleAniFrameNumber); + obj.setTimeEvent(0, delay / 30, 30, true); + local atkObj = obj.getVar("kksfsChaser").get_obj_vector(0); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + local zpos = 65; + if(obj.getVar("skillSub").getInt(100) == 2) zpos = 80; + sq_setCurrentAxisPos(colObj, 2, zpos); + colObj.setTimeEvent(0, delay / 30, 30, true); + } + break; + } + return true; +} + +function onTimeEvent_FusionChaser(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local baseX = obj.getVar("fusionChaser_move").getInt(10); + local v = sq_GetUniformVelocity(0, 200, timeEventCount, 30); + local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + break; + } +} + +function onEndState_FusionChaser(obj, new_state) +{ + if(!obj) return; + local size = obj.getVar("kksfsChaser").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local atkObj = obj.getVar("kksfsChaser").get_obj_vector(i); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + if(colObj.getState() == 20) colObj.setValid(false); + } + } + } +} + +function onAttack_FusionChaser(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + obj.getVar("fusioncs").setInt(10, obj.getVar("fusioncs").getInt(10) + 1); + if(obj.getVar("fusionchaser").getBool(10)){ + obj.getVar("fusionchaser").setBool(10, false); + local sub = 2,sizeRate = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 4) / 2; + if(obj.getVar("skillSub").getInt(100) < 2){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 4; + else sub = 3; + sizeRate = sizeRate * 2; + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 0, 1.0) + 100; + if(sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 10, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){ + local sub = 2; + for(local i = 0; i < sub; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(!chaserObj){ + sub = sub + 1; + continue; + } + chaserObj.setValid(false); + } + totalDamage = totalDamage * 2; + } + sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 8, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER))) / 100; + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 1)) / 100; + cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,sq_GetCenterZPos(boundingBox),obj.getDirection(),SKILL_BYKK_FUSIONCHASER,sub,totalDamage,sizeRate,0,0,0,0,0,0); + return; + } + local atkObj = obj.getVar("kksfsChaser").get_obj_vector(0); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + if(colObj.getState() == 20){ + obj.getVar("kksfsChaser").remove_obj_vector(colObj); + colObj.removeAllTimeEvent(); + colObj.getVar("tar").clear_obj_vector(); + colObj.getVar("tar").push_obj_vector(damager); + sq_setCurrentAxisPos(colObj, 0, sq_GetXPos(damager)); + sq_setCurrentAxisPos(colObj, 1, sq_GetYPos(damager) + 1); + sq_setCurrentAxisPos(colObj, 2, sq_GetCenterZPos(boundingBox)); + sq_moveWithParent(damager, colObj); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 4, 1.0) + 100; + if(sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 10, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){ + local sub = 2; + for(local i = 0; i < sub; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(!chaserObj){ + sub = sub + 1; + continue; + } + chaserObj.setValid(false); + } + totalDamage = totalDamage * 2; + } + local hitTime = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 7); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 8); + colObj.setTimeEvent(2, hitTime, -1, true); + colObj.setTimeEvent(3, lifeTime, 1, false); + sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } +} + +function checkExecutableSkill_Goddnessofwar(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GODDNESSOFWAR); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GODDNESSOFWAR, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Goddnessofwar(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Goddnessofwar(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(237); + obj.sq_PlaySound("R_WZ_PRECENCIA_GODDNESSOFWAR"); + obj.sq_PlaySound("PRECENCIA_GODDNESSOFWAR"); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Goddnessofwar_Body", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(273); + + obj.sq_PlaySound("TEANA_CHANGE_CAST"); + obj.sq_PlaySound("GODDESWAR"); + obj.sq_PlaySound("R_WZ_GODDNESSOFWAR"); + } + break; + case 3: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(218); + obj.sq_PlaySound("R_WZ_PRECENCIA_CHASER_EVOLUTION"); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Wink1", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + } + obj.sq_PlaySound("WZ_EVOLUTIONCHASER_START"); + } + break; + case 4: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Wink2", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + } + obj.sq_PlaySound("WZ_EVOLUTIONCHASER_LAUNCH"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); + changeBattlemageChaser(obj, 0); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) return; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASEREVOLUTION, false, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut", true); + addAppendage.setEnableIsBuff(true); + addAppendage.setBuffIconImage(74); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASEREVOLUTION, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + changeBattlemageChaser(obj, 1); + } + break; + } +} + +function onEndCurrentAni_Goddnessofwar(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local apdPath = "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_GODDNESSOFWAR, false, apdPath, true); + setDamageRate_BattleMage_bykk(obj); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_GODDNESSOFWAR); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_GODDNESSOFWAR, 0, skill_level); + if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_GODDNESSOFWAR, skill_level); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + + local rad = sq_GetLevelData(obj, 7, 1, sq_GetSkillLevel(obj, 7)) / 10; + obj.getVar("apGetSetbyKK").setInt(0, rad); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_BYKK_GODDNESSOFWAR, STATE_PRIORITY_AUTO, true); + } + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } + +} + +function onProcCon_Goddnessofwar(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Goddnessofwar(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + if(obj.getVar("skillSub").getInt(100) == 2){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); + changeBattlemageChaser(obj, 0); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) return; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASEREVOLUTION, false, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut", true); + addAppendage.setEnableIsBuff(true); + addAppendage.setBuffIconImage(74); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASEREVOLUTION, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION)); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + changeBattlemageChaser(obj, 1); + } + } + break; + } + return true; +} + +function onTimeEvent_Goddnessofwar(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Goddnessofwar(obj, new_state) +{ + if(!obj) return; +} + + + + + +function checkExecutableSkill_HandStrike(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HANDSTRIKE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HandStrike(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HandStrike(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HANDSTRIKE); + obj.getVar("handstrike_move").setBool(100, false); + obj.getVar("handstrike_bool").setBool(0, true); + obj.getVar("handstrike_bool").setBool(1, true); + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(240); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Handstrike", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(4); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HANDSTRIKE); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 1, skillLevel); + local change = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 10, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + local bForce = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 2, skillLevel); + sq_SetCurrentAttacknBackForce(attackInfo, bForce); + sq_SetCurrentAttacknUpForce(attackInfo, 600); + + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + break; + case 1: + obj.sq_SetCurrentAnimation(239); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + break; + case 2: + obj.sq_SetCurrentAnimation(238); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HANDSTRIKE); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 1, skillLevel); + local change = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 10, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + local bForce = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 2, skillLevel); + sq_SetCurrentAttacknBackForce(attackInfo, bForce); + sq_SetCurrentAttacknUpForce(attackInfo, 600); + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetVectorData(datas, 1); + print("stateTime = "+stateTime); + local speedRate = stateTime.tofloat() * 1.5; + if(speedRate <= 1000) speedRate = 1000.0; + else if(speedRate >= 2000) speedRate = 2000.0; + speedRate = 410.0 / delay * speedRate; + print("speedRate = "+speedRate); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate); + else sq_SetVelocity(obj, 0, -speedRate); + // obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); + // obj.setTimeEvent(1, delay / 20, 20, true); + break; + } +} + +function onEndCurrentAni_HandStrike(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_HandStrike(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 2) break; + local bDownKey = obj.isDownSkillLastKey(); + local frameIndex = sq_GetCurrentFrameIndex(obj); + local stateTime = obj.sq_GetStateTimer(); + if(!bDownKey && obj.getVar("handstrike_bool").getBool(1)){ + obj.getVar("handstrike_bool").setBool(1, false); + obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("handstrike_move").setInt(11, 200); + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(9); + local delay = currentAni.getDelaySum(9, 13); + //obj.setTimeEvent(0, delay / 30, 20, true); + print("stateTime = "+stateTime); + local speedRate = stateTime.tofloat() * 1.5; + if(speedRate <= 1000) speedRate = 1000.0; + else if(speedRate >= 2000) speedRate = 2000.0; + speedRate = 410.0 / delay * speedRate; + print("speedRate = "+speedRate); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate); + else sq_SetVelocity(obj, 0, -speedRate); + obj.sq_PlaySound("WZ_DASH_HIT"); + return; + } + if(frameIndex == 7){ + if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_HANDSTRIKE, 2) && obj.getVar("handstrike_bool").getBool(0)){ + obj.getVar("handstrike_bool").setBool(0, false); + obj.getVar("handstrike_move").setBool(100, true); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge31.ani", 0, 1, 50); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge32.ani", 0, 1, 50); + obj.sq_PlaySound("YELLOWD_CHARGE"); + } + } + break; + case 1: + local bDownKey = obj.isDownSkillLastKey(); + local stateTime = obj.sq_GetStateTimer(); + //if(stateTime < 200) break; + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(stateTime); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true); + break; + } + else{ + local fullchargeTime = sq_GetIntData(obj, SKILL_BYKK_HANDSTRIKE, 2); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) fullchargeTime = fullchargeTime * (100 - sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 0)) / 100; + if(stateTime >= fullchargeTime && obj.getVar("handstrike_bool").getBool(0)){ + obj.getVar("handstrike_bool").setBool(0, false); + obj.getVar("handstrike_move").setBool(100, true); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge31.ani", 0, 1, 75); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge32.ani", 0, 1, 75); + obj.sq_PlaySound("YELLOWD_CHARGE"); + } + } + break; + } +} + + +function onKeyFrameFlag_HandStrike(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_HandStrike(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local baseX = obj.getVar("handstrike_move").getInt(10); + local moveX = obj.getVar("handstrike_move").getInt(11); + if(obj.getVar("handstrike_move").getBool(100)) moveX = moveX * 150 / 100; + if(obj.getVar("skillSub").getInt(100) == 2) moveX = moveX * 150 / 100; + local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20); + local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("handstrike_move").setInt(11, 0); + } + break; + case 1: + local baseX = obj.getVar("handstrike_move").getInt(10); + local moveX = obj.getVar("handstrike_move").getInt(11); + if(obj.getVar("handstrike_move").getBool(100)) moveX = moveX * 150 / 100; + local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20); + local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else{ + obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("handstrike_move").setInt(11, 0); + } + break; + } +} + +function onEndState_HandStrike(obj, new_state) +{ + if(!obj) return; +} + + +function onAttack_HandStrike(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(obj.getVar("handstrike_move").getBool(100) == false) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(sq_getGrowType(obj) != 3) return; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HANDSTRIKE, -1, 6, 1.0); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,sq_GetZPos(damager),damager.getDirection(),SKILL_BYKK_HANDSTRIKE,1,totalDamage,group,uniqueId,0,0,0,0,0); + + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); + if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); +} + + +function checkExecutableSkill_Layofprimitive(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LAYOFPRIMITIVE); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Layofprimitive(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Layofprimitive(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://start + obj.sq_SetCurrentAnimation(288); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_front_03.ani", 0, 1, 0); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_back_08.ani", 0, -1, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_front_03.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_back_08.ani"), 0, 0); + obj.sq_PlaySound("PRECENCIA_CHANGE_SHORT"); + break; + case 1://summon + obj.sq_SetCurrentAnimation(289); + sq_flashScreen(obj, 30, 1100, 180, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_1_CAST"); + obj.sq_PlaySound("WZ_PRECENCIA_LAYOFPRIMITIVE_1_1"); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); + break; + case 2://loop + obj.sq_SetCurrentAnimation(287); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_loop_rune_00.ani", 175, 1, 75); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_loop_rune_00.ani"), 175, -75); + obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_2_SPEAR"); + obj.sq_PlaySound("R_WZ_PRECENCIA_LAYOFPRIMITIVE_1_2"); + obj.getVar("Layofprimitive_chaser").setInt(10, 0); + obj.getVar("Layofprimitive_chaser").setInt(11, 0); + local size = obj.getVar("kksChaser").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); + if(!chaserObj) continue; + local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); + local totalDamage = colObj.getVar("custom").getInt(10); + obj.getVar("Layofprimitive_chaser").setInt(10, obj.getVar("Layofprimitive_chaser").getInt(10) + 1); + obj.getVar("Layofprimitive_chaser").setInt(11, obj.getVar("Layofprimitive_chaser").getInt(11) + totalDamage); + colObj.setValid(false); + } + } + break; + case 3://end + obj.sq_SetCurrentAnimation(286); + obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_3_SHOT"); + obj.sq_PlaySound("R_WZ_PRECENCIA_LAYOFPRIMITIVE_2_1"); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_end_rune_06.ani", 175, 1, 75); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_end_rune_06.ani"), 175, -75); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAYOFPRIMITIVE, -1, 0, 1.0) + 100; + totalDamage = totalDamage + obj.getVar("Layofprimitive_chaser").getInt(11); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 4://dis + obj.sq_SetCurrentAnimation(285); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_front_03.ani", 0, 1, 0); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_back_08.ani", 0, -1, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_back_08.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_front_03.ani"), 0, 0); + obj.sq_PlaySound("PRECENCIA_CHANGE_END"); + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + switch(subState){ + case 1: speedRate = 2900 / currentAni.getDelaySum(0, 0); break; + case 2: speedRate = 5500 / currentAni.getDelaySum(0, 0); break; + case 3: speedRate = 6000 / currentAni.getDelaySum(0, 0); break; + case 4: speedRate = 4300 / currentAni.getDelaySum(0, 0); break; + } + print("speedRate = "+speedRate); + if(speedRate > 200){ + currentAni.setSpeedRate(200.0); + } + if(subState == 2){ + local currentAni = obj.getCurrentAnimation(); + obj.sq_SetXScrollStart(300, currentAni.getDelaySum(false)); + } +} + +function onEndCurrentAni_Layofprimitive(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_AUTO, true); + break; + case 3: + if(obj.getVar("skillSub").getInt(100) != 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_AUTO, true); + break; + } + case 4: + obj.sq_SetXScrollStop(0); + local chaserNum = obj.getVar("Layofprimitive_chaser").getInt(10); + if(chaserNum > 0){ + for(local i = 0; i < chaserNum; i++){ + createBattlemageChaser(obj); + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Layofprimitive(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Layofprimitive(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1001: + sq_flashScreen(obj, 50, 100, 100, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1002: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_summon_attack_15.ani", 0, 1, 0); + break; + case 1003: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_summon_attack_16.ani", 0, 1, 0); + break; + case 1004: + sq_SetMyShake(obj, 3, 100); + break; + case 1005: + sq_flashScreen(obj, 30, 60, 120, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_flashScreen(obj, 30, 90, 30, 127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 30, 200); + break; + } + return true; +} + +function onTimeEvent_Layofprimitive(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Layofprimitive(obj, new_state) +{ + if(!obj) return; +} + + + +function checkExecutableSkill_PokeThrow(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_POKETHROW); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.getVar("dirBool").setBool(0, false); + obj.getVar("pokethrowTar").clear_obj_vector(); + obj.getVar("pokethrowTar_fix").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_PokeThrow(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_PokeThrow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Pokethrowtry", false, false); + obj.setCurrentAnimation(Ani); + } + else if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(246); + } + else{ + obj.sq_SetCurrentAnimation(6); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 0, skillLevel); + local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + local speed = 2.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Pokethrowsmash", false, false); + obj.setCurrentAnimation(Ani); + } + else if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(245); + } + else{ + obj.sq_SetCurrentAnimation(7); + } + if(obj.getVar("dirBool").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local speed = 2.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(false) / 3; + obj.setTimeEvent(0, delay, 1, false); + obj.setTimeEvent(1, delay * 2, 1, false); + local size = obj.getVar("pokethrowTar").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut"); + if(!addAppendage) continue; + sq_MoveToAppendageForce(targetObj, obj, obj, 0, 0, 100, delay, true, addAppendage); + } + } + break; + case 2: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Pokethrowsmashfront", false, false); + obj.setCurrentAnimation(Ani); + } + else if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(244); + } + else{ + obj.sq_SetCurrentAnimation(272); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); + local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 2, skillLevel)) / 1000.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(false) / 3 * 2; + obj.setTimeEvent(1, delay, 1, false); + break; + } +} + +function onEndCurrentAni_PokeThrow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("pokethrowTar_fix").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_AUTO, true); + } + else if(obj.getVar("pokethrowTar").get_obj_vector_size() > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_AUTO, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_PokeThrow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState == 0){ + if(obj.getVar("dirBool").getBool(0) == false){ + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection()== ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("dirBool").setBool(0, true); + } + } +} + +function onKeyFrameFlag_PokeThrow(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_PokeThrow(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(false) / 3; + local size = obj.getVar("pokethrowTar").get_obj_vector_size(); + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i); + if(targetObj){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut"); + if(!addAppendage) continue; + sq_MoveToAppendageForce(targetObj, obj, obj, 125, 0, 0, delay, true, addAppendage); + } + } + break; + case 1: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_POKETHROW, -1, 1, 1.0) + 100; + local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 3, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 1); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,125,0,0,obj.getDirection(),SKILL_BYKK_POKETHROW,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 2: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_POKETHROW, -1, 4, 1.0) + 100; + local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 3, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 1); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,125,0,0,obj.getDirection(),SKILL_BYKK_POKETHROW,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } +} + +function onEndState_PokeThrow(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_POKETHROW){ + local size = obj.getVar("pokethrowTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut"); + } + } + } +} + +function onAttack_PokeThrow(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut")){ + if(!obj.getVar("pokethrowTar").is_obj_vector(damager)) obj.getVar("pokethrowTar").push_obj_vector(damager); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); + } + } + else{ + if(!obj.getVar("pokethrowTar_fix").is_obj_vector(damager)) obj.getVar("pokethrowTar_fix").push_obj_vector(damager); + } + + if(sq_getGrowType(obj) != 3) break; + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); + if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); + } + break; + } +} + + + +function checkExecutableSkill_Precencia(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRECENCIA); + if (isUse){ + local subState = 0; + local skill = sq_GetSkill(obj, SKILL_BYKK_PRECENCIA); + if(!skill.isSealFunction()) subState = 2; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_IGNORE_FORCE, true); + obj.startSkillCoolTime(SKILL_BYKK_PRECENCIA, sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA), -1); + return true; + } + return false; +} + +function checkCommandEnable_Precencia(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Precencia(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://二覺化身 + obj.sq_SetCurrentAnimation(93); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); + } + changeBattlemageChaser(obj, 2); + break; + case 2://三覺化身 + obj.sq_SetCurrentAnimation(210); + obj.sq_PlaySound("PRECENCIA_CHANGE_SHORT"); + obj.sq_PlaySound("R_WZ_PRECENCIA_CHANGE"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); + } + changeBattlemageChaser(obj, 3); + obj.setObjectHeight(10); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_release_back_08.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_release_front_03.ani", 0, 1, 0); + break; + case 1://解除化身 + local sub = obj.sq_GetVectorData(datas, 1); + switch(sub){ + case 0://二覺 + local Ani = getCurrentAnimation_precencia(obj, "avatarend_body", false, false); + obj.setCurrentAnimation(Ani); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/avatar/avatarend_eff_00.ani", 0, 1, 0); + sq_flashScreen(obj,700,100,300,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); + } + break; + case 1://三覺主動解除 + obj.sq_SetCurrentAnimation(209); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_finish_return_back_08.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_finish_return_front_03.ani", 0, 1, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); + } + break; + } + changeBattlemageChaser(obj, 0); + break; + case 10: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(206); + // for(local i = 0; i < 20000; i++){ + // obj.stopSound(i); + // } + obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_1"); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "battlemageattack1", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + obj.sq_SetCurrentAnimation(9); + } + } + obj.getVar("attackBool").setBool(10, false); + obj.getVar("attackBool").setBool(12, false); + break; + case 11: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(207); + obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_2"); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "battlemageattack2", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + obj.sq_SetCurrentAnimation(10); + } + obj.sq_PlaySound("R_WZ_ATK"); + } + obj.getVar("attackBool").setBool(10, false); + obj.getVar("attackBool").setBool(13, false); + break; + case 12: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(208); + obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_3"); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "battlemageattack3", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + obj.sq_SetCurrentAnimation(11); + } + obj.sq_PlaySound("R_WZ_ATK"); + } + break; + case 20: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + obj.sq_SetCurrentAnimation(218); + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + local Ani = getCurrentAnimation_precencia(obj, "Buff", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + } + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local castTime = currentAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, castTime, true); + break; + case 21: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } + if(subState >= 10 && subState <= 12){ + local speed = 1.3; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 2.5; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local atkIndex = [53,54,55]; + local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) + 100; + if(sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ENABLEFINISHATTACK, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK))) / 1000; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState - 10])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + } +} + + +function onEndCurrentAni_Precencia(obj) +{ + if(!obj) return; + //if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_PlaySound("AVATAR_AURA_LOOP", 2333); + local apdPath = "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 0, skillLevel); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_PRECENCIA, skillLevel); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + local hpMax = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 1, skillLevel); + local allDefense = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 2, skillLevel); + local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 3, skillLevel); + local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 4, skillLevel); + local allactTolerance = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 5, skillLevel); + local change_appendage = addAppendage.sq_getChangeStatus("precencia"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("precencia",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allactTolerance).tofloat()); + } + obj.sq_SetSuperArmorUntilTime(obj, buffTime); + if(sq_GetIntData(obj, SKILL_BYKK_PRECENCIA, 15) > 0) addAppendage.getVar("setFail").setBool(0, true); + + local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 + if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 + sq_SetParameterOcularSpectrum(spectrumAppendage, 300, 75, true, sq_RGBA(255, 244, 77, 75), sq_RGBA(255, 244, 77, 0), 2, 2, 2);//設置效果 + + local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"); + if(goddAppendage) goddAppendage.getVar().setBool(100, true); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 2: + obj.sq_PlaySound("AVATAR_AURA_LOOP", 2333); + local apdPath = "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 0, skillLevel); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_PRECENCIA, skillLevel); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + local hpMax = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 1, skillLevel); + local allDefense = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 2, skillLevel); + local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 3, skillLevel); + local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 4, skillLevel); + local allactTolerance = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 5, skillLevel); + local change_appendage = addAppendage.sq_getChangeStatus("precencia"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("precencia",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allactTolerance).tofloat()); + } + obj.sq_SetSuperArmorUntilTime(obj, buffTime); + if(sq_GetIntData(obj, SKILL_BYKK_PRECENCIA, 15) > 0) addAppendage.getVar("setFail").setBool(0, true); + + local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 + if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 + sq_SetParameterOcularSpectrum(spectrumAppendage, 300, 75, true, sq_RGBA(255, 244, 77, 75), sq_RGBA(255, 244, 77, 0), 2, 2, 2);//設置效果 + + local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"); + if(goddAppendage) goddAppendage.getVar().setBool(100, true); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); + } + case 10: + case 11: + case 12: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 20: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + local apdPath = "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); + local skillLevel = sq_GetSkillLevel(obj, 2); + local buffTime = sq_GetLevelData(obj, 2, 0, 2); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 2, skillLevel); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(21); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); + } + break; + case 21: + local apdPath = "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); + local skillLevel = sq_GetSkillLevel(obj, 2); + local buffTime = sq_GetLevelData(obj, 2, 0, 2); + addAppendage.sq_SetValidTime(buffTime); + addAppendage.setEnableIsBuff(true); + addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 2, skillLevel); + CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Precencia(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + case 11: + if(obj.getVar("attackBool").getBool(subState) == false){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("attackBool").setBool(subState, true); + } + if(obj.getVar("attackBool").getBool(subState)){ + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + local currentT = sq_GetCurrentTime(pAni); + if(currentT >= delaySum * 90 / 100){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); + } + } + case 12: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + local speedRate = [0,300,30]; + if((obj.getVar("attackBool").getBool(12) && subState >= 10) || (obj.getVar("attackBool").getBool(13) && subState >= 11)) break; + if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ + if(obj.getVar("attackBool").getBool(12) == false) obj.getVar("attackBool").setBool(12, true); + if(obj.getVar("attackBool").getBool(13) == false) obj.getVar("attackBool").setBool(13, true); + } + else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)) speedRate = [0, 500, 80]; + if(obj.getDirection() == ENUM_DIRECTION_RIGHT && speedRate[subState - 10] > 0) sq_SetVelocity(obj, 0, speedRate[subState - 10].tofloat()); + else if(obj.getDirection() == ENUM_DIRECTION_LEFT && speedRate[subState - 10] > 0) sq_SetVelocity(obj, 0, -speedRate[subState - 10].tofloat()); + break; + } +} + +function onKeyFrameFlag_Precencia(obj, flagIndex) +{ + if(!obj) return false; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + sq_flashScreen(obj, 100, 0, 50, 178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 100); + break; + case 1: + switch(flagIndex){ + case 111: obj.sq_PlaySound("PRCENCIA_AVATAR_CAST"); break; + case 201: obj.sq_PlaySound("AVATAR_FINISH_CAST"); break; + case 202: sq_flashScreen(obj, 0, 80, 80, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 203: + obj.sq_PlaySound("WZ_AVATAR_FINISH"); + obj.sq_PlaySound("AVATAR_FINISH"); + sq_flashScreen(obj, 80, 0, 166, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); + sq_SetMyShake(obj, 5, 240); + break; + case 301: sq_flashScreen(obj, 0, 80, 80, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("AVATAR_FINISH_CAST"); break; + case 302: sq_flashScreen(obj, 60, 60, 420, 204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); sq_SetMyShake(obj, 8, 160); obj.sq_PlaySound("AVATAR_FINISH"); break; + case 303: obj.sq_PlaySound("AVATAR_FINISH"); break; + } + break; + case 2: + switch(flagIndex){ + case 101: sq_flashScreen(obj, 150, 0, 0, 76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + } + break; + case 10: obj.sq_PlaySound("R_PRECENCIA_WEAPONSWING"); break; + case 11: obj.sq_PlaySound("PRECENCIA_WEAPONSWING"); break; + case 12: obj.sq_PlaySound("PRECENCIA_WEAPONSWING"); break; + } + return true;// +} + +function onTimeEvent_Precencia(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/avatar_inishxx1_26.ani", 0, 1, 0); + break; + } +} + +function onEndState_Precencia(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_PRECENCIA){ + sq_EndDrawCastGauge(obj); + } +} + +function onAttack_Precencia(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(obj.getSkillSubState() != 12) return; + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); + if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); +} + + +function checkExecutableSkill_Quasarexplosion(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_QUASAREXPLOSION); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_QUASAREXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Quasarexplosion(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Quasarexplosion(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 0){ + obj.sq_SetCurrentAnimation(290); + obj.sq_PlaySound("WZ_QUASAR_EXPLOSION_READY"); + } + else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(292); + else if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "QuasarExplosionPrecencia_Start_Normal", false, false); + obj.setCurrentAnimation(Ani); + } + obj.sq_PlaySound("PRECENCIA_QUASAR_1_CAST"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(294); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 6000 / delay; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_QUASAREXPLOSION, -1, 0, 1.0) + 100; + if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 4)) / 1000; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_QUASAREXPLOSION,1,totalDamage,speedRate,0,0,0,0,0,0); + obj.sq_PlaySound("WZ_PRECENCIA_QUASAR_1_01"); + obj.setTimeEvent(0, 500 / speedRate, 1, false); + break; + case 2: + if(obj.getVar("skillSub").getInt(100) == 0){ + obj.sq_SetCurrentAnimation(291); + } + else if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(293); + } + else if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "QuasarExplosionPrecencia_Normal_End", false, false); + obj.setCurrentAnimation(Ani); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getVar("skillSub").getInt(100) < 2){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 6100 / delay; + local aniPath = ["character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_00.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_01.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_02.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_03.ani"]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + } + break; + } +} + +function onEndCurrentAni_Quasarexplosion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_QUASAREXPLOSION, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Quasarexplosion(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Quasarexplosion(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_start_normal_02.ani", 0, 1, 0); break; + case 102: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_start_normal_03.ani", 0, 1, 0); break; + } + return true; +} + +function onTimeEvent_Quasarexplosion(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + switch(obj.getVar("skillSub").getInt(100)){ + case 0: obj.sq_PlaySound("WZ_QUASAR_EXPLOSION_FIN"); break; + case 2: obj.sq_PlaySound("WZ_PRECENCIA_QUASAR_2_01"); break; + } + break; + } +} + +function onEndState_Quasarexplosion(obj, new_state) +{ + if(!obj) return; +} + + + + +function checkExecutableSkill_RandomPierceStrike(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMPIERCESTRIKE); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_RandomPierceStrike(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_RandomPierceStrike(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(249); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeTry", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + obj.sq_SetCurrentAnimation(12); + } + obj.sq_PlaySound("WZ_THUNDER_01", 2333); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 6, skillLevel); + obj.getVar("rdps").setInt(10, hitMax); + obj.getVar("rdps").setInt(11, 0); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 0, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(248); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 9, skillLevel); + obj.setTimeEvent(0, hitTime, -1, false); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeLoop", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + obj.sq_SetCurrentAnimation(13); + } + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/randompiercestrike/hit.ani"), 200, -40); + } + break; + case 2: + obj.removeAllTimeEvent(); + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(247); + obj.sq_PlaySound("PRECENCIA_PIERCESTRIKE_2_FINISH"); + obj.sq_PlaySound("R_WZ_PRECENCIA_PIERCESTRIKE_2"); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeFinish", false, false); + obj.setCurrentAnimation(Ani); + } + else{ + obj.sq_SetCurrentAnimation(14); + } + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/randompiercestrike/swing.ani"), 0, 0); + obj.stopSound(2333); + obj.sq_PlaySound("WZ_THUNDER_02"); + obj.setTimeEvent(1, 100, 1, false); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 2, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + + local speed = 1.35; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); +} + +function onEndCurrentAni_RandomPierceStrike(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.resetHitObjectList(); + obj.sq_IntVectClear(); + if(obj.getVar("rdps").getInt(11) >= obj.getVar("rdps").getInt(10) - 1 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 11, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE)) > 0) obj.sq_IntVectPush(2); + else{ + obj.sq_IntVectPush(1); + obj.getVar("rdps").setInt(11, obj.getVar("rdps").getInt(11) + 1); + } + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_RandomPierceStrike(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + // sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); + } + if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.stopSound(2333); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_RandomPierceStrike(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1001: + sq_SetMyShake(obj, 8, 80); + break; + } + return true; +} + +function onTimeEvent_RandomPierceStrike(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + if(timeEventCount >= obj.getVar("rdps").getInt(10) - 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); + } + else obj.resetHitObjectList(); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/randompiercestrike/dust.ani", 0, 0, 0); + break; + } +} + +function onEndState_RandomPierceStrike(obj, new_state) +{ + if(!obj) return; +} + + + + +function checkExecutableSkill_RandomPierceStrikeEx(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMPIERCESTRIKEEX); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + if(RANDOMPIERCESTRIKEEX_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.getVar("RandomPierceStrikeEx_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_RandomPierceStrikeEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_RandomPierceStrikeEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeTry", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(12); + obj.sq_PlaySound("WZ_THUNDER_01", 2333); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 7, skillLevel); + obj.getVar("rdpsex").setInt(10, hitMax); + obj.getVar("rdpsex").setInt(11, 0); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 3, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeLoopEx", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(56); + obj.setTimeEvent(2, 100, -1, false); + break; + case 2: + if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeChargeEx", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(57); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/charge_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/charge_light_dodge.ani"), 0, 0); + break; + case 3: + if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeFinishEx", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(58); + obj.removeAllTimeEvent(); + obj.stopSound(2333); + obj.sq_PlaySound("WZ_THUNDER_02"); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/bluelight_dodge1.ani"), 180, -40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/bluelight_dodge2.ani"), 180, -40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/end_dodge.ani"), 180, -40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/glow_dodge.ani"), 180, -40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/redlight_dodge.ani"), 180, -40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/shadow_dodge.ani"), 180, -40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/shadow_normal.ani"), 180, -40); + break; + case 10: + obj.sq_SetCurrentAnimation(251); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 7, skillLevel); + obj.getVar("rdpsex").setInt(10, hitMax); + obj.getVar("rdpsex").setInt(11, 0); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 3, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8); + obj.setTimeEvent(1, hitTime, -1, false); + break; + case 11: + obj.sq_SetCurrentAnimation(252); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0); + break; + case 12: + obj.sq_SetCurrentAnimation(253); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0); + break; + case 13: + obj.sq_SetCurrentAnimation(254); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0); + break; + case 14: + obj.removeAllTimeEvent(); + obj.sq_SetCurrentAnimation(250); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + + local speed = 1.35; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + if(subState == 1){ + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(false), -1, false); + local speedRate = 4000.0 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/pierce_dodge.ani", 200, 1, 40); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + } +} + +function onEndCurrentAni_RandomPierceStrikeEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.resetHitObjectList(); + obj.sq_IntVectClear(); + if(obj.getVar("rdpsex").getInt(11) >= obj.getVar("rdpsex").getInt(10) - 1 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 14, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.sq_IntVectPush(2); + else{ + obj.sq_IntVectPush(1); + obj.getVar("rdpsex").setInt(11, obj.getVar("rdpsex").getInt(11) + 1); + } + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + break; + case 3: + case 14: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + break; + case 11: + case 12: + case 13: + local pushstate = subState + 1; + if(subState == 13) pushstate = 11; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(pushstate); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_RandomPierceStrikeEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 10: + case 11: + case 12: + case 13: + if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + if(subState < 10) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(14); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + } + if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.stopSound(2333); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_RandomPierceStrikeEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1001: + print("test"); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/precencia/randompiercestrikeex_finish_02.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/precencia/randompiercestrikeex_finish_01.ani", 0, 1, 0); + sq_SetMyShake(obj, 20, 150); + break; + case 1002: + obj.sq_PlaySound("R_WZ_PRECENCIA_PIERCESTRIKE_EX_2"); + obj.sq_PlaySound("PRECENCIA_PIERCESTRIKE_EX_2_FINISH"); + break; + } + return true; +} + +function onTimeEvent_RandomPierceStrikeEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + if(timeEventCount >= obj.getVar("rdpsex").getInt(10) - 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + } + else obj.resetHitObjectList(); + break; + case 1: + if(timeEventCount >= obj.getVar("rdpsex").getInt(10) - 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(14); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); + } + else obj.resetHitObjectList(); + break; + case 2: obj.sq_PlaySound("R_P_THUNDER_ATK"); break; + } +} + +function onEndState_RandomPierceStrikeEx(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_RANDOMPIERCESTRIKEEX){ + + local size = obj.getVar("RandomPierceStrikeEx_tar").get_obj_vector_size(); + if(size > 0){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel) * 19 / 100; + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("RandomPierceStrikeEx_tar").get_obj_vector(i); + if(targetObj){ + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + cearteSkillPassive_Battlemage_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_RANDOMPIERCESTRIKEEX,1,totalDamage,group,uniqueId,0,0,0,0,0); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut"); + addAppendage.sq_SetValidTime(1000); + } + } + } + } +} + +function onAttack_RandomPierceStrikeEx(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(RANDOMPIERCESTRIKEEX_STONE < 1 && sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) < 1) return; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut")) return; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!obj.getVar("RandomPierceStrikeEx_tar").is_obj_vector(damager)) obj.getVar("RandomPierceStrikeEx_tar").push_obj_vector(damager); +} + +function checkExecutableSkill_Returntobm(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); + } + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); + // obj.sq_SendCreatePassiveObjectPacket(1008605, 0, 0, 1, 200); + obj.setObjectHeight(-1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); + } + return true; +} + +function checkCommandEnable_Returntobm(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Returntobm(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +function onEndCurrentAni_Returntobm(obj) +{ + if(!obj) return; +} + +function onProcCon_Returntobm(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Returntobm(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Returntobm(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Returntobm(obj, new_state) +{ + if(!obj) return; +} + + + +function checkExecutableSkill_StrengthHandStrike(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STRENGTHHANDSTRIKE); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STRENGTHHANDSTRIKE); + obj.getVar("shsBool").setBool(0, true); + if(STRENGTHHANDSTRIKE_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 12, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(21); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + return false; +} + +function checkCommandEnable_StrengthHandStrike(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_StrengthHandStrike(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrike", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(15); + obj.sq_PlaySound("WZ_RAIDP_01", 2332); + obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,1,0,0,0,0,0,0,0,0); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,2,0,0,0,0,0,0,0,0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + break; + case 1: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeReturn", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(16); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(2, delay / 21, 6, true); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/end_body_fade.ani", 0, 0, 0); + break; + case 10: + obj.sq_SetCurrentAnimation(261); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,11,0,0,0,0,0,0,0,0); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,12,0,0,0,0,0,0,0,0); + obj.sq_PlaySound("R_WZ_PRECENCIA_STRENGTHHANDSTRIKE_1", 2332); + obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); + break; + case 11: + obj.sq_SetCurrentAnimation(258); + break; + case 12: + obj.sq_SetCurrentAnimation(259); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(2, delay / 21, 6, true); + break; + case 21: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(262); + obj.sq_PlaySound("R_WZ_PRECENCIA_STRENGTHHANDSTRIKE_1", 2332); + obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeShootCharge", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(277); + obj.sq_PlaySound("WZ_RAIDP_01", 2332); + obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,1,0,0,0,0,0,0,0,0); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,2,0,0,0,0,0,0,0,0); + } + break; + case 22: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(260); + obj.stopSound(2332); + obj.stopSound(2333); + obj.sq_PlaySound("WZ_PRECENCIA_STRENGTHHANDSTRIKE_2"); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeShoot", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(276); + obj.stopSound(2332); + obj.stopSound(2333); + obj.sq_PlaySound("WZ_RAIDP_02"); + local size = obj.getVar("kksshs").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local shsObj = obj.getVar("kksshs").get_obj_vector(i); + if(shsObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(shsObj); + colObj.setValid(false); + } + } + } + } + break; + } + if(subState < 10){ + local speedRate = 1.0; + if(obj.getVar("skillSub").getInt(100) == 1) speedRate = 1.3; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + } +} + +function onEndCurrentAni_StrengthHandStrike(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 12: + case 22: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_StrengthHandStrike(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 10: + case 21: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + if(subState == 0 || subState == 10){ + local frameIndex = sq_GetCurrentFrameIndex(obj); + if((frameIndex == 7 && subState == 0) || (frameIndex == 2 && subState == 10)){ + local currentAni = obj.getCurrentAnimation(); + local setFrame = 8; + if(subState == 10) setFrame = 3; + currentAni.setCurrentFrameWithChildLayer(setFrame); + local size = obj.getVar("kksshs").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local shsObj = obj.getVar("kksshs").get_obj_vector(i); + if(shsObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(shsObj); + colObj.setValid(false); + } + } + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(setFrame, setFrame); + obj.getVar("shs_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("shs_move").setInt(11, 400); + obj.setTimeEvent(0, delay, 1, false); + obj.stopSound(2332); + obj.stopSound(2333); + if(subState == 0){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/strengthhandstrike/attack_short.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/strengthhandstrike/attack_long.ani"), 0, 0); + obj.sq_PlaySound("WZ_RAIDP_02"); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/start_body_fade.ani", 0, 0, 0); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + local upForce = sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); + if(obj.getVar("shsBool").getBool(0)) upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); + sq_SetCurrentAttacknUpForce(attackInfo, upForce); + } + else{ + obj.sq_PlaySound("WZ_PRECENCIA_STRENGTHHANDSTRIKE_2"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; + local upForce = sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); + if(obj.getVar("shsBool").getBool(0)) upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,170,1,120,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,20,totalDamage,upForce,0,0,0,0,0,0); + } + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_AUTO, true); + } + } + else{ + local stateTime = obj.sq_GetStateTimer(); + local fullchargeTime = sq_GetIntData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) fullchargeTime = fullchargeTime * ( 100 - sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 4)) / 100; + if(stateTime >= fullchargeTime && obj.getVar("shsBool").getBool(0)){ + obj.getVar("shsBool").setBool(0, false); + obj.sq_PlaySound("RAIDP_FULL"); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,3,0,0,0,0,0,0,0,0); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,4,0,0,0,0,0,0,0,0); + obj.sq_SetSuperArmor(POD_VAR_SUPERARMOR); + } + } + break; + } +} + +function onKeyFrameFlag_StrengthHandStrike(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1001: + sq_SetShake(obj, 10, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,56,0,63,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,21,totalDamage,100,0,0,0,0,0,0); + break; + case 2001: + sq_SetShake(obj, 10, 150); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,170,1,120,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,21,totalDamage,150,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_StrengthHandStrike(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local poleAniFrameNumber = sq_GetAniFrameNumber(currentAni, 0); + local startFrame = 9; + if(obj.getSkillSubState() == 10) startFrame = 4; + local delay = currentAni.getDelaySum(startFrame, poleAniFrameNumber); + obj.setTimeEvent(1, delay / 50, 30, true); + break; + case 1: + local v = sq_GetUniformVelocity(0, 400, timeEventCount, 30); + local dstX = sq_GetDistancePos(obj.getVar("shs_move").getInt(10), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + // obj.sq_SetXScrollStop(0); + if(timeEventCount >= 30){ + obj.getVar("shs_move").setInt(12, sq_GetXPos(obj)); + obj.sq_PlaySound("RAIDP_ATK"); + if(obj.getSkillSubState() == 0) sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/damage.ani", 50, 0, 10); + } + break; + case 2: + local v = sq_GetUniformVelocity(obj.getVar("shs_move").getInt(12), obj.getVar("shs_move").getInt(10), timeEventCount, 5); + sq_setCurrentAxisPos(obj, 0, v); + // obj.sq_SetXScrollStop(0); + break; + } +} + +function onEndState_StrengthHandStrike(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_STRENGTHHANDSTRIKE){ + local size = obj.getVar("kksshs").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local shsObj = obj.getVar("kksshs").get_obj_vector(i); + if(shsObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(shsObj); + colObj.setValid(false); + } + } + } + obj.stopSound(2332); + obj.stopSound(2333); + obj.sq_RemoveSuperArmor(POD_VAR_SUPERARMOR); + } +} + +function onAttack_StrengthHandStrike(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + sq_SetMyShake(obj, 12, 80); +} + diff --git a/user/116.205.165.25/6_mage_3.c b/user/116.205.165.25/6_mage_3.c new file mode 100644 index 0000000..21bc807 --- /dev/null +++ b/user/116.205.165.25/6_mage_3.c @@ -0,0 +1,804 @@ + + +function checkExecutableSkill_Swing(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SWING); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Swing(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Swing(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0 && obj.getVar("kksChaser").get_obj_vector_size() > 0){//太古之力 + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(264); + else if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_SetCurrentAnimation(275); + else{ + local Ani = getCurrentAnimation_precencia(obj, "SwingArmonia_Body", false, false); + obj.setCurrentAnimation(Ani); + } + if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_PlaySound("WZ_SWING"); + print(sq_GetLevelData(obj, SKILL_BYKK_SWING, 6, sq_GetSkillLevel(obj, SKILL_BYKK_SWING))); + print(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING))); + if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 6, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) < 1){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(0); + if(chaserObj) chaserObj.setValid(false); + } + } + else{//普通形態 + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(265); + else if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_SetCurrentAnimation(3); + else{ + local Ani = getCurrentAnimation_precencia(obj, "Swing", false, false); + obj.setCurrentAnimation(Ani); + } + if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_PlaySound("WZ_SWING"); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWING); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWING, 0, skillLevel); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/swing/precencia/swing_05.ani"), 0, 0); + else obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/swing.ani"), -50, 0); + } + local speed = 1.0 + (sq_GetIntData(obj, SKILL_BYKK_SWING, 0).tofloat()) / 200.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + break; + } +} + +function onEndCurrentAni_Swing(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_Swing(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Swing(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("PRECENCIA_ARMONIA_1_CAST"); + break; + case 2: + obj.sq_PlaySound("PRECENCIA_ARMONIA_2_SMASH"); + break; + case 3: + local sub = 0; + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_PlaySound("R_WZ_PRECENCIA_SMASH"); + sq_SetMyShake(obj, 3, 80); + sub = 1; + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(5, 5); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWING); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWING, 0, skillLevel); + local sizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_SWING, 7, skillLevel); + if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) > 0 && obj.getVar("kksChaser").get_obj_vector_size() > 0){ + local chaserObj = obj.getVar("kksChaser").get_obj_vector(0); + if(chaserObj) chaserObj.setValid(false); + sizeRate = sizeRate + 150; + } + if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWING,1,sub,totalDamage,delay,sizeRate,0,0,0,0); + break; + case 4://`CancelFrame` 17 0 121 + break; + } + return true; +} + +function onTimeEvent_Swing(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Swing(obj, new_state) +{ + if(!obj) return; +} + + +function checkExecutableSkill_SwingEx(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SWINGEX); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.getVar("CancelBool").setBool(0, false); + if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) > 0 && sq_GetSkill(obj, SKILL_BYKK_SWING).isInCoolTime()) obj.endSkillCoolTime(SKILL_BYKK_SWING); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SWINGEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SwingEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SwingEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(264); + } + else{ + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "SwingEx", false, false); + obj.setCurrentAnimation(Ani); + } + else obj.sq_SetCurrentAnimation(63); + obj.sq_PlaySound("WZ_SWING"); + } + break; + } + + local speed = 1.0 + (sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 18, sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX)).tofloat()) / 200.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + + if(obj.getVar("skillSub").getInt(100) != 2){ + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(0, currentAni.getDelaySum(0, 3), 1, false); + } +} + +function onEndCurrentAni_SwingEx(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_SwingEx(obj) +{ + if(!obj) return; + if(obj.getVar("CancelBool").getBool(0)){ + local skillIndex = [SKILL_BYKK_DOUBLESWING,SKILL_BYKK_SWING,SKILL_BYKK_RANDOMPIERCESTRIKE, SKILL_BYKK_RANDOMPIERCESTRIKEEX, SKILL_BYKK_CHASERSEXPLOSION,SKILL_BYKK_STRENGTHHANDSTRIKE,SKILL_BYKK_DRAGONSPEAR]; + for(local i = 0; i < skillIndex.len(); i++){ + if(sq_GetSkill(obj, skillIndex[i]).isInCoolTime()) continue; + obj.setSkillCommandEnable(skillIndex[i], true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + switch(skillIndex[i]){ + case SKILL_BYKK_DOUBLESWING: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_SWING: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX: + if(RANDOMPIERCESTRIKEEX_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.getVar("RandomPierceStrikeEx_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_CHASERSEXPLOSION: + local size = obj.getVar("kksChaser").get_obj_vector_size(); + if(size < 2){ + if (obj.isMessage()) sq_AddMessage(3573); + continue; + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_CHASERSEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE: + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STRENGTHHANDSTRIKE); + obj.getVar("shsBool").setBool(0, true); + if(STRENGTHHANDSTRIKE_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 12, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(21); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case SKILL_BYKK_DRAGONSPEAR: + obj.getVar("dragonspearTar").clear_obj_vector(); + obj.getVar("dragonspearTar_fix").clear_obj_vector(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONDANCE) > 0 && !sq_GetSkill(obj, SKILL_BYKK_DRAGONDANCE).isSealFunction()){ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(12); + else{ + if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + } + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + } + } + } + } +} + +function onKeyFrameFlag_SwingEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("PRECENCIA_ARMONIA_1_CAST"); + break; + case 2: + obj.sq_PlaySound("PRECENCIA_ARMONIA_2_SMASH"); + break; + case 3: + obj.sq_PlaySound("R_WZ_PRECENCIA_SMASH"); + // sq_flashScreen(obj,100,20,80,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + // sq_SetMyShake(obj, 5, 200); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 0, skillLevel); + local sizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 5, skillLevel); + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3); + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWINGEX,1,totalDamage,delay,sizeRate,0,0,0,0,0); + local time = 200 * delay / 70; + obj.setTimeEvent(1, time, 1, false); + break; + case 4://`CancelFrame` 17 0 121 + obj.getVar("CancelBool").setBool(0, true); + break; + } + return true; +} + +function onTimeEvent_SwingEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 0, skillLevel); + local sizeRate = 120 + sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 5, skillLevel); + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3)) / 100; + cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWINGEX,2,delay,sizeRate,totalDamage,0,0,0,0,0); + local time = 300 * delay / 70; + obj.setTimeEvent(1, time, 1, false); + break; + case 1: + sq_SetShake(obj, 5, 200); + break; + } +} + +function onEndState_SwingEx(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_SWINGEX){ + obj.getVar("CancelBool").setBool(0, false); + } +} + + + +function checkExecutableSkill_Thrust(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THRUST); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.getVar("CancelBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_THRUST, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Thrust(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Thrust(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Thrust", false, false); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_LEAP"); + } + else if(obj.getVar("skillSub").getInt(100) == 2){ + obj.sq_SetCurrentAnimation(268); + } + else{ + obj.sq_SetCurrentAnimation(1); + obj.sq_PlaySound("WZ_LEAP"); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THRUST); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_THRUST, 0, skillLevel); + local change = sq_GetLevelData(obj, SKILL_BYKK_THRUST, 3, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } + local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_THRUST, 1, skillLevel)) / 1000.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local pAni = obj.getCurrentAnimation(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.setTimeEvent(0, pAni.getDelaySum(0,3), 1, false); + else obj.setTimeEvent(1, 100, 1, true); + break; + } +} + +function onEndCurrentAni_Thrust(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); +} + +function onProcCon_Thrust(obj) +{ + if(!obj) return; + if(obj.getVar("CancelBool").getBool(0)){ + local skillIndex = [SKILL_BYKK_UPPERSWING, SKILL_BYKK_HANDSTRIKE, SKILL_BYKK_POKETHROW, SKILL_BYKK_DOUBLESWING,SKILL_BYKK_SWING,SKILL_BYKK_RANDOMPIERCESTRIKE, SKILL_BYKK_RANDOMPIERCESTRIKEEX,SKILL_BYKK_STRENGTHHANDSTRIKE,SKILL_BYKK_DRAGONSPEAR, SKILL_BYKK_AVATARDANCE]; + for(local i = 0; i < skillIndex.len(); i++){ + if(sq_GetSkill(obj, skillIndex[i]).isInCoolTime()) continue; + obj.setSkillCommandEnable(skillIndex[i], true); + local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); + if(b_useskill != -1){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + switch(skillIndex[i]){ + case SKILL_BYKK_UPPERSWING: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_UPPERSWING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_HANDSTRIKE: + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HANDSTRIKE); + obj.getVar("handstrike_move").setBool(100, false); + obj.getVar("handstrike_bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_POKETHROW: + obj.getVar("dirBool").setBool(0, false); + obj.getVar("pokethrowTar").clear_obj_vector(); + obj.getVar("pokethrowTar_fix").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_DOUBLESWING: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_SWING: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKE: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_RANDOMPIERCESTRIKEEX: + if(RANDOMPIERCESTRIKEEX_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.getVar("RandomPierceStrikeEx_tar").clear_obj_vector(); + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case SKILL_BYKK_STRENGTHHANDSTRIKE: + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STRENGTHHANDSTRIKE); + obj.getVar("shsBool").setBool(0, true); + if(STRENGTHHANDSTRIKE_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 12, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(21); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case SKILL_BYKK_DRAGONSPEAR: + obj.getVar("dragonspearTar").clear_obj_vector(); + obj.getVar("dragonspearTar_fix").clear_obj_vector(); + if(sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONDANCE) > 0 && !sq_GetSkill(obj, SKILL_BYKK_DRAGONDANCE).isSealFunction()){ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(12); + else{ + if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(1); + } + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + break; + case SKILL_BYKK_AVATARDANCE: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARDANCE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + } + } +} + +function onKeyFrameFlag_Thrust(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Thrust(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/thrust/thrust_04.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/thrust/thrust_05.ani", 0, 1, 0); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/thrustover.ani", 200, 1, 50); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/thrustunder.ani", 200, 1, 50); + break; + } +} + +function onEndState_Thrust(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_THRUST){ + obj.getVar("CancelBool").setBool(0, false); + } +} + +function onAttack_Thrust(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 3) return; + obj.getVar("CancelBool").setBool(0, true); + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); + if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); +} + +function checkExecutableSkill_TimerBomb(obj) +{ + if (!obj) return false; + if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TIMERBOMB); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_TIMERBOMB, STATE_PRIORITY_IGNORE_FORCE, true); + obj.startSkillCoolTime(SKILL_BYKK_TIMERBOMB, sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB), -1); + return true; + } + return false; +} + +function checkCommandEnable_TimerBomb(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_TimerBomb(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "Timerbomb", false, false); + obj.setCurrentAnimation(Ani); + } + else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(269); + else obj.sq_SetCurrentAnimation(67); + break; + } + local speed = 1.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TIMERBOMB, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + } +} + +function onEndCurrentAni_TimerBomb(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_TimerBomb(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_TimerBomb(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_TimerBomb(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_TimerBomb(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_TimerBomb(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 3, 1.0) + 100; + local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 4, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 1, skillLevel); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_TIMERBOMB, 0); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local sub = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 5, skillLevel); + local sub2 = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 6, skillLevel); + cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,sq_GetCenterZPos(boundingBox),obj.getDirection(),SKILL_BYKK_TIMERBOMB,1,totalDamage,totalDamage2,lifeTime,hitTime,group,uniqueId,sub,sub2); + } +} + +function checkExecutableSkill_UpperSwing(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_UPPERSWING); + if (isUse){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); + else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); + else obj.getVar("skillSub").setInt(100, 0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_UPPERSWING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_UpperSwing(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_UpperSwing(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + if(obj.getVar("skillSub").getInt(100) == 1){ + local Ani = getCurrentAnimation_precencia(obj, "upperswing", false, false); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_HEAVEN_HIT"); + } + else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(271); + else{ + obj.sq_SetCurrentAnimation(2); + obj.sq_PlaySound("WZ_HEAVEN_HIT"); + } + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_UPPERSWING); + local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 0, skillLevel); + local change = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 5, skillLevel); + if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + local upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 2, skillLevel); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaser.nut")) upForce = (upForce * sq_GetLevelData(obj, SKILL_BYKK_CHASER, 17, sq_GetSkillLevel(obj, SKILL_BYKK_CHASER)) * 0.4 / 100).tointeger(); + print("upForce = "+upForce); + sq_SetCurrentAttacknUpForce(attackInfo, upForce); + + attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); + sq_SetAddWeaponDamage(attackInfo, true); + + local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 1, skillLevel)) / 1000.0; + if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; + else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; + print(speed); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + obj.setTimeEvent(0, delaySum / 50, 50, true); + obj.getVar("upswing_move").setInt(0, 0); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("upswing_move").setInt(0, 1); + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("upswing_move").setInt(0, 2); + obj.getVar("upswing_move").setInt(10, sq_GetXPos(obj)); + obj.getVar("upswing_move").setInt(11, sq_GetYPos(obj)); + obj.getVar("upswing_move").setInt(12, 200); + break; + } +} + +function onEndCurrentAni_UpperSwing(obj) +{ + if(!obj) return; + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); +} + +function onProcCon_UpperSwing(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_UpperSwing(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_UpperSwing(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local baseX = obj.getVar("upswing_move").getInt(10); + local baseY = obj.getVar("upswing_move").getInt(11); + local v = sq_GetUniformVelocity(0, obj.getVar("upswing_move").getInt(12), timeEventCount, 50); + local vy = 0; + if(obj.getVar("upswing_move").getInt(0) == 1) vy = sq_GetUniformVelocity(0, -30, timeEventCount, 25); + else if(obj.getVar("upswing_move").getInt(0) == 2) vy = sq_GetUniformVelocity(0, 30, timeEventCount, 25); + if(timeEventCount > 25){ + if(obj.getVar("upswing_move").getInt(0) == 1) vy = sq_GetUniformVelocity(0, 40, timeEventCount - 25, 25); + else if(obj.getVar("upswing_move").getInt(0) == 2) vy = sq_GetUniformVelocity(0, -40, timeEventCount - 25, 25); + } + local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))){ + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, baseY + vy); + } + else{ + obj.getVar("upswing_move").setInt(12, v); + } + break; + } +} + +function onEndState_UpperSwing(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_BYKK_UPPERSWING){ + sq_SimpleMoveToNearMovablePos(obj, 1200); + } +} + +function onAttack_UpperSwing(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(isStuck) return; + if(sq_getGrowType(obj) != 3) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); + if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); +} + + +/////////////////////////battlemage_end/////////////////////// + + diff --git a/user/116.205.165.25/6_mage_4.c b/user/116.205.165.25/6_mage_4.c new file mode 100644 index 0000000..2e5e772 --- /dev/null +++ b/user/116.205.165.25/6_mage_4.c @@ -0,0 +1,3012 @@ + + +/////////////////////////elementalmaster////////////////////// + + +function setState_elementalmaster_bykk(obj, state, datas, isResetTimer) +{ + if(state == 17 && sq_GetVectorData(datas, 0) == 29){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(state == 17 && sq_GetVectorData(datas, 0) == 2){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ASSIMILATE, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + +function onAfterSetState_Throw_elementalmaster_bykk(obj, state, datas, isResetTimer) +{ + local ThrowIndex = obj.getThrowIndex(); + local throwState = obj.getThrowState(); + + local Mightyrune_T = + {//light,ice,fire,dark + [15] = [0,0,1,0], + [16] = [0,1,0,0], + [18] = [0,0,0,1], + [17] = [1,0,0,0], + [57] = [0,0,1,0], + [56] = [0,1,0,0], + [26] = [0,0,0,1], + [31] = [1,0,0,0], + [27] = [0,0,1,0], + [59] = [0,1,0,0], + [55] = [1,0,0,0], + [58] = [0,0,0,1] + } + + if(throwState == 0 && Mightyrune_T.rawin(ThrowIndex)){ + switch(ThrowIndex){ + case 15: + case 26: + case 58: + case 59: + case 27: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_IntVectPush(ThrowIndex); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 16: + case 31: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(20); + obj.sq_IntVectPush(ThrowIndex); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 17: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(30); + obj.sq_IntVectPush(ThrowIndex); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 18: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(40); + obj.sq_IntVectPush(ThrowIndex); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 57: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_FLAMESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); + break; + case 55: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERCALLING, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + return; + } + + if(throwState == 1 && Mightyrune_T.rawin(ThrowIndex)){ + sq_BinaryStartWrite(); + foreach(elsement in Mightyrune_T[ThrowIndex]){ + sq_BinaryWriteDword(elsement); + } + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + if(ThrowIndex == 56){ + elementalmaster_setelementSkillBonusRate(obj, 56); + } + else if(ThrowIndex == 74){ + elementalmaster_setelementSkillBonusRate(obj, 74); + } + } +} + +function onEndCurrentAni_Mage_Throw_elementalmaster(obj) +{ +} + +function reset_elementalmaster_bykk(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"appendage/character/ap_common_suck.nut"); + if(!addAppendage) return; + CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/character/ap_common_suck.nut"); + local size = obj.getVar("blackhole").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local bhObj = obj.getVar("blackhole").get_obj_vector(i); + if(bhObj) bhObj.setValid(false); + } + } + obj.getVar("blackhole").clear_obj_vector(); +} + +function onChangeSkillEffect_Mage_elementalmaster(obj, skillIndex, reciveData) +{ + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN: + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + if(!addAppendage) return; + local pushstate = 22; + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_MIGHTYRUNE) > 0) pushstate = 25; + local assimilate_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE); + local buff1 = reciveData.readDword(); + local buff2 = reciveData.readDword(); + local buff3 = reciveData.readDword(); + local buff4 = reciveData.readDword(); + local buffnum = []; + local buffname = ["","light","ice","fire","dark"]; + if(buff1 > 0) buffnum.push(1); + if(buff2 > 0) buffnum.push(2); + if(buff3 > 0) buffnum.push(3); + if(buff4 > 0) buffnum.push(4); + for(local i = 0; i < buffnum.len(); i++){ + local anum = buffnum[i]; + addAppendage.getVar().setBool(anum, true); + local effectObj = obj.getVar("elementalchain_"+buffname[anum]).get_obj_vector(0); + if(effectObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); + if(assimilate_level > 0){ + local pooledObj = createOnlyDrawObject_elementalmaster_bykk(obj,"character/mage/effect/animation/elementalmaster_bykk/mightyrune/lv95assimilate/"+buffname[anum]+"activate_00.ani",true,colObj.getDirection(),sq_GetXPos(colObj),sq_GetYPos(colObj) + 1,sq_GetZPos(colObj) + 1,ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(colObj, pooledObj); + } + else colObj.addSetStatePacket(pushstate, null, STATE_PRIORITY_AUTO, false, ""); + } + } + setElementalChainBuff_bykk(obj,skillIndex,addAppendage); + break; + } +} + +function onStartDungeon_Elementalmaster_bykk(obj) +{ + local loadSlot = obj.sq_GetSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); + if(loadSlot) obj.sq_RemoveSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + if(!addAppendage) return; + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(!addAppendage2) return; + addAppendage2.getVar().setBool(0, false); +} + +function setElementalChainBuff_bykk(obj,skillIndex,addAppendage) +{ + return; + // local skillLevel = sq_GetSkillLevel(obj, skillIndex); + // local buff_num = []; + // if(addAppendage.getVar().getBool(1)) buff_num.push(1); + // if(addAppendage.getVar().getBool(2)) buff_num.push(1); + // if(addAppendage.getVar().getBool(3)) buff_num.push(1); + // if(addAppendage.getVar().getBool(4)) buff_num.push(1); + // local value1 = 0; + // switch(buff_num.len()){ + // case 1: value1 = sq_GetLevelData(obj, skillIndex, 6, skillLevel); break; + // case 2: value1 = sq_GetLevelData(obj, skillIndex, 7, skillLevel); break; + // case 3: value1 = sq_GetLevelData(obj, skillIndex, 8, skillLevel); break; + // case 4: value1 = sq_GetLevelData(obj, skillIndex, 9, skillLevel); break; + // } + // local change_appendage = addAppendage.sq_getChangeStatus("elementalchain"); + // if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("elementalchain",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK,true, value1); + // if(change_appendage){ + // change_appendage.clearParameter(); + // if(value1 > 0){ + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.01).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.01).tofloat()); + // } + // } +} + +function onStart_appendage_elementmastery_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); + local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 4, skillLevel); + local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 5, skillLevel); + local mightyrune_level = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); + if(mightyrune_level > 0){ + local add_Rate = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 3, mightyrune_level); + value1 = value1 * (1000 + add_Rate) / 1000; + } + local change_appendage = appendage.sq_getChangeStatus("elementmastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("elementmastery",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + //change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); + //change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (value2).tofloat()); + } +} + +function onStart_appendage_assimilate_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + // local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ASSIMILATE); + // local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ASSIMILATE, 0, skillLevel); + // local change_appendage = appendage.sq_getChangeStatus("assimilate"); + // if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("assimilate",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + // if(change_appendage){ + // change_appendage.clearParameter(); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + // } +} + +function onStart_appendage_elementalpotential_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); + local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 7, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("elementalpotential"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("elementalpotential",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + } +} + +function onStart_appendage_elementalweak_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} + + local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTALWEAK); + local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 5, skillLevel); + local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 6, skillLevel); + local mightyrune_level = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); + if(mightyrune_level > 0){ + local add_Rate = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 2, mightyrune_level); + value2 = value2 * (1000 + add_Rate) / 1000; + } + local change_appendage = appendage.sq_getChangeStatus("elementalweak"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("elementalweak",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (value2 * 0.1).tofloat()); + } +} + +function onAttackParent_appendage_elementalweak(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + return; + if(isStuck) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!obj || obj.getState() == STATE_DIE) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local maxLoad = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 0); + local skillLevel = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK); + local decrease = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 0, skillLevel); + local time = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 2, skillLevel); + local attackInfo = sq_GetCurrentAttackInfo(realAttacker); + local element = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; + local element2 = ["attack_fire","attack_ice","attack_dark","attack_light"]; + for(local i = 0; i < 4; i++){ + if(attackInfo.isValidElement(element[i])){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, ELEMENTALWEAKDEBUFF_APDPATH); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, ELEMENTALWEAKDEBUFF_APDPATH, true); + addAppendage.getVar("custom").setInt(10, maxLoad); + addAppendage.getVar("custom").setInt(11, decrease); + addAppendage.getVar("custom").setInt(12, time); + } + for(local ui = 10; ui < 10 + maxLoad; ui++){ + if(addAppendage.getVar(element2[i]).getBool(ui) == false){ + addAppendage.getVar(element2[i]).setBool(ui, true); + } + } + } + } +} + +function proc_appendage_elementalweakdebuff(appendage) +{ + if(!appendage) return; + local targetObj = appendage.getParent(); + local sqrChr = appendage.getSource(); + targetObj = sq_GetCNRDObjectToActiveObject(targetObj); + sqrChr = sq_GetCNRDObjectToSQRCharacter(sqrChr); + if(!targetObj || targetObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local maxLoad = appendage.getVar("custom").getInt(10); + local decrease = appendage.getVar("custom").getInt(11); + local time = appendage.getVar("custom").getInt(12); + + local element = ["attack_fire","attack_ice","attack_dark","attack_light"]; + for(local i = 0; i < element.len(); i++){ + local timer = appendage.getVar(element[i]).get_ct_vector(0); + if(!timer){ + appendage.getVar(element[i]).clear_ct_vector(); + appendage.getVar(element[i]).push_ct_vector(); + timer = appendage.getVar(element[i]).get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + local currentT = timer.Get(); + if(currentT >= time){ + for(local oi = 0; oi < maxLoad; oi++){ + appendage.getVar(element[i]).setBool(10 + oi, false); + appendage.getVar(element[i]).setBool(20 + oi, false); + } + timer.Reset(); + timer.Start(10000,0); + } + for(local ui = 0; ui < maxLoad; ui++){ + if(appendage.getVar(element[i]).getBool(10 + ui) && appendage.getVar(element[i]).getBool(20 + ui) == false){ + appendage.getVar(element[i]).setBool(20 + ui, true); + local ap = sq_CreateChangeStatus(20 + i, false, -decrease.tofloat() , 0); + if (ap){ + ap.getAppendageInfo().setValidTime(time); + ap.sq_Append(targetObj, sqrChr); + } + } + } + } + + +} + +function useSkill_before_Mage_elementalmaster_bykk(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) +{ + //printp(" consumpMp:" + consumeMp + " oldSkillMpRate:" + oldSkillMpRate); + local skillLevel = obj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); + if(skillLevel > 0){ + local mpComsumeRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 3, skillLevel); + if(oldSkillMpRate != 1.0) oldSkillMpRate = 1.0; + local newMpRate = oldSkillMpRate.tofloat() * (100 - mpComsumeRate.tofloat()) / 100; + // print(" newMpRate:" + newMpRate); + obj.setSkillMpRate(skillIndex, newMpRate.tofloat()); + } + //print(" now consumpMp:" + obj.getSkillMpRate(skillIndex)); + return true; +} + +function cearteSkillPassive_Elementalmaster_bykk(obj,passiveObj,objnum,x,y,z,direction,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum,powernum) +{ + if(!obj || !passiveObj) return; + if(pushv1 == null) pushv1 = 0; + if(pushv2 == null) pushv2 = 0; + if(pushv3 == null) pushv3 = 0; + if(pushv4 == null) pushv4 = 0; + if(pushv5 == null) pushv5 = 0; + if(pushv6 == null) pushv6 = 0; + if(pushv7 == null) pushv7 = 0; + if(pushv8 == null) pushv8 = 0; + if(bonusnum > 0){ + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); + if(skill_level > 0){ + local add_Rate = 0.0; + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN: add_Rate = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 7, skill_level); + case ELEMENTALMASTER_SKILL_FLAMESTRIKE: + case ELEMENTALMASTER_SKILL_VOID: + case ELEMENTALMASTER_SKILL_SUNBURST: + add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 8, skill_level); + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 12, skill_level); break; + case ELEMENTALMASTER_SKILL_ARCTICPISTE: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 15, skill_level); break; + case ELEMENTALMASTER_SKILL_BLACKHOLE: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 14, skill_level); break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 13, skill_level); break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND: + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN: + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE: + case ELEMENTALMASTER_SKILL_THEGATE: + case ELEMENTALMASTER_SKILL_SESTOELEMENTO: + case ELEMENTALMASTER_SKILL_THUNDERRAGE: + add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 16, skill_level); + break; + } + bonusRate += add_Rate.tofloat() / 1000.0; + } + switch (bonusnum) { + case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; + case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; + case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; + case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; + case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; + case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; + case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; + case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; + } + } + if(powernum > 0){ + local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); + if(skill_level > 0){ + local add_Rate = 0.0; + if(skillIndex == ELEMENTALMASTER_SKILL_ELEMENTALCHAIN) add_Rate = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 7, skill_level); + bonusRate += add_Rate.tofloat() / 1000.0; + } + switch (powernum) { + case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; + case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; + case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; + case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; + case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; + case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; + case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; + case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; + } + } + + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + z = z - obj.getZPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + +function createOnlyDrawObject_elementalmaster_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function onStart_appendage_elementalchain_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + + local skillLevel = sq_GetSkillLevel(parentObj,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + local lightTime = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 1, skillLevel); + + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, skillLevel); + appendage.setEnableIsBuff(true); + appendage.setBuffIconImage(28); + + local value0 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 6, skillLevel) + local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 7, skillLevel); + local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 8, skillLevel); + local value3 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 9, skillLevel); + appendage.getVar("custom").setInt(0, value0); + appendage.getVar("custom").setInt(1, value1); + appendage.getVar("custom").setInt(2, value2); + appendage.getVar("custom").setInt(3, value3); + + appendage.getVar().setBool(1,false); + appendage.getVar().setBool(2,false); + appendage.getVar().setBool(3,false); + appendage.getVar().setBool(4,false); + + local offset_x = [35,35,-35,-35]; + local offset_y = [-20,20,20,-20]; + local offset_z = [23,30,30,30]; + local sub = 0; + local mightyrune_level = sq_GetSkillLevel(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE); + if(mightyrune_level > 0){ + sub = 1; + offset_z = [30,30,30,30]; + lightTime = lightTime * (1000 + sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 0, mightyrune_level)) / 1000; + } + local assimilate_level = sq_GetSkillLevel(parentObj, ELEMENTALMASTER_SKILL_ASSIMILATE); + if(assimilate_level > 0){ + sub = 2; + offset_z = [30,30,30,30]; + appendage.getVar().setBool(1,true); + appendage.getVar().setBool(2,true); + appendage.getVar().setBool(3,true); + appendage.getVar().setBool(4,true); + setElementalChainBuff_bykk(parentObj,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,appendage); + } + for(local i = 1; i < 5; i++){ + cearteSkillPassive_Elementalmaster_bykk(parentObj,parentObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x[i-1],offset_y[i-1],offset_z[i-1],ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,i,lightTime,sub,0,0,0,0,0,0,0,0); + } +} + +function onEnd_appendage_elementalchain_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + local name = ["elementalchain_light","elementalchain_ice","elementalchain_fire","elementalchain_dark"]; + for(local i = 0; i < name.len(); i++){ + local size = parentObj.getVar(name[i]).get_obj_vector_size(); + for(local ui = 0; ui < size; ui++){ + local effectObj = parentObj.getVar(name[i]).get_obj_vector(ui); + if(effectObj) effectObj.setValid(false); + } + } +} + +function onStart_appendage_magicaltempoup_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + + local skillLevel = sq_GetSkillLevel(parentObj,ELEMENTALMASTER_SKILL_MAGICALTEMPOUP); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, skillLevel); + appendage.setEnableIsBuff(true); + appendage.setBuffIconImage(34); + + local lifeTime = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, 0, skillLevel); + local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, 1, skillLevel); + local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, 2, skillLevel); + local mightyrune_level = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); + if(mightyrune_level > 0){ + appendage.getAppendageInfo().setValidTime(0); + local add_Rate = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 4, mightyrune_level); + value1 = value1 * (1000 + add_Rate) / 1000; + value2 = value2 * (1000 + add_Rate) / 1000; + } + else if((sq_getGrowType(parentObj) == 4 && sq_GetSkillLevel(parentObj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0) || (sq_getGrowType(parentObj) == 2 && parentObj.getVar("eclipsehive_select").getBool(0))){ + appendage.getAppendageInfo().setValidTime(0); + } + else appendage.getAppendageInfo().setValidTime(lifeTime); + + local change_appendage = appendage.sq_getChangeStatus("magicaltempoup"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("magicaltempoup",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (value2 * 1).tofloat()); + } +} + +function onStart_appendage_mightyrune_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + + local skillLevel = sq_GetSkillLevel(parentObj,ELEMENTALMASTER_SKILL_MIGHTYRUNE); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, ELEMENTALMASTER_SKILL_MIGHTYRUNE, skillLevel); +} + +function onStart_appendage_moveoncast_bykk(appendage) +{ + // +} + +function proc_appendage_moveoncast_bykk(appendage) +{ + if(!appendage) return; + local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + + if(parentObj.getState() == 13 && parentObj.getThrowIndex() == 74){ + sq_SetKeyxEnable(parentObj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(parentObj, E_JUMP_COMMAND)){ + parentObj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + + if(appendage.getVar().getBool(0)){ + for(local i = 1; i < 255; i++){ + parentObj.setSkillCommandEnable(i, false); + } + if(parentObj.getState() == 0 || parentObj.getState() == 14){ + local bDownKey = parentObj.isDownSkillLastKey(); + if(!bDownKey){ + appendage.getVar().setBool(0, false); + if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){ + parentObj.sq_IntVectClear(); + parentObj.sq_IntVectPush(1); + parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true); + return; + } + else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_ELEMENTALQUAKE){ + parentObj.sq_IntVectClear(); + parentObj.sq_IntVectPush(1); + parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + return; + } + else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND){ + parentObj.sq_IntVectClear(); + parentObj.sq_IntVectPush(1); + parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, STATE_PRIORITY_USER, true); + return; + } + else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_THUNDERRAGE){ + parentObj.sq_IntVectClear(); + parentObj.sq_IntVectPush(2); + parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true); + return; + } + else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_SESTOELEMENTO){ + parentObj.sq_IntVectClear(); + parentObj.sq_IntVectPush(0); + parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + return; + } + parentObj.sq_IntVectClear(); + parentObj.sq_IntVectPush(appendage.getVar().getInt(3) + 1); + parentObj.sq_IntVectPush(appendage.getVar().getInt(1)); + parentObj.sq_IntVectPush(appendage.getVar().getInt(2)); + // print(appendage.getVar().getInt(3)+" && "+appendage.getVar().getInt(1)+" && "+appendage.getVar().getInt(2)); + parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_USER, true); + } + } + } +} + +function onEnd_appendage_moveoncast_bykk(appendage) +{ + // +} + +function monsterpulled_elementalmaster_bykk(obj,monsterobj,x,y,z,time,range) +{ + if(!obj.isMovablePos(sq_GetXPos(monsterobj), sq_GetYPos(monsterobj))) return; + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut") && sq_GetDistanceObject(monsterobj, targetObj, true) <= range){ + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut"; + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, appendagePath, true); + if(MasterAppendage){ + sq_AccelMoveToAppendageForce(targetObj, obj, monsterobj, x, y, z, time, true, MasterAppendage, true); + local validT = MasterAppendage.getAppendageInfo() + validT.setValidTime(2000); + } + } + } +} + +function elementalmaster_setbonusRate(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,ELEMENTALMASTER_SKILL_ASSIMILATE, 0, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE))) / 1000; + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 5, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK))) / 1000; + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 4, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY))) / 1000; + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0){ + if(obj.sq_GetState() == 13){ + switch(obj.getThrowIndex()){ + case 56: + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 8, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL))) / 1000; + break; + case 74: + bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 16, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL))) / 1000; + break; + } + } + } + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ELEMENTMASTERYBUFF)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ELEMENTMASTERYBUFF); + if(!addAppendage){ + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + return; + } + local addRate = addAppendage.getVar("custom").getInt(10); + bonusRate = bonusRate * (1000 + addRate) / 1000; + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut")){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + if(!addAppendage){ + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + return; + } + local skillLevel = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + local buff_num = []; + if(addAppendage.getVar().getBool(1)) buff_num.push(1); + if(addAppendage.getVar().getBool(2)) buff_num.push(1); + if(addAppendage.getVar().getBool(3)) buff_num.push(1); + if(addAppendage.getVar().getBool(4)) buff_num.push(1); + local value1 = 0; + switch(buff_num.len()){ + case 1: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 6, skillLevel); break; + case 2: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 7, skillLevel); break; + case 3: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 8, skillLevel); break; + case 4: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 9, skillLevel); break; + } + bonusRate = bonusRate * (10000 + value1) / 10000; + } + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); +} + +function getElementalMaster_RestAni(obj) +{ + local animation = obj.sq_GetRestAni(); + if(obj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ASSIMILATE) > 0) animation = obj.sq_GetCustomAni(ANIMATION_ELEMENTALMASTER_ELEMENTALMASTER_3RD_BODY); + return animation; +} + + + +function elementalmaster_setelementSkillBonusRate(obj, skillIndex) +{ + if(sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 10, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY)) > 0){ + local AddAppendage; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ELEMENTMASTERYBUFF)){ + AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,APDPATH_ELEMENTMASTERYBUFF); + AddAppendage.sq_SetValidTime(8000); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), ELEMENTALMASTER_SKILL_ELEMENTMASTERY, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY)); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + } + else{ + AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ELEMENTMASTERYBUFF, true); + AddAppendage.getVar("custom").setInt(10, 0); + obj.sq_AddSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 64, 0, 500); + } + local now_BonusRate = AddAppendage.getVar("custom").getInt(10); + local new_BonusRate = 0; + switch(skillIndex){ + case 15: + case 16: + case 17: + case 18: + new_BonusRate = now_BonusRate + 30; + break; + case ELEMENTALMASTER_SKILL_VOID: + case ELEMENTALMASTER_SKILL_SUNBURST: + case ELEMENTALMASTER_SKILL_WALLOFICE: + case ELEMENTALMASTER_SKILL_FLAMESTRIKE: + new_BonusRate = now_BonusRate + 30; + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER: + case ELEMENTALMASTER_SKILL_BLACKHOLE: + case ELEMENTALMASTER_SKILL_THUNDERCALLING: + case ELEMENTALMASTER_SKILL_ARCTICPISTE: + new_BonusRate = now_BonusRate + 50; + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER: + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE: + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN: + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND: + case ELEMENTALMASTER_SKILL_THEGATE: + case ELEMENTALMASTER_SKILL_SESTOELEMENTO: + case ELEMENTALMASTER_SKILL_THUNDERRAGE: + new_BonusRate = now_BonusRate + 80; + break; + } + if(new_BonusRate > 500) new_BonusRate = 500; + AddAppendage.getVar("custom").setInt(10, new_BonusRate); + local loadSlot = obj.sq_GetSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); + if(loadSlot){ + local getload = loadSlot.getRemainLoadNumber(); + if(new_BonusRate / 10 + getload > 50) loadSlot.increaseLoadCount(50 - getload); + else loadSlot.increaseLoadCount(new_BonusRate / 10); + } + } + else{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ELEMENTMASTERYBUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ELEMENTMASTERYBUFF); + } +} + +function onEnd_appendage_elementmastery_buff(appendage) +{ + if(!appendage) return; +} + + +function proc_appendage_elementmastery_buff(appendage) +{ + if(!appendage) return; + if(!appendage.isValid()) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function onStart_appendage_elementmastery_buff(appendage) +{ + if(!appendage) return; +} + +function onVaildTimeEnd_appendage_elementmastery_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local loadSlot = obj.sq_GetSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); + if(loadSlot) obj.sq_RemoveSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); +} + + +function proc_appendage_elementalquake_bykk(appendage) +{ + local sourceObj = appendage.getSource(); + if(!sourceObj){ + appendage.setValid(false); + return; + } +} + +function checkExecutableSkill_Arcticpiste_bykk(obj) +{ + // print("test Arcticpiste"); + return 1; +} + +function onSetState_Arcticpiste_bykk(obj, state, datas, isResetTimer) +{ +} + +function onEndCurrentAni_Arcticpiste_bykk(obj) +{ +} + +function onProcCon_Arcticpiste_bykk(obj) +{ +} + +function onKeyFrameFlag_Arcticpiste_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Arcticpiste_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_Arcticpiste_bykk(obj, new_state) +{ +} + +function checkExecutableSkill_BlackHole_bykk(obj) +{ + // print("test BlackHole"); + return 1; +} + +function onSetState_BlackHole_bykk(obj, state, datas, isResetTimer) +{ +} + +function onEndCurrentAni_BlackHole_bykk(obj) +{ +} + +function onProcCon_BlackHole_bykk(obj) +{ +} + +function onKeyFrameFlag_BlackHole_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_BlackHole_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_BlackHole_bykk(obj, new_state) +{ +} + +function checkExecutableSkill_Crystalofovermind_bykk(obj) +{ + // print("test Crystalofovermind"); + local istalisman = obj.getVar("crystal_talisman").getInt(0); + if(istalisman > 0){ + local crystalObj = obj.getVar("crystal").get_obj_vector(0); + if(crystalObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(crystalObj); + local state = colObj.getState(); + if(state <= 23){ + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 0, skill_level); + switch(state){ + case 20: totalDamage = totalDamage * 80 / 100; break; + case 21: totalDamage = totalDamage * 90 / 100; break; + case 22: totalDamage = totalDamage * 100 / 100; break; + case 23: totalDamage = totalDamage * 125 / 100; break; + } + colObj.getVar("custom").setInt(2,totalDamage); + colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("crystal_talisman").setInt(0,0); + } + } + } + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + if(b_useskill){ + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Crystalofovermind_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, skill_level); + if(castTime > 1000){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);} + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + obj.getVar("crystal").setInt(1,delaySum); + //音效 + if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_CRYSTALOVERMIND_01_1"); + else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_01_2"); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100)); + //蓄气时钟开启 + obj.getVar("Crystalofovermind").clear_ct_vector(); + obj.getVar("Crystalofovermind").push_ct_vector(); + local timer = obj.getVar("Crystalofovermind").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + //获取蓄气上限 + local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 3); + local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0; + local memorize_level = sq_GetSkillLevel(obj, 19); + if(memorize_level > 0){ + minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){ + local magicaltempoup_level = sq_GetSkillLevel(obj, 2); + minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level); + } + local minus_Rate4 = 1000 - minus_Rate - minus_Rate3; + local fullcharge = 0; + if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000; + else fullcharge = 1; + obj.getVar("moveoncast").setInt(2,energycharge_Max); + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGLOOPA_BODY); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/crystalofovermind_summon_body_front.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/crystalofovermind_side_front_start01.ani",250,0,0); + obj.stopSound(18); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100)); + //声音 + if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_CRYSTALOVERMIND_02_1"); + else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_02_2"); + + local charge_obj = obj.getVar("moveoncast").get_obj_vector(0); + if(charge_obj) charge_obj.setValid(false); + + local timer = obj.getVar("Crystalofovermind").get_ct_vector(0); + local currentT = 0; + if(timer) currentT = timer.Get(); + local energycharge_Max = obj.getVar("moveoncast").getInt(2); + + local xiuzheng = 1; + if(currentT > energycharge_Max) xiuzheng = 0; + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 0, skill_level); + local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 3 - xiuzheng); + local istalisman = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 9); + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,1,totalDamage,sizeRate,istalisman,0,0,0,0,0,1,0); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,2,sizeRate,0,0,0,0,0,0,0,0,0); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,3,sizeRate,0,0,0,0,0,0,0,0,0); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,4,sizeRate,0,0,0,0,0,0,0,0,0); + obj.getVar("crystal_talisman").setInt(0,istalisman); + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + break; + } +} + +function onEndCurrentAni_Crystalofovermind_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Crystalofovermind_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime < obj.getVar("crystal").getInt(1)) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, STATE_PRIORITY_USER, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + //移动施法技能大于0时,获取人物身上移动施法AP,push技能子状态及技能编号等 + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage){ + mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND); + mocAppendage.getVar().setBool(0, true); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + break; + } +} + +function onKeyFrameFlag_Crystalofovermind_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Crystalofovermind_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_Crystalofovermind_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){ + sq_EndDrawCastGauge(obj); + } + if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){ + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage) mocAppendage.getVar().setBool(0, false); + } + } +} + +function checkExecutableSkill_ElementalChain_bykk(obj) +{ + return 0; +} + +function onSetState_ElementalChain_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, skill_level); + if(castTime > 800){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);} + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, castTime, true); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + createOnlyDrawObject_elementalmaster_bykk(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalchain/start.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj) + 40,ENUM_DRAWLAYER_NORMAL); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut")) + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, false, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut", true); + break; + case 10: + case 20: + case 30: + case 40: + local skillIndex = obj.sq_GetVectorData(datas, 1); + local sub = obj.sq_GetVectorData(datas, 2); + local Ani = obj.sq_GetThrowChargeAni(sub); + obj.setCurrentAnimation(Ani); + obj.getVar("moveoncast").setInt(0,skillIndex); + obj.getVar("moveoncast").setInt(1,sub); + //移動施法技能大于0時,獲取人物身上移動施法AP,push技能子狀態及技能編號等 + if(sq_GetSkillLevel(obj, 38) > 0){ + obj.sq_IsEnterSkillLastKeyUnits(skillIndex); + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage){ + mocAppendage.getVar().setInt(3, obj.sq_GetVectorData(datas, 0)); + mocAppendage.getVar().setInt(1, skillIndex); + mocAppendage.getVar().setInt(2, sub); + mocAppendage.getVar().setBool(0, true); + } + } + if(skillIndex == 31) obj.getVar("sunburst_bool").setBool(0, false); + //蓄氣時鍾開啓 + obj.getVar("ElementalChain").clear_ct_vector(); + obj.getVar("ElementalChain").push_ct_vector(); + local timer = obj.getVar("ElementalChain").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + //設置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100)); + //獲取蓄氣上限 + local energycharge_Max = 0; + switch(skillIndex){ + case 15: energycharge_Max = sq_GetIntData(obj, skillIndex, 1); break;//傑克爆彈 + case 16: energycharge_Max = sq_GetIntData(obj, skillIndex, 5); break;//冰霜雪人 + case 17: energycharge_Max = sq_GetIntData(obj, skillIndex, 2); break;//光電鳗 + case 18: energycharge_Max = sq_GetIntData(obj, skillIndex, 1); break;//暗影夜貓 + case 26: energycharge_Max = sq_GetIntData(obj, skillIndex, 2); break;//虛無之球 + case 27: energycharge_Max = sq_GetIntData(obj, skillIndex, 2); break;//傑克降臨 + case 31: energycharge_Max = sq_GetIntData(obj, skillIndex, 0); break;//雷旋 + case 58: energycharge_Max = sq_GetIntData(obj, skillIndex, 0); break;//黑洞 + case 59: energycharge_Max = sq_GetIntData(obj, skillIndex, 3); break;//極冰盛宴 + } + local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0; + local memorize_level = sq_GetSkillLevel(obj, 19); + if(memorize_level > 0){ + minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level); + minus_Rate2 = sq_GetLevelData(obj, 19, 2, memorize_level); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){ + local magicaltempoup_level = sq_GetSkillLevel(obj, 2); + minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level); + } + local minus_Rate4 = 1000 - minus_Rate - minus_Rate3; + local minus_Rate5 = 1000 - minus_Rate - minus_Rate2 - minus_Rate3; + local fullcharge = 0; + if(minus_Rate5 > 0 && skillIndex <= 20) energycharge_Max = energycharge_Max * minus_Rate5 / 1000; + else if(minus_Rate5 < 0 && skillIndex <= 20){energycharge_Max = 0;fullcharge = 1;} + else if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000; + else fullcharge = 1; + obj.getVar("moveoncast").setInt(2,energycharge_Max); + + if(skillIndex > 20 && sq_GetSkillLevel(obj,ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0){ + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0); + return; + } + + switch(skillIndex){ + case 15: + case 27: + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,0,fullcharge,0,0,0,0,0,0,0); + break; + case 16: + case 59: + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,1,fullcharge,0,0,0,0,0,0,0); + break; + case 26: + case 18: + case 58: + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,2,fullcharge,0,0,0,0,0,0,0); + break; + case 17: + case 31: + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,3,fullcharge,0,0,0,0,0,0,0); + if(skillIndex == 31){ + local aniPath = ["character/mage/effect/animation/sunburstcast1.ani","character/mage/effect/animation/sunburstcast2.ani","character/mage/effect/animation/sunburstcast3.ani","character/mage/effect/animation/sunburstfloor1.ani","character/mage/effect/animation/sunburstfloor2.ani"]; + local drawlayer = [ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_BOTTOM,ENUM_DRAWLAYER_BOTTOM]; + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObject_elementalmaster_bykk(obj,aniPath[i],true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),drawlayer[i]); + } + } + break; + } + break; + case 11: + case 21: + case 31: + case 41: + local skillIndex = obj.sq_GetVectorData(datas, 1); + obj.getVar("skillIndex").setInt(100, skillIndex); + local sub = obj.sq_GetVectorData(datas, 2); + local Ani = obj.sq_GetThrowShootAni(sub); + obj.setCurrentAnimation(Ani); + obj.stopSound(18); + //設置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100)); + //聲音 + switch(skillIndex){ + case 26: obj.sq_PlaySound("WZ_VOID"); break; + case 31: obj.sq_PlaySound("WZ_SUNBURST"); break; + case 15: obj.sq_PlaySound("WZ_LANTERN_FIRE"); break; + case 16: obj.sq_PlaySound("WZ_FROSTHEAD"); break; + case 17: obj.sq_PlaySound("WZ_FLUORE"); break; + case 18: obj.sq_PlaySound("WZ_LAUNCH_PLUTO"); break; + case 27: obj.sq_PlaySound("R_WZ_SHOOTING_STAR"); break; + case 58: obj.sq_PlaySound("WZ_NIGHTH_02"); break; + case 59: obj.sq_PlaySound("WZ_MAGIC_MISSILE"); break; + } + local timer = obj.getVar("ElementalChain").get_ct_vector(0); + local currentT = 0; + if(timer) currentT = timer.Get(); + local energycharge_Max = obj.getVar("moveoncast").getInt(2); + obj.getVar("ElementalChain").clear_ct_vector(); + local skill_level = sq_GetSkillLevel(obj, skillIndex); + + local Mightyrune_T = + {//light,ice,fire,dark + [15] = [0,0,1,0], + [16] = [0,1,0,0], + [18] = [0,0,0,1], + [17] = [1,0,0,0], + [26] = [0,0,0,1], + [31] = [1,0,0,0], + [27] = [0,0,1,0], + [59] = [0,1,0,0], + [55] = [1,0,0,0], + [58] = [0,0,0,1] + } + + if(Mightyrune_T.rawin(skillIndex)){ + sq_BinaryStartWrite(); + foreach(elsement in Mightyrune_T[skillIndex]){ + sq_BinaryWriteDword(elsement); + } + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + } + + local charge_obj = obj.getVar("moveoncast").get_obj_vector(0); + if(charge_obj) charge_obj.setValid(false); + + local xiuzheng = 1; + if(currentT > energycharge_Max) xiuzheng = 0; + switch(skillIndex){//滿蓄力 + case 15://傑克爆彈 + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local powerDamage = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level); + local nurmal_rate = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level) * 130 /100; + local exp_rate = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level) * 130 /100; + local shoot_range = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,75,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,15,totalDamage,powerDamage,nurmal_rate,exp_rate,shoot_range,0,0,0,1,2); + break; + case 16://冰霜雪人 + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local powerDamage = sq_GetLevelData(obj, skillIndex, 15 - xiuzheng, skill_level); + local nurmal_rate = sq_GetLevelData(obj, skillIndex, 6 - xiuzheng, skill_level) * 150 /100; + local lifeTime = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,50,0,80,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,16,totalDamage,powerDamage,nurmal_rate,lifeTime,0,0,0,0,1,2); + local size = sq_GetLevelData(obj, skillIndex, 20, skill_level); + if(size > 0){ + for(local i = 0; i < size; i++){ + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,50,0,80 + 10 * (i + 1),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,16,totalDamage,powerDamage,nurmal_rate,lifeTime,0,0,0,0,1,2); + } + } + break; + case 17://光電鳗 + local number = sq_GetIntData(obj, skillIndex, 1); + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local powerDamage = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level); + local nurmal_rate = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level) * 150 /100; + local lifeTime = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level); + for(local i = 0; i < number; i++){ + local angle = 360 / number * i; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 65.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 65.0).tointeger(); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,40,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,17,totalDamage,powerDamage,nurmal_rate,lifeTime,angle,sq_GetXPos(obj),sq_GetYPos(obj),0,1,2); + } + break; + case 18://暗影夜貓 + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local powerDamage = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level); + local sizeRate = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level) * 130 /100; + local speed_rate = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level); + local shoot_range = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,75,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,18,totalDamage,powerDamage,sizeRate,speed_rate,shoot_range,0,0,0,1,2); + break; + case 26://虛無之球 + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local sizeRate = sq_GetIntData(obj, skillIndex, 7 - xiuzheng) * 230 / 100; + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_VOIDEX) > 0){ + local prob = 100 - sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_VOIDEX) * 8 - sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_VOID, 9, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_VOID)); + if(sq_getRandom(1, 100) > prob) sizeRate = sizeRate * 250 / 100; + } + local shoot_range = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level) / 20; + local hittime = sq_GetIntData(obj, skillIndex, 1); + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE) > 0){ + hittime = hittime / 2; + local timeMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 2); + local damageRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 4); + local damageRate2 = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 5); + local isExp = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 16); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,120,0,60,obj.getDirection(),ELEMENTALMASTER_SKILL_VOID,2,totalDamage,hittime,timeMax,damageRate,damageRate2,sizeRate,isExp,0,1,0); + } + else cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,75,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_VOID,1,totalDamage,sizeRate,shoot_range,hittime,0,0,0,0,1,0); + break; + case 27://傑克降臨 + local sub = sq_GetIntData(obj, skillIndex, 6); + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local totalDamage2 = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level); + local sizeRate = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level) * 110 / 100; + local sizeRate2 = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level) * 110 / 100; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local number = sq_GetIntData(obj, skillIndex, 3) + 1; + local x = 150, y = 0, z = 0, targetObj = obj; + if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_HALLOWEENBUSTER, 4) > 0){ + local bhObj = obj.getVar("blackhole").get_obj_vector(0); + if(bhObj){x = 0; y = 0;targetObj = bhObj;} + else{ + local totalDamage = 100; + local totalDamage2 = 100; + local sizeRate = 40; + local lifeTime = 1200; + local attractPower = 600; + local range = 400; + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local hitTime = 2000; + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,80,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,1,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,0,hitTime,0,0); + } + } + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){ + local elementalpotential_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); + local add_sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 8); + // local add_damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 13, elementalpotential_level); + // totalDamage = totalDamage * (1000 + add_damageRate) / 1000; + sizeRate = sizeRate * (100 + add_sizeRate) / 100; + sizeRate2 = sizeRate2 * (100 + add_sizeRate) / 100; + cearteSkillPassive_Elementalmaster_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,z,obj.getDirection(),ELEMENTALMASTER_SKILL_HALLOWEENBUSTER,0,totalDamage,sizeRate,sizeRate2,damageRate,sub,2,number,0,1,0); + } + else{ + cearteSkillPassive_Elementalmaster_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,z,obj.getDirection(),ELEMENTALMASTER_SKILL_HALLOWEENBUSTER,0,totalDamage,sizeRate,sizeRate2,damageRate,sub,1,number,0,1,0); + } + break; + case 31://雷旋 + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local sizeRate = sq_GetIntData(obj, skillIndex, 2 - xiuzheng) * 230 /100; + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_SUNBURST,1,totalDamage,sizeRate,0,0,0,0,0,0,1,0); + + local aniPath = ["passiveobject/elementalmaster_bykk/animation/sunburst/sunburstlayer2.ani","passiveobject/elementalmaster_bykk/animation/sunburst/sunburstlayer1.ani"]; + local offset_y = [1,-1]; + sizeRate = sizeRate.tofloat() / 100.0; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,aniPath[i],0,offset_y[i],50 + offset_y[i]); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case 58://黑洞 + local size = obj.getVar("blackhole").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local bhObj = obj.getVar("blackhole").get_obj_vector(i); + if(bhObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(bhObj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + local sub = sq_GetIntData(obj, skillIndex, 6); + local totalDamage = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level); + local totalDamage2 = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level); + local sizeRate = 100 + sq_GetIntData(obj, skillIndex, 5); + local lifeTime = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level); + local attractPower = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local range = sq_GetIntData(obj, skillIndex, 2 + xiuzheng); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local hitTime = 300; + if(sub > 0){ + lifeTime = lifeTime / 2; + hitTime = hitTime / 3; + } + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){ + local elementalpotential_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); + local add_sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 0); + local minus_Rate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 2); + // local add_damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 14, elementalpotential_level); + // totalDamage = totalDamage * (1000 + add_damageRate) / 1000; + sizeRate = sizeRate * (100 + add_sizeRate) / 100; + hitTime = hitTime * (100 - minus_Rate) / 100; + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,150,0,120,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,2,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,sub,hitTime,1,0); + } + else{ + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,150,0,100,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,1,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,sub,hitTime,1,0); + } + break; + case 59://極冰盛宴 + local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level); + local sizeRate = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level) * 160 / 100; + local hitMax = sq_GetIntData(obj, skillIndex, 5); + local hitTime = sq_GetIntData(obj, skillIndex, 2 - xiuzheng); + local offset_x = sq_GetIntData(obj, skillIndex, 4); + local speedRate = 30000 / sq_GetIntData(obj, skillIndex, 0); + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){ + local elementalpotential_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); + local speed_rate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 2); + hitMax = hitMax + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 16, elementalpotential_level); + // local add_damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 15, elementalpotential_level); + // totalDamage = totalDamage * (1000 + add_damageRate) / 1000; + hitTime = hitTime * (100 - speed_rate) / 100; + local sub = 0; + local isBig = sq_GetLevelData(obj, skillIndex, 11, skill_level); + if(isBig > 0){sub = 2;offset_x = offset_x - 150;} + else if(sq_GetLevelData(obj, skillIndex, 10, skill_level) > 0) sub = 1; + if(sub == 2) cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,4,totalDamage * hitMax,sizeRate * 15 / 10, speedRate, isBig,0,0,0,0,1,0); + else cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,2,totalDamage,sizeRate,hitMax,hitTime,speedRate,sub,0,0,1,0); + obj.setTimeEvent(100,50,1,false); + } + else{ + local sub = 0; + local isBig = sq_GetLevelData(obj, skillIndex, 11, skill_level); + if(isBig > 0){sub = 2;offset_x = offset_x - 150;} + else if(sq_GetLevelData(obj, skillIndex, 10, skill_level) > 0) sub = 1; + if(sub == 2) cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,3,totalDamage * hitMax,sizeRate * 15 / 10, speedRate, isBig,0,0,0,0,1,0); + else cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,1,totalDamage,sizeRate,hitMax,hitTime,speedRate,sub,0,0,1,0); + } + break; + } + elementalmaster_setelementSkillBonusRate(obj, skillIndex); + break; + } +} + +function onEndCurrentAni_ElementalChain_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_USER, true); + break; + case 1: + case 11: + case 21: + case 31: + case 41: + if(obj.getVar("skillIndex").getInt(100) == 31 && sq_GetLevelData(obj, 31, 4, sq_GetSkillLevel(obj, 31)) > 0 && obj.getVar("sunburst_bool").getBool(0) == false){ + if(sq_getRandom(1, 99) > 100 - sq_GetLevelData(obj, 31, 4, sq_GetSkillLevel(obj, 31))){ + obj.getVar("sunburst_bool").setBool(0, true); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_SUNBURST,2,200,0,0,0,0,0,0,0,0,0); + } + } + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_ElementalChain_bykk(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + switch(substate){ + case 10: + case 20: + case 30: + case 40: + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage) mocAppendage.getVar().setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(substate + 1); + obj.sq_IntVectPush(obj.getVar("moveoncast").getInt(0)); + obj.sq_IntVectPush(obj.getVar("moveoncast").getInt(1)); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_USER, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + break; + } +} + +function onKeyFrameFlag_ElementalChain_bykk(obj, flagIndex) +{} + +function onTimeEvent_ElementalChain_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 100: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; + } +} + +function onEndState_ElementalChain_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCHAIN){ + sq_EndDrawCastGauge(obj); + } + if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){ + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage) mocAppendage.getVar().setBool(0, false); + } + } +} + +function onCreateObject_ElementalChain_bykk(obj, createObject) +{} + +function checkExecutableSkill_Elementalcurtain_bykk(obj) +{ + //print("test Elementalcurtain"); + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + if(b_useskill){ + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + obj.startSkillCoolTime(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, skill_level, -1); + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Elementalcurtain_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALCURTAIN_CAST_BODY); + obj.getVar("moveoncast").setInt(0,ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, skill_level); + if(castTime > 1000){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 4, castTime);} + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + obj.getVar("elementalcurtain").setInt(1,delaySum); + //音效 + obj.sq_PlaySound("WZ_ELEMENTALCURTAIN_01_1",18);//WZ_ELEMENTALCURTAIN_01_2 + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100)); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalcurtain/elementalcurtain_cast_effect.ani",0,0,0); + + //蓄气时钟开启 + obj.getVar("ElementalChain").clear_ct_vector(); + obj.getVar("ElementalChain").push_ct_vector(); + local timer = obj.getVar("ElementalChain").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + //获取蓄气上限 + local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 4); + local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0; + local memorize_level = sq_GetSkillLevel(obj, 19); + if(memorize_level > 0){ + minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){ + local magicaltempoup_level = sq_GetSkillLevel(obj, 2); + minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level); + } + local minus_Rate4 = 1000 - minus_Rate - minus_Rate3; + local fullcharge = 0; + if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000; + else fullcharge = 1; + obj.getVar("moveoncast").setInt(2,energycharge_Max); + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALCURTAIN_SHOOT_BODY); + obj.stopSound(18); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100)); + //声音 + obj.sq_PlaySound("WZ_ELEMENTALCURTAIN_02_1");//WZ_ELEMENTALCURTAIN_02_2 + + local charge_obj = obj.getVar("moveoncast").get_obj_vector(0); + if(charge_obj) charge_obj.setValid(false); + + local timer = obj.getVar("ElementalChain").get_ct_vector(0); + local currentT = 0; + if(timer) currentT = timer.Get(); + local energycharge_Max = obj.getVar("moveoncast").getInt(2); + + local xiuzheng = 1; + if(currentT > energycharge_Max) xiuzheng = 0; + + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + local istalisman = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 8) + 1; + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 1, skill_level); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 1 - xiuzheng); + local lifeTime = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 2); + local hitTime = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 3); + local hitMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 7); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,1,totalDamage,sizeRate,lifeTime,damageRate,hitTime,hitMax,istalisman,0,1,0); + + if(istalisman > 0) obj.setTimeEvent(2,660,1,false); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + break; + } +} + +function onEndCurrentAni_Elementalcurtain_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Elementalcurtain_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime < obj.getVar("elementalcurtain").getInt(1)) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + //移动施法技能大于0时,获取人物身上移动施法AP,push技能子状态及技能编号等 + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage){ + mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN); + mocAppendage.getVar().setBool(0, true); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + break; + } +} + +function onKeyFrameFlag_Elementalcurtain_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Elementalcurtain_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true); + break; + case 2: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_Elementalcurtain_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){ + sq_EndDrawCastGauge(obj); + } + if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){ + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage) mocAppendage.getVar().setBool(0, false); + } + } +} + +function onCreateObject_Elementalcurtain_bykk(obj, createObject) +{ +} + + +function checkExecutableSkill_Elementalquake_bykk(obj) +{ + // print("test Elementalquake"); + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + if(b_useskill){ + // local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + // obj.startSkillCoolTime(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, skill_level, -1); + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Elementalquake_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGSTART_BODY); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalquake/castingstart_crack.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalquake/castingstarteffect_stone.ani",0,0,0); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, skill_level); + if(castTime > 1000){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);} + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + obj.getVar("elementalquake").setInt(1,delaySum); + //音效 + if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_ELEMENTALQUAKE_01_1"); + else obj.sq_PlaySound("WZ_ELEMENTALQUAKE_01_2"); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100)); + //蓄气时钟开启 + obj.getVar("Elementalquake").clear_ct_vector(); + obj.getVar("Elementalquake").push_ct_vector(); + local timer = obj.getVar("Elementalquake").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + //获取蓄气上限 + local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 3); + local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0; + local memorize_level = sq_GetSkillLevel(obj, 19); + if(memorize_level > 0){ + minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){ + local magicaltempoup_level = sq_GetSkillLevel(obj, 2); + minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level); + } + local minus_Rate4 = 1000 - minus_Rate - minus_Rate3; + local fullcharge = 0; + if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000; + else fullcharge = 1; + obj.getVar("moveoncast").setInt(2,energycharge_Max); + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGLOOPA_BODY); + obj.stopSound(18); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100)); + //声音 + if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_ELEMENTALQUAKE_02_1"); + else obj.sq_PlaySound("WZ_ELEMENTALQUAKE_02_2"); + + local charge_obj = obj.getVar("moveoncast").get_obj_vector(0); + if(charge_obj) charge_obj.setValid(false); + + local timer = obj.getVar("Elementalquake").get_ct_vector(0); + local currentT = 0; + if(timer) currentT = timer.Get(); + local energycharge_Max = obj.getVar("moveoncast").getInt(2); + + local xiuzheng = 1; + if(currentT > energycharge_Max) xiuzheng = 0; + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 0, skill_level); + local totalDamage2 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 1, skill_level); + local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); + local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 8 - xiuzheng); + local istalisman = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 9) + 1; + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALQUAKE,1,totalDamage,damageRate,sizeRate,istalisman,0,0,0,0,1,0); + obj.getVar("elementalquake_talisman").setInt(0,istalisman); + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGLOOPB_BODY); + if(obj.getVar("elementalquake_talisman").getInt(0) > 0) obj.setTimeEvent(1,500,1,false); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGEND_BODY); + break; + } +} + +function onEndCurrentAni_Elementalquake_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(1); + // obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + break; + case 3: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Elementalquake_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime < obj.getVar("elementalquake").getInt(1)) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + //移动施法技能大于0时,获取人物身上移动施法AP,push技能子状态及技能编号等 + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage){ + mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE); + mocAppendage.getVar().setBool(0, true); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + break; + } +} + +function onKeyFrameFlag_Elementalquake_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Elementalquake_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + break; + } +} + +function onEndState_Elementalquake_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){ + sq_EndDrawCastGauge(obj); + } + if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){ + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage) mocAppendage.getVar().setBool(0, false); + } + } +} + +function checkExecutableSkill_ElementalShower_bykk(obj) +{ + //print("test ElementalShower"); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALSHOWER); + if(sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALSHOWER, 9, skill_level) > 0){ + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_ELEMENTALSHOWER); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALSHOWER, STATE_PRIORITY_IGNORE_FORCE, true); + return 1; + } + } +} + +function onSetState_ElementalShower_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + obj.sq_StopMove(); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.setSpeedRate(80.0); + // local delaySum = currentAni.getDelaySum(false); + // obj.sq_SetXScrollStart(200, delaySum); + //obj.sq_PlaySound("WZ_SHOOTING_STAR_READY", 2000); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + // local currentAni = obj.getCurrentAnimation(); + // local delaySum = currentAni.getDelaySum(false); + obj.stopSound(2000); + obj.sq_PlaySound("WZ_SHOOTING_STAR"); + + local skillLevel = sq_GetSkillLevel(obj, 74); + local totalDamage = sq_GetLevelData(obj, 74, 3, skillLevel); + local totalDamage2 = sq_GetLevelData(obj, 74, 4, skillLevel); + local number = sq_GetIntData(obj, 74, 10); + local baseangle = sq_getRandom(0, 90); + for(local i = 0; i < number; i++){ + local angle = 360 / number * i + baseangle; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 130.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 65.0).tointeger(); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,225 + x, y, 300, obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALSHOWER,1,totalDamage,totalDamage2,0,0,0,0,0,0,1,0); + } + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_ELEMENTALSHOWER); + break; + } +} + +function onEndCurrentAni_ElementalShower_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALSHOWER, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_ElementalShower_bykk(obj) +{ +} + +function onKeyFrameFlag_ElementalShower_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_ElementalShower_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_ElementalShower_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCHAIN){ + obj.sq_SetXScrollStop(100); + } +} + + +function checkExecutableSkill_FlameStrike_bykk(obj) +{ + //print("test FlameStrike"); + return 0; +} + +function onSetState_FlameStrike_bykk(obj, state, datas, isResetTimer) +{ + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_RemoveAimPointMark(); + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + sq_StartDrawCastGauge(obj, 200, true); + obj.setTimeEvent(0,100,1,true); + break; + case 1: + obj.sq_RemoveAimPointMark(); + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 0, skill_level); + local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 5) * 125 /100; + local etcTime = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 3, skill_level); + local aimPosX = obj.sq_GetVectorData(datas, 1) - sq_GetXPos(obj); + local aimPosY = obj.sq_GetVectorData(datas, 2) - sq_GetYPos(obj); + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE) > 0){ + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_FLAMESTRIKE,2,totalDamage,sizeRate,etcTime,0,0,0,0,0,1,0); + } + else{ + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_FLAMESTRIKE,1,totalDamage,sizeRate,0,0,0,0,0,0,1,0);} + + // [56] = [0,1,0,0], + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(0); + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + break; + } + +} + +function onEndCurrentAni_FlameStrike_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(1); + // obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_FLAMESTRIKE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_FlameStrike_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime <= 200) return; + local bDownKey = obj.isDownSkillLastKey(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + if(!bDownKey || stateTime >= 1000){ + local aimPosX = obj.sq_GetAimPosX(posX, posY, false); + local aimPosY = obj.sq_GetAimPosY(posX, posY, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(aimPosX); + obj.sq_IntVectPush(aimPosY); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_FLAMESTRIKE, STATE_PRIORITY_USER, true); + } + break; + } +} + +function onKeyFrameFlag_FlameStrike_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_FlameStrike_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 0: + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local offsetX = 150; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 2) * 2; + local vY = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 3) * 2; + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + break; + } +} + +function onEndState_FlameStrike_bykk(obj, new_state) +{ + if(new_state != ELEMENTALMASTER_SKILL_FLAMESTRIKE) obj.sq_RemoveAimPointMark(); +} + +function checkExecutableSkill_HalloweenBuster_bykk(obj) +{ + // print("test HalloweenBuster"); +} + +function onSetState_HalloweenBuster_bykk(obj, state, datas, isResetTimer) +{ +} + +function onEndCurrentAni_HalloweenBuster_bykk(obj) +{ +} + +function onProcCon_HalloweenBuster_bykk(obj) +{ +} + +function onKeyFrameFlag_HalloweenBuster_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_HalloweenBuster_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_HalloweenBuster_bykk(obj, new_state) +{ +} + + +function checkExecutableSkill_MagicalTempoUp_bykk(obj) +{ + print("test MagicalTempoUp"); +} + +function onSetState_MagicalTempoUp_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, skill_level); + if(castTime > 800){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);} + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + sq_StartDrawCastGauge(obj, castTime, true); + local pAni = obj.getCurrentAnimation(); + print(pAni.getDelaySum(false)); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")) + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"); + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, false, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut", true); + break; + } +} + +function onEndCurrentAni_MagicalTempoUp_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ASSIMILATE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_MagicalTempoUp_bykk(obj) +{ +} + +function onKeyFrameFlag_MagicalTempoUp_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_MagicalTempoUp_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_MagicalTempoUp_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ASSIMILATE) sq_EndDrawCastGauge(obj); +} + +function checkExecutableSkill_Mightyrune_bykk(obj) +{ + // print("test Mightyrune"); + // if(obj.getVar("elementalchain_light").get_obj_vector_size() > 0){ + // local name = ["elementalchain_light","elementalchain_ice","elementalchain_fire","elementalchain_dark"]; + // for(local i = 0; i < 4; i++){ + // local effectObj = obj.getVar(name[i]).get_obj_vector(0); + // if(effectObj){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");} + // } + // } + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_MIGHTYRUNE); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_MIGHTYRUNE, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Mightyrune_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, skill_level); + if(castTime > 800){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);} + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_MIGHTYRUNE"); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/mightyrune/runecast_01.ani",0,0,0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut")) + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, false, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut", true); + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")) + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"); + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, false, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut", true); + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_mightyrune.nut")) + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_mightyrune.nut"); + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, false, "character/mage/elementalmaster_bykk/ap/ap_mightyrune.nut", true); + break; + } +} + +function onEndCurrentAni_Mightyrune_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_MIGHTYRUNE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Mightyrune_bykk(obj) +{ +} + +function onKeyFrameFlag_Mightyrune_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Mightyrune_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_Mightyrune_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCHAIN) sq_EndDrawCastGauge(obj); +} + + +function checkExecutableSkill_Sestoelemento_bykk(obj) +{ + // print("test Sestoelemento"); + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_SESTOELEMENTO); + if(b_useskill){ + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_SESTOELEMENTO); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Sestoelemento_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOCAST); + obj.setTimeEvent(1,2500,1,false); + // local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/sestoelemento/start_main.ani",350,-1,150); + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100)); + sq_flashScreen(obj,1000,3500,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_SetXScroll(350, 300, 3000, 100); + local totalDamage = obj.sq_GetBonusRateWithPassive(ELEMENTALMASTER_SKILL_SESTOELEMENTO, ELEMENTALMASTER_SKILL_SESTOELEMENTO, 0, 1.0) + 100; + local hitMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO, 0); + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,350,0,150,obj.getDirection(),ELEMENTALMASTER_SKILL_SESTOELEMENTO,1,totalDamage,hitMax,0,0,0,0,0,0,1,0); + sq_SendMessage(obj, 0, 1, 0); + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOREADY); + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOCHARGE); + break; + case 3: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOEXP); + obj.sq_PlaySound("WZ_SESTOELEMENTO"); + // sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/sestoelemento/explosion_main.ani",350,-1,150); + local totalDamage = obj.sq_GetBonusRateWithPassive(ELEMENTALMASTER_SKILL_SESTOELEMENTO, ELEMENTALMASTER_SKILL_SESTOELEMENTO, 1, 1.0) + 100; + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,350,0,150,obj.getDirection(),ELEMENTALMASTER_SKILL_SESTOELEMENTO,2,totalDamage,0,0,0,0,0,0,0,1,0); + break; + case 10: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_SESTOELEMENTO_CAST"); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO, skill_level); + if(castTime > 300){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 2, castTime - 200);} + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_SESTOELEMENTO); + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100)); + break; + } +} + +function onEndCurrentAni_Sestoelemento_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + break; + case 3: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + // case 10: + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + // break; + } +} + +function onProcCon_Sestoelemento_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 10: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime < 200) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + //移动施法技能大于0时,获取人物身上移动施法AP,push技能子状态及技能编号等 + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage){ + mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_SESTOELEMENTO); + mocAppendage.getVar().setBool(0, true); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + break; + } +} + +function onKeyFrameFlag_Sestoelemento_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Sestoelemento_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); + break; + } +} + +function onEndState_Sestoelemento_bykk(obj, new_state) +{ + sq_SendMessage(obj, 0, 0, 0); +} + +function onCreateObject_Sestoelemento_bykk(obj, createObject) +{ +} + +function checkExecutableSkill_SunBurst_bykk(obj) +{ + // print("test SunBurst"); + return 1; +} + +function onSetState_SunBurst_bykk(obj, state, datas, isResetTimer) +{ +} + +function onEndCurrentAni_SunBurst_bykk(obj) +{ +} + +function onProcCon_SunBurst_bykk(obj) +{ +} + +function onKeyFrameFlag_SunBurst_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_SunBurst_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_SunBurst_bykk(obj, new_state) +{ +} + +function checkExecutableSkill_Thegate_bykk(obj) +{ + // print("test Thegate"); + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_THEGATE); + if(b_useskill){ + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_THEGATE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THEGATE, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Thegate_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THEGATECAST_BODY); + break; + } +} + +function onEndCurrentAni_Thegate_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THEGATE, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Thegate_bykk(obj) +{ +} + +function onKeyFrameFlag_Thegate_bykk(obj, flagIndex) +{ + switch(flagIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/thegate/cast_start_maincircle.ani",75,0,60); + break; + case 2: + local target_number = 0; + local target_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THEGATE, 0); + local create_time = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THEGATE, 2); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THEGATE); + local create_number = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THEGATE, 0, skill_level); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THEGATE, 1, skill_level); + print("totalDamage = "+totalDamage); + local damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THEGATE, 2, skill_level); + obj.getVar("thegate_target").clear_obj_vector(); + local objectManager = obj.getObjectManager();//得到对象管理器 + local objectNumber = objectManager.getCollisionObjectNumber();//总数 + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i);//得到控制类对象 + if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + target_number = target_number + 1; + obj.getVar("thegate_target").push_obj_vector(object); + } + } + + if(target_number > 0){ + if(target_number.tofloat() / target_Max.tofloat() <= 0.5) totalDamage = totalDamage * damageRate / 100; + print("totalDamage count: "+totalDamage); + //local skill = sq_GetSkill(obj, ELEMENTALMASTER_SKILL_THEGATE); + local sub = sq_getRandom(0,3), isSeal = false; + if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THEGATE, 12) > 0){ + isSeal = true; + totalDamage = totalDamage * 15; + print("totalDamage on: "+totalDamage); + } + for(local i = 0; i < target_number; i++){ + local targetObj = obj.getVar("thegate_target").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(isSeal == true){ + cearteSkillPassive_Elementalmaster_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,380,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,10,totalDamage,sub,sq_GetGroup(activeObj),sq_GetUniqueId(activeObj),0,0,0,0,1,0); + } + else cearteSkillPassive_Elementalmaster_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,380,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,1,totalDamage,create_number,create_time,sq_getRandom(1,4),sq_GetGroup(activeObj),sq_GetUniqueId(activeObj),0,0,1,0); + } + } + } + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_THEGATE); + break; + case 3: + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/thegate/cast_end_maincircle.ani",75,0,60); + break; + } +} + +function onTimeEvent_Thegate_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_Thegate_bykk(obj, new_state) +{ +} + +function onCreateObject_Thegate_bykk(obj, createObject) +{ +} + + +function checkExecutableSkill_ThunderCalling_bykk(obj) +{ + // print("test ThunderCalling"); +} + +function onSetState_ThunderCalling_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_RemoveAimPointMark(); + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_THUNDERCALLING); + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + obj.setTimeEvent(0,200,1,false); + sq_StartDrawCastGauge(obj, 200, true); + // obj.sq_PlaySound("WZ_THUNDERC_01"); + break; + case 1: + obj.sq_RemoveAimPointMark(); + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_THUNDERC_02"); + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 3, skill_level); + local countMax = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 0, skill_level); + if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 11) > 0) countMax = 1; + local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 10) * 125 /100; + local hitTime = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 2); + local aimPosX = obj.sq_GetVectorData(datas, 1) - sq_GetXPos(obj); + local aimPosY = obj.sq_GetVectorData(datas, 2) - sq_GetYPos(obj); + local thunderstrikeEx_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERSTRIKEEX) + if(thunderstrikeEx_level > 0){ + local add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERSTRIKEEX, 0, thunderstrikeEx_level); + totalDamage = totalDamage * (1000 + add_Rate) / 1000; + hitTime = hitTime / 2; + } + if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){ + local range = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 3, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL)); + local minus_Rate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 1); + hitTime = hitTime * (100 - minus_Rate) / 100; + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_THUNDERCALLING,0,totalDamage,sizeRate,countMax,hitTime,range,2,0,0,1,0); + } + else{ + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_THUNDERCALLING,0,totalDamage,sizeRate,countMax,hitTime,0,1,0,0,1,0); + } + + if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 12) > 1000){ + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + local damage = totalDamage * 33 / 100; + for (local i = 0; i < objectNumber; i++){ + local object = objectManager.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= 650 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 325){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + cearteSkillPassive_Elementalmaster_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_THUNDERCALLING,3,damage,0,0,0,0,0,0,0,1,0); + } + } + } + + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(0); + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING); + break; + } +} + + +function onEndCurrentAni_ThunderCalling_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_ThunderCalling_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + local stateTime = obj.sq_GetStateTimer(); + if(stateTime <= 200) return; + local bDownKey = obj.isDownSkillLastKey(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + + if(!bDownKey || stateTime >= 1200){ + local aimPosX = obj.sq_GetAimPosX(posX, posY, false); + local aimPosY = obj.sq_GetAimPosY(posX, posY, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(aimPosX); + obj.sq_IntVectPush(aimPosY); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERCALLING, STATE_PRIORITY_USER, true); + } + break; + } +} + +function onKeyFrameFlag_ThunderCalling_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_ThunderCalling_bykk(obj, timeEventIndex, timeEventCount) +{ + switch(timeEventIndex){ + case 0: + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local offsetX = 150; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 5); + local vY = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 6); + + // local thunderstrikeEx_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERSTRIKEEX) + // if(thunderstrikeEx_level > 0){vX = vX * 2;vY = vY * 2;} + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + break; + } +} + +function onEndState_ThunderCalling_bykk(obj, new_state) +{ + if(new_state != ELEMENTALMASTER_SKILL_FLAMESTRIKE) obj.sq_RemoveAimPointMark(); +} + +function checkExecutableSkill_Thunderrage_bykk(obj) +{ + // print("test Thunderrage"); + local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_THUNDERRAGE); + if(b_useskill){ + obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_THUNDERRAGE); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true); + return 1; + } + return 0; +} + +function onSetState_Thunderrage_bykk(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THUNDERRAGE_CAST_START_00); + + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE); + local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, skill_level); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(false); + sq_StartDrawCastGauge(obj, delaySum, true); + obj.getVar("thunderrage").setInt(1,delaySum); + //音效 + obj.sq_PlaySound("R_WZ_THUNDER_RAGE_01_1",18); + // else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_01_2"); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100)); + //蓄气时钟开启 + obj.getVar("Thunderrage").clear_ct_vector(); + obj.getVar("Thunderrage").push_ct_vector(); + local timer = obj.getVar("Thunderrage").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + //获取蓄气上限 + local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 4); + local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0; + local memorize_level = sq_GetSkillLevel(obj, 19); + if(memorize_level > 0){ + minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){ + local magicaltempoup_level = sq_GetSkillLevel(obj, 2); + minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level); + } + local minus_Rate4 = 1000 - minus_Rate - minus_Rate3; + local fullcharge = 0; + if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000; + else fullcharge = 1; + obj.getVar("moveoncast").setInt(2,energycharge_Max); + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0); + break; + case 1: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THUNDERRAGE_CAST_LOOP_00); + + break; + case 2: + obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THUNDERRAGE_CAST_END_BODY); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/thunderrage/thunderrage_cast_end_shot_front_00.ani",45,0,55); + obj.stopSound(18); + //设置效果 + sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100)); + //声音 + obj.sq_PlaySound("R_WZ_THUNDER_RAGE_01_2"); + // else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_02_2"); + + local charge_obj = obj.getVar("moveoncast").get_obj_vector(0); + if(charge_obj) charge_obj.setValid(false); + + local timer = obj.getVar("Thunderrage").get_ct_vector(0); + local currentT = 0; + if(timer) currentT = timer.Get(); + local energycharge_Max = obj.getVar("moveoncast").getInt(2); + + local xiuzheng = 100; + if(currentT > energycharge_Max) xiuzheng = 120; + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(1); + sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); + + local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE); + local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 0, skill_level) * xiuzheng / 100; + local hitMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 0); + local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 2); + if(xiuzheng > 100) sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 3); + + cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,45,0,55,obj.getDirection(),ELEMENTALMASTER_SKILL_THUNDERRAGE,1,totalDamage,sizeRate,hitMax,0,0,0,0,0,1,0); + elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE); + break; + } +} + +function onEndCurrentAni_Thunderrage_bykk(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true); + break; + case 2: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onProcCon_Thunderrage_bykk(obj) +{ + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + case 1: + local timer = obj.getVar("Thunderrage").get_ct_vector(0); + if(!timer) return; + local currentT = timer.Get(); + if(currentT < obj.getVar("thunderrage").getInt(1)) return; + local bDownKey = obj.isDownSkillLastKey(); + if(!bDownKey){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + //移动施法技能大于0时,获取人物身上移动施法AP,push技能子状态及技能编号等 + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage){ + mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_THUNDERRAGE); + mocAppendage.getVar().setBool(0, true); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + break; + } +} + +function onKeyFrameFlag_Thunderrage_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Thunderrage_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_Thunderrage_bykk(obj, new_state) +{ + if(!obj) return; + if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){ + sq_EndDrawCastGauge(obj); + } + if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){ + if(sq_GetSkillLevel(obj, 38) > 0){ + local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); + if(mocAppendage) mocAppendage.getVar().setBool(0, false); + } + } +} + +function checkExecutableSkill_Void_bykk(obj) +{ + // print("test Void"); + return 1; +} + +function onSetState_Void_bykk(obj, state, datas, isResetTimer) +{ +} + +function onEndCurrentAni_Void_bykk(obj) +{ +} + +function onProcCon_Void_bykk(obj) +{ +} + +function onKeyFrameFlag_Void_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_Void_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_Void_bykk(obj, new_state) +{ +} + +function checkExecutableSkill_WallOfIce_bykk(obj) +{ + // print("test WallOfIce"); + return 1; +} + +function onSetState_WallOfIce_bykk(obj, state, datas, isResetTimer) +{ +} + +function onEndCurrentAni_WallOfIce_bykk(obj) +{ +} + +function onProcCon_WallOfIce_bykk(obj) +{ +} + +function onKeyFrameFlag_WallOfIce_bykk(obj, flagIndex) +{ +} + +function onTimeEvent_WallOfIce_bykk(obj, timeEventIndex, timeEventCount) +{ +} + +function onEndState_WallOfIce_bykk(obj, new_state) +{ +} + + +//聖靈符文 +function procSkill_Mightyrue(obj) +{ + if(sq_GetSkillLevel(obj, 34) < 1) return; + obj.setSkillCommandEnable(2 , false); + obj.setSkillCommandEnable(29 , false); +} + + +/////////////////////////elementalmaster_end////////////////////// + + diff --git a/user/116.205.165.25/6_mage_5.c b/user/116.205.165.25/6_mage_5.c new file mode 100644 index 0000000..e49a52e --- /dev/null +++ b/user/116.205.165.25/6_mage_5.c @@ -0,0 +1,2677 @@ + +function setCustomData_po_elementalmaster_bykk_kak(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("skillIndex").clear_vector(); + obj.getVar("skillIndex").push_vector(skillIndex); + obj.getVar("subtype").clear_vector(); + obj.getVar("subtype").push_vector(subtype); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + switch(subtype){ + case 1: + case 2://totalDamage,sizeRate,hitMax,hitTime,speedRate + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(hitMax); + obj.getVar("custom").push_vector(hitTime); + obj.getVar("custom").push_vector(speedRate); + obj.getVar("custom").push_vector(sub); + local attackIndex = 20; + if(subtype == 2) attackIndex = 8; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + } + local skill_level = sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE); + local prob = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 5, skill_level); + local level = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 6, skill_level); + local time = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 7, skill_level); + local minus_Rate = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 4, skill_level); + obj.getVar("custom").push_vector(minus_Rate); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local isBig = receiveData.readDword(); + obj.getVar("custom").setInt(10, sizeRate); + + local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icearea_att_3.ani"; + if(sq_getRandom(1, 100) > 50) aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icearea_att2_3.ani"; + if(subtype == 3){ + aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icefieldnormal1.ani"; + if(sq_getRandom(1, 100) > 50) aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icefieldnormal2.ani"; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + if(isBig > 300) sizeRate = sizeRate * 2.0; + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + pAni.setSpeedRate(speedRate.tofloat()); + + local attackIndex = 20; + if(subtype == 2) attackIndex = 8; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + } + local skill_level = sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE); + local prob = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 5, skill_level); + local level = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 6, skill_level); + local time = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 7, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + break; + } + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + if(sqrChr.getVar("blackhole").get_obj_vector_size() < 1){ + sqrChr.getVar("blackhole").clear_obj_vector(); + sqrChr.getVar("blackhole").push_obj_vector(obj); + } + if(!sqrChr.getVar("blackhole").is_obj_vector(obj)) sqrChr.getVar("blackhole").push_obj_vector(obj); + switch(subtype){ + case 1: + case 2://totalDamage,sizeRate,lifeTime,damageRate,attractPower,hitTime + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local attractPower = receiveData.readDword(); + local range = receiveData.readDword(); + local sub = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(attractPower); + obj.getVar("custom").push_vector(range); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(lifeTime); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(sub); + obj.getVar("custom").push_vector(hitTime); + local attackIndex = 37; + if(subtype == 2) attackIndex = 38; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + } + if(sq_GetLevelData(sqrChr, 58, 10, sq_GetSkillLevel(sqrChr, 58)) < 1) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local lifeTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/shockwave1_dodge.ani"; + if(sub == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/shockwave2_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,lifeTime,1,false); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + switch(subtype){ + case 1: + if(sqrChr.getVar("crystal").get_obj_vector_size() > 0) sqrChr.getVar("crystal").push_obj_vector(obj); + else{ + sqrChr.getVar("crystal").clear_obj_vector(); + sqrChr.getVar("crystal").push_obj_vector(obj); + } + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(1,sizeRate); + obj.getVar("custom").setInt(2,totalDamage); + if(sub > 0){ + obj.setTimeEvent(2, 2600, 1, false); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + case 3: + case 4: + if(sqrChr.getVar("crystal_effect" + subtype.tostring()).get_obj_vector_size() > 0) sqrChr.getVar("crystal_effect" + subtype.tostring()).push_obj_vector(obj); + else{ + sqrChr.getVar("crystal_effect" + subtype.tostring()).clear_obj_vector(); + sqrChr.getVar("crystal_effect" + subtype.tostring()).push_obj_vector(obj); + } + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(1,sizeRate); + if(subtype == 4){sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);}//obj.setTimeEvent(1,3300,1,false); + // else{obj.setTimeEvent(1,3000,1,false);} + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + switch(subtype){ + case 1: + sqrChr.getVar("elementalchain_light").clear_obj_vector();sqrChr.getVar("elementalchain_light").push_obj_vector(obj); + case 2: + sqrChr.getVar("elementalchain_ice").clear_obj_vector();sqrChr.getVar("elementalchain_ice").push_obj_vector(obj); + case 3: + sqrChr.getVar("elementalchain_fire").clear_obj_vector();sqrChr.getVar("elementalchain_fire").push_obj_vector(obj); + case 4: + if(subtype == 4){sqrChr.getVar("elementalchain_dark").clear_obj_vector();sqrChr.getVar("elementalchain_dark").push_obj_vector(obj);} + local lightTime = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(lightTime); + obj.getVar("custom").push_vector(sub); + obj.setDirection(ENUM_DIRECTION_RIGHT); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + if(sub <= 1) sq_moveWithParent(sqrChr, obj); + if(sub == 1) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else if(sub == 2) obj.addSetStatePacket(28, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 15: + local totalDamage = receiveData.readDword(); + local powerDamage = receiveData.readDword(); + local normal_rate = receiveData.readDword(); + local exp_rate = receiveData.readDword(); + local shoot_range = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(normal_rate); + obj.getVar("custom").push_vector(exp_rate); + obj.getVar("custom").push_vector(shoot_range); + obj.getVar("custom").push_vector(sq_GetXPos(obj)); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(powerDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 150: + local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + local powerDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage); + local currentAni = obj.getCurrentAnimation();//得到當前ani + local sizeRate = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + sizeRate = sizeRate.tofloat() / 1000.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(1, 200, 2, true); + obj.setTimeEvent(2, 50, 2, true); + obj.setTimeEvent(3, 15, 4, true); + obj.setTimeEvent(4, 100, 2, true); + break; + case 16: + local totalDamage = receiveData.readDword(); + local powerDamage = receiveData.readDword(); + local normal_rate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(0,lifeTime,1,false); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(normal_rate); + obj.getVar("custom").push_vector(sq_GetXPos(obj)); + obj.getVar("custom").push_vector(sq_GetYPos(obj)); + obj.getVar("custom").push_vector(sq_GetZPos(obj)); + obj.getVar("custom").push_vector(80); + obj.getVar("custom").push_vector(0); + obj.getVar("custom").push_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage); + local skill_level = sq_GetSkillLevel(sqrChr, 16); + local prob = sq_GetLevelData(sqrChr, 16, 11, skill_level); + local level = sq_GetLevelData(sqrChr, 16, 12, skill_level); + local time = sq_GetLevelData(sqrChr, 16, 13, skill_level); + local speed_level = sq_GetLevelData(sqrChr, 16, 7, skill_level); + local speed_time = sq_GetLevelData(sqrChr, 16, 8, skill_level); + local movespeed_rate = sq_GetLevelData(sqrChr, 16, 9, skill_level); + local attackspeed_rate = sq_GetLevelData(sqrChr, 16, 10, skill_level); + obj.getVar("custom").push_vector(speed_level); + obj.getVar("custom").push_vector(speed_time); + obj.getVar("custom").push_vector(movespeed_rate); + obj.getVar("custom").push_vector(attackspeed_rate); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 17: + local totalDamage = receiveData.readDword(); + local powerDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local angle = receiveData.readDword(); + local baseX = receiveData.readDword(); + local baseY = receiveData.readDword(); + obj.setTimeEvent(0,lifeTime,1,false); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(angle); + obj.getVar("custom").push_vector(baseX); + obj.getVar("custom").push_vector(baseY); + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent2.ani"),true); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent3.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent4.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage); + sizeRate = sizeRate.tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 18: + local totalDamage = receiveData.readDword(); + local powerDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speed_rate = receiveData.readDword(); + local shoot_range = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(speed_rate); + obj.getVar("custom").push_vector(shoot_range); + obj.getVar("custom").push_vector(sq_GetXPos(obj)); + obj.getVar("custom").push_vector(sq_GetZPos(obj)); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + local sizeRate = 100; + switch(subtype){ + case 1: + //totalDamage,sizeRate,lifeTime,damageRate,hitTime,hitMax + local totalDamage = receiveData.readDword(); + sizeRate = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local istalisman = receiveData.readDword(); + local totalDamage2 = totalDamage * damageRate / 100; + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(totalDamage2); + obj.getVar("custom").push_vector(hitMax); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(istalisman); + obj.getVar("target").clear_obj_vector(); + + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/blankwallhorizonbottom.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_aurora.ani"),true); + currentAni.addLayerAnimation(-1000,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_aurorabehind_aurora1.ani"),true); + + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + + obj.setTimeEvent(0,hitTime,-1,true); + obj.setTimeEvent(1,lifeTime,1,false); + + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj) + 400,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,2,lifeTime,sizeRate,0,0,0,0,0,0,0,0); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,3,lifeTime,sizeRate,0,0,0,0,0,0,0,0); + break; + case 2: + local lifeTime = receiveData.readDword(); + sizeRate = receiveData.readDword(); + obj.setTimeEvent(1,lifeTime + 300,1,false); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_aurorafront_sky1.ani"); + obj.setCurrentAnimation(ani); + break; + case 3: + local lifeTime = receiveData.readDword(); + sizeRate = receiveData.readDword(); + obj.setTimeEvent(1,lifeTime + 300,1,false); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_groundcircle.ani"); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 4: + local totalDamage = receiveData.readDword(); + sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_auroraend_broken.ani"); + obj.setCurrentAnimation(ani); + + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + + sq_flashScreen(obj,720,0,200,51, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.setTimeEvent(1,1000,1,false); + break; + } + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local istalisman = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(damageRate); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(istalisman); + sizeRate = sizeRate.tofloat() / 100.0; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/magiccircle.ani",0,0,0); + local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/quake_glowbeam.ani",0,0,0); + local effectObj = [pooledObj,pooledObj2]; + for(local i = 0; i < effectObj.len(); i++){ + local pAni = effectObj[i].getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + obj.setTimeEvent(1,400,1,false); + if(istalisman > 0) obj.setTimeEvent(2,120,20,false); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalquake/elementalquakefireexpdummy.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setLoop(false); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + local randomnumber = sq_getRandom(1,100); + local pooledObj; + if(randomnumber > 67) pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/flamestrike_blast_front02.ani",sq_getRandom(-350,350),sq_getRandom(-40,40),0); + else if(randomnumber > 33 && randomnumber <= 67) pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/flamestrike_blast_front02.ani",sq_getRandom(-233,233),sq_getRandom(-80,80),0); + else pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/flamestrike_blast_front02.ani",sq_getRandom(-115,115),sq_getRandom(-120,120),0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(0.4, 0.4); + currentAni.setAutoLayerWorkAnimationAddSizeRate(0.4); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage2); + local randomnumber = sq_getRandom(1, 4); + obj.getVar("custom").setInt(11, randomnumber); + obj.getVar("custom").setInt(12, sq_GetZPos(obj)); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local etcTime = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikebottoma_00.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(etcTime); + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + obj.getVar("targetObj").clear_obj_vector(); + obj.setTimeEvent(0,600,1,false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(group); + obj.getVar("custom").push_vector(uniqueId); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + switch(subtype){ + case 0: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sizeRate2 = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local typesub = receiveData.readDword(); + local number = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(sizeRate2); + obj.getVar("custom").push_vector(damageRate); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(sub); + obj.getVar("custom").push_vector(typesub); + obj.getVar("custom").push_vector(number); + obj.setTimeEvent(3,1000+220 * number,1,false); + obj.setTimeEvent(4,800,1,false); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalpotential/magictargetwarningterrible.ani",0,0,0); + break; + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sizeRate2 = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local sub = receiveData.readDword(); + print("sub = "+sub); + local totalDamage2 = totalDamage * damageRate / 100; + if(sub > 0){sizeRate = sizeRate * 166 / 100;sizeRate2 = sizeRate2 * 166 / 100;totalDamage = totalDamage * 10 / 100;totalDamage2 = totalDamage2 * 154 / 100;} + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(sizeRate2); + obj.getVar("custom").push_vector(totalDamage2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + } + local time = 1000; + if(sub > 0) time = 1500; + local speedRate = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_HALLOWEENBUSTER, 8, sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_HALLOWEENBUSTER)); + if(speedRate > 0){ + time = time / (100 + speedRate) * 100; + } + obj.getVar("move").setInt(10, sq_GetXPos(obj)); + obj.getVar("move").setInt(11, sq_GetZPos(obj)); + obj.setTimeEvent(5, time / 40, 40, true); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/sestoelemento/start_main.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("SESTOELEMENTO"); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + obj.setTimeEvent(1,3000/(hitMax+1),hitMax,true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, 800, 100); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/sestoelemento/explosion_main.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("SESTOELEMENTO_EXP"); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(!sqrChr) break; + CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + break; + } + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + switch(subtype){ + case 1:// + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/sunburst/sunburst.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local time = receiveData.readDword(); + obj.setTimeEvent(1, time, 1, false); + break; + } + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local create_number = receiveData.readDword(); + local create_time = receiveData.readDword(); + local sub = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + sq_moveWithParent(targetObj, obj); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(create_number); + obj.getVar("custom").push_vector(create_time); + obj.getVar("custom").push_vector(sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath1 = "passiveobject/elementalmaster_bykk/animation/thegate/"; + local aniPath2 = "light"; + switch(sub){ + case 2: aniPath2 = "ice"; break; + case 3: aniPath2 = "fire"; break; + case 4: aniPath2 = "dark"; break; + } + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/" + aniPath2 + "_crystal.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/thegate"+aniPath2+"tail.ptl", obj, 0, 0, 0, true, 10, 0, 3); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + switch(sub){ + case 1: if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); break; + case 2: if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); break; + case 3: if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); break; + case 4: if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); break; + } + + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sq_GetZPos(obj)); + obj.getVar("custom").push_vector(sub); + break; + case 10: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sub); + obj.getVar("custom").setInt(2, group); + obj.getVar("custom").setInt(3, uniqueId); + local aniPath0 = "passiveobject/elementalmaster_bykk/animation/thegate/talisman/"; + local aniPath1 = ["magiccircleblue","magiccirclepurple","magiccirclered","magiccircleyellow"]; + local aniPath2 = [["/magiccircleblue_01.ani","/magiccirclepurple_01.ani","/magiccirclered_01.ani","/magiccircleyellow_01.ani"], + ["/magiccircleblue_line_00.ani","/magiccirclepurple_line_00.ani","/magiccirclered_line_00.ani","/magiccircleyellow_line_00.ani"]]; + local ani = sq_CreateAnimation("",aniPath0 + aniPath1[sub] + aniPath2[0][sub]); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath0 + aniPath1[sub] + aniPath2[1][sub]),true); + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/mage/elementalmaster_bykk/ap_mage_hold.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/mage/elementalmaster_bykk/ap_mage_hold.nut"); + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/mage/elementalmaster_bykk/ap_mage_hold.nut", true); + sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 11: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local aniPath0 = "passiveobject/elementalmaster_bykk/animation/thegate/talisman/"; + local aniPath1 = ["magiccircleblue","magiccirclepurple","magiccirclered","magiccircleyellow"]; + local aniPath2 = ["/explosionblue_04.ani","/explosionpurple_05.ani","/explosionred_04.ani","/explosionyellow_04.ani"]; + // print("path = "+aniPath0 + aniPath1[sub] + aniPath2[sub]); + local ani = sq_CreateAnimation("",aniPath0 + aniPath1[sub] + aniPath2[sub]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + attackInfo.setElement(ENUM_ELEMENT_FIRE); + attackInfo.setElement(ENUM_ELEMENT_WATER); + attackInfo.setElement(ENUM_ELEMENT_DARK); + attackInfo.setElement(ENUM_ELEMENT_LIGHT); + obj.setTimeEvent(2,50,1,false); + sq_SetShake(obj, 15, 300); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + switch(subtype){ + case 0://totalDamage,sizeRate,countMax,hitTime,range,2 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local countMax = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local range = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(totalDamage); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(countMax); + obj.getVar("custom").push_vector(range); + obj.getVar("custom").push_vector(sub); + obj.getVar("custom").push_vector(hitTime); + local skill_level = sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING); + local prob = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING, 4, skill_level); + local level = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING, 5, skill_level); + local time = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING, 6, skill_level); + obj.getVar("custom").push_vector(prob); + obj.getVar("custom").push_vector(level); + obj.getVar("custom").push_vector(time); + if((countMax * hitTime) > 4000){ + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, countMax * hitTime); + } + obj.setTimeEvent(3,1000+(hitTime + 20) * countMax,1,false); + obj.setTimeEvent(4,800,1,false); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalpotential/magictargetwarningterrible.ani",0,0,0); + break; + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local range = receiveData.readDword(); + local prob = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local aniPath = "passiveobject/elementalmaster_bykk/animation/thunderstrike/thunderstrike_lightning01.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/thunderstrike/epthunderstrike_lightning01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local attackIndex = 29; + if(subtype == 2) attackIndex = 11; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time); + if(subtype == 1){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/thunderstrike/thunderstrike_hit01.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/thunderstrike/thunderstrike_floor.ani",0,0,0); + } + else if(subtype == 2){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalpotential/thunderstrike/epthunderstrike_hit01.ani",0,0,0); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + } + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + obj.sq_PlaySound("THUNDERC_LIGHTNING"); + obj.setTimeEvent(1,200,1,false); + break; + case 3: + local totalDamage = receiveData.readDword(); + print("totalDamage = "+totalDamage); + local aniPath = "passiveobject/character/mage/animation/thunderstrike.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/mage/animation/thunderstrikeeffect.ani", 0, -1, 0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/thunderrage/thunderrage_cast_end_shot_back_05.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + + sizeRate = sizeRate.tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + local delaySum = pAni.getDelaySum(0,13); + obj.setTimeEvent(1,delaySum/(hitMax + 1),hitMax,true); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local shoot_range = receiveData.readDword(); + local hittime = receiveData.readDword(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(shoot_range); + obj.getVar("custom").push_vector(sq_GetXPos(obj)); + obj.getVar("custom").push_vector(sizeRate); + obj.setTimeEvent(0,hittime,-1,false); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/void.ptl", 0.0, 0.0); + // sq_SetSpeedToMoveParticle(obj,0,speed); + obj.setTimeEvent(1,20,-1,false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hittime = receiveData.readDword(); + local timeMax = receiveData.readDword(); + local damageRate = receiveData.readDword(); + local damageRate2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isExp = receiveData.readDword(); + local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); + local totalDamage3 = (totalDamage.tofloat() * damageRate2.tofloat() / 100.0).tointeger(); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(hittime); + obj.getVar("custom").push_vector(timeMax); + obj.getVar("custom").push_vector(totalDamage3); + obj.getVar("custom").push_vector(sizeRate); + obj.getVar("custom").push_vector(isExp); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage2); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + sqrChr.getVar("moveoncast").clear_obj_vector(); + sqrChr.getVar("moveoncast").push_obj_vector(obj); + local chargeTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local fullcharge = receiveData.readDword(); + obj.setTimeEvent(0,chargeTime,1,false); + obj.getVar("custom").clear_vector(); + obj.getVar("custom").push_vector(sub); + obj.setMapFollowParent(obj.getParent()); + obj.setMapFollowType(1); + sq_moveWithParent(sqrChr, obj); + if(fullcharge > 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function setState_po_elementalmaster_bykk_kak(obj, state, datas) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(state); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/icefieldfloorappear.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/field2floorappear.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("custom").get_vector(3); + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, 300); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 21: + local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/icefield.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/field2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local hitTime = obj.getVar("custom").get_vector(2); + local sub = obj.getVar("custom").get_vector(4); + obj.setTimeEvent(1,hitTime,-1,false); + if(sub == 0) obj.setTimeEvent(2,hitTime / 2,-1,false); + else if(sub == 1) obj.setTimeEvent(3,900,-1,true); + break; + case 22: + obj.stopTimeEvent(1); + local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/icefieldfloordisappear.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/field2disappear.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/nighthollow1_start_dodge.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/nighthollow2_start_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("NIGHTH_IN") + break; + case 21: + local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/nighthollow1_loop_dodge.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/nighthollow2_loop_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").get_vector(4); + local sizeRate = obj.getVar("custom").get_vector(0); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,3,lifeTime,subtype,sizeRate,0,0,0,0,0,0,0); + local hitTime = obj.getVar("custom").get_vector(7); + obj.setTimeEvent(1,hitTime,-1,false); + obj.setTimeEvent(0,lifeTime,1,false); + obj.setTimeEvent(3,1800,-1,true); + if(!sqrChr) break; + local attractPower = obj.getVar("custom").get_vector(1); + local range = obj.getVar("custom").get_vector(2); + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "appendage/character/ap_common_suck.nut")) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(attractPower, attractPower, range, 100); + } + break; + case 22: + obj.stopTimeEvent(1); + obj.stopTimeEvent(3); + local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/nighthollow1_exp_dodge.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/nighthollow2_exp_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("NIGHTH_OUT"); + obj.setTimeEvent(2,400,1,false); + local totalDamage = obj.getVar("custom").get_vector(3); + local attackIndex = 40; + if(subtype == 2) attackIndex = 39; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + } + if(!sqrChr) break; + CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow01_loop.ani");// + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow01_start.ani",0,0,50); + obj.setTimeEvent(2,650,4,false); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow02_loop.ani");// + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow02_start.ani",0,0,50); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow03_loop.ani");// + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow03_start.ani",0,0,50); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow04_loop.ani");// + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow04_start_back.ani",0,0,50); + sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow04_start.ani",0,0,50); + break; + case 24: + obj.stopTimeEvent(2); + local effectObj2 = sqrChr.getVar("crystal_effect2").get_obj_vector(0); + if(effectObj2){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj2);colObj.setTimeEvent(1,100,1,true);} + local effectObj3 = sqrChr.getVar("crystal_effect3").get_obj_vector(0); + if(effectObj3){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj3);colObj.setTimeEvent(1,100,1,true);} + local effectObj4 = sqrChr.getVar("crystal_effect4").get_obj_vector(0); + if(effectObj4){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj4);colObj.setTimeEvent(1,500,1,false);} + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/finish/front/crystalofovermind_finish_front_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/finish/back/crystalofovermind_finish_back_00.ani"),true); + local totalDamage = obj.getVar("custom").getInt(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + case 3: + case 4: + local aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/"; + switch(state){ + case 20: + local aniPath2 = "crystalofmind_side_back01_start.ani"; + if(subtype == 3) aniPath2 = "crystalofmind_side_front_start.ani"; + if(subtype == 4) aniPath2 = "crystalofovermind_background_01.ani"; + local ani = sq_CreateAnimation("",aniPath1 + "start/" + aniPath2); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath2 = "crystalofmind_side_back01.ani"; + if(subtype == 3) aniPath2 = "crystalofmind_side_front_loop01.ani"; + if(subtype == 4) aniPath2 = "crystalofovermind_background_01.ani"; + local ani = sq_CreateAnimation("",aniPath1 + "loop/" + aniPath2); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath2 = "crystalofmind_side_back01_finish.ani"; + if(subtype == 3) aniPath2 = "crystalofmind_side_front_finish.ani"; + if(subtype == 4) {sq_SendDestroyPacketPassiveObject(obj);return;} + local ani = sq_CreateAnimation("",aniPath1 + "end/" + aniPath2); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(1); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + local aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/elementalchain/mark"; + local aniPath2 = "light"; + if(subtype == 2) aniPath2 = "ice"; + if(subtype == 3) aniPath2 = "fire"; + if(subtype == 4) aniPath2 = "dark"; + if(obj.getVar("custom").get_vector(1) == 1) aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/mightyrune/"; + if(obj.getVar("custom").get_vector(1) == 2) aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/mightyrune/lv95assimilate/"; + switch(state){ + case 20: + local ani = sq_CreateAnimation("",aniPath1 + "appear_" + aniPath2 + "_1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "appear_" + aniPath2 + "_2.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("",aniPath1 + "stay_" + aniPath2 + "_1.ani"); + obj.setCurrentAnimation(ani); + if(subtype == 1) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 23); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "stay_" + aniPath2 + "_2.ani"),true); + break; + case 22: + if(obj.isExistTimeEvent(1)) obj.stopTimeEvent(1); + local ani = sq_CreateAnimation("",aniPath1 + "activate_" + aniPath2 + "_1.ani"); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").get_vector(0); + obj.setTimeEvent(1,lifeTime,1,false); + if(subtype == 1) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 30); + if(subtype == 4) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 35); + break; + case 23: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "cast.ani"); + obj.setCurrentAnimation(ani); + break; + case 24: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "off_02.ani"); + obj.setCurrentAnimation(ani); + break; + case 25: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "changeon_02.ani"); + obj.setCurrentAnimation(ani); + break; + case 26: + if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "on_02.ani"); + obj.setCurrentAnimation(ani); + local lightTime = obj.getVar("custom").get_vector(0); + obj.setTimeEvent(1,lightTime,1,false); + break; + case 27: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "changeoff.ani"); + obj.setCurrentAnimation(ani); + break; + case 28: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "spherestart_00.ani "); + obj.setCurrentAnimation(ani); + break; + case 29: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "sphereloop_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 15: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolstart.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolfirestart.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolmove.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolfiremove.ani"),true); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 16: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrosthead.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setLoop(true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrostheadjump.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("custom").set_vector(1,sq_GetXPos(obj)); + obj.getVar("custom").set_vector(2,sq_GetYPos(obj)); + obj.getVar("custom").set_vector(3,sq_GetZPos(obj)); + local targetObj = obj.sq_FindFirstTarget(-9999, 19998, 9999, 9999); + if(targetObj){ + local targetObj_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); + obj.getVar("custom").set_vector(5,targetObj_y); + if(sq_GetXPos(targetObj) > sq_GetXPos(obj) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + else if(sq_GetXPos(targetObj) < sq_GetXPos(obj) && obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_LEFT); + } + obj.getVar("custom").set_vector(6,130); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/launchfrostheadjumpeffect.ani",0,-1,-1); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrostheadhit.ani"); + obj.setCurrentAnimation(ani); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrostheaddisappear.ani"); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 18: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatshoot1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatshoot2.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovego1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovego2.ani"),true); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatturn1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatturn2.ani"),true); + obj.getVar("custom").set_vector(3,sq_GetXPos(obj)); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovereturn1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovereturn2.ani"),true); + obj.resetHitObjectList(); + break; + case 24: + local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatreturn1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatreturn2.ani"),true); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + switch(subtype){ + case 1: + switch(state){ + case 20: + local randomnumber = obj.getVar("custom").getInt(11); + local aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/darkdrop.ani"; + if(randomnumber == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/firedrop.ani"; + if(randomnumber == 3) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/lightdrop.ani"; + if(randomnumber == 4) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/waterdrop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, 100); + local sizeRate = 2.5; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(1, 10, 13, true); + obj.sq_PlaySound("COLORLESS_CHASER"); + break; + case 21: + local randomnumber = obj.getVar("custom").getInt(11); + local aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/darkexp.ani"; + if(randomnumber == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/fireexp.ani"; + if(randomnumber == 3) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/lightexp.ani"; + if(randomnumber == 4) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/waterexp.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + switch(randomnumber){ + case 1: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/darkexplayer.ani"),true); obj.sq_PlaySound("DARK_BOMB"); break; + case 2: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/fireexplayer.ani"),true); obj.sq_PlaySound("FIRE_BOMB"); break; + case 3: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/lightexplayer.ani"),true); obj.sq_PlaySound("LIGHT_BOMB"); break; + case 4: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/waterexplayer.ani"),true); obj.sq_PlaySound("WATER_BOMB"); break; + } + local sizeRate = 2.5; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + local totalDamage = obj.getVar("custom").getInt(10); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //obj.sq_PlaySound("CHASER_EXPLOSION"); + break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/new/flamestrike_start_floor01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/new/flamestrike_start_floor03.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/new/flamestrike_blast_front02.ani"); + obj.setCurrentAnimation(ani); + sq_CreateParticle("passiveobject/character/mage/particle/flamestrikeparticle-1.ptl", obj, 0, 0, 0, true, 1, 0, 1); + sq_CreateParticle("passiveobject/character/mage/particle/flamestrikeparticle-2.ptl", obj, 0, 0, 0, true, 1, 0, 1); + sq_SetMyShake(obj, 10, 150); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikea_00.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikeb_02.ani"); + obj.setCurrentAnimation(ani); + local group = obj.getVar("custom").get_vector(1); + local uniqueId = obj.getVar("custom").get_vector(2); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,0); + sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/flamestrikeparticlenew1.ptl", obj, 0, 0, 0, true, 1, 0, 1); + sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/flamestrikeparticlenew2.ptl", obj, 0, 0, 0, true, 1, 0, 1); + sq_SetMyShake(obj, 10, 150); + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/elementalmaster_bykk/animation/halloweenbuster/halloweenbustera_meteor_base01.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/halloweenbuster/ep_halloweenbustera_meteor_base01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(subtype == 2){ + sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/elementalpotentialhalloweenbursterexp.ptl", obj, 0, 0, 0, true, 30, 0, 1); + sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/elementalpotentialhalloweenbursterexpsmoke.ptl", obj, 0, 0, 0, true, 10, 0, 1); + } + break; + case 21: + obj.sq_RemoveMoveParticle(); + obj.stopTimeEvent(0); + obj.stopTimeEvent(1); + local aniPath = "passiveobject/elementalmaster_bykk/animation/halloweenbuster/halloweenbuster_explosion_04.ani"; + if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/halloweenbuster/ep_halloweenbuster_explosion_04.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/elementalpotential/halloweenbuster/ep_halloweenbuster_particle01.ani",0,0,0); + } + break; + } + local sizeRate = obj.getVar("custom").get_vector(0); + if(state == 21) sizeRate = obj.getVar("custom").get_vector(1); + sizeRate = sizeRate.tofloat() / 1000.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(subtype){ + case 1: + local aniPath1 = "passiveobject/elementalmaster_bykk/animation/thegate/"; + local aniPath2 = "light"; + switch(obj.getVar("custom").get_vector(3)){ + case 2: aniPath2 = "ice"; break; + case 3: aniPath2 = "fire"; break; + case 4: aniPath2 = "dark"; break; + } + switch(state){ + case 20: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/start/" + aniPath2 + "_magic.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath1 + aniPath2 + "/start/" + aniPath2 + "_aura.ani"),true); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + case 21: + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/loop/" + aniPath2 + "_magic.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath1 + aniPath2 + "/loop/" + aniPath2 + "_aura.ani"),true); + local create_time = obj.getVar("custom").get_vector(2); + obj.setTimeEvent(1,create_time,-1,true); + break; + case 22: + obj.stopTimeEvent(1); + local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/end/" + aniPath2 + "_magic.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath1 + aniPath2 + "/end/" + aniPath2 + "_aura.ani"),true); + break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void1_start.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void1_loop.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void1_end.ani"); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").get_vector(2); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/start_00.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/start_06.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/start_07.ani",0,0,0); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/loop_00.ani"); + obj.setCurrentAnimation(ani); + local timeMax = obj.getVar("custom").get_vector(1); + print("timemax = "+timeMax); + obj.setTimeEvent(1, timeMax, 1, false); + break; + case 22: + obj.stopTimeEvent(0); + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/end_04.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + local sizeRate = obj.getVar("custom").get_vector(3); + sizeRate = sizeRate.tofloat() / 230.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + local aniPath1 = "character/mage/effect/animation/magic"; + local sub = obj.getVar("custom").get_vector(0); + if(sub == 4){ + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magiconcharge2_1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magiconcharge2_2.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magicfullcharge2_1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magicfullcharge22_1.ani"),true); + break; + } + return; + } + switch(state){ + case 20: + local ani = sq_CreateAnimation("",aniPath1 + "oncharge" + sub.tostring() + "1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "oncharge" + sub.tostring() + "2.ani"),true); + break; + case 21: + local ani = sq_CreateAnimation("",aniPath1 + "fullcharge" + sub + "1.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "oncharge" + sub.tostring() + "2.ani"),true); + break; + } + break; + } + + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + } +} + +function onEndCurrentAni_po_elementalmaster_bykk_kak(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + case 4: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + case 22: + case 23: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + case 3: + case 4: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + switch(state){ + case 20: + case 22: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + case 25: + case 28: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 27: + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 15: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 150: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 16: + if(state == 21) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else if(state == 22 || state == 23) sq_SendDestroyPacketPassiveObject(obj); + break; + case 18: + switch(state){ + case 20: + case 21: + case 22: + case 23: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break + } + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + switch(subtype){ + case 1: + case 3: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + if(subtype == 0 || state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + sq_SendDestroyPacketPassiveObject(obj); + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + sq_SendDestroyPacketPassiveObject(obj); + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 10: sq_SendDestroyPacketPassiveObject(obj); break; + case 11: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + sq_SendDestroyPacketPassiveObject(obj); + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + sq_SendDestroyPacketPassiveObject(obj); + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + switch(subtype){ + case 1: + case 2: + switch(state){ + case 20: + if(obj.getVar("custom").get_vector(4) > 0) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + if(state == 21) sq_SendDestroyPacketPassiveObject(obj); + break; + } + +} + +function onTimeEvent_po_elementalmaster_bykk_kak(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + switch(timeEventIndex){ + case 1: + if(timeEventCount >= obj.getVar("custom").get_vector(1)){ + obj.stopTimeEvent(1); + obj.stopTimeEvent(2); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + obj.resetHitObjectList(); + obj.sq_PlaySound("ARCTICF_MCIRCLE"); + break; + case 2: + local aniPath = ["passiveobject/elementalmaster_bykk/animation/icefield/icefieldnormal1.ani","passiveobject/elementalmaster_bykk/animation/icefield/icefieldnormal2.ani"]; + if(subtype == 2) aniPath = ["passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/icearea_att_3.ani","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/icearea_att2_3.ani"]; + local sizeRate = obj.getVar("custom").get_vector(0); + local sizeRate_balance = 120; + local randomnumber = sq_getRandom(1,100); + if(randomnumber > 75) sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-113,113)*sizeRate/sizeRate_balance,sq_getRandom(-71,71)*sizeRate/sizeRate_balance,0); + else if(randomnumber <= 75 && randomnumber > 50) sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-250,250)*sizeRate/sizeRate_balance,sq_getRandom(-20,20)*sizeRate/sizeRate_balance,0); + else if(randomnumber <= 50 && randomnumber > 25) sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-172,172)*sizeRate/sizeRate_balance,sq_getRandom(-30,30)*sizeRate/sizeRate_balance,0); + else sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-217,217)*sizeRate/sizeRate_balance,sq_getRandom(-43,43)*sizeRate/sizeRate_balance,0); + obj.sq_PlaySound("ARCTICF_ICE_OUT"); + break; + case 3: + local pooledObj = createOnlyDrawObject_elementalmaster_bykk(obj,"passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikebottoma_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + break; + } + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + switch(timeEventIndex){ + case 0: + switch(subtype){ + case 1: + case 2: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 1: obj.resetHitObjectList(); break; + case 2: + local sub = obj.getVar("custom").get_vector(6); + if(sub > 0){ + local sizeRate = obj.getVar("custom").get_vector(0) / 2; + local attractPower = obj.getVar("custom").get_vector(1) * 150 / 100; + local range = obj.getVar("custom").get_vector(2); + local totalDamage2 = obj.getVar("custom").get_vector(3) * 25 / 100; + local lifeTime = obj.getVar("custom").get_vector(4) / 2; + local totalDamage = obj.getVar("custom").get_vector(5) * 25 / 100; + local hitTime = obj.getVar("custom").get_vector(7); + local damageRate = totalDamage2 / totalDamage * 100; + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,subtype,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,0,hitTime,0,0); + } + break; + case 3: + obj.stopSound(20); + obj.sq_PlaySound("NIGHTH_LOOP",20); + break; + } + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + switch(timeEventIndex){ + case 0: + sqrChr.getVar("elementalchain").setBool(0, false); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrChr,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); + if(!addAppendage) return; + addAppendage.getVar().setBool(subtype, false); + setElementalChainBuff_bykk(sqrChr,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,addAppendage); + if(obj.getVar("custom").get_vector(1) > 0) obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 150: + local sizeRate = obj.getVar("custom").get_vector(0); + sizeRate = sizeRate.tofloat() / 1000.0; + switch(timeEventIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 2: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 4: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + case 16: + switch(timeEventIndex){ + case 0: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 1: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 17: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + switch(timeEventIndex){ + case 0: + local hitMax = obj.getVar("custom").get_vector(2); + if(timeEventCount >= hitMax - 2 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0,true); + local totalDamage = obj.getVar("custom").get_vector(1); + local sizeRate = obj.getVar("custom").get_vector(0); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,4,totalDamage,sizeRate,0,0,0,0,0,0,0,0); + } + if(timeEventCount >= hitMax){obj.stopTimeEvent(0);return;} + obj.resetHitObjectList(); + break; + case 1: + if(subtype == 1 && obj.getVar("custom").get_vector(4) > 0){ + local size = obj.getVar("targetObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("targetObj").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj.getVar("elementalcurtain").getBool(0) == true) activeObj.getVar("elementalcurtain").setBool(0, false); + } + } + } + } + if(subtype == 1){ + local size = obj.getVar("target").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("target").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/mage/elementalmaster_bykk/ap/ap_elementalcurtain.nut"); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + switch(timeEventIndex){ + case 1: + local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalquake/quakebottom_crack.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); + local sizeRate = obj.getVar("custom").get_vector(2); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = obj.getVar("custom").get_vector(0) * 10 / 100; + local sizeRate = obj.getVar("custom").get_vector(2); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALQUAKE,2,totalDamage,sizeRate,0,0,0,0,0,0,0,0); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + switch(timeEventIndex){ + case 1: + local baseZ = obj.getVar("custom").getInt(12); + local MoveZ = sq_GetUniformVelocity(baseZ, 0, timeEventCount, 13); + sq_setCurrentAxisPos(obj, 2, MoveZ); + if(timeEventCount >= 13){ + sq_SetMyShake(obj, 20, 200); + local randomnumber = obj.getVar("custom").getInt(11); + switch(randomnumber){ + case 1: obj.sq_PlaySound("DARK_CHASER"); break; + case 1: obj.sq_PlaySound("FIRE_CHASER"); break; + case 1: obj.sq_PlaySound("LIGHT_CHASER"); break; + case 1: obj.sq_PlaySound("WATER_CHASER"); break; + } + } + break; + } + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + local sizeRate = obj.getVar("custom").get_vector(0); + local sizeRate2 = obj.getVar("custom").get_vector(1); + local damageRate = obj.getVar("custom").get_vector(2); + local totalDamage = obj.getVar("custom").get_vector(3); + local sub = obj.getVar("custom").get_vector(4); + local typesub = obj.getVar("custom").get_vector(5); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,-500,0,sq_GetZPos(obj) + 400,obj.getDirection(),ELEMENTALMASTER_SKILL_HALLOWEENBUSTER,typesub,totalDamage,sizeRate,sizeRate2,damageRate,sub,0,0,0,0,0); + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: obj.setTimeEvent(2,200,obj.getVar("custom").get_vector(6),true); break; + case 5: + local x = sq_GetUniformVelocity(0, 500, timeEventCount, 40); + local moveX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), x); + local moveZ = sq_GetUniformVelocity(obj.getVar("move").getInt(11), 0, timeEventCount, 40); + sq_setCurrentAxisPos(obj, 0, moveX); + sq_setCurrentAxisPos(obj, 2, moveZ); + if(timeEventCount >= 40) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + if(timeEventIndex == 1) obj.resetHitObjectList(); + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + switch(timeEventIndex){ + case 1: + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(21); + sqrChr.sq_IntVectPush(31); + sqrChr.sq_IntVectPush(3); + sqrChr.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(timeEventIndex){ + case 1: + local create_number = obj.getVar("custom").get_vector(1); + local totalDamage = obj.getVar("custom").get_vector(0); + local sub = obj.getVar("custom").get_vector(3); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj) - 20,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,2,totalDamage,sub,0,0,0,0,0,0,0,0); + if(timeEventCount >= create_number){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,33); + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + switch(timeEventIndex){ + case 0: break; + case 1: sq_SetMyShake(obj,2,100); break; + case 2: + local totalDamage = obj.getVar("custom").get_vector(0); + local sizeRate = obj.getVar("custom").get_vector(1); + local range = obj.getVar("custom").get_vector(3); + local sub = obj.getVar("custom").get_vector(4); + local prob = obj.getVar("custom").get_vector(6); + local level = obj.getVar("custom").get_vector(7); + local time = obj.getVar("custom").get_vector(8); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_THUNDERCALLING,sub,totalDamage,sizeRate,range,prob,level,time,0,0,0,0); + if(obj.getVar().getBool(0) == false && sub == 2){ + if(range <= 0) return; + monsterpulled_elementalmaster_bykk(sqrChr,obj,0,0,0,200,range); + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: + local hitTime = obj.getVar("custom").get_vector(5); + local countMax = obj.getVar("custom").get_vector(2); + obj.setTimeEvent(2,hitTime,countMax,true); + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + if(timeEventIndex == 1) obj.resetHitObjectList(); + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local shoot_range = obj.getVar("custom").get_vector(0); + local baseX = obj.getVar("custom").get_vector(1); + if(sq_Abs(sq_GetXPos(obj) - baseX) > shoot_range){ + obj.stopTimeEvent(0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case 2: + if(timeEventIndex == 0) obj.resetHitObjectList(); + else if(timeEventIndex == 1) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + if(timeEventIndex == 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + +} + +function onAttack_po_elementalmaster_bykk_kak(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + //enableClearDeadEnemies(obj, damager); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local minus_Rate = obj.getVar("custom").get_vector(4); + if(!sq_IsFixture(activeObj) && activeObj.getVar().getInt(100) < 1){ + activeObj.getVar().setInt(100,100); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -minus_Rate.tofloat(), 0); + if(ap){ + ap.getAppendageInfo().setValidTime(3000); + ap.sq_Append(activeObj, obj); + } + } + } + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + switch(subtype){ + case 15: + switch(state){ + case 21: + local totalDamage = obj.getVar("custom").get_vector(4); + local powerDamage = obj.getVar("custom").get_vector(5); + local sizeRate = obj.getVar("custom").get_vector(1); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,150,totalDamage,powerDamage,sizeRate,0,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 16: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 17: + local speed_time = obj.getVar("custom").get_vector(8); + local movespeed_rate = obj.getVar("custom").get_vector(9); + local attackspeed_rate = obj.getVar("custom").get_vector(10); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -(movespeed_rate * 0.1).tofloat(), speed_time); + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, -(attackspeed_rate * 0.1).tofloat(), speed_time); + if(ap && damager.getVar().getBool(0) == false) {damager.getVar().setBool(0,true);ap.sq_Append(damager, obj);} + if(ap2 && damager.getVar().getBool(1) == false) {damager.getVar().setBool(1,true);ap2.sq_Append(damager, obj);} + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + damager = sq_GetCNRDObjectToActiveObject(damager); + if(damager.getState() == STATE_DIE) return; + switch(subtype){ + case 1: + sq_AddDrawOnlyAniFromParent(damager,"passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_hit.ani",0,0,sq_GetCenterZPos(boundingBox)); + if(damager.getVar("elementalcurtain").getBool(0) == false && obj.getVar("custom").get_vector(4) > 0){ + damager.getVar("elementalcurtain").setBool(0, true); + obj.getVar("targetObj").push_obj_vector(damager); + local totalDamage = obj.getVar("custom").get_vector(3) * 45 / 100; + cearteSkillPassive_Elementalmaster_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj) + 380,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,1,totalDamage,20,100,sq_getRandom(1,4),sq_GetGroup(damager),sq_GetUniqueId(damager),0,0,0,0); + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/elementalmaster_bykk/ap/ap_elementalcurtain.nut")){ + obj.getVar("target").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/elementalmaster_bykk/ap/ap_elementalcurtain.nut", true); + sq_HoldAndDelayDie(damager, obj, true, false, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + break; + case 2: + sq_AddDrawOnlyAniFromParent(damager,"passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_finishhit.ani",0,0,sq_GetCenterZPos(boundingBox)); + break; + } + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/skillnut/ap_elementalquake.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/elementalmaster_bykk/skillnut/ap_elementalquake.nut", true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + switch(subtype){ + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + damager = sq_GetCNRDObjectToActiveObject(damager); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/elementalmaster_bykk/ap/ap_flamestrike.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_flamestrike.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/elementalmaster_bykk/ap/ap_flamestrike.nut", true); + local time = 600 + obj.getVar("custom").get_vector(2); + AddAppendage.sq_SetValidTime(time); + sq_HoldAndDelayDie(damager, obj, true, true, true, 50, 300, ENUM_DIRECTION_NEUTRAL , AddAppendage); + local sizeRate = obj.getVar("custom").get_vector(0); + local totalDamage = obj.getVar("custom").get_vector(1); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + cearteSkillPassive_Elementalmaster_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_FLAMESTRIKE,3,totalDamage,sizeRate,group,uniqueId,0,0,0,0,0,0); + } + break; + } + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(subtype){ + case 2: + local sub = obj.getVar("custom").get_vector(1); + local aniPath2 = "light"; + switch(sub){ + case 2: aniPath2 = "ice"; break; + case 3: aniPath2 = "fire"; break; + case 4: aniPath2 = "dark"; break; + } + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/thegate/"+aniPath2+"/"+aniPath2+"_shock.ani",0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + break; + } + +} + +function onKeyFrameFlag_po_elementalmaster_bykk_kak(obj, flagIndex) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + if(flagIndex == 1){ + local sizeRate = obj.getVar("custom").getInt(10); + sizeRate = sizeRate.tofloat() / 100.0; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/elementalmaster_bykk/animation/icefield/new/icefielddisappear1.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + switch(flagIndex){ + case 1: sq_SetMyShake(obj,8,200); break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + switch(flagIndex){ + case 1: + sq_flashScreen(obj,0, 50, 150, 51, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,6,360); + break; + case 2: + obj.resetHitObjectList(); + break; + case 3: + sq_flashScreen(obj,0, 50, 200, 76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,7,360); + break; + case 4: + sq_flashScreen(obj,0, 300, 300, 102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,8,500); + break; + case 5: + local totalDamage = obj.getVar("custom").get_vector(0); + local damageRate = obj.getVar("custom").get_vector(1); + totalDamage = totalDamage * damageRate / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.getVar("custom").get_vector(3) < 1){ + if(sqrChr){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(3); + sqrChr.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); + } + } + break; + case 6: + sq_flashScreen(obj,0, 60, 500, 127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj,10,500); + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(flagIndex){ + case 25: + local totalDamage = obj.getVar("custom").getInt(0); + local sub = obj.getVar("custom").getInt(1); + local group = obj.getVar("custom").getInt(2); + local uniqueId = obj.getVar("custom").getInt(3); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + cearteSkillPassive_Elementalmaster_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,11,totalDamage,sub,group,uniqueId,0,0,0,0,0,0); + } + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + if(subtype == 1 && flagIndex == 1){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void4.ani"),true); + } + if(subtype == 2 && flagIndex == 1){ + local hitTime = obj.getVar("custom").get_vector(0); + print("hittime = "+hitTime); + obj.setTimeEvent(0,hitTime,-1,false); + } + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + break; + } + +} + +function procAppend_po_elementalmaster_bykk_kak(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放 + break; + case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞 + break; + case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃 + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + if(!sqrChr || sqrChr.getState() == STATE_DIE){sq_SendDestroyPacketPassiveObject(obj); break;} + switch(state){ + case 28: + case 29: + local currentT = sq_GetObjectTime(obj); + local currentSpeedRate = 1.0 ; + local defaultRoundTime = 5120; + + local radius = 50; + local base100Angle = 0; + switch(subtype){ + case 1: base100Angle = 4500; break; + case 2: base100Angle = 13500; break; + case 3: base100Angle = 22500; break; + case 4: base100Angle = 31500; break; + } + local baseX = sqrChr.getXPos(); + local baseY = sqrChr.getYPos(); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); + + local axisMagnifyRate = 50 * 0.5; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseY + upMovLen.tointeger(); + local mov_z = sq_GetZPos(sqrChr) + 35; + local offset_z = 13; + if(subtype == 2 || subtype == 4) offset_z = -13; + if(currentT % defaultRoundTime <= 1280 && currentT % defaultRoundTime > 0) mov_z = mov_z + sq_GetUniformVelocity(0, offset_z, currentT % defaultRoundTime, 1280); + else if(currentT % defaultRoundTime <= 2560 && currentT % defaultRoundTime > 1280) mov_z = mov_z + sq_GetUniformVelocity(offset_z, 0, currentT % defaultRoundTime - 1280, 1280); + else if(currentT % defaultRoundTime <= 3840 && currentT % defaultRoundTime > 2560) mov_z = mov_z + sq_GetUniformVelocity(0, -offset_z, currentT % defaultRoundTime - 2560, 1280); + else if(currentT % defaultRoundTime <= 5120 && currentT % defaultRoundTime > 3840) mov_z = mov_z + sq_GetUniformVelocity(-offset_z, 0, currentT % defaultRoundTime - 3840, 1280); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 2, mov_z);//sqrChr.getZPos() + 30); + break; + } + break; + case 15: + switch(state){ + case 21: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 800; + local srcX = obj.getVar("custom").get_vector(3); + local MoveX = obj.getVar("custom").get_vector(2) * 4 / 10; + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(currentT > fireT) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 16: + switch(state){ + case 20: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 500; + local srcX = obj.getVar("custom").get_vector(1); + local srcY = obj.getVar("custom").get_vector(2); + local srcZ = obj.getVar("custom").get_vector(3); + local MoveX = obj.getVar("custom").get_vector(4); + local MoveY = obj.getVar("custom").get_vector(5); + local MoveZ = obj.getVar("custom").get_vector(6); + if(MoveY != 0){ + if(MoveY > 8) MoveY = 8; + else if(MoveY < -8) MoveY = -8; + local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); + sq_setCurrentAxisPos(obj, 1, srcY + vy); + } + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);//根據方向運算當前數值 + sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 + local vz = 0; + if(MoveZ > 0){ + vz = sq_GetAccel(0, MoveZ, currentT, fireT, true); + if(currentT > 250) vz = sq_GetAccel(MoveZ, 0, currentT, fireT, false); + } + else{ + vz = sq_GetAccel(sq_GetZPos(obj), 0, currentT, fireT, false); + currentT = currentT + 250; + } + sq_setCurrentAxisPos(obj, 2, vz);//設置當前x坐標 + if(currentT >= fireT) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 17: + local currentT = sq_GetObjectTime(obj); + local currentSpeedRate = 1.0 ; + local defaultRoundTime = 1200; + + local radius = 65; + local base100Angle = obj.getVar("custom").get_vector(0) * 100; + + local baseX = obj.getVar("custom").get_vector(1); + local baseY = obj.getVar("custom").get_vector(2); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); + + local axisMagnifyRate = radius * 0.5; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseY + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + break; + case 18: + switch(state){ + case 21: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 300; + local speed_rate = obj.getVar("custom").get_vector(1); + if(speed_rate > 0) fireT = fireT * (1000 - speed_rate) / 1000; + local srcX = obj.getVar("custom").get_vector(3); + local srcZ = obj.getVar("custom").get_vector(4); + local MoveX = obj.getVar("custom").get_vector(2); + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(currentT > fireT) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + if(!sqrChr) sq_SendDestroyPacketPassiveObject(obj); + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 400; + local speed_rate = obj.getVar("custom").get_vector(1); + if(speed_rate > 0) fireT = fireT * (1000 - speed_rate) / 1000; + if(sq_GetDistanceObject(obj, sqrChr, false) < 20){ + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + local srcZ = obj.getVar("custom").get_vector(4); + local X1 = sq_GetAccel(obj.getXPos(), sqrChr.getXPos(), currentT, fireT, true); + local Y1 = sq_GetAccel(obj.getYPos(), sqrChr.getYPos(), currentT, fireT, true); + local vz = sq_GetAccel(0, srcZ * 2, currentT, fireT, true); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } + break; + } + break; + case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩 + break; + case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅 + break; + case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊 + break; + case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨 + break; + case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文 + break; + case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素 + break; + case ELEMENTALMASTER_SKILL_SUNBURST://雷旋 + break; + case ELEMENTALMASTER_SKILL_THEGATE://元素之門 + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + local targetObj = obj.getVar().get_obj_vector(0); + if(!targetObj || targetObj.getState() == STATE_DIE) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 2: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcZ = obj.getVar("custom").get_vector(0); + local v = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); + sq_setCurrentAxisPos(obj, 2, v); + break; + } + break; + case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷 + break; + case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響 + break; + case ELEMENTALMASTER_SKILL_VOID://虛無之球 + break; + case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆 + break; + case 38://移動施法 + break; + } +} diff --git a/user/116.205.165.25/6_mage_6.c b/user/116.205.165.25/6_mage_6.c new file mode 100644 index 0000000..e2f5a1a --- /dev/null +++ b/user/116.205.165.25/6_mage_6.c @@ -0,0 +1,3464 @@ + + +// setCustomData +function setCustomData_po_summoners(obj, receiveData) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + obj.getVar("skillIndex").clear_vector(); + obj.getVar("skillIndex").push_vector(skillIndex); + obj.getVar("subtype").clear_vector(); + obj.getVar("subtype").push_vector(subtype); + + switch(skillIndex){ + case 25://hodor + switch(subtype){ + case 1://嚙踝蕭嚙踝蕭怐 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/attack1.ani"); + obj.setCurrentAnimation(ani); + break; + case 3://嚙踝蕭怐 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local skill_level = sq_GetSkillLevel(sqrChr, 25); + local prob = sqrChr.sq_GetLevelData(25, 11, skill_level) / 10; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, 2000); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/chargeattack.ani"); + obj.setCurrentAnimation(ani); + break; + case 4://嚙踝蕭嚙踝蕭嚙踝蕭嚙? + case 5://3盓嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local aniPath1 = "passiveobject/madeby_k_k/animation/hodor/" + local aniPath2 = "throwstone.ani"; + if(sub > 0){ + local randomnumber = sq_getRandom(1,8); + print("subtype = "+subtype+" , randomnumber:"+randomnumber+" , sub = "+sub); + switch(randomnumber){ + case 1: aniPath2 = "throwobject/barrel1.ani"; break; + case 2: aniPath2 = "throwobject/barrel2.ani"; break; + case 3: aniPath2 = "throwobject/box.ani"; break; + case 4: aniPath2 = "throwobject/brick.ani"; break; + case 5: aniPath2 = "throwobject/ladder.ani"; break; + case 6: aniPath2 = "throwobject/nipper.ani"; break; + case 7: aniPath2 = "throwobject/pipeline.ani"; break; + case 8: aniPath2 = "throwobject/wagon.ani"; break; + } + } + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/hodor/throwstone.ptl", 0.0, 0.0); + if(sub > 0) sq_SetSpeedToMoveParticle(obj, 2, -100); + break; + case 6://嚙踝蕭艉嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(10, sub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local aniPath1 = "passiveobject/madeby_k_k/animation/hodor/" + local aniPath2 = "throwstone.ani"; + if(sub > 0){ + local randomnumber = sq_getRandom(1,8); + print("subtype = "+subtype+" , randomnumber:"+randomnumber+" , sub = "+sub); + switch(randomnumber){ + case 1: aniPath2 = "throwobject/barrel1.ani"; break; + case 2: aniPath2 = "throwobject/barrel2.ani"; break; + case 3: aniPath2 = "throwobject/box.ani"; break; + case 4: aniPath2 = "throwobject/brick.ani"; break; + case 5: aniPath2 = "throwobject/ladder.ani"; break; + case 6: aniPath2 = "throwobject/nipper.ani"; break; + case 7: aniPath2 = "throwobject/pipeline.ani"; break; + case 8: aniPath2 = "throwobject/wagon.ani"; break; + } + } + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + //?嚙踝蕭ptl + local direction = receiveData.readDword(); + switch(direction){ + case 0: obj.sq_SetMoveParticle("particle/hodor/throwstone.ptl", 0.0, 0.0); break; + case 1: obj.sq_SetMoveParticle("particle/hodor/throwstoneup1.ptl", 0.0, 0.0); break; + case 2: obj.sq_SetMoveParticle("particle/hodor/throwstoneup2.ptl", 0.0, 0.0); break; + case 3: obj.sq_SetMoveParticle("particle/hodor/throwstonedown1.ptl", 0.0, 0.0); break; + case 4: obj.sq_SetMoveParticle("particle/hodor/throwstonedown2.ptl", 0.0, 0.0); break; + } + if(sub > 0) sq_SetSpeedToMoveParticle(obj, 2, -100); + break; + case 7://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local moveX = receiveData.readDword(); + local moveY = receiveData.readDword(); + obj.getVar("totalDamage").clear_vector(); + obj.getVar("totalDamage").push_vector(totalDamage2); + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(obj.getXPos()); + obj.getVar("move").push_vector(obj.getYPos()); + obj.getVar("move").push_vector(moveX); + obj.getVar("move").push_vector(moveY); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 8://旓?1?茷 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, 100, level, 4000); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/skilla.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local parentObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(parentObj, obj); + break; + case 9://旓?2?茷 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 60; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, 100, level, 8000); + local substate = receiveData.readDword(); + switch(substate){ + case 1: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/skillb_01.ani"); + obj.setCurrentAnimation(ani); + break; + case 2: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/skillb_02.ani"); + obj.setCurrentAnimation(ani); + local sizeRate = receiveData.readDword(); + sizeRate = sizeRate.tofloat() / 100.0; + local pAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case 44://sandor + switch(subtype){ + case 1: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 80)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/newsandor/nsandorattack_nsandor_b.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + for(local i = 0;i < 3; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + //?嚙踝蕭?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local parentObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(parentObj, obj); + break; + case 2: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 81)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/newsandor/nsandorpierce_nsandor_b.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + for(local i = 0;i < 3; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + //?嚙踝蕭?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local parentObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(parentObj, obj); + break; + case 4: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/newsandor/skilleffa.ani"); + obj.setCurrentAnimation(ani); + //PTL + obj.sq_SetMoveParticle("particle/newsandor/swordforce.ptl", 0.0, 0.0); + local aniDelay = receiveData.readDword(); + local speed = 54 / aniDelay * 1000; + sq_SetSpeedToMoveParticle(obj,0,speed); + obj.setTimeEvent(0,600,1,false); + local sizeRate = receiveData.readDword(); + local pAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani ?度跟高度率 + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 + sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);//攻?框,x y z比率 + break; + } + break; + case 45://auxo + switch(subtype){ + case 1://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/attack1.ani"); + obj.setCurrentAnimation(ani); + break; + case 2://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/auxoroot.ani"); + obj.setCurrentAnimation(ani); + break; + case 3://堋?嚙踝蕭嚙踝蕭?堋? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/attackbox.ani"); + obj.setCurrentAnimation(ani); + sq_CreateParticle("passiveobject/monster/monsterflower/particle/poisonbug.ptl", obj, 0, 0, 40, true, 15, 0, 40);//?嚙踝蕭 + sq_CreateParticle("passiveobject/common/particle/confusegas.ptl", obj, 0, 0, 40, false, 10, 0, 40);//嚙踝蕭??? + //?嚙踝蕭嚙踝蕭?嚙踝蕭嚙踝蕭 + local skill_level = sqrChr.sq_GetSkillLevel(45); + local level = 40 + skill_level * 2; + local poisonbug_damage = sq_GetLevelData(sqrChr, 45, 18, skill_level); + local poisonbug_prob = sq_GetLevelData(sqrChr, 45, 15, skill_level); + local poisonbug_time = sq_GetLevelData(sqrChr, 45, 17, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_POISON, poisonbug_prob, level, poisonbug_time, poisonbug_damage); + break; + case 4://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/root_1.ani"); + obj.setCurrentAnimation(ani); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 5://嚙踝蕭? + case 15://嚙踝蕭? + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 11://茩嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/ani/summonauxoawakeningrootshort_front.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-10,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/ani/summonauxoawakeningrootshort_bottom.ani"),true); + break; + case 12://?嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/ani/summonauxoawakeningrootlong_front.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-10,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/ani/summonauxoawakeningrootlong_bottom.ani"),true); + break; + case 13://嚙踝蕭? + local totalDamage = receiveData.readDword(); + local state = receiveData.readDword(); + //local group = receiveData.readDword(); + //local uniqueId = receiveData.readDword(); + //local targetObj = sq_GetObject(sqrChr, group, uniqueId); + //if(targetObj){ + //obj.getVar("targetObj").clear_obj_vector(); + //obj.getVar("targetObj").push_obj_vector(targetObj); + //} + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(state, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 14://?嚙踝蕭?? + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar().setInt(10, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 17)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 100://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭? + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/overgrowthgrowupmonsterflower_attack.ani"); + obj.setCurrentAnimation(ani); + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case 46://luis + switch(subtype){ + case 1://嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/attack.ani"); + obj.setCurrentAnimation(ani); + break; + case 2://???嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local etcSub = receiveData.readDword(); + obj.getVar("custom").setInt(10, etcSub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, 5, level, 1000); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_iceniddle/luisiceniddlegroup.ani"); + obj.setCurrentAnimation(ani); + if(etcSub > 0){ + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + } + break; + case 3://嚙踝蕭牊 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local etcSub = receiveData.readDword(); + obj.getVar("custom").setInt(10, etcSub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/fireball.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 1.3; + if(etcSub > 0) sizeRate = 2.6; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(0,160,1,false); + break; + case 4://嚙??嚙? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local etcSub = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + local skill_level = sq_GetSkillLevel(sqrChr, 46); + local prob = sqrChr.sq_GetLevelData(46, 15, skill_level) / 10; + local time = sqrChr.sq_GetLevelData(46, 17, skill_level); + // sqrChr.getVar("Debug_SubState").set_vector(8,prob); + // sqrChr.getVar("Debug_SubState").set_vector(9,time); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_icefield/icefieldnormal1.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + local speedRate = 150.0; + if(etcSub > 0) speedRate = 300.0; + pAni.setSpeedRate(speedRate); + break; + case 5://?嚙踝蕭嚙踝蕭嚙踝蕭嚙? + local totalDamage = receiveData.readDword(); + local number = receiveData.readDword(); + local etcSub = receiveData.readDword(); + local bonusRate = receiveData.readDword(); + obj.getVar("custom").setInt(11, bonusRate); + obj.getVar("custom").setInt(10, etcSub); + if(number > 1){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + + break; + case 6://?嚙? + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local etcSub = receiveData.readDword(); + obj.getVar().clear_vector(); + obj.getVar().push_vector(totalDamage); + obj.getVar().push_vector(totalDamage2); + obj.getVar().push_vector(etcSub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 10: + local sub = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(10, sub); + local ani = sq_CreateAnimation("","character/mage/effect/animation/blacklunatic/blacklunaticwing"+sub.tostring()+"loop_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0, lifeTime, 1, false); + obj.setTimeEvent(1, 20, -1, true); + // sq_moveWithParent(targetObj, obj); + break; + } + break; + case 47://echeverra + switch(subtype){ + case 1: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/attack.ani"); + obj.setCurrentAnimation(ani); + break; + case 2: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/grandwave1.ani"); + obj.setCurrentAnimation(ani); + //嚙踝蕭嚙踝蕭嚙踝蕭??? + obj.setTimeEvent(0,400,-1,false); + obj.setTimeEvent(1,250,1,true); + break; + case 4: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 800); + obj.setTimeEvent(0,100,7,true); + break; + case 5: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/dummy2.ani"); + obj.setCurrentAnimation(ani); + //嚙踝蕭嚙踝蕭嚙踝蕭??? + local hitnumber = receiveData.readDword(); + local time = 50; + if(hitnumber > 5) time = 5; + obj.setTimeEvent(0,time,hitnumber - 0,false); + obj.setTimeEvent(2,50*hitnumber,1,false); + break; + case 8: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + local Delay = receiveData.readDword(); + obj.getVar("Delay").clear_vector(); + obj.getVar("Delay").push_vector(Delay); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 9: + local parentObj = obj.getParent(); + parentObj.getVar("kingsobj").clear_obj_vector(); + parentObj.getVar("kingsobj").push_obj_vector(obj); + if(sqrChr.getVar("kingsobj").get_obj_vector_size() < 1){ + sqrChr.getVar("kingsobj").clear_obj_vector(); + sqrChr.getVar("kingsobj").push_obj_vector(obj); + } + if(!sqrChr.getVar("kingsobj").is_obj_vector(obj)) sqrChr.getVar("kingsobj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + local Delay = receiveData.readDword(); + obj.getVar("Delay").clear_vector(); + obj.getVar("Delay").push_vector(Delay); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 41: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 11, eclipsehive_bonus) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 51: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newlaser/uhdlaserbombmagicsquare.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,80,7,false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case 76://spiritdarkhigher + switch(subtype){ + case 1://嚙踝蕭嚙踝蕭?嚙踝蕭?? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/attack1.ani"); + obj.setCurrentAnimation(ani); + break; + case 2://嚙踝蕭嚙踝蕭?嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/attack2.ani"); + obj.setCurrentAnimation(ani); + break; + case 3://嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + // + local time = receiveData.readDword(); + obj.setTimeEvent(0,time,1,false); + sq_CreateParticle("passiveobject/monster/spirit/particle/belzebuite_overskill_dark_for_deadmulker.ptl", obj, 0, 0, 0, true, 200, time, 200); + obj.sq_PlaySound("KALA_THROW"); + break; + case 4://嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/blackfog/attackbox.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("KALA_SUMMON"); + // + local time = receiveData.readDword(); + obj.setTimeEvent(0,time,1,false); + obj.setTimeEvent(1,480,-1,false); + //嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local sub = receiveData.readDword(); + if(sub == 2){ + obj.getVar("attack").setBool(0,true); + local attackInfo = sq_GetCurrentAttackInfo(obj); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, 100, level, 4000); + } + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,41,-150,0,0,0,time,sub,0,0); + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,41,0,-75,0,0,time,sub,0,0); + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,41,0,0,0,0,time,sub,0,0); + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,41,0,75,0,0,time,sub,0,0); + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,41,150,0,0,0,time,sub,0,0); + break; + case 41: + local totalDamage = receiveData.readDword(); + local time = receiveData.readDword(); + obj.setTimeEvent(0,time - 280,1,false); + local sub = receiveData.readDword(); + if(sub == 2){ + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/blackfog/blackfog_00.ani",0,0,0); + } + else{ + sq_CreateParticle("passiveobject/monster/spirit/particle/belzebuite_overskill_dark_for_deadmulker.ptl", obj, 0, 0, 0, true, 200, time, 200); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 61: + case 62: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + local time = receiveData.readDword(); + obj.getVar("time").clear_vector(); + obj.getVar("time").push_vector(time); + obj.setTimeEvent(0,time,1,false); + if(subtype == 61) sq_flashScreen(obj,693,time - 693,500,180, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 63: + local totalDamage = receiveData.readDword(); + local time = receiveData.readDword(); + obj.setTimeEvent(4,time,1,false); + //?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + if(group != 0 || uniqueId != 0){ + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(targetObj); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 77://spiritlighthigher + switch(subtype){ + case 1: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local number = receiveData.readDword(); + obj.setTimeEvent(0,100,number,true); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 100 * number); + break; + case 21: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 41: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 42: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 9: + local totalDamage = receiveData.readDword(); + local number = receiveData.readDword(); + // print("number = "+number); + obj.setTimeEvent(0,100,number,true); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 100 * number); + break; + case 10: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightning/0_lightningbase.ani"); + obj.setCurrentAnimation(ani); + // + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 20, level, 4000); + obj.setTimeEvent(0,180,5,false); + break; + } + break; + case 78://spiritwaterhigher + switch(subtype){ + case 1: + obj.setTimeEvent(0,10,3,true); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 300); + break; + case 2: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local skill_level = sq_GetSkillLevel(sqrChr, 78); + local prob = sqrChr.sq_GetLevelData(78, 8, skill_level) / 10; + local time = sqrChr.sq_GetLevelData(78, 16, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/attack2.ani"); + obj.setCurrentAnimation(ani); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + local animation = obj.getCurrentAnimation(); + for(local i = 0;i < 5; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + break; + case 3: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55));//58嚙踝蕭?? + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local skill_level = sq_GetSkillLevel(sqrChr, 78); + local prob = sqrChr.sq_GetLevelData(78, 17, skill_level) / 10; + local time = sqrChr.sq_GetLevelData(78, 16, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + obj.setTimeEvent(0,80,7,true); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 600); + break; + case 11: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local time = receiveData.readDword(); + obj.setTimeEvent(1,100 * time + 300, 1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 41: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55));//58嚙踝蕭?? + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local skill_level = sq_GetSkillLevel(sqrChr, 78); + local prob = sqrChr.sq_GetLevelData(78, 17, skill_level) / 10; + local time = sqrChr.sq_GetLevelData(78, 16, skill_level); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/icestrike/icestrikeprojectilefront_00.ani"); + obj.setCurrentAnimation(ani); + //嚙踝蕭嚙? + local sizeRate_num = receiveData.readDword(); + local sizeRate = 1.0 + 0.08 * sizeRate_num; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/icestrike/icestrikeprojectileback_03.ani",0,0,0); + local plAni = pooledObj.getCurrentAnimation(); + plAni.setImageRateFromOriginal(sizeRate, sizeRate); + plAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 9: + local number = receiveData.readDword(); + obj.setTimeEvent(0,100,number,true); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 100 * number); + break; + case 10: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local time = receiveData.readDword(); + obj.setTimeEvent(0,time, 1, false); + obj.setTimeEvent(1,300, -1, false); + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(obj.getXPos()); + obj.getVar("move").push_vector(300); + // obj.sq_SetMoveParticle("particle/ramos/targetingmove.ptl", 0.0, 0.0); + // sq_SetSpeedToMoveParticle(obj,0,100); + local parentObj = obj.getParent(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut"); + obj.getVar().setBool(0,true); + obj.sq_PlaySound("BERIAS_TORNADO_LOOP"); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 79://spiritfirehigher + switch(subtype){ + case 1: + case 2: + case 21: + case 31: + case 32: + case 33: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local atkindex = 44; + if(subtype == 2 || subtype == 21) atkindex = 45; + if(subtype == 31 || subtype == 32 || subtype == 33) atkindex = 46; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkindex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local aniPath = "passiveobject/madeby_k_k/animation/spirit/firehigherspirit/attack1.ani" + if(subtype == 2) aniPath = "passiveobject/madeby_k_k/animation/spirit/firehigherspirit/attack2.ani" + if(subtype == 21) aniPath = "passiveobject/madeby_k_k/animation/spirit/firehigherspirit/element_fire_fire_wave.ani" + if(subtype == 31) aniPath = "passiveobject/madeby_k_k/animation/spirit/firehigherspirit/attack3_1.ani" + if(subtype == 32) aniPath = "passiveobject/madeby_k_k/animation/spirit/firehigherspirit/attack3_2.ani" + if(subtype == 33) aniPath = "passiveobject/madeby_k_k/animation/spirit/firehigherspirit/attack3_3.ani" + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + //?? + if(subtype == 31 || subtype == 32 || subtype == 33){ + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + sq_moveWithParent(targetObj, obj); + } + break; + case 4: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/firehigherspirit/firestorm/firestorm_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0,300,-1,false); + monsterpulled_bykkkkkkk(sqrChr,obj,0,0,0); + break; + case 6: + local number = receiveData.readDword(); + obj.setTimeEvent(0,100,number,true); + local animation = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(animation, 0, 100); + sq_SetFrameDelayTime(animation, 1, 100 * number); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local parentObj = sq_GetObject(sqrChr, group, uniqueId); + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + + for(local i = 0; i < number; i++){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 7, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj);//? + local uniqueId = sq_GetUniqueId(parentObj);//嚙踝蕭嚙踝蕭ID + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,61,0,0,0,totalDamage,number,i + 1,group,uniqueId); + } + break; + case 61: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 28, 1.0) + 100; + obj.setTimeEvent(0,time, 1, false); + local sub_all = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("sub").clear_vector(); + obj.getVar("sub").push_vector(sub); + obj.getVar("sub").push_vector(sub_all); + obj.setTimeEvent(1,960, -1, false); + obj.setTimeEvent(3,50, -1, false); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local parentObj = sq_GetObject(sqrChr, group, uniqueId); + obj.getVar("parentObj").clear_obj_vector(); + obj.getVar("parentObj").push_obj_vector(parentObj); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 80://babydragon + switch(subtype){ + case 1://?嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/attackbite.ani"); + obj.setCurrentAnimation(ani); + break; + case 2://?嚙踝蕭2 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/attacknearbite.ani"); + obj.setCurrentAnimation(ani); + break; + case 3://嚙踝蕭牊 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/serfire3_normal.ani"); + obj.setCurrentAnimation(ani); + // + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/babydragon/fireball.ptl", 0.0, 0.0); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 27) > 0) sq_SetSpeedToMoveParticle(obj, 0, 1400); + break; + case 4://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/attackfirebreath.ani"); + obj.setCurrentAnimation(ani); + break; + case 5://嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local etcSub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(10, etcSub); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/stone_niddle_normal.ani"); + obj.setCurrentAnimation(ani); + // + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/babydragon/niddle.ptl", 0.0, 0.0); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 27) > 0) sq_SetSpeedToMoveParticle(obj, 0, 1200); + break; + case 6://旓? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭totalDamage,delay,sizeRate,hittime + local totalDamage = receiveData.readDword(); + local delay = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local hittime = receiveData.readDword(); + obj.getVar("custom").setInt(10, hittime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/communionskill_body.ani"); + obj.setCurrentAnimation(ani); + // + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + // + local speedRate = 6000.0 / delay.tofloat(); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(0, 7); + obj.setTimeEvent(10, delaySum, 1, false); + break; + case 11: + case 12: + case 13: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("target").clear_obj_vector(); + obj.getVar("target").push_obj_vector(targetObj); + } + obj.getVar("custom").setInt(10, totalDamage); + if(subtype == 11){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 98)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 121: + case 131: + local totalDamage = receiveData.readDword(); + local attackIndex = 99; + if(subtype == 131) attackIndex = 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 81://SummonMonsterReckless + local totalDamage = receiveData.readDword(); + local Delay = receiveData.readDword(); + obj.setTimeEvent(0,Delay,1,false); + break; + case 82://casillas + switch(subtype){ + case 1: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/casillas/attack1.ani"); + obj.setCurrentAnimation(ani); + break; + case 2: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/casillas/attack2.ani"); + obj.setCurrentAnimation(ani); + break; + case 3: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 62)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/casillas/attack3.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local parentObj = sq_GetObject(sqrChr, group, uniqueId); + sq_moveWithParent(parentObj, obj); + break; + case 41: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/casillas/moveslashmove.ani"); + obj.setCurrentAnimation(ani); + break; + case 42: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/casillas/moveslashafter.ani"); + obj.setCurrentAnimation(ani); + //嚙踝蕭? + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + local animation = obj.getCurrentAnimation(); + for(local i = 0;i < 10; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + // + obj.getVar().clear_vector(); + obj.getVar().push_vector(1); + break; + case 100: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/casillas/skill/slash.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(sq_getRandom(0,90).tofloat())); + break; + } + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + switch(subtype){ + case 1://?嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/normalatk_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2://?嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/dash02_body.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(pAni, 0, 600); + //?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + sq_moveWithParent(targetObj, obj); + //嚙踝蕭嚙踝蕭嚙踝蕭? + obj.setTimeEvent(0,150,-1,false); + local sizeRate = receiveData.readDword(); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/cry_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 41://嚙踝蕭嚙踝蕭?嚙踝蕭1 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/rage01_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 42://嚙踝蕭嚙踝蕭?嚙踝蕭2 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/rage03_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 51://?硉 : ?嚙踝蕭嚙踝蕭嚙踝蕭1 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/howl_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 52://?硉 : ?嚙踝蕭嚙踝蕭嚙踝蕭2 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/atkaxeeffect_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 53://?硉 : ?嚙踝蕭嚙踝蕭嚙踝蕭3 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/finishaxeeffect_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 6://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 38)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/kruta/kurutaattack_body.ani"); + obj.setCurrentAnimation(ani); + // + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 10://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","monster/character/mage/madeby_k_k/kruta/animation/talisman/krutaready_eff_00.ani"); + obj.setCurrentAnimation(ani); + local time = receiveData.readDword(); + obj.setTimeEvent(0,time,1,false); + break; + } + break; + case 122://ramos + switch(subtype){ + case 1://嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 78)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/appearramos_04.ani"); + obj.setCurrentAnimation(ani); + break; + case 21://嚙踝蕭嚙踝蕭1 + case 32: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/punchattack1_01.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + if(aniDelay > 0){ + for(local i = 0;i < 3; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + if(aniDelay2 > 0) sq_SetFrameDelayTime(animation, 3, aniDelay2); + break; + case 22://嚙踝蕭嚙踝蕭2 + case 33: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 67)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/punchattack2_02.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + local aniDelay3 = receiveData.readDword(); + if(aniDelay > 0) sq_SetFrameDelayTime(animation, 0, aniDelay); + if(aniDelay2 > 0){ + for(local i = 1;i < 4; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay2); + } + } + if(aniDelay3 > 0) sq_SetFrameDelayTime(animation, 4, aniDelay3); + break; + case 31://嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/punchmove_01.ani"); + obj.setCurrentAnimation(ani); + //?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + sq_moveWithParent(targetObj, obj); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + if(aniDelay > 0){ + for(local i = 0;i < 2; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + if(aniDelay2 > 0) sq_SetFrameDelayTime(animation, 2, aniDelay2); + break; + case 41://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("bonusrate").clear_vector(); + obj.getVar("bonusrate").push_vector(totalDamage2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 77)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hittime = receiveData.readDword(); + local pAnidelay = receiveData.readDword(); + hittime = (pAnidelay.tofloat() / 72.0 * hittime).tointeger(); + obj.setTimeEvent(0,hittime,-1,false); + obj.getVar("delay").clear_vector(); + obj.getVar("delay").push_vector(pAnidelay); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 42://嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local pAnidelay = receiveData.readDword(); + obj.getVar("delay").clear_vector(); + obj.getVar("delay").push_vector(pAnidelay); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5://?嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/gatherattack_09.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"monster/character/mage/madeby_k_k/ramos/animation/gather/gathereffect_03.ani",0,0,0); + //sq_AddDrawOnlyAniFromParent(obj,"monster/character/mage/madeby_k_k/ramos/animation/gather/gathereffectdown_03.ani",0,0,0); + local hittime = receiveData.readDword(); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + for(local i = 0;i < 15; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + local pAni = pooledObj.getCurrentAnimation(); + local speedRate = 1960.0 / (aniDelay * 28).tofloat() * 100; + hittime = (aniDelay.tofloat() / 63.0 * hittime).tointeger(); + pAni.setSpeedRate(speedRate); + obj.setTimeEvent(0,hittime,-1,false); + obj.setTimeEvent(1,500,-1,false); + break; + case 6://嚙踝蕭嚙? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 79)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/disappear_01.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + for(local i = 0;i < 9; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + break; + case 71://嚙?嚙踝蕭嚙踝蕭嚙? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/1up_08.ani"); + obj.setCurrentAnimation(ani); + local hittime = receiveData.readDword(); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + local aniDelay3 = receiveData.readDword(); + if(aniDelay > 0) sq_SetFrameDelayTime(animation, 0, aniDelay); + if(aniDelay2 > 0){ + for(local i = 1;i < 15; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay2); + } + } + if(aniDelay3 > 0) sq_SetFrameDelayTime(animation, 15, aniDelay3); + hittime = (aniDelay.tofloat() / 72.0 * hittime).tointeger(); + obj.setTimeEvent(0,hittime,-1,false); + break; + case 72://嚙?嚙踝蕭?嚙踝蕭嚙踝蕭? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 69)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/4start_46.ani"); + obj.setCurrentAnimation(ani); + local pooledObj1 = sq_CreateDrawOnlyObject(obj, "monster/character/mage/madeby_k_k/ramos/animation/meal/4start_backgound_00.ani", ENUM_DRAWLAYER_BOTTOM, true); + local pooledObj2 = sq_CreateDrawOnlyObject(obj, "monster/character/mage/madeby_k_k/ramos/animation/meal/4start_41.ani", ENUM_DRAWLAYER_COVER, true); + local hittime = receiveData.readDword(); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + local animation = obj.getCurrentAnimation(); + for(local i = 0;i < 8; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + hittime = (aniDelay.tofloat() / 72.0 * hittime).tointeger(); + obj.setTimeEvent(0,hittime,-1,false); + local speedRate = (72.0 / aniDelay.tofloat() * 100.0); + local pAni1 = pooledObj1.getCurrentAnimation(); + local pAni2 = pooledObj2.getCurrentAnimation(); + pAni1.setSpeedRate(speedRate); + pAni2.setSpeedRate(speedRate); + break; + case 73://嚙?晡嚙踝蕭嚙? + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/4end_46.ani"); + obj.setCurrentAnimation(ani); + sq_CreateDrawOnlyObject(obj, "monster/character/mage/madeby_k_k/ramos/animation/meal/4end_07.ani", ENUM_DRAWLAYER_COVER, true); + sq_CreateDrawOnlyObject(obj, "monster/character/mage/madeby_k_k/ramos/animation/meal/4end_bottom_69.ani", ENUM_DRAWLAYER_BOTTOM, true); + sq_CreateDrawOnlyObject(obj, "monster/character/mage/madeby_k_k/ramos/animation/meal/4end_backgound_00.ani", ENUM_DRAWLAYER_BOTTOM, true); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0){ + local animation = obj.getCurrentAnimation(); + for(local i = 0; i < 3; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + break; + case 74: + sqrChr.getVar("RamosEffect1").clear_obj_vector(); + sqrChr.getVar("RamosEffect1").push_obj_vector(obj); + local ani = sq_CreateAnimation("","monster/character/mage/madeby_k_k/ramos/animation/meal/3background_30.ani"); + obj.setCurrentAnimation(ani); + break; + case 75: + sqrChr.getVar("RamosEffect2").clear_obj_vector(); + sqrChr.getVar("RamosEffect2").push_obj_vector(obj); + local ani = sq_CreateAnimation("","monster/character/mage/madeby_k_k/ramos/animation/meal/3front_12.ani"); + obj.setCurrentAnimation(ani); + break; + case 200: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + switch(subtype){ + case 101://嚙踝蕭1 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 85)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/dark/attack1.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + if(aniDelay > 0) sq_SetFrameDelayTime(animation, 0, aniDelay); + if(aniDelay2 > 0) sq_SetFrameDelayTime(animation, 1, aniDelay2); + break; + case 102://嚙踝蕭2 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/dark/attack2.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + obj.setTimeEvent(0,4 * aniDelay,-1,false); + if(aniDelay > 0){ + for(local i = 0;i < 11; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + break; + case 201://嚙踝蕭1 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 87)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/fire/attack1.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + if(aniDelay > 0) sq_SetFrameDelayTime(animation, 0, aniDelay); + break; + case 202://嚙踝蕭2/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/fire/attack2loop.ani"); + obj.setCurrentAnimation(ani); + // + local time = receiveData.readDword(); + obj.setTimeEvent(0,time,1,false); + obj.setTimeEvent(1,300,-1,false); + //?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + sq_moveWithParent(targetObj, obj); + break; + case 301://嚙踝蕭1 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/light/attack1.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + if(aniDelay > 0){ sq_SetFrameDelayTime(animation, 0, aniDelay);sq_SetFrameDelayTime(animation, 1, aniDelay); } + if(aniDelay2 > 0){sq_SetFrameDelayTime(animation, 2, aniDelay2);sq_SetFrameDelayTime(animation, 3, aniDelay2);sq_SetFrameDelayTime(animation, 4, aniDelay2);} + break; + case 302://嚙踝蕭2 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/light/attack2.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + obj.setTimeEvent(0,aniDelay * 5,1,false); + if(aniDelay > 0){ + for(local i = 0;i < 9; i++){ + sq_SetFrameDelayTime(animation, i, aniDelay); + } + } + break; + case 401://?1 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 91)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/water/attack1.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭嚙踝蕭? + local animation = obj.getCurrentAnimation(); + local aniDelay = receiveData.readDword(); + local aniDelay2 = receiveData.readDword(); + if(aniDelay > 0) sq_SetFrameDelayTime(animation, 0, aniDelay); + if(aniDelay2 > 0) sq_SetFrameDelayTime(animation, 1, aniDelay2); + break; + case 402://?2 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 92)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/spirit/water/icewave1.ani"); + obj.setCurrentAnimation(ani); + break; + case 1001://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("sizeRate").clear_vector(); + obj.getVar("sizeRate").push_vector(sizeRate); + obj.getVar("sizeRate").push_vector(sub); + local anipath; + switch(sub){ + case 1: + anipath = "passiveobject/common/animation/darkexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 93)); + break; + case 2: + anipath = "passiveobject/common/animation/fireexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); + break; + case 3: + anipath = "passiveobject/common/animation/lightexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 95)); + break; + case 4: + anipath = "passiveobject/common/animation/icefireexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); + break; + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("",anipath); + obj.setCurrentAnimation(ani); + //嚙踝蕭嚙? + local currentAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭?嚙踝蕭ani + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//嚙踝蕭??嚙踝蕭x y z嚙踝蕭嚙踝蕭 + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + switch(sub){ + case 1: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, prob, level, time); + break; + case 2: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time); + break; + case 3: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time); + break; + case 4: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + break; + } + } + obj.setTimeEvent(1, 200, 2, true); + obj.setTimeEvent(2, 50, 4, true); + obj.setTimeEvent(3, 15, 8, true); + obj.setTimeEvent(4, 100, 2, true); + break; + case 1002://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("sizeRate").clear_vector(); + obj.getVar("sizeRate").push_vector(sizeRate); + obj.getVar("sizeRate").push_vector(sub); + local anipath; + switch(sub){ + case 1: + anipath = "passiveobject/madeby_k_k/animation/spirit/spirit/darkexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 93)); + break; + case 2: + anipath = "passiveobject/madeby_k_k/animation/spirit/spirit/fireexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); + break; + case 3: + anipath = "passiveobject/madeby_k_k/animation/spirit/spirit/lightexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 95)); + break; + case 4: + anipath = "passiveobject/madeby_k_k/animation/spirit/spirit/icefireexplosion.ani"; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); + break; + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("",anipath); + obj.setCurrentAnimation(ani); + //嚙踝蕭嚙? + local currentAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭?嚙踝蕭ani + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//嚙踝蕭??嚙踝蕭x y z嚙踝蕭嚙踝蕭 + obj.sq_PlaySound("B_FIRE_EXPLOSION"); + local prob = receiveData.readDword(); + local time = receiveData.readDword(); + local level = sq_GetSkillLevel(sqrChr, 174) + 20; + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + switch(sub){ + case 1: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, prob, level, time); + break; + case 2: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time); + break; + case 3: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time); + break; + case 4: + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); + break; + } + } + break; + case 2001: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + print("test:" + totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 101)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local anipath = "passiveobject/madeby_k_k/animation/spirit/spirit/allexplosion.ani"; + local ani = sq_CreateAnimation("",anipath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_MOONSHADOW: + switch(subtype){ + case 1://嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + local time = receiveData.readDword(); + // obj.setTimeEvent(0,time,1,false); + obj.getVar("custom").setInt(0, time); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + //?? + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(sqrChr, group, uniqueId);//嚙踝蕭嚙踝蕭?嚙踝蕭 + sq_moveWithParent(targetObj, obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + if(sqrChr.getVar("moonshadow").get_obj_vector_size() > 0){ + sqrChr.getVar("moonshadow").push_obj_vector(obj); + } + else{ + sqrChr.getVar("moonshadow").clear_obj_vector(); + sqrChr.getVar("moonshadow").push_obj_vector(obj); + } + return; + break; + case 2://嚙踝蕭嚙踝蕭 + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = receiveData.readDword(); + print("totalDamage = "+totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 97)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/moonshadow/moonshadow_blackexplosion.ani"); + obj.setCurrentAnimation(ani); + break; + case 3: + local hitMax = receiveData.readDword(); + obj.setTimeEvent(1, 75, hitMax, false); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 102)); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_BLACKLUNATIC: + switch(subtype){ + case 1://月蚀长矛103 + local totalDamage = receiveData.readDword(); + local angle = receiveData.readDword(); + local moveX = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 103)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetCustomRotate(obj, sq_ToRadian(270.0-angle.tofloat())); + obj.getVar("custom").setInt(10, sq_GetXPos(obj)); + obj.getVar("custom").setInt(11, sq_GetZPos(obj)); + obj.getVar("custom").setInt(12, moveX); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://月空破碎104 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 104)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("R_BLACK_LUNATIC_MOONBREAK"); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/moonbrakeattack_00.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/blacklunatic/moonbrakeattackbottom_00.ani", 0, -1, 0); + break; + case 3://月光追击105 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 105)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("R_BLACK_LUNATIC_MOONLIGHT"); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/moonlightattack_00.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/blacklunatic/moonlightattackbottom_00.ani", 0, -1, 0); + break; + case 4://黑暗闪电106 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 106)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("R_BLACK_LUNATIC_MOONLIGHT"); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/darklightningattack_00.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/blacklunatic/darklightningattackbottom_00.ani", 0, -1, 0); + break; + case 5://施放时蚀爆炸106 + local totalDamage = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 106)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/darkmoonattack_00.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + print(pAni.getDelaySum(false)); + break; + } + break; + case 150: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local holdTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, holdTime); + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/throwstickytrap/throwglue_bottle01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 109)); + // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 800.0); + else sq_SetVelocity(obj, 0, -800.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local holdTime = receiveData.readDword(); + obj.getVar("custom").setInt(1, holdTime); + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/throwstickytrap/throwglue_explosion01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 110)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 3: + // + break; + } + break; + case SKILL_BYKK_HIGHESTECHEVERRA: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/highestecheverra/hitdummy1.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 108)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + local currentAni = obj.getCurrentAnimation(); + print("delay = "+currentAni.getDelaySum(false)); + print("hitMax = "+hitMax); + obj.setTimeEvent(1, currentAni.getDelaySum(false) / (hitMax + 2), hitMax, true); + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/highestecheverra/explosionbottom_08.ani"); + obj.setCurrentAnimation(ani); + local aniPath = "character/mage/animation/summoner_bykk/effect/highestecheverra/explosionfront_08.ani"; + sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 1, 0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 108)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 3: + local speedRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","character/mage/animation/summoner_bykk/effect/highestecheverra/highestecheverrac_08.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(6,sq_CreateAnimation("","character/mage/animation/summoner_bykk/effect/highestecheverra/highestecheverrab_00.ani"),true); + pAni.addLayerAnimation(10,sq_CreateAnimation("","character/mage/animation/summoner_bykk/effect/highestecheverra/highestecheverrad_07.ani"),true); + pAni.setImageRateFromOriginal(0.9, 0.9); + pAni.setAutoLayerWorkAnimationAddSizeRate(0.9); + pAni.setSpeedRate(speedRate.tofloat()); + obj.sq_PlaySound("HIGHEST_ECHEVERRA_SUMMON"); + break; + } + break; + } + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo) return; + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(sqrChr.getVar("eclipsehive_select").getBool(0) == false){ + local hitdelayRate = 100.0; + if(skillIndex > 75 && skillIndex < 80 && sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) hitdelayRate = 120.0; + sq_SetAttackInfoHitDelayRateDamager(attackInfo, hitdelayRate); + } +} + +function setState_po_summoners(obj, state, datas) +{ + if (!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(state); + + switch(skillIndex){ + case 25://hodor + switch(subtype){ + case 7://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/bombfly.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭PTL + obj.sq_SetMoveParticle("particle/hodor/hodorbomb.ptl", 0.0, 0.0); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/bombland.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(300.0); + //嚙踝蕭PTL + obj.sq_RemoveMoveParticle(); + break; + case 22: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/bombsub.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/hodor/earthquake.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/hodor/earthquakering.ani", 0, 0, 0); + sq_CreateParticle("common/hiteffect/particle/firehitparticle.ptl", obj, 0, 0, 0, true, 30, 0, 2); + sq_CreateParticle("common/hiteffect/particle/firehitparticlelight.ptl", obj, 0, 0, 0, true, 30, 0, 2); + break; + case 23: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = obj.getVar("totalDamage").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/hodor/bombsub.ani"); + obj.setCurrentAnimation(ani); + sq_CreateParticle("common/hiteffect/particle/firehitparticle.ptl", obj, 0, 0, 0, true, 30, 0, 2); + sq_CreateParticle("common/hiteffect/particle/firehitparticlelight.ptl", obj, 0, 0, 0, true, 30, 0, 2); + break; + } + break; + } + break; + case 44://sandor + break; + case 45://auxo + switch(subtype){ + case 5: + case 15: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/overgrowthseed.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭PTL + obj.sq_SetMoveParticle("particle/auxo/overgrowthseed.ptl", sq_getRandom(-30,30).tofloat(), sq_getRandom(-10,10).tofloat()); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterflower/overgrowthgrowupmonsterflower.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + //嚙踝蕭PTL + obj.sq_RemoveMoveParticle(); + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/summonauxoawakeningout_body.ani"); + obj.setCurrentAnimation(ani); + //嚙踝蕭PTL + obj.sq_RemoveMoveParticle(); + break; + } + break; + case 13: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/spit/summonauxoawakeningspit_sik.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭ptl + sq_SetCustomRotate(obj, sq_ToRadian(-30.0)); + obj.sq_SetMoveParticle("particle/monsterfower/monsterlunaflowerspit.ptl", 0.0, 0.0); + break; + case 21: + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + obj.sq_RemoveMoveParticle(); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/spit/summonauxoawakeningspit_boom.ani"); + obj.setCurrentAnimation(ani); + //嚙踝蕭眳 + // local objmg = obj.getObjectManager(); //嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭庢嚙踝蕭嚙踝蕭 + // for(local i= 0; i < objmg.getCollisionObjectNumber(); i++){ + // local object = objmg.getCollisionObject(i); //嚙踝蕭嚙踝蕭嚙踝蕭嚙論橘蕭嚙踝蕭嚙? + // if(object && obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_ACTIVE) && sq_Abs(object.getXPos() - obj.getXPos()) <= 400 && sq_Abs(object.getYPos() - obj.getYPos()) <= 200){ + // local activeObj = sq_GetCNRDObjectToActiveObject(object); + // sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); + // //createPassiveObject_k_k(sqrChr,obj,45,13,0,0,0,0,22,sq_GetGroup(activeObj),sq_GetUniqueId(activeObj), 0); + // } + // } + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/spit/summonauxoawakeningspit_sikloop.ani"); + obj.setCurrentAnimation(ani); + break; + case 23: + + break; + } + break; + case 14: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/bomit/summonauxoawakeningbomit_sik.ani"); + obj.setCurrentAnimation(ani); + sq_SetCustomRotate(obj, sq_ToRadian(5.0)); + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/monsterfower/monsterlunaflowerbomit.ptl", 0.0, 0.0); + break; + case 21: + sq_SetCustomRotate(obj, sq_ToRadian(0.0)); + obj.sq_RemoveMoveParticle(); + // + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/monsterlunaflower/bomit/summonauxoawakeningbomit_boom.ani"); + obj.setCurrentAnimation(ani); + local sizeRate = obj.getVar().getInt(10); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + } + break; + case 46://luis + switch(subtype){ + case 5: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/common/animation/magictargetwarningterrible.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + local fireT = pAni.getDelaySum(false); + obj.setTimeEvent(0,fireT / 3, 1, false); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/common/animation/magictargetwarningterrible.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + local fireT = pAni.getDelaySum(false); + obj.setTimeEvent(2,fireT / 3, 1, false); + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 6: + switch(state){ + case 20: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = obj.getVar().get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_meteor/luis_meteor_rock_eff01.ani"); + obj.setCurrentAnimation(ani); + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/luis/luis_meteor.ptl", 0.0, 0.0); + if(obj.getVar().get_vector(2) > 0){ + sq_SetSpeedToMoveParticle(obj, 0, 2400); + sq_SetSpeedToMoveParticle(obj, 2, -4800); + } + break; + case 21: + //?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = obj.getVar().get_vector(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + //嚙踝蕭PTL + obj.sq_RemoveMoveParticle(); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_meteor/luis_meteor_explosion_back.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1001,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_meteor/luis_meteor_explosion_floor01.ani"),true); + break; + } + break; + } + break; + case 47://echeverra + switch(subtype){ + case 8: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newskill/soundshockfloor_startwave.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + local Delay = obj.getVar("Delay").get_vector(0); + local speedRate = 136000.0 / Delay.tofloat(); + pAni.setSpeedRate(speedRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newskill/soundshockfloor_end01.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + break; + } + break; + case 9: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newskill/charge_loop/sarpozanormalattackcasting_01.ani"); + obj.setCurrentAnimation(ani); + sq_setCurrentAxisPos(obj, 2, -60); + local pAni = obj.getCurrentAnimation(); + local Delay = obj.getVar("Delay").get_vector(0); + local speedRate = 148500.0 / Delay.tofloat(); + pAni.setSpeedRate(speedRate * 1.2); + obj.sq_PlaySound("SARPOZA_ELEMENTAL_STRIKE_DARK_CAST_01",1001); + break; + case 21: + obj.stopSound(1001); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newskill/charge_end/sarpozanormalattackcasting_05.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newskill/tell/sarpozateleportfront_00.ani"); + obj.setCurrentAnimation(ani); + sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 100)); + sq_setCurrentAxisPos(obj, 2, 100); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + pAni.setImageRateFromOriginal(0.5, 0.5); + pAni.setAutoLayerWorkAnimationAddSizeRate(0.5); + obj.sq_PlaySound("R_SARPOZA_N_MAGIC_DARK_FIRING",1003); + break; + case 23: + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); + sq_setCurrentAxisPos(obj, 0, targetObj.getXPos()); + sq_setCurrentAxisPos(obj, 1, targetObj.getYPos() + 1); + sq_setCurrentAxisPos(obj, 2, 70); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/newskill/tell/sarpozateleportfront_00.ani"); + obj.setCurrentAnimation(ani); + switch(targetObj.getCollisionObjectIndex()){ + case MONSTER_ID_DARKHIGHERSPIRIT: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/end_element_00.ani",0,0,-50); + break; + case MONSTER_ID_FIREHIGHERSPIRIT: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/end_red_00.ani",0,0,-50); + break; + case MONSTER_ID_LIGHTHIGHERSPIRIT: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/end_green_00.ani",0,0,-50); + break; + case MONSTER_ID_WATERHIGHERSPIRIT: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/end_blue_00.ani",0,0,-50); + break; + } + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + pAni.setImageRateFromOriginal(0.5, 0.5); + pAni.setAutoLayerWorkAnimationAddSizeRate(0.5); + obj.sq_PlaySound("R_SARPOZA_N_MAGIC_DARK_FIRING",1003); + break; + } + break; + case 41: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/darksteellightning/magictargetwarning.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(140.0); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/darksteellightning/darksteellightning.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = 1.3; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(1,200,1,false); + break; + } + break; + } + break; + case 76://spiritdarkhigher + switch(subtype){ + case 3: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/star.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/loop.ani"); + obj.setCurrentAnimation(ani); + sq_CreateParticle("passiveobject/monster/spirit/particle/belzebuite_overskill_dark_for_deadmulker.ptl", obj, 0, 0, 0, true, 200, 4000, 200); + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/end.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 41: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/blackfog/belzebuite_overskill_circle_of_magic_1.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/blackfog/belzebuite_overskill_circle_of_magic_2.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/blackfog/belzebuite_overskill_circle_of_magic_3.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 61: + switch(state){ + case 20: + sq_SetMyShake(obj,2,80); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/cylinder/cylinder150/cylinderstart_01.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/blackfogstart.ani"),true); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/circleb.ani",0,0,0); + currentAni.setSpeedRate(150.0); + obj.sq_PlaySound("DESCHAMPS_SHOCKWAVE"); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/cylinder/cylinder150/cylinderloop_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/blackfogloop.ani"),true); + local time = (obj.getVar("time").get_vector(0) - 693) / 3; + obj.setTimeEvent(2, time, 3, true); + break; + case 22: + sq_SetMyShake(obj,3,100); + obj.resetHitObjectList(); + local bonusRate = sq_GetCurrentAttackBonusRate(obj) * 2; + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusRate); + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/cylinder/cylinder150/cylinderend_00.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/blackfogend.ani"),true); + currentAni.setSpeedRate(180.0); + obj.sq_PlaySound("DESCHAMPS_METAL_EXP"); + break; + } + break; + case 62: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/circle/magiccirclestart_00.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/cylinderstartbottom_01.ani",0,0,0); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/circle/magiccircleloop_01.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/circle/magiccircleend_00.ani"); + obj.setCurrentAnimation(ani); + break; + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 63: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/holding_start_dodge.ani"); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + //?? + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); + if(activeObj){ + //local x = activeObj.getXPos(); + //local y = activeObj.getYPos(); + //local z = activeObj.getObjectHeight()/2 + CRI_UPPER_HEIGHT; + //local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj,"ui/ap/ap_monster.nut"); + local hp = activeObj.getHp(); + //applyNomalDamage(dieHardAppendage,hp,x+20,y,z); + activeObj.setHp(0, null, true); + sq_SetMyShake(obj,3,180); + } + break; + } + + break; + } + break; + case 77://spiritlighthigher + switch(subtype){ + case 1: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/darksteellightning/magictargetwarning.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + case 21: + case 22: + case 23: + case 24: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/magelighthigherspiritthunder"+(state - 20).tostring()+".ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/magelighthigherspiritthundersplash.ani",0,0,0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + break; + } + break; + case 21: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spikeking/darksteellightning/magictargetwarning.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/thunderbolt.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 41: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightsoul/thunder_warning02.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(130.0); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightsoul/thunder_pang.ani"); + obj.setCurrentAnimation(ani); + monsterpulled_bykkkkkkk(sqrChr,obj,0,0,0); + break; + } + break; + case 42: + switch(state){ + case 20: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightsoul/thunder_warning02.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(130.0); + break; + case 21: + //?嚙踝蕭ANI + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightsoul/thunderstrike_lightning01.ani"); + obj.setCurrentAnimation(ani); + monsterpulled_bykkkkkkk(sqrChr,obj,0,0,0); + break; + } + break; + } + break; + case 78://spiritwaterhigher + switch(subtype){ + case 3: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/summon_water_ice_spear_front_dodge.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_spear_dodge.ani"); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/spirit/water_spirit_higher_ice_spear_move.ptl", 0.0, 0.0); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_spear_broken_normal.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_spear_broken_dodge.ani"),true); + break; + } + break; + case 11: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_appear_none.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_normal_none.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_break_ldodge.ani"); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_break_none.ani"0,-1,-1); + break; + } + break; + case 10: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/water_firewater/start/watertornado_start_04.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/water_firewater/loop/watertornado_loop_03.ani"); + obj.setCurrentAnimation(ani); + local parentObj = obj.getParent(); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut", false); + if(appendage){ + appendage.sq_SetValidTime(3000); + CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); + local auraAppendage = appendage.sq_getAuraMaster("wtornadoAura"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("wtornadoAura",parentObj, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(300, 300, 600, 100); + } + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/water_firewater/end/watertornado_end_03.ani"); + obj.setCurrentAnimation(ani); + break; + } + local currentAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭?嚙踝蕭ani + local sizeRate = 0.65;//??搣嚙踝蕭??蓱 + currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//嚙踝蕭吤ani ?嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//嚙踝蕭吤ani als旓吤 ani嚙踝蕭嚙踝蕭嚙踝蕭嚙? + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//嚙踝蕭??嚙踝蕭x y z嚙踝蕭嚙踝蕭 + break; + } + break; + case 79://spiritfirehigher + switch(subtype){ + case 61: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/firehigherspirit/fire/roulettefiretornado_start_tornadostart.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2,480,1,false); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/firehigherspirit/fire/roulettefiretornado_loop_tornadoloop.ani"); + obj.setCurrentAnimation(ani); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/spirit/firehigherspirit/fire/roulettefiretornado_end_tornadoend.ani"); + obj.setCurrentAnimation(ani); + obj.stopTimeEvent(3); + break; + } + local currentAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭?嚙踝蕭ani + local sizeRate = 0.55;//??搣嚙踝蕭??蓱 + currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//嚙踝蕭吤ani ?嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//嚙踝蕭吤ani als旓吤 ani嚙踝蕭嚙踝蕭嚙踝蕭嚙? + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//嚙踝蕭??嚙踝蕭x y z嚙踝蕭嚙踝蕭 + break; + } + break; + case 80://babydragon + switch(subtype){ + case 11: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/standing/disaster_standingbody_astrab.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/standing/disaster_standingbody_astraf.ani"),true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/standing/disaster_standingeffectback_01.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/standing/disaster_standingeffecttop_05.ani", 0, 1, 0); + obj.sq_PlaySound("DISASTER_SUMMON"); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/charge/disaster_charge_astrab.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 150, 10, true); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/breathstart/disaster_breathe_astrab.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("DISASTER_THUNDER_BREATH"); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/breathloop/disaster_breathe_astrab.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 150, 10, true); + break; + case 24: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/disaster/breathend/disaster_breathe_astrab.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("STORM_BREATH_DISAPPEAR"); + break; + } + break; + case 12: + case 13: + local aniPath1 = "passiveobject/madeby_k_k/animation/babydragon/newskill/"; + switch(state){ + case 20: + local aniPath2 = "participation/participationhowlingstartdragonback_01.ani"; + if(subtype == 13) aniPath2 = "stormbreath/start/stormbreath_start_astra_back.ani"; + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(subtype == 12) currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/participation/participationhowlingstartdragonfront_01.ani"),true); + else currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/start/stormbreath_start_astra_front.ani"),true); + break; + case 21: + local aniPath2 = "participation/participationhowlingloop_astraback.ani"; + if(subtype == 13) aniPath2 = "stormbreath/loop/stormbreath_loop_astra_back.ani"; + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(subtype == 12) currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/participation/participationhowlingloop_astrafront.ani"),true); + else currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/loop/stormbreath_loop_astra_front.ani"),true); + obj.setTimeEvent(2, 100, 1, true); + if(subtype == 12) obj.setTimeEvent(3, 2350, 1, false); + else obj.setTimeEvent(3, 2000, 1, false); + break; + case 22: + local aniPath2 = "participation/participationhowlingchange_01.ani"; + if(subtype == 13) aniPath2 = "stormbreath/end/stormbreath_end_small_eff07.ani"; + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + break; + } + break; + case 121: + case 131: + local aniPath1 = "passiveobject/madeby_k_k/animation/babydragon/newskill/"; + switch(state){ + case 20: + local aniPath2 = "participation/participationhowling01_01.ani"; + if(subtype == 121){ + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + } + else{ + aniPath2 = "stormbreath/start/stormbreath_start_breatheff02.ani"; + obj.setTimeEvent(4, 120, 1, false); + // local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath1 + aniPath2, -150, 0, 275); + // local pAni = pooledObj.getCurrentAnimation(); + // pAni.setSpeedRate(200.0); + } + break; + case 21: + local aniPath2 = "participation/participationhowling02_01.ani"; + if(subtype == 131) aniPath2 = "stormbreath/loop/stormbreath_loop_breatheff_a01.ani"; + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 150, 10, true); + break; + case 22: + local aniPath2 = "participation/participationhowling03_02.ani"; + if(subtype == 131) aniPath2 = "stormbreath/end/stormbreath_end_breatheff03.ani"; + local ani = sq_CreateAnimation("", aniPath1 + aniPath2); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + if(subtype == 121) pAni.setSpeedRate(200.0); + else pAni.setSpeedRate(150.0); + break; + } + break; + } + break; + case 82://casillas + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + break; + case 122://ramos + switch(subtype){ + case 41: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/absorb/gluttonyhand_01.ani"); + obj.setCurrentAnimation(ani); + local delay = obj.getVar("delay").get_vector(0); + local speedRate = 72.0 / delay.tofloat() * 120.0; + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(obj.getXPos()); + obj.getVar("move").push_vector(150); + break; + case 21: + obj.stopTimeEvent(0); + local totalDamage = obj.getVar("bonusrate").get_vector(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 76)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/absorb/gluttonyhandattack_07.ani"); + obj.setCurrentAnimation(ani); + break; + } + break; + case 42: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/absorb/gluttonysoulmultiplehit_02.ani"); + obj.setCurrentAnimation(ani); + local delay = obj.getVar("delay").get_vector(0); + local speedRate = 72.0 / delay.tofloat() * 175.0; + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 21: + local dstX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 50); + sq_setCurrentAxisPos(obj, 0, dstX); + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/absorb/gluttonysoulsuction_02.ani"); + obj.setCurrentAnimation(ani); + local delay = obj.getVar("delay").get_vector(0); + local speedRate = 72.0 / delay.tofloat() * 120.0; + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case 200: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/summon/targeting_start.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/summon/targeting_move.ani"); + obj.setCurrentAnimation(ani); + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(obj.getXPos()); + obj.getVar("move").push_vector(200); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/ramos/summon/targeting_end01.ani"); + obj.setCurrentAnimation(ani); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/dummy.ani"); + obj.setCurrentAnimation(ani); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/ramos/summon/startmoon_28.ani", 0, 0, 80 + obj.getYPos()); + obj.setTimeEvent(1, 1000, 1, false); + break; + } + break; + } + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + break; + case SKILL_BYKK_MOONSHADOW: + switch(subtype){ + case 1: + switch(state){ + case 20: + local ani = sq_CreateAnimation("","character/mage/effect/animation/moonshadow/moonshadow_start_falling_normal.ani"); + obj.setCurrentAnimation(ani); + break; + case 21: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/moonshadow/moonshadow_start_ground_normal.ani"); + obj.setCurrentAnimation(ani); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 22: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/moonshadow/moonshadow_loop_ground_normal.ani"); + obj.setCurrentAnimation(ani); + break; + case 23: + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/moonshadow/moonshadow_end_ground_normal.ani"); + obj.setCurrentAnimation(ani); + break; + } + local currentAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭?嚙踝蕭ani + local sizeRate = 0.35;//??搣嚙踝蕭??蓱 + if(state == 20) sizeRate = 0.6; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//嚙踝蕭吤ani ?嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//嚙踝蕭吤ani als旓吤 ani嚙踝蕭嚙踝蕭嚙踝蕭嚙? + return; + break; + case 2: + break; + } + break; + case SKILL_BYKK_BLACKLUNATIC: + switch(subtype){ + case 1://月蚀长矛 + switch(state){ + case 20://start + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/eclipesspearstart_00.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + break; + case 21://loop + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/eclipesspearloop_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(0, 200, 1, false); + break; + case 22://attack + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/eclipesspearattack_00.ani"); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 5, 30, false); + break; + case 23://hit + local ani = sq_CreateAnimation("","passiveobject/madeby_k_k/animation/luis/luis_blacklunatic/eclipesspearhit_00.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("BLACK_LUNATIC_SPEAR_MULTIPLE"); + break; + } + break; + } + break; + } + local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); + local element_kk_water = sqrChr.getVar("element_kk").getInt(1); + local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); + local element_kk_light = sqrChr.getVar("element_kk").getInt(3); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(!attackInfo) return; + if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); + if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); + if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); + if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); + if(sqrChr.getVar("eclipsehive_select").getBool(0) == false){ + local hitdelayRate = 100.0; + if(skillIndex > 75 && skillIndex < 80 && sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) hitdelayRate = 120.0; + sq_SetAttackInfoHitDelayRateDamager(attackInfo, hitdelayRate); + } +} + +function onEndCurrentAni_po_summoners(obj) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 25://hodor + switch(subtype){ + case 1://嚙踝蕭嚙踝蕭怐 + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3://嚙踝蕭怐 + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4://嚙踝蕭嚙踝蕭嚙踝蕭嚙? + break; + case 5://3盓嚙踝蕭 + break; + case 6://嚙踝蕭艉嚙踝蕭 + break; + case 7://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + switch(state){ + case 21: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 8://旓?1?茷 + sq_SendDestroyPacketPassiveObject(obj); + break; + case 9://旓?2?茷 + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 44://sandor + sq_SendDestroyPacketPassiveObject(obj); + break; + case 45://auxo + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + case 11: + case 12: + case 14: + case 100: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 13: + switch(state){ + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 46://luis + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: + switch(state){ + case 20: + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 21: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 6: + switch(state){ + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 47://echeverra + switch(subtype){ + case 1: + case 2: + case 4: + case 5: + case 51: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 41: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 8: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 9: + switch(state){ + case 22: + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); + //monsterattack_ksk(activeObj,6); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_spikeking_grant.nut", true); + local monster_id = activeObj.getCollisionObjectIndex(); + AddAppendage.getVar().clear_vector(); + AddAppendage.getVar().push_vector(monster_id); + AddAppendage.sq_SetValidTime(30000); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 76://spiritdarkhigher + switch(subtype){ + case 1: + case 2: + case 63: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + case 41: + case 61: + case 62: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 77://spiritlighthigher + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + case 22: + case 23: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + case 10: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 21: + case 41: + case 42: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 78://spiritwaterhigher + switch(subtype){ + case 1: + case 2: + case 4: + case 41: + case 9: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + case 11: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 10: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + local parentObj = obj.getParent(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut"); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 79://spiritfirehigher + switch(subtype){ + case 1: + case 2: + case 21: + case 31: + case 32: + case 33: + case 4: + case 6: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 61: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 80://babydragon + switch(subtype){ + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 11: + switch(state){ + case 20: + case 21: + case 22: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 24: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + sq_SendCreatePassiveObjectPacketPos(activeObj, 1008605, 0, 0, 0, 233); + activeObj.sendStateOnlyPacket(STATE_STAND); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_endeff05.ani", 0, 0, 0); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 12: + case 13: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + local targetObj = obj.getVar("target").get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + sq_SendCreatePassiveObjectPacketPos(activeObj, 1008605, 0, 0, 0, 233); + activeObj.sendStateOnlyPacket(STATE_STAND); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_endeff05.ani", 0, 0, -295); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 121: + case 131: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case 82://casillas + sq_SendDestroyPacketPassiveObject(obj); + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + sq_SendDestroyPacketPassiveObject(obj); + break; + case 122://ramos + switch(subtype){ + case 1: + case 21: + case 22: + case 31: + case 32: + case 33: + case 5: + case 6: + case 71: + case 72: + case 73: + case 74: + case 75: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 41: + case 42: + switch(state){ + case 20: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 200: + switch(state){ + case 20: + case 22: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + switch(subtype){ + case 101: + case 102: + case 201: + case 301: + case 302: + case 401: + case 402: + case 1001: + case 1002: + case 2001: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_MOONSHADOW: + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW); + if(loadSlot) sqrChr.sq_RemoveSkillLoad(SKILL_BYKK_MOONSHADOW); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_BLACKLUNATIC: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 150: + switch(subtype){ + case 1: + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_HIGHESTECHEVERRA: + if(subtype == 3){ + obj.sq_PlaySound("HIGHEST_ECHEVERRA_DISAPPEAR"); + sq_AddDrawOnlyAniFromParent(obj, "character/mage/animation/summoner_bykk/effect/highestecheverra/highestecheverra_echeverraend.ani", 0, 0, 0); + // sq_AddDrawOnlyAniFromParent(obj, "character/mage/animation/summoner_bykk/effect/highestecheverra/highestecheverrae_08.ani", 0, 0, 0); + obj.setTimeEvent(2, 500, 1, false); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } +} + +function onKeyFrameFlag_po_summoners(obj, flagIndex) +{ + if (!obj) return false; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 25://hodor + break; + case 44://sandor + break; + case 45://auxo + switch(subtype){ + case 5: + switch(flagIndex){ + case 1001: + local monster_level = sq_GetSkillLevel(sqrChr, 174); + local monster_time = 3600000; + // local destX_01 = obj.getXPos() - sqrChr.getXPos(); + // local destY_01 = obj.getYPos() - sqrChr.getYPos(); + // if(obj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - obj.getXPos(); + //summonmonster_mage(sqrChr,destX_01,destY_01,0,0,MONSTER_ID_AUXOOLD,monster_time,monster_level,0); + summonmonster_mage_plus_Kwk(sqrChr,obj,0,0,0,0,MONSTER_ID_AUXOOLD,monster_time,monster_level,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 15: + switch(flagIndex){ + case 1001: + local monster_level = sq_GetSkillLevel(sqrChr, 174); + local monster_time = 3600000; + summonmonster_mage_plus_Kwk(sqrChr,obj,0,0,0,0,MONSTER_ID_AUXO,monster_time,monster_level,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 46://luis + break; + case 47://echeverra + switch(subtype){ + case 51: + local anipath = ["passiveobject/madeby_k_k/animation/spikeking/newlaser/uhdlaserbomblaiserblue_00.ani","passiveobject/madeby_k_k/animation/spikeking/newlaser/uhdlaserbomblaiserpurple_00.ani","passiveobject/madeby_k_k/animation/spikeking/newlaser/uhdlaserbomblaiserred_00.ani","passiveobject/madeby_k_k/animation/spikeking/newlaser/uhdlaserbomblaiseryellow_00.ani"]; + switch(flagIndex){ + case 101: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 0, 10, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -140, -40, 0); + break; + case 102: + sq_SetMyShake(obj,2,800); + break; + case 103: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -112, -70, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 28, 40, 0); + break; + case 104: + //obj.resetHitObjectList(); + break; + case 105: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 112, 0, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 168, -60, 0); + break; + case 107: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -28, -20, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 56, -30, 0); + break; + case 109: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -168, 20, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 84, 70, 0); + break; + case 111: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -56, -50, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 196, -10, 0); + break; + case 113: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], 140, 60, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -196, 30, 0); + break; + case 115: + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj, anipath[sq_getRandom(0,3)], -84, 50, 0); + break; + } + break; + } + break; + case 76://spiritdarkhigher + switch(flagIndex){ + case 4002: + obj.resetHitObjectList(); + break; + } + break; + case 77://spiritlighthigher + switch(flagIndex){ + case 5002: + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightsoul/thunderstrike_floor.ani",0,0,0); + sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/lighthigherspirit/lightsoul/thunderstrike_hit01.ani",0,0,0); + break; + case 101: + obj.resetHitObjectList(); + obj.sq_PlaySound("R_REDWITCH_LIGHTNING"); + break; + } + break; + case 78://spiritwaterhigher + break; + case 79://spiritfirehigher + break; + case 80://babydragon + switch(flagIndex){ + case 1001: obj.sq_PlaySound("STORM_BREATH_SUMMON"); break; + case 1002: obj.sq_PlaySound("YOUNGSKASA_WING");obj.sq_PlaySound("YOUNGSKASA_WIND_LOOP"); break; + case 1003: obj.sq_PlaySound("STORM_BREATH_DISAPPEAR"); break; + case 1101: obj.sq_PlaySound("PARTICIPATION_CHANGE"); break; + case 1102: obj.sq_PlaySound("PARTICIPATION_SCREAM"); break; + case 1103: obj.sq_PlaySound("PARTICIPATION_SMASH"); break; + } + break; + case 82://casillas + switch(flagIndex){ + case 1: + obj.resetHitObjectList(); + break; + case 2: + local xpos = obj.getVar().get_vector(0); + for(local i = 0; i < 4; i++){ + local zpos = 20; + if(i == 0) zpos = 60; + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(obj,"monster/character/mage/madeby_k_k/casillas/animation/moveslash/slash"+(i+1).tostring()+".ani", -400 + xpos * 50, 0, zpos); + sq_SetCustomRotate(pooledObj_01, sq_ToRadian(sq_getRandom(10,45).tofloat())); + } + obj.getVar().set_vector(0,xpos + 1); + // local pooledObj_03 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/casillas/animation/moveslash/slash3.ani", -270, 0, 20); + // sq_SetCustomRotate(pooledObj_03, sq_ToRadian(25.0)); + // local currentAni_03 = pooledObj_03.getCurrentAnimation(); + // currentAni_03.setImageRateFromOriginal(1.3, 1.3); + // local pooledObj_02 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/casillas/animation/moveslash/slash2.ani", -280, 0, 20); + // local pooledObj_04 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/casillas/animation/moveslash/slash4.ani", -250, 0, 20); + // sq_SetCustomRotate(pooledObj_04, sq_ToRadian(25.0)); + // local currentAni_04 = pooledObj_04.getCurrentAnimation(); + // currentAni_04.setImageRateFromOriginal(1.5, 1.5); + break; + } + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + break; + case 122://ramos + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + break; + case SKILL_BYKK_MOONSHADOW: + break; + case SKILL_BYKK_BLACKLUNATIC: + switch(flagIndex){ + case 101: sq_SetMyShake(obj, 6, 350); break; + case 102: sq_SetMyShake(obj, 3, 300); break; + } + break; + } + return true; +} diff --git a/user/116.205.165.25/6_mage_7.c b/user/116.205.165.25/6_mage_7.c new file mode 100644 index 0000000..569cbee --- /dev/null +++ b/user/116.205.165.25/6_mage_7.c @@ -0,0 +1,3579 @@ + +function onTimeEvent_po_summoners(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 25://hodor + break; + case 44://sandor + switch(timeEventIndex){ + case 0: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 45://auxo + break; + case 46://luis + switch(subtype){ + case 3: + switch(timeEventIndex){ + case 0: + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/luis/fireball.ptl", 0.0, 0.0); + local etcSub = obj.getVar("custom").getInt(10); + if(etcSub > 0){ + sq_SetSpeedToMoveParticle(obj, 0, 1000); + } + break; + } + break; + case 5: + switch(timeEventIndex){ + case 0: + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + // if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.5; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 20, eclipsehive_bonus) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 21, eclipsehive_bonus) + 100; + local etcSub = obj.getVar("custom").getInt(10); + local bonusRate = obj.getVar("custom").getInt(11); + if(bonusRate > 1){ + totalDamage = totalDamage * bonusRate; + totalDamage2 = totalDamage2 * bonusRate; + } + createPassiveObject_k_k(sqrChr,obj,46,6,-300,0,600,totalDamage,totalDamage2,etcSub,0,0); + break; + case 2: + obj.setTimeEvent(3,100,10,false); + break; + case 3: + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + // if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.5; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 20, 0.17*eclipsehive_bonus) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 21, 0.17*eclipsehive_bonus) + 100; + local etcSub = obj.getVar("custom").getInt(10); + local bonusRate = obj.getVar("custom").getInt(11); + if(bonusRate > 1){ + totalDamage = totalDamage * bonusRate; + totalDamage2 = totalDamage2 * bonusRate; + } + createPassiveObject_k_k(sqrChr,obj,46,6,-300+sq_getRandom(-50,50),sq_getRandom(-40,40),600,totalDamage,totalDamage2,etcSub,0,0); + if(timeEventCount >= 10) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 10: + switch(timeEventIndex){ + case 0: + local sub = obj.getVar("custom").getInt(10); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/blacklunatic/blacklunaticwing"+sub.tostring()+"crack_00.ani", 0, 0, 0); + local targetObj = obj.getVar("tar").get_obj_vector(0); + sq_moveWithParent(targetObj, pooledObj); + //print("sub = "+sub); + // if(sub == 3){ + // if(targetObj){ + // CNSquirrelAppendage.sq_RemoveAppendage(targetObj, BLACKLUNATIC_APDPATH); + // print("remove"); + // } + // } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) - 1); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj)); + sq_SetCurrentDirection(obj, targetObj.getDirection()); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, BLACKLUNATIC_APDPATH)) sq_SendDestroyPacketPassiveObject(obj); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 47://echeverra + switch(subtype){ + case 2: + case 5: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + case 1: + //?嚙踝蕭ptl + obj.sq_SetMoveParticle("particle/spikeking/grandwave.ptl", 0.0, 0.0); + break; + case 2: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 4: + switch(timeEventIndex){ + case 0: + createPassiveObject_k_k(sqrChr,obj,47,41,75 * (timeEventCount - 1),0,0,0,0,0,0,0); + break; + case 1: + obj.sq_PlaySound("SSTAR_DMG"); + break; + } + break; + case 51: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } + break; + } + break; + case 76://spiritdarkhigher + switch(subtype){ + case 3: + case 41: + case 61: + case 62: + case 63: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + sq_SetMyShake(obj,1,100); + obj.resetHitObjectList(); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/cylindercrack_0"+(timeEventCount - 1).tostring()+".ani",0,0,0); + local pAni = pooledObj.getCurrentAnimation(); + local time = obj.getVar("time").get_vector(0) / 4; + local speedRate = 150000.0 / time.tofloat(); + pAni.setSpeedRate(speedRate); + obj.stopSound(101); + obj.sq_PlaySound("DESCHAMPS_METAL_CHAIN",101); + break; + case 4: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 4: + switch(timeEventIndex){ + case 0: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + obj.resetHitObjectList(); + break; + } + break; + } + break; + case 77://spiritlighthigher + switch(subtype){ + case 2: + switch(timeEventIndex){ + case 0: + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 7, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,21,timeEventCount * 70,0,0,totalDamage,0,0,0,0); + break; + } + break; + case 9: + switch(timeEventIndex){ + case 0: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 28, 1.0) + 100; + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,10,sq_getRandom(-50,200), sq_getRandom(-35,35),0,totalDamage,0,0,0,0); + break; + } + break; + case 10: + switch(timeEventIndex){ + case 0: + //obj.resetHitObjectList(); + //"WORDSWORTH_LIGHTNING_0"+sq_getRandom(1,4).tostring()); + break; + } + break; + } + break; + case 78://spiritwaterhigher + switch(subtype){ + case 1: + case 11: + switch(timeEventIndex){ + case 0: + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,11,0,0,timeEventCount * 115 + 80,totalDamage,timeEventCount,0,0,0); + break; + case 1: + obj.sq_SetMoveParticle("particle/spirit/water_spirit_higher_ice_move.ptl", 0.0, 0.0); + break; + } + break; + case 4: + switch(timeEventIndex){ + case 0: + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 19, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,41,sq_getRandom(-50,100),sq_getRandom(-15,30),0,totalDamage,timeEventCount - 1,0,0,0); + break; + } + break; + case 9: + switch(timeEventIndex){ + case 0: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 22, 1.0) + 100; + local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 23, 1.0) + 100; + createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,10,0,0,0,totalDamage,time,timeEventCount,0,0); + break; + } + break; + case 10: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2: + break; + } + break; + } + break; + case 79://spiritfirehigher + switch(subtype){ + case 4: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } + break; + case 61: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + obj.resetHitObjectList(); + break; + case 2: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + obj.sq_PlaySound("SASCHA_TORNADO_LOOP"); + break; + } + break; + } + break; + case 80://babydragon + switch(timeEventIndex){ + case 1: + obj.resetHitObjectList(); + if(timeEventCount >= 10) obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = obj.getVar("custom").getInt(10); + if(subtype == 12) createPassiveObject_k_k(sqrChr, obj, 80, 121, 85, 0, 290, totalDamage, 0, 0, 0, 0); + else createPassiveObject_k_k(sqrChr, obj, 80, 131, 265, 0, 0, totalDamage, 0, 0, 0, 0); + break; + case 3: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 4: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 10: + local hittime = obj.getVar("custom").getInt(10); + obj.setTimeEvent(11, hittime, -1, false); + break; + case 11: obj.resetHitObjectList(); break; + } + break; + case 82://casillas + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + switch(subtype){ + case 2: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } + break; + case 10: + switch(timeEventIndex){ + case 0: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 122://ramos + switch(subtype){ + case 41: + case 5: + case 71: + case 72: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } + break; + case 200: + switch(timeEventIndex){ + case 1: + local monster_level = sq_GetSkillLevel(sqrChr, 174); + summonmonster_mage_plus_Kwk(sqrChr,obj,0,0,0,0,MONSTER_ID_RAMOS,3600000,monster_level,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + switch(subtype){ + case 202: + switch(timeEventIndex){ + case 0: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 1: + obj.resetHitObjectList(); + break; + } + break; + case 102: + case 302: + switch(timeEventIndex){ + case 0: + obj.resetHitObjectList(); + break; + } + break; + case 1001: + local sizeRate = obj.getVar("sizeRate").get_vector(0).tofloat() / 100; + sizeRate = sizeRate.tofloat(); + local sub = obj.getVar("sizeRate").get_vector(1); + switch(timeEventIndex){ + case 1: + local anipath; + switch(sub){ + case 1: + anipath = "passiveobject/common/animation/darkexplosionparticle1.ani"; + break; + case 2: + anipath = "passiveobject/common/animation/fireexplosionparticle1.ani"; + break; + case 3: + anipath = "passiveobject/common/animation/lightexplosionparticle1.ani"; + break; + case 4: + anipath = "passiveobject/character/mage/animation/icefireexplosionparticle1.ani"; + break; + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 2: + local anipath; + switch(sub){ + case 1: + anipath = "passiveobject/common/animation/darkexplosionparticle2.ani"; + break; + case 2: + anipath = "passiveobject/common/animation/fireexplosionparticle2.ani"; + break; + case 3: + anipath = "passiveobject/common/animation/lightexplosionparticle2.ani"; + break; + case 4: + anipath = "passiveobject/character/mage/animation/icefireexplosionparticle2.ani"; + break; + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 3: + local anipath; + switch(sub){ + case 1: + anipath = "passiveobject/common/animation/darkexplosionparticle3.ani"; + break; + case 2: + anipath = "passiveobject/common/animation/fireexplosionparticle3.ani"; + break; + case 3: + anipath = "passiveobject/common/animation/lightexplosionparticle3.ani"; + break; + case 4: + anipath = "passiveobject/character/mage/animation/icefireexplosionparticle3.ani"; + break; + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 8); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 4: + local anipath; + switch(sub){ + case 1: + anipath = "passiveobject/common/animation/darkexplosionparticle4.ani"; + break; + case 2: + anipath = "passiveobject/common/animation/fireexplosionparticle4.ani"; + break; + case 3: + anipath = "passiveobject/common/animation/lightexplosionparticle4.ani"; + break; + case 4: + anipath = "passiveobject/character/mage/animation/icefireexplosionparticle4.ani"; + break; + } + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_BYKK_MOONSHADOW: + switch(timeEventIndex){ + case 0: + obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 1: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + else sq_SendDestroyPacketPassiveObject(obj); + if(timeEventCount >= 10) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_BLACKLUNATIC: + switch(subtype){ + case 1: + switch(timeEventIndex){ + case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 1: + local srcX = obj.getVar("custom").getInt(10); + local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(12), timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(11), 30, timeEventCount, 30); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_BYKK_HIGHESTECHEVERRA: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local EcheverraObj = sqrChr.getVar("EcheverraObj").get_obj_vector(0); + if(EcheverraObj && EcheverraObj.getState() != STATE_DIE){ + local monsterObj = sq_GetCNRDObjectToActiveObject(EcheverraObj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_AddSetStatePacketActiveObject(monsterObj, 0, sq_GetGlobalIntVector(), STATE_PRIORITY_USER); + } + break; + } + break; + } +} + +function procAppend_po_summoners(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(obj.getZPos() >= 1000 && obj.getVar().getBool(0) == false){ + local parentObj = obj.getParent(); + if(!parentObj) sq_SendDestroyPacketPassiveObject(obj); + local id = parentObj.getCollisionObjectIndex(); + obj.getVar().setBool(0, true); + // print("id:" + id); + if(sq_IsMyControlObject(sqrChr)) { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(id); + sq_BinaryWriteDword(sq_GetGroup(parentObj)); + sq_BinaryWriteDword(sq_GetUniqueId(parentObj)); + sq_SendChangeSkillEffectPacket(sqrChr, SKILL_BYKK_COMMUNION); + sq_SendDestroyPacketPassiveObject(obj); + } + sq_SendDestroyPacketPassiveObject(obj); + } + + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 25://hodor + switch(subtype){ + case 7://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + switch(state){ + case 20: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 800; + local srcX = obj.getVar("move").get_vector(0); + local srcY = obj.getVar("move").get_vector(1); + local MoveX = obj.getVar("move").get_vector(2); + local MoveY = obj.getVar("move").get_vector(3); + local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); + sq_setCurrentAxisPos(obj, 0, srcX + vx);//?嚙踝蕭?嚙踝蕭x嚙? + sq_setCurrentAxisPos(obj, 1, srcY + vy);//?嚙踝蕭?嚙踝蕭y嚙? + + if(obj.getZPos() <= 0){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case 44://sandor + break; + case 45://auxo + switch(subtype){ + case 5: + case 15: + switch(state){ + case 20: + if(obj.getZPos() <= 0){ + if(subtype == 5) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + if(subtype == 15) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 13: + switch(state){ + case 20: + if(obj.getZPos() <= 0){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 22: + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + if(sq_GetDistanceObject(obj, targetObj, false) <= 5){ + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 28, eclipsehive_bonus) + 100; + targetObj.getVar("auxohit").clear_vector(); + targetObj.getVar("auxohit").push_vector(1); + targetObj.getVar("auxohittime").clear_vector(); + targetObj.getVar("auxohittime").push_vector(100); + targetObj.getVar("auxohitbonus").clear_vector(); + targetObj.getVar("auxohitbonus").push_vector(totalDamage * 6); + + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, 199, true, "character/mage/k_k_made/appendage/aptomonster/ap_auxoex_skillthree.nut", true); + sq_SendDestroyPacketPassiveObject(obj); + return; + } + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local X1 = sq_GetUniformVelocity(obj.getXPos(), targetObj.getXPos(), currentT, fireT); + local Y1 = sq_GetUniformVelocity(obj.getYPos(), targetObj.getYPos(), currentT, fireT); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case 14: + switch(state){ + case 20: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local angle = sq_GetAccel(5, -90, currentT, fireT, true); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + if(obj.getZPos() <= 0){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case 46://luis + switch(subtype){ + case 2: + local pAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭ani + local currentT = sq_GetCurrentTime(pAni);//?嚙踝蕭?? + local etcSub = obj.getVar("custom").getInt(10); + local time = 3000; + if(etcSub > 0) time = 1500; + if(currentT >= time) sq_SendDestroyPacketPassiveObject(obj); + break; + case 6: + switch(state){ + case 20: + if(obj.getZPos() <= 0){ + //obj.resetHitObjectList(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 10: + break; + } + break; + case 47://echeverra + switch(subtype){ + case 8: + switch(state){ + case 21: + local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); + if(targetObj){ + if(sq_GetDistanceObject(obj, targetObj, false) <= 5){ + if(obj.getVar().getBool(0) == false){ + sq_AddDrawOnlyAniFromParent(targetObj,"passiveobject/test/kcontents3/curseofbloodyfruit/buff/animation/absorb_element_01.ani",0,0,30); + obj.getVar().setBool(0,true); + } + sq_SendDestroyPacketPassiveObject(obj); + return; + } + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 800;// pAni.getDelaySum(false); + local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, false); + local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, false); + local sizeRate = sq_GetUniformVelocity(20, 2, currentT, fireT).tofloat() / 10.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_setCurrentAxisPos(obj, 0, X1); + sq_setCurrentAxisPos(obj, 1, Y1); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + } + break; + case 76://spiritdarkhigher + break; + case 77://spiritlighthigher + break; + case 78://spiritwaterhigher + switch(subtype){ + case 11: + switch(state){ + case 20: + case 21: + if(obj.getZPos() <= 0){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 10: + switch(state){ + case 21: + local currentT = sq_GetObjectTime(obj);;//?嚙踝蕭?? + local fireT = 3000;//??? + local srcX = obj.getVar("move").get_vector(0); + local MoveX = obj.getVar("move").get_vector(1); + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + if(sqrChr.isMovablePos(dstX, obj.getYPos())){ + sq_setCurrentAxisPos(obj, 0, dstX); + } + else{ + obj.getVar("move").set_vector(0,obj.getXPos()); + obj.getVar("move").set_vector(1,0); + } + break; + } + break; + } + break; + case 79://spiritfirehigher + switch(subtype){ + case 61: + switch(state){ + case 20: + case 21: + case 22: + local sub = obj.getVar("sub").get_vector(0); + local sub_all = obj.getVar("sub").get_vector(1); + local parentObj = sq_GetCNRDObjectToActiveObject(obj.getVar("parentObj").get_obj_vector(0)); + if(parentObj){ + local base100Angle = (36000 / sub_all) * sub; + local currentT = sq_GetObjectTime(obj); + local currentSpeedRate = 1.0; + local defaultRoundTime = 960; + local radius = 125; + local baseX = parentObj.getXPos(); + local baseZ = parentObj.getYPos(); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); + + local axisMagnifyRate = 125 * 0.33; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseZ + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + //sq_setCurrentAxisPos(obj, 2, parentObj.getZPos()); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + } + break; + case 80://babydragon + break; + case 82://casillas + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + break; + case 122://ramos + switch(subtype){ + case 41: + switch(state){ + case 20: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local srcX = obj.getVar("move").get_vector(0); + local MoveX = obj.getVar("move").get_vector(1); + local v = sq_GetAccel(0, MoveX, currentT, fireT, false); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + } + break; + case 200: + switch(state){ + case 21: + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 1000; + local srcX = obj.getVar("move").get_vector(0); + local MoveX = obj.getVar("move").get_vector(1); + local v = sq_GetAccel(0, MoveX, currentT, fireT, true); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + if(sqrChr.isMovablePos(dstX,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); + if(currentT > fireT) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + break; + case SKILL_BYKK_MOONSHADOW: + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + case 22: + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW); + if(loadSlot){ + local attacknumber = loadSlot.getRemainLoadNumber(); + if(attacknumber <= 0){ + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + } + else{ + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + local time = sq_GetObjectTime(obj); + if(time >= obj.getVar("custom").getInt(0)){ + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + return; + } + break; + } + break; + } + break; + case 150: + switch(subtype){ + case 1: + if(sq_GetObjectTime(obj) >= 5000) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } +} + +function onAttack_po_summoners(obj, damager, boundingBox, isStuck) +{ + if(!obj) return 0; + //enableClearDeadEnemies(obj, damager); + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 25://hodor + switch(subtype){ + case 4: + case 5: + case 6: + if(obj.getVar("custom").getInt(10) < 1) sq_SendDestroyPacketPassiveObject(obj); + break; + case 7: + switch(state){ + case 20: + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case 44://sandor + break; + case 45://auxo + switch(subtype){ + case 3: + local skill_level = sqrChr.sq_GetSkillLevel(45); + local level = 40 + skill_level * 2; + local prob = sq_GetLevelData(sqrChr, 45, 19, skill_level); + local time = sq_GetLevelData(sqrChr, 45, 21, skill_level); + sq_sendSetActiveStatusPacket(damager, sqrChr, ACTIVESTATUS_CONFUSE, prob.tofloat(), level.tointeger(), false, time.tointeger()); + break; + } + break; + case 46://luis + switch(subtype){ + case 3: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 47://echeverra + break; + case 76://spiritdarkhigher + switch(subtype){ + case 61: + switch(state){ + case 21: + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_holdedmonster.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, appendagePath)){ + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, 128, false, appendagePath, true); + if(MasterAppendage){ + sq_HoldAndDelayDie(damager, obj, true, false, false, 100, 500, ENUM_DIRECTION_NEUTRAL , MasterAppendage); + local validT = MasterAppendage.getAppendageInfo() + local time = obj.getVar("time").get_vector(0); + validT.setValidTime(time); + } + } + break; + } + break; + } + break; + case 77://spiritlighthigher + break; + case 78://spiritwaterhigher + switch(subtype){ + case 3: + case 11: + switch(state){ + case 20: + case 21: + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + if(subtype == 3) sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_spear_exp_dodge.ani",0,0,0); + break; + } + break; + case 10: + if(obj.getVar().getBool(0)){ + obj.sq_RemoveMoveParticle(); + obj.sq_SetMoveParticle("particle/ramos/targetingmove.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,50); + obj.getVar().setBool(0,false); + } + break; + } + break; + case 79://spiritfirehigher + switch(subtype){ + case 31: + case 32: + case 33: + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 24, eclipsehive_bonus) + 100; + local sizeRate = 110; + sq_BinaryStartWrite(); + sq_BinaryWriteWord(sizeRate); + sq_BinaryWriteWord(totalDamage); + sq_SendCreatePassiveObjectPacketPos(sqrChr, 24281, 0, damager.getXPos(), damager.getYPos() + 1, sq_GetCenterZPos(boundingBox)); + break; + } + break; + case 80://babydragon + switch(subtype){ + case 3: + sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle1.ptl", obj, 0, 0, 0, true, 30, 0, 1); + sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle2.ptl", obj, 0, 0, 0, true, 30, 0, 1); + sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle3.ptl", obj, 0, 0, 0, true, 30, 0, 1); + sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle4.ptl", obj, 0, 0, 0, true, 30, 0, 1); + case 5: + if(obj.getVar("custom").getInt(10) > 0) break; + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 82://casillas + switch(subtype){ + case 100: + if(damager && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local hpMax = activeObj.getHpMax(); + local hp = activeObj.getHp(); + local decrease_hp = (hpMax.tofloat() * 0.1).tointeger(); + if(sq_IsBoss(activeObj)) decrease_hp = (hp.tofloat() * 0.03).tointeger(); + else if(sq_IsNamed(activeObj)) decrease_hp = (hp.tofloat() * 0.06).tointeger(); + // print("hpMax = "+hpMax+" + hp = "+hp+" + decrease_hp = "+decrease_hp); + if(decrease_hp > hp) activeObj.setHp(0, null, true); + else activeObj.setHp(hp - decrease_hp, null, true); + } + break; + } + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + switch(subtype){ + case 41: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut")){ + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut"; + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, appendagePath, true); + if(MasterAppendage){ + sq_AccelMoveToAppendageForce(damager, sqrChr, obj, 325, 0, 0, 400, true, MasterAppendage, false); + local validT = MasterAppendage.getAppendageInfo() + validT.setValidTime(700); + } + } + break; + } + break; + case 122://ramos + switch(subtype){ + case 5: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut")){ + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut"; + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, appendagePath, true); + if(MasterAppendage){ + sq_AccelMoveToAppendageForce(damager, sqrChr, obj, 200, 0, 0, 800, true, MasterAppendage, false); + local validT = MasterAppendage.getAppendageInfo() + validT.setValidTime(1000); + } + } + sq_AddDrawOnlyAniFromParent(damager,"monster/character/mage/madeby_k_k/ramos/animation/gather/gatherhit_03.ani",0,0,sq_GetCenterZPos(boundingBox)); + break; + } + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + break; + case SKILL_BYKK_MOONSHADOW: + break; + case 150: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){ + local holdTime = obj.getVar("custom").getInt(1); + if(holdTime == 0) holdTime = 3000; + local totalDamage = obj.getVar("custom").getInt(0); + createPassiveObject_k_k(obj,obj,150,2,0,0,sq_GetCenterZPos(boundingBox),totalDamage,holdTime,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){ + local apdPath = "character/mage/k_k_made/appendage/aptoemeny/ap_throwstickytrap_hold.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, apdPath, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + local holdTime = obj.getVar("custom").getInt(1); + AddAppendage.sq_SetValidTime(holdTime); + } + break; + } + break; + } + + local timer = sqrChr.getVar("time").get_ct_vector(0); + if(timer){ + local timer_t1 = timer.Get(); + if(timer_t1 > 1680){ + local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW); + if(loadSlot){ + local attacknumber = loadSlot.getRemainLoadNumber(); + if(attacknumber > 0 && skillIndex != SKILL_BYKK_MOONSHADOW && subtype != 2){ + loadSlot.decreaseLoadCount(1); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_MOONSHADOW, -1, 10, 1.0) + 100; + createPassiveObject_k_k(sqrChr,damager,SKILL_BYKK_MOONSHADOW,2,0,0,sq_GetCenterZPos(boundingBox),totalDamage,0,0,0,0); + } + attacknumber = loadSlot.getRemainLoadNumber(); + if(attacknumber <= 0) sqrChr.sq_RemoveSkillLoad(SKILL_BYKK_MOONSHADOW); + } + } + } + return 0; +} + +function onAfterAttack_po_summoners(obj, damager, boundingBox, isStuck) +{ + if(!obj) return 0; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local skillIndex = obj.getVar("skillIndex").get_vector(0); + local subtype = obj.getVar("subtype").get_vector(0); + local state = obj.getVar("state").get_vector(0); + + switch(skillIndex){ + case 25://hodor + break; + case 44://sandor + break; + case 45://auxo + break; + case 46://luis + break; + case 47://echeverra + break; + case 76://spiritdarkhigher + switch(subtype){ + case 61: + switch(state){ + case 22: + //嚙踝蕭? + if(damager && damager.isObjectType(OBJECTTYPE_ACTIVE)){// && damager.getVar().getBool(0) == false + //damager.getVar().setBool(0,true); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local hpMax = activeObj.getHpMax(); + local hp = activeObj.getHp(); + local hp_percentage = (hp.tofloat() / hpMax.tofloat()) * 100; + local killpoint = (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 24, 1.0) + 100).tofloat(); + local hide_percent = 89; + if(sq_IsBoss(activeObj)){killpoint = killpoint.tofloat() / 3.0;hide_percent = 98;} + else if(sq_IsNamed(activeObj)){killpoint = killpoint.tofloat() / 2.0;hide_percent = 94;} + if((hp_percentage <= killpoint && hp_percentage > 0) || sq_getRandom(0,99) > hide_percent){ + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + local z = activeObj.getObjectHeight(); + createPassiveObject_k_k(sqrChr,activeObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,63,0,1,z / 4 + 1,0,500,group,uniqueId,0); + } + } + return; + break; + } + break; + } + break; + case 77://spiritlighthigher + break; + case 78://spiritwaterhigher + break; + case 79://spiritfirehigher + break; + case 80://babydragon + break; + case 82://casillas + // if(damager && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + // local activeObj = sq_GetCNRDObjectToActiveObject(damager); + // if(activeObj.getHp() <= 0) activeObj.setValid(false); + // } + break; + case 118://sandorex + break; + case 119://heilrom + break; + case 120://spiritfireex + break; + case 121://kruta + break; + case 122://ramos + break; + case SKILL_BYKK_SUMMONSPIRITCOMMON: + break; + case SKILL_BYKK_MOONSHADOW: + break; + } + return 0; +} + + + +function startSkillCoolTime_mage_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + + local nct = currentCoolTime; + if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/witch_skill_bykk/passiveskill/ap_magicaltempoup.nut")) && nct > 0){ + local value1 = sq_GetLevelData(obj, 2, 1, sq_GetSkillLevel(obj, 2)); + local mightyrune_level = obj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); + if(mightyrune_level > 0){ + local add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 4, mightyrune_level); + value1 = value1 * (1000 + add_Rate) / 1000; + } + // print("value1 = "+value1); + nct = nct * (1000 - value1) / 1000; + } + // print("nct = "+nct); + + local newCoolTime = 0; + switch(skillIndex){ + case SKILL_BYKK_BLACKLUNATIC: + return 40000; + break; + // case 45: + // if(nct < 3500) return 3500; + // else return nct; + // break; + case 46: + if(obj.getVar("eclipsehive_select").getBool(0) && sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0){ + newCoolTime = nct * 50 / 100; + return newCoolTime; + } + else return nct; + break; + case 49: + if(obj.getVar("eclipsehive_select").getBool(0)){ + local decreaseRate = 0; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) decreaseRate = decreaseRate - 10; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) decreaseRate = decreaseRate - 10; + if(decreaseRate < 0){ + newCoolTime = nct * (100 + decreaseRate) / 100; + return newCoolTime; + } + else return nct; + } + else return nct; + break; + case 2: + if(currentCoolTime < 40000) return 40000; + break; + case SKILL_BYKK_CHASERLAUNCH: + newCoolTime = 100; + if(sq_isPVPMode()) newCoolTime = 1000; + // switch(obj.getState()){ + // case SKILL_BYKK_DRAGONSPEAR: + // newCoolTime = newCoolTime - sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 10, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)); + // break; + // case SKILL_BYKK_RANDOMPIERCESTRIKE: + // newCoolTime = newCoolTime - sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 9, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE)); + // break; + // case STATE_BYKK_RANDOMPIERCESTRIKEEX: + // newCoolTime = newCoolTime - sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 6, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)); + // break; + // } + // print("newCoolTime = "+newCoolTime); + return newCoolTime; + break; + case SKILL_BYKK_CHASERSEXPLOSION: + return nct; + break; + default: + if(sq_getGrowType(obj) == 3) return currentCoolTime; + else return nct; + break; + } +} + + + +/////////////////////////summoner + + +function proc_appendage_summonerwait(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) + { + appendage.setValid(false); + return; + } + + local monster_Name = ["SandorObj","AuxoObj","AuxooldObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj"]; + for(local i = 0; i < monster_Name.len(); i++){ + local monster_num = parentObj.getVar(monster_Name[i]).get_obj_vector_size(); + if(monster_num > 0){ + for(local ui = 0; ui < monster_num; ui++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar(monster_Name[i]).get_obj_vector(ui)); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monsterObj, parentObj, 199, false, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut", true); + } + } + } + } + +} + +function onEnd_appendage_summonerwait(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + + local monster_Name = ["SandorObj","AuxoObj","AuxooldObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj"]; + for(local i = 0; i < monster_Name.len(); i++){ + local monster_num = parentObj.getVar(monster_Name[i]).get_obj_vector_size(); + if(monster_num > 0){ + for(local ui = 0; ui < monster_num; ui++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar(monster_Name[i]).get_obj_vector(ui)); + if(CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(monsterObj, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut"); + } + } + } + } +} + +function onSourceKeyFrameFlag_appendage_auxo_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 7, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,45,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭? + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 9, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,targetObj,45,2,0,0,0,totalDamage,0,0,0,0); + } + break; + case 301://堋?嚙踝蕭嚙踝蕭?堋? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 11, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,45,3,0,0,0,totalDamage,0,0,0,0); + break; + case 401://嚙踝蕭嚙踝蕭 + local sizeRate = 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){ + sizeRate = sizeRate + 20; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){ + sizeRate = sizeRate + 20; + eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){ + sizeRate = sizeRate + 30; + eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1; + } + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 23, eclipsehive_bonus2) + 100; + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){ + local number = sqrChr.getVar("AuxoObj").get_obj_vector_size(); + local tz_number = 0; + local max_number = 9; + if(number > max_number) {tz_number = number - max_number; number = max_number;} + print("totalDamage_before = "+totalDamage); + totalDamage = (totalDamage * (number.tofloat() + tz_number.tofloat() / 2.5)).tointeger(); + print("totalDamage_after = "+totalDamage); + parentObj.getVar("ronghe_bool").setBool(0, false); + } + createPassiveObject_k_k(sqrChr,parentObj,45,4,50,0,0,totalDamage,sizeRate,0,0,0); + break; + case 501://嚙踝蕭嚙踝蕭嚙? + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local yPos = targetObj.getYPos(); + local xPos = sq_GetDistancePos(targetObj.getXPos(), parentObj.getDirection(), -50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + } + break; + case 502://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + appendage.getVar("bool").setBool(1, true); + //monsterattack_ksk(parentObj,0); + break; + case 503://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 9, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,45,100,0,0,0,totalDamage,0,0,0,0); + break; + case 1001://?嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONAUXO).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONAUXO, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONAUXO), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + } + return true; +} + +function proc_appendage_auxo_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,4); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + local tiaozheng = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) tiaozheng = 200; + if(currentTT < ATK_TIME - tiaozheng) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [3,2,1,0]; + local distanceX = [80,60,500,60]; + local distanceXmin = [30,0,0,0]; + local distanceY = [10,10,200,10]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 0) < 1 && i == 0) return; + if(i == 0) appendage.getVar("bool").setBool(10, true); + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + else if(i == 1 || i == 3){ + local prob = 69; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) prob = 20; + if(sq_getRandom(0,99) >= prob && appendage.getVar("bool").getBool(0) == true){ + appendage.getVar("bool").setBool(0,false); + monsterattack_ksk(parentObj,6); + return; + } + } + } + } + } + } + else{ + targetObj = sq_FindTarget( parentObj, -1000, 1000, 800, 350); + if(targetObj){ + sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + } + break; + case STATE_ATTACK: + appendage.getVar("bool").setBool(0,true); + if(attackIndex == 4){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + else if(attackIndex == 5 && appendage.getVar("bool").getBool(1) == true){ + appendage.getVar("bool").setBool(1, false); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){ + local ani = parentObj.getCurrentAnimation(); + ani.setSpeedRate(200.0); + } + } + break; + } +} + +function onStart_appendage_auxo_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_auxo_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_auxoex_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 27, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,targetObj,45,11,0,0,0,totalDamage,0,0,0,0); + } + break; + case 201: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 27, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,targetObj,45,12,0,0,0,totalDamage,0,0,0,0); + } + break; + case 301: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local group = sq_GetGroup(targetObj),uniqueId = sq_GetUniqueId(targetObj); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 28, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr, parentObj, 45, 13, 150, 0, 50, totalDamage * 2, 20, group, uniqueId, 0); + } + break; + case 401: + local sizeRate = 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){ + sizeRate = sizeRate + 20; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){ + sizeRate = sizeRate + 20; + eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){ + sizeRate = sizeRate + 30; + eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1; + } + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 29, eclipsehive_bonus2) + 100; + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){ + totalDamage = totalDamage * sqrChr.getVar("AuxoObj").get_obj_vector_size(); + parentObj.getVar("ronghe_bool").setBool(0, false); + } + createPassiveObject_k_k(sqrChr,parentObj,45,14,155,-1,124,totalDamage,sizeRate,0,0,0); + break; + case 601: + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONAUXO).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONAUXO, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONAUXO), -1); + + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 6); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 701: + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 3); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + } + return true; +} + +function proc_appendage_auxoex_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + // appendage.getVar("speed").setBool(0,true); + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,4); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + local tiaozheng = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) tiaozheng = 200; + if(currentTT < ATK_TIME - tiaozheng) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local sizeRate = 1; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) sizeRate = 2; + local skillt = [t_03,t_02,t_01]; + local attackIndex = [3,2,0]; + local distanceX = [450,400 * sizeRate,400 * sizeRate]; + local distanceXmin = [200,0,0]; + local distanceY = [50,150,150]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 0) < 1 && i == 0) return; + if(i == 0) appendage.getVar("bool").setBool(10, true); + if(i == 2 && sq_getRandom(0,99) >= 69) attackIndex[i] = 1; + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + appendage.getVar("bool").setBool(0,true); + if(attackIndex == 4){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + // if(appendage.getVar("speed").getBool(0) == true){ + // appendage.getVar("speed").setBool(0,false); + // parentObj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, eclipsehive_bonus); + // } + break; + } +} + +function onStart_appendage_auxoex_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_auxoex_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_babydragon_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://?嚙踝蕭 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 7, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,80,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://?嚙踝蕭2 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 7, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,80,2,0,0,0,totalDamage,0,0,0,0); + break; + case 301://嚙踝蕭牊 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, eclipsehive_bonus) + 100; + local sizeRate = 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sizeRate = 250; + createPassiveObject_k_k(sqrChr,parentObj,80,3,80,0,40,totalDamage,sizeRate,0,0,0); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) createPassiveObject_k_k(sqrChr,parentObj,80,3,100,0,40,totalDamage,sizeRate,0,0,0); + break; + case 401://嚙踝蕭嚙踝蕭 + local xpos = 150; + if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) xpos = -150; + local sizeRate = 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sizeRate = 150; + sq_CreateParticle("monster/character/mage/madeby_k_k/babydragon/particle/flamethrower.ptl", parentObj, xpos, 0, 30, true, 20, 0, 10); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 10, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,80,4,0,0,0,totalDamage,sizeRate,0,0,0); + break; + case 501://嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, eclipsehive_bonus) + 100; + local etcSub = 0; + local sizeRate = 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sizeRate = 250; + if(sq_GetBonusRateWithPassive(sqrChr, 80, 80, 11, 1.0) + 100 > 0) etcSub = 1; + createPassiveObject_k_k(sqrChr,parentObj,80,5,80,0,40,totalDamage, etcSub, sizeRate,0,0); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) createPassiveObject_k_k(sqrChr,parentObj,80,5,100,0,40,totalDamage, etcSub, sizeRate,0,0); + break; + case 601://旓?1 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 18, eclipsehive_bonus2) + 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){ + totalDamage = totalDamage * sqrChr.getVar("BabydragonObj").get_obj_vector_size(); + parentObj.getVar("ronghe_bool").setBool(0, false); + } + local ani = parentObj.getCurrentAnimation(); + local delay = ani.getDelaySum(0,0); + local sizeRate = 100; + local hittime = delay * 2; + local add_bonus = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 27) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)) sizeRate = sizeRate + 10; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)){add_bonus = add_bonus + 10; hittime = hittime * 70 /100;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)){sizeRate = sizeRate + 20; add_bonus = add_bonus + 20;} + if(add_bonus > 0) totalDamage = totalDamage * (100 + add_bonus) / 100; + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,80,6,0,0,0,totalDamage,delay,sizeRate,hittime,0); + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONBABYDRAGON).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONBABYDRAGON, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONBABYDRAGON), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local attackIndex = 5; + if(sqrChr.getVar("eclipsehive_select").getBool(0) && appendage.getVar("custom").getBool(0)) attackIndex = 9; + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, attackIndex); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 10001://裁決 + sq_AddDrawOnlyAniFromParent(parentObj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_starteff05.ani", 0, 0, sq_GetObjectHeight(parentObj) / 2); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, 1.0) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,80,11,0,0,0,totalDamage,group,uniqueId,0,0); + sq_SendCreatePassiveObjectPacketPos(parentObj, 1008605, 0, 0, 0, 600); + break; + case 10002://嘶吼 + sq_AddDrawOnlyAniFromParent(parentObj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_starteff05.ani", 0, 0, sq_GetObjectHeight(parentObj) / 2); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 18, 1.0) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,80,12,0,0,320,totalDamage,group,uniqueId,0,0); + sq_SendCreatePassiveObjectPacketPos(parentObj, 1008605, 0, 0, 0, 600); + break; + case 10003://龍息 + sq_AddDrawOnlyAniFromParent(parentObj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_starteff05.ani", 0, 0, sq_GetObjectHeight(parentObj) / 2); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, 1.0) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,80,13,0,0,320,totalDamage,group,uniqueId,0,0); + sq_SendCreatePassiveObjectPacketPos(parentObj, 1008605, 0, 0, 0, 600); + break; + } + return true; +} + +function proc_appendage_babydragon_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + + local state = parentObj.getState(); + local skill_level = sq_GetSkillLevel(sqrChr, 72); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,6); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + local balance = 0; + //if(appendage.getVar("custom").getBool(0)) balance = -100; + if(currentTT < ATK_TIME + balance) return; + timer.Reset(); + timer.Start(10000,0); + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [5,3,2,0]; + local distanceX = [300,300,300,30]; + local distanceXmin = [40,40,40,0]; + local distanceY = [100,10,20,10]; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false){ + distanceX = [300,500,700,30]; + distanceY = [100,40,60,30]; + } + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT) && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(i == 3 && sq_getRandom(0,100) >= 50) attackIndex[i] = 1; + if(i == 2 && sq_getRandom(0,100) >= 50) attackIndex[i] = 4; + if(sq_IsMyControlObject(parentObj)){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 1) < 1 && i == 0) return; + if(i == 0) appendage.getVar("bool").setBool(10, true); + if(appendage.getVar("custom").getBool(0)){ + if(sq_getRandom(1,10000) > 6666){ + monsterattack_ksk(parentObj,8 + sq_getRandom(0, 1) * 2); + return; + } + } + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + break; + case STATE_ATTACK: + if(attackIndex == 6){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + +function onStart_appendage_babydragon_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_babydragon_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_casillas_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://嚙誶g蕭?嚙踝蕭 嚙踝蕭?? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 8, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://嚙誶g蕭?嚙踝蕭 嚙踝蕭?? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 9, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,2,0,0,0,totalDamage,0,0,0,0); + break; + case 301://嚙誶g蕭?嚙踝蕭 ?嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 10, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,3,0,0,0,totalDamage,group,uniqueId,0,0); + break; + case 401://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙踝蕭嚙踝蕭嚙踝蕭琲嚙踝蕭 + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONCASILLAS).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONCASILLAS, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONCASILLAS), -1); + break; + case 402://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙踝蕭嚙?茷 + monsterattack_ksk(parentObj,5); + break; + case 403://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤? 嚙踝蕭嚙? + local direction = parentObj.getDirection(); + local xPos = parentObj.getXPos(); + local yPos = parentObj.getYPos(); + local xPos_distance = sq_GetDistancePos(xPos, parentObj.getDirection(), 200); + sq_MoveToNearMovablePos(parentObj, xPos_distance, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + break; + case 404://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤? 嚙踝蕭嚙? + local direction = parentObj.getDirection(); + local xPos = parentObj.getXPos(); + local yPos = parentObj.getYPos(); + local xPos_distance = sq_GetDistancePos(xPos, parentObj.getDirection(), 180); + sq_MoveToNearMovablePos(parentObj, xPos_distance, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + break; + case 405://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤? 嚙踝蕭嚙? 嚙踝蕭? + local direction = parentObj.getDirection(); + local xPos = parentObj.getXPos(); + local yPos = parentObj.getYPos(); + local xPos_distance = sq_GetDistancePos(xPos, parentObj.getDirection(), 30); + sq_MoveToNearMovablePos(parentObj, xPos_distance, yPos, 0, xPos, yPos, 0, 100, -1, 5); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 11, eclipsehive_bonus2) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,41,0,0,0,totalDamage,0,0,0,0); + break; + case 406://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙踝蕭嚙?茷 + monsterattack_ksk(parentObj,6); + break; + case 407://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙?茷 嚙踝蕭? + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(2, 2); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 11, eclipsehive_bonus2) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,42,0,0,0,totalDamage,delay,0,0,0); + break; + } + return true; +} + +function proc_appendage_casillas_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙誶g蕭?嚙踝蕭 嚙踝蕭?? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙誶g蕭?嚙踝蕭 嚙踝蕭?? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//嚙誶g蕭?嚙踝蕭 ?嚙踝蕭? + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//葀?嚙踝蕭? + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + // appendage.getVar("speed").setBool(0,true); + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,3); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + if(t_04 && t_04.isOnEvent(currentT) == true){ + local objectManager = sqrChr.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(sqrChr) && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_casillas_skill.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, -1, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_casillas_skill.nut", true); + targetObj.getVar("casillasatck").clear_vector(); + targetObj.getVar("casillasatck").push_vector(0); + } + } + } + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_03,t_02,t_01]; + local attackIndex = [2,1,0]; + local distanceX = [300,200,200]; + local distanceXmin = [0,0,0]; + local distanceY = [30,30,30]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_ksk(parentObj,attackIndex[i]); + if(attackIndex[i] == 2){ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,150); + } + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 2: + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local frameIndex = sq_GetAnimationFrameIndex(pAni); + local fireT = pAni.getDelaySum(0, 7); + local srcX = parentObj.getVar("move").get_vector(0); + local MoveX = parentObj.getVar("move").get_vector(1); + local v = sq_GetAccel(0, MoveX, currentT, fireT, false); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), v); + if(frameIndex >= 4 && frameIndex <= 7){ + if(parentObj.isMovablePos(dstX,parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX); + } + break; + case 3: + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + } +} + +function onStart_appendage_casillas_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_casillas_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + + parentObj.sendDestroyPacket(true); + +} + +function onSourceKeyFrameFlag_appendage_darkhigherspirit_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + if(sqrChr.getVar("eclipsehive_select").getBool(0) == true){ + local add_bonus = 0.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 24) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 25) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) add_bonus = add_bonus + 20.0; + if(add_bonus > 0) eclipsehive_bonus2 = eclipsehive_bonus2 +add_bonus / 100.0 + } + + switch(flagIndex){ + case 101://嚙踝蕭嚙踝蕭?嚙踝蕭?? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://嚙踝蕭嚙踝蕭?嚙踝蕭嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 7, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,2,0,0,0,totalDamage,0,0,0,0); + break; + case 301://嚙踝蕭嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 19, eclipsehive_bonus) + 100; + local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 18, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,3,150,0,0,totalDamage,time,0,0,0); + break; + case 401://嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 19, eclipsehive_bonus) + 100; + local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 18, eclipsehive_bonus) + 100; + local sub = 1; + if(parentObj.getVar("skill").getBool(0) == true){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 20, eclipsehive_bonus2) + 100; + time = 3500; + sub = 2; + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,4,150,0,0,totalDamage,time,sub,0,0); + parentObj.getVar("skill").setBool(0, false); + break; + case 601://晬嚙? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 23, 1.0) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,62,150,-1,-1,0,3000,0,0,0); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,61,150,0,0,totalDamage,3000,0,0,0); + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITDARKHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + parentObj.getVar("skill").setBool(0, true); + monsterattack_ksk(parentObj,3); + break; + } + return true; +} + +function proc_appendage_darkhigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙踝蕭嚙踝蕭?嚙踝蕭?? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙踝蕭嚙踝蕭?嚙踝蕭嚙踝蕭? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//嚙踝蕭嚙踝蕭? + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//嚙踝蕭? + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local grant_timer = parentObj.getVar("grant").get_ct_vector(0); + if(grant_timer){ + local grant_time = grant_timer.Get(); + if(grant_timer && grant_time >= 4000 + sq_getRandom(0,4000) && sq_FindTarget( parentObj, 0, 200, 50, 200)){ + grant_timer.Reset(); + grant_timer.Start(10000,0); + monsterattack_ksk(parentObj,6); + return; + } + } + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [3,2,1,0]; + local distanceX = [300,200,200,100]; + local distanceXmin = [0,0,0,0]; + local distanceY = [50,40,20,10]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 10) < 1 && i == 0) return; + monsterattack_ksk(parentObj,attackIndex[i]); + if(parentObj.getVar("darkaura").size_vector() > 0){ + local attacknum = parentObj.getVar("darkaura").get_vector(0); + parentObj.getVar("darkaura").set_vector(0,attacknum + 1); + } + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + if(attackIndex == 5){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + +function onStart_appendage_darkhigherspirit_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_darkhigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_echeverra_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://嚙踝蕭嚙踝蕭嚙? + parentObj.sq_PlaySound("ECHEVERRA_ARM_ATK"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 13, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,47,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://嚙踝蕭嚙踝蕭嚙踝蕭? + parentObj.sq_PlaySound("ECHEVERRA_WAVE"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 10, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,47,2,80,0,100,totalDamage,0,0,0,0); + break; + case 301://阰嚙踝蕭嚙踝蕭? + parentObj.sq_PlaySound("ECHEVERRA_INTENSE_AURA"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra_buff.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra_buff.nut"); + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, -1, false, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra_buff.nut", true); + AddAppendage.sq_SetValidTime(25000); + break; + case 401://??ECHEVERRA_READY + createPassiveObject_k_k(sqrChr,parentObj,47,4,100,0,0,0,0,0,0,0); + break; + case 501://怑嚙踝蕭 + parentObj.sq_PlaySound("ECHEVERRA_LASER"); + local hit = 3; + if(parentObj.getVar("skill").getBool(0) == true){ + parentObj.getVar("skill").setBool(0, false); + if(sq_getRandom(0,99) >= 49){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 25, eclipsehive_bonus2) + 100; + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,47,51,250,0,0,totalDamage,0,0,0,0); + return true; + } + hit = 8; + } + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 12, eclipsehive_bonus) + 100; + if(hit == 8) totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 25, eclipsehive_bonus2) + 100; + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,47,5,50,0,80,totalDamage,hit,0,0,0); + sq_SendCreatePassiveObjectPacket(parentObj, 30555, 0, 100, 0, 90, parentObj.getDirection()); + break; + case 901: + sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, 325, parentObj.getDirection()); + + local number = 0; + if(parentObj.getVar("grant").getBool(1) == true) number = 1; + if(parentObj.getVar("grant").getBool(2) == true) number = 2; + if(parentObj.getVar("grant").getBool(3) == true) number = 3; + local monstername = ["DarkhigherspiritObj","FirehigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj"]; + local monsterObj = sqrChr.getVar(monstername[number]).get_obj_vector(0); + + local group = sq_GetGroup(monsterObj); + local uniqueId = sq_GetUniqueId(monsterObj); + local pAni = parentObj.getCurrentAnimation(); + local Delay = pAni.getDelaySum(0,3); + sq_flashScreen(parentObj,300,Delay - 300,200,230, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + createPassiveObject_k_k(parentObj,parentObj,47,9,-15,0,0,0,group,uniqueId,Delay,0); + for(local i = 0; i < 4; i++){ + parentObj.getVar("grant").setBool(i,false); + } + break; + case 902: + parentObj.sq_PlaySound("SARPOZA_PUNCH_CAST_01"); + local objject = parentObj.getVar("kingsobj").get_obj_vector(0); + if(objject){ + local colObj = sq_GetCNRDObjectToCollisionObject(objject); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 903: + parentObj.sq_PlaySound("ECHEVERRA_ARM_ATK"); + local objject = parentObj.getVar("kingsobj").get_obj_vector(0); + if(objject){ + local colObj = sq_GetCNRDObjectToCollisionObject(objject); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONECHEVERRA).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONECHEVERRA, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONECHEVERRA), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + parentObj.getVar("skill").setBool(0,true); + local atkIndex = 4; + if(parentObj.getVar("isHighestEcheverra").getBool(0)){ + parentObj.getVar("isHighestEcheverra").setBool(0, false); + atkIndex = 8; + } + monsterattack_ksk(parentObj,atkIndex); + break; + } + return true; +} + +function proc_appendage_echeverra_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); + if(sq_IsValidActiveStatus(activeObj, ACTIVESTATUS_SLOW)){ + sq_ReleaseActiveStatus(activeObj, ACTIVESTATUS_SLOW); + } + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙踝蕭? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//阰嚙踝蕭嚙踝蕭? + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//?? + local t_05 = appendage.getVar("skill_5").get_timer_vector(0);//怑嚙踝蕭 + local t_06 = appendage.getVar("skill_6").get_timer_vector(0);//怑嚙踝蕭 + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,6); + local objject = parentObj.getVar("kingsobj").get_obj_vector(0); + if(objject && objject.getState() == 20) objject.setValid(false); + local grant_timer = sqrChr.getVar("grant").get_ct_vector(0); + if(grant_timer){ + if(sq_GetIntData(sqrChr, 47, 13) < 1){ + sqrChr.getVar("grant").clear_ct_vector(); + return; + } + //print(sq_GetIntData(sqrChr, 47, 13)); + local grant_time = grant_timer.Get(); + local cooltime = 15000; + local size = sqrChr.getVar("EcheverraObj").get_obj_vector_size(); + if(size > 1) cooltime = cooltime / size + 1000; + if(grant_time >= cooltime){ + grant_timer.Reset(); + grant_timer.Start(10000,0); + local number01 = sqrChr.getVar("DarkhigherspiritObj").get_obj_vector_size(); + local number02 = sqrChr.getVar("FirehigherspiritObj").get_obj_vector_size(); + local number03 = sqrChr.getVar("LighthigherspiritObj").get_obj_vector_size(); + local number04 = sqrChr.getVar("WaterhigherspiritObj").get_obj_vector_size(); + local monstername = []; + if(number01 > 0) monstername.push("DarkhigherspiritObj"); + if(number02 > 0) monstername.push("FirehigherspiritObj"); + if(number03 > 0) monstername.push("LighthigherspiritObj"); + if(number04 > 0) monstername.push("WaterhigherspiritObj"); + if(monstername.len() <= 0) return; + local random_number; + if(monstername.len() == 1){ + random_number = 0; + } + else if(monstername.len() == 2){ + random_number = sq_getRandom(0,1); + } + else{ + random_number = sq_getRandom(0,monstername.len() - 1); + } + // print(random_number); + local monsterObj = sq_GetCNRDObjectToActiveObject(sqrChr.getVar(monstername[random_number]).get_obj_vector(0)); + if(monsterObj && !CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_spikeking_grant.nut")){ + switch(monsterObj.getCollisionObjectIndex()){ + case MONSTER_ID_DARKHIGHERSPIRIT: + parentObj.getVar("grant").setBool(0,true); + break; + case MONSTER_ID_FIREHIGHERSPIRIT: + parentObj.getVar("grant").setBool(1,true); + break; + case MONSTER_ID_LIGHTHIGHERSPIRIT: + parentObj.getVar("grant").setBool(2,true); + break; + case MONSTER_ID_WATERHIGHERSPIRIT: + parentObj.getVar("grant").setBool(3,true); + break; + } + } + else{ + if(monstername.len() == 1) return; + local random_number2 = sq_getRandom(0,monstername.len() - 1); + if(random_number2 == random_number && random_number2 != 0) random_number2 = random_number2 - 1; + if(random_number2 == random_number && random_number2 == 0) random_number2 = 1; + local monsterObj = sq_GetCNRDObjectToActiveObject(sqrChr.getVar(monstername[random_number2]).get_obj_vector(0)); + if(monsterObj && !CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_spikeking_grant.nut")){ + switch(monsterObj.getCollisionObjectIndex()){ + case MONSTER_ID_DARKHIGHERSPIRIT: + parentObj.getVar("grant").setBool(0,true); + break; + case MONSTER_ID_FIREHIGHERSPIRIT: + parentObj.getVar("grant").setBool(1,true); + break; + case MONSTER_ID_LIGHTHIGHERSPIRIT: + parentObj.getVar("grant").setBool(2,true); + break; + case MONSTER_ID_WATERHIGHERSPIRIT: + parentObj.getVar("grant").setBool(3,true); + break; + } + } + else return; + } + monsterattack_ksk(parentObj,7); + } + } + else{ + if(sq_GetIntData(sqrChr, 47, 13) > 0){ + sqrChr.getVar("grant").clear_ct_vector(); + sqrChr.getVar("grant").push_ct_vector(); + local timer = sqrChr.getVar("grant").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + } + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + if(t_03 && t_03.isOnEvent(currentT)){ + monsterattack_ksk(parentObj,2); + return; + } + appendage.getVar("speed").setBool(0,true); + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_06,t_05,t_04,t_02,t_01]; + local attackIndex = [4,4,3,1,0]; + local distanceX = [800,800,500,800,150]; + local distanceXmin = [0,0,0,0,0]; + local distanceY = [30,30,10,25,20]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 3) < 1 && i == 0) return; + else parentObj.getVar("skill").setBool(0,true); + if(i == 1) parentObj.getVar("skill").setBool(0,false); + if(i == 0) appendage.getVar("bool").setBool(10, true); + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + break; + case STATE_ATTACK: + if(attackIndex == 6){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + +function onStart_appendage_echeverra_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + parentObj.sq_PlaySound("ECHEVERRA_INVOKE"); + if(sq_IsMyControlObject(parentObj)){ + monsterattack_ksk(parentObj,2); + } + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_echeverra_bykk(appendage) +{ + if(!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_firehigherspirit_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + if(sqrChr.getVar("eclipsehive_select").getBool(0) == true){ + local add_bonus = 0.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 24) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 25) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) add_bonus = add_bonus + 20.0; + if(add_bonus > 0) eclipsehive_bonus2 = eclipsehive_bonus2 +add_bonus / 100.0 + } + + switch(flagIndex){ + case 101: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 7, eclipsehive_bonus) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 12, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,2,0,0,0,totalDamage,0,0,0,0); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,21,50,0,0,totalDamage2,0,0,0,0); + break; + case 301: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 21, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,31,0,0,0,totalDamage,group,uniqueId,0,0); + local speed = 75.0; + if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) speed = -75.0; + sq_SetVelocity(parentObj, 0, speed); + break; + case 302: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 22, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,32,0,0,0,totalDamage,group,uniqueId,0,0); + break; + case 303: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 22, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,33,0,0,0,totalDamage,group,uniqueId,0,0); + break; + case 401: + local totalDamage1 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 21, eclipsehive_bonus2) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 22, eclipsehive_bonus2) + 100; + local totalDamage3 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 23, eclipsehive_bonus2) + 100; + local totalDamage = totalDamage1 + totalDamage2 + totalDamage3; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,4,150,0,0,totalDamage,0,0,0,0); + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITFIREHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + monsterattack_ksk(parentObj,3); + break; + case 1006://嚙踝蕭? + sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, 120, parentObj.getDirection()); + local number = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 27, 1.0) + 100; + for(local i = 0; i < number; i++){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 29, 1.0) + 100; + local group = sq_GetGroup(parentObj);//? + local uniqueId = sq_GetUniqueId(parentObj);//嚙踝蕭嚙踝蕭ID + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,61,0,0,0,totalDamage,number,i + 1,group,uniqueId); + } + break; + } + return true; +} + +function proc_appendage_firehigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙踝蕭嚙踝蕭?葞? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙踝蕭?? + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙踝蕭? + local t_05 = appendage.getVar("skill_5").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙踝蕭? + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local grant_timer = parentObj.getVar("grant").get_ct_vector(0); + if(grant_timer){ + local grant_time = grant_timer.Get(); + if(grant_timer && grant_time >= 4000 + sq_getRandom(0,4000)){ + grant_timer.Reset(); + grant_timer.Start(10000,0); + monsterattack_ksk(parentObj,6); + return; + } + } + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [3,2,1,0]; + local distanceX = [300,200,200,100]; + local distanceXmin = [50,0,0,0]; + local distanceY = [50,40,20,10]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 11) < 1 && i == 0) return; + monsterattack_ksk(parentObj,attackIndex[i]); + if(parentObj.getVar("firestorm").size_vector() > 0){ + local attacknum = parentObj.getVar("firestorm").get_vector(0); + parentObj.getVar("firestorm").set_vector(0,attacknum + 1); + } + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + if(attackIndex == 5){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + +function onStart_appendage_firehigherspirit_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_firehigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_heilrom_bykk(appendage, flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + switch(flagIndex){ + case 101: + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_back.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_front.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect00.ani", 0, -1, -40); + break; + case 102: + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONHEILROM).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONHEILROM, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONHEILROM), -1); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONHEILROM); + local HP_heal = sq_GetLevelData(sqrChr, SKILL_BYKK_SUMMONHEILROM, 14, skillLevel); + local objmg = parentObj.getObjectManager(); + for(local i= 0; i < objmg.getCollisionObjectNumber(); i++){ + local object = objmg.getCollisionObject(i); + if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && !parentObj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local hpMax = activeObj.getHpMax(); + local MpMax = activeObj.getMpMax(); + local hp = activeObj.getHp(); + local mp = activeObj.getMp(); + if(!isSameObject(activeObj,sqrChr)){ + activeObj.setHp(hp + hpMax * HP_heal / 1000, null, true); + } + else{ + sqrChr.sq_SendSetHpPacket(hp + hpMax * HP_heal / 1000, false, parentObj); + sqrChr.sq_SendSetMpPacket(mp + MpMax * HP_heal / 1000, false, parentObj); + } + } + } + //printp("111111111111111111"+"\n"); + break; + } + return true; +} + +function proc_appendage_heilrom_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t = appendage.getVar("buff01").get_timer_vector(0); + local t2 = appendage.getVar("buff02").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + if(t2 && t2.isOnEvent(currentT) == true){ + monsterattack_ksk(parentObj,0); + return; + } + + if(t && t.isOnEvent(currentT) == true){ + local buff_range = appendage.getVar("buffPx").get_vector(0); + local elementAttack = appendage.getVar("buffPx").get_vector(1); + local attackSpeed = appendage.getVar("buffPx").get_vector(2); + local moveSpeed = appendage.getVar("buffPx").get_vector(3); + local castSpeed = appendage.getVar("buffPx").get_vector(4); + local skillLevel = appendage.getVar("buffPx").get_vector(5); + + local objmg = sqrChr.getObjectManager(); //嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭庢嚙踝蕭嚙踝蕭 + for(local i= 0; i < objmg.getCollisionObjectNumber(); i++){ + local object = objmg.getCollisionObject(i); + if(object.isObjectType(OBJECTTYPE_ACTIVE) && !sqrChr.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_Abs(activeObj.getXPos() - parentObj.getXPos()) <= buff_range && sq_Abs(activeObj.getYPos() - parentObj.getYPos()) <= buff_range / 2){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/mage/k_k_made/appendage/aptomonster/ap_heilrom_normalbuff.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, parentObj, SKILL_BYKK_SUMMONHEILROM, false, "character/mage/k_k_made/appendage/aptomonster/ap_heilrom_normalbuff.nut", true); + AddAppendage.getVar().clear_vector(); + AddAppendage.getVar().push_vector(buff_range); + AddAppendage.getVar().push_vector(skillLevel); + + AddAppendage.getVar().clear_timer_vector(); + AddAppendage.getVar().push_timer_vector(); + local t_01 = AddAppendage.getVar().get_timer_vector(0); + t_01.setParameter(1000, -1); + t_01.resetInstant(0); + + AddAppendage.getVar("status").clear_vector(); + AddAppendage.getVar("status").push_vector(elementAttack); + AddAppendage.getVar("status").push_vector(attackSpeed); + AddAppendage.getVar("status").push_vector(moveSpeed); + AddAppendage.getVar("status").push_vector(castSpeed); + } + } + } + } + return; + } +} + +function onEnd_appendage_heilrom_bykk(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + parentObj.sendDestroyPacket(true); +} + +function onStart_appendage_heilrom_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + + local pooledObj_01 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_back.ani", 0, -1, 0); + local pooledObj_02 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_front.ani", 0, 1, 0); + local pooledObj_03 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect00.ani", 0, -1, -40); +} + +function onSourceKeyFrameFlag_appendage_hodor_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 13, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,25,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201: + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, 20.0, 20000); + if(ap) ap.sq_Append(parentObj, parentObj); + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, 20.0, 20000); + if(ap2) ap2.sq_Append(parentObj, parentObj); + break; + case 301: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 15, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,25,3,0,0,0,totalDamage,0,0,0,0); + break; + case 401: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 17, eclipsehive_bonus) + 100; + local sub = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sub = 1; + createPassiveObject_k_k(sqrChr,parentObj,25,4,50,0,50,totalDamage,sub,0,0,0); + if(sq_GetIntData(sqrChr, 25, 10) > 0) createPassiveObject_k_k(sqrChr,parentObj,25,4,75,0,50,totalDamage,sub,0,0,0); + break; + case 501: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 19, eclipsehive_bonus) + 100; + local sub = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sub = 1; + createPassiveObject_k_k(sqrChr,parentObj,25,5,50,0,50,totalDamage,sub,0,0,0); + if(sq_GetIntData(sqrChr, 25, 10) > 0) createPassiveObject_k_k(sqrChr,parentObj,25,5,75,0,50,totalDamage,sub,0,0,0); + break; + case 601: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 21, eclipsehive_bonus) + 100; + local sub = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sub = 1; + local add_number = sq_GetIntData(sqrChr, 25, 10); + for(local i = 0; i < 5; i++){ + createPassiveObject_k_k(sqrChr,parentObj,25,6,50,0,50,totalDamage,sub,i,0,0); + if(add_number > 0) createPassiveObject_k_k(sqrChr,parentObj,25,6,75,0,50,totalDamage,sub,i,0,0); + } + break; + case 701: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 23, eclipsehive_bonus) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 25, eclipsehive_bonus) + 100; + local targetObj = parentObj.getVar("targetObj").get_obj_vector(0); + local moveX = targetObj.getXPos() - parentObj.getXPos() + sq_getRandom(-10,10); + local moveY = targetObj.getYPos() - parentObj.getYPos() + sq_getRandom(-8,8); + if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) moveX = moveX + 50; + if(parentObj.getDirection() == ENUM_DIRECTION_RIGHT) moveX = moveX - 50; + createPassiveObject_k_k(sqrChr,parentObj,25,7,50,0,50,totalDamage,totalDamage2,moveX,moveY,0); + if(sq_GetIntData(sqrChr, 25, 10) > 0) createPassiveObject_k_k(sqrChr,parentObj,25,7,50,0,55,totalDamage,totalDamage2,moveX,moveY,0); + break; + case 801: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 27, eclipsehive_bonus2) + 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)) totalDamage = totalDamage * 110 / 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,25,8,0,0,0,totalDamage,group,uniqueId,0,0); + break; + case 901: + case 902: + case 903: + if(flagIndex == 901) sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hita_01.ani", 50, 0, 25); + if(flagIndex == 902) sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hitb_01.ani", 50, 0, 25); + if(flagIndex == 903) sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hitc_01.ani", 50, 0, 25); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 27, eclipsehive_bonus2) + 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)) totalDamage = totalDamage * 110 / 100; + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,25,9,0,0,0,totalDamage,1,0,0,0); + break; + case 904: + sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hitd_01.ani", 50, 0, 25); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 29, eclipsehive_bonus2) + 100; + local size = 100; + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0) totalDamage = totalDamage * 110 / 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 31) > 0) totalDamage = totalDamage * 130 / 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0) size = 200; + } + if(appendage.getVar("bool").getBool(10)){ + appendage.getVar("bool").setBool(10, false); + totalDamage = totalDamage * 50 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,25,9,0,0,0,totalDamage,2,size,0,0); + break; + case 1001: + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONHODOR).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONHODOR, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONHODOR), -1); + break; + case 1002: + local targetObj = sq_FindTarget( sqrChr, 0, 500, 500, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 7); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + else{ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + } + break; + } + + return true; +} + +function proc_appendage_hodor_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + local t_06 = appendage.getVar("skill_6").get_timer_vector(0); + local t_07 = appendage.getVar("skill_7").get_timer_vector(0); + local t_08 = appendage.getVar("skill_8").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,9); + if(t_02 && t_02.isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + monsterattack_ksk(parentObj,1); + return; + } + } + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_08,t_07,t_06,t_05,t_04,t_03,t_01]; + local attackIndex = [7,6,5,4,3,2,0]; + local distanceX = [300,300,300,300,300,300,30,30]; + local distanceXmin = [40,40,40,40,40,40,0,0]; + local distanceY = [150,150,80,10,10,10,10,10,10]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT) && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 5) < 1 && i == 0) return; + if(i == 0) appendage.getVar("bool").setBool(10, true); + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 7: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + if(sq_GetDistanceObject(parentObj, targetObj, false) < 20){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 8); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + return; + } + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); + local X1 = sq_GetUniformVelocity(parentObj.getXPos(), targetObj.getXPos(), currentT, fireT); + local Y1 = sq_GetUniformVelocity(parentObj.getYPos(), targetObj.getYPos(), currentT, fireT); + sq_setCurrentAxisPos(parentObj, 0, X1); + sq_setCurrentAxisPos(parentObj, 1, Y1); + } + break; + case 9: + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + } +} + +function onStart_appendage_hodor_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_hodor_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_kruta_bykk(appendage, flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 7, eclipsehive_bonus) + 100; + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,1,0,0,0,totalDamage,sizeRate,0,0,0); + parentObj.sq_PlaySound("SUMMON_KRUTA_SWISH_01"); + break; + case 201: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + parentObj.getVar("skill2").set_vector(0,parentObj.getXPos()); + parentObj.getVar("skill2").set_vector(1,parentObj.getYPos()); + local moveX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()) + sq_getRandom(0,200); + parentObj.getVar("skill2").set_vector(2,moveX); + parentObj.getVar("skill2").set_vector(3,targetObj.getYPos() - parentObj.getYPos()); + } + monsterattack_ksk(parentObj,3); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 8, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,2,0,0,0,totalDamage,group,uniqueId,sizeRate,0); + parentObj.sq_PlaySound("SUMMON_KRUTA_RUSH"); + break; + case 301: + sq_SetMyShake(parentObj,3,720); + parentObj.sq_PlaySound("SUMMON_KRUTA_SCREAM"); + break; + case 302: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 9, eclipsehive_bonus) + 100; + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,3,0,0,0,totalDamage,sizeRate,0,0,0); + break; + case 401: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 10, eclipsehive_bonus2) + 100; + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)){ + totalDamage = totalDamage * 110 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,41,0,0,0,totalDamage,sizeRate,0,0,0); + parentObj.sq_PlaySound("SUMMON_KRUTA_SWISH_02"); + break; + case 402: + monsterattack_ksk(parentObj,5); + break; + case 4022: + parentObj.sq_PlaySound("SUMMON_KRUTA_CHARGE"); + break; + case 403: + monsterattack_ksk(parentObj,6); + break; + case 404: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 11, eclipsehive_bonus2) + 100; + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,42,0,0,0,totalDamage,sizeRate,0,0,0); + sq_SetMyShake(parentObj,3,320); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/ragefinisheff_01.ani",375,0,0); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/ragefinishfloor_f01.ani",375,-1,-1); + parentObj.sq_PlaySound("SUMMON_KRUTA_SMASH"); + break; + case 501: + monsterattack_ksk(parentObj,8); + parentObj.sq_PlaySound("SUMMON_KRUTA_IMPACT"); + break; + case 502: + monsterattack_ksk(parentObj,9); + break; + case 503: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, SKILL_BYKK_REPEATEDSMASHOFRAGE, 0, eclipsehive_bonus2) + 100; + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + local add_Rate = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 31) > 0) add_Rate = add_Rate + 20; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0) add_Rate = add_Rate + 20; + if(add_Rate > 0) totalDamage = totalDamage * (100 + add_Rate) / 100; + } + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,52,0,0,0,totalDamage,sizeRate,0,0,0); + local hit = parentObj.getVar("skill").get_vector(0); + local pooledObj1, pooledObj2, pooledObj3, pooledObj4; + switch(hit){ + case 4: + pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0); + pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom01_crack.ani",200,-1,-1); + pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom01_rock.ani",200,-1,-1); + pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop01_crack.ani",200,1,1); + break; + case 3: + pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0); + pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom02_crack.ani",200,-1,-1); + pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom02_rock.ani",200,-1,-1); + pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop02_crack.ani",200,1,1); + break; + case 2: + pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0); + pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom03_crack.ani",200,-1,-1); + pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom03_rock.ani",200,-1,-1); + pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop03_crack.ani",200,1,1); + break; + case 1: + pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0); + pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom04_crack.ani",200,-1,-1); + pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom04_rock.ani",200,-1,-1); + pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop04_crack.ani",200,1,1); + break; + } + if(sizeRate > 100){ + local pooledObj = [pooledObj1, pooledObj2, pooledObj3, pooledObj4]; + sizeRate = sizeRate.tofloat() / 100.0; + for(local i = 0; i < 4; i++){ + local pAni = pooledObj[i].getCurrentAnimation(); + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + } + break; + case 504: + sq_SetMyShake(parentObj,5,90); + parentObj.sq_PlaySound("R_SUMMON_KRUTA_STRIKE"); + break; + case 506: + local hitnumber = parentObj.getVar("skill").get_vector(0); + if(hitnumber <= 1){ + monsterattack_ksk(parentObj,10); + } + else{ + parentObj.getVar("skill").set_vector(0, hitnumber - 1); + monsterattack_ksk(parentObj,9); + } + break; + case 5061: + case 6011: + parentObj.sq_PlaySound("SUMMON_KRUTA_SWISH_03"); + break; + case 507: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, SKILL_BYKK_REPEATEDSMASHOFRAGE, 1, eclipsehive_bonus2) + 100; + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,53,0,0,0,totalDamage,sizeRate,0,0,0); + sq_SetMyShake(parentObj,3,300); + sq_flashScreen(parentObj,0,100,0,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + parentObj.getVar("skill").set_vector(0, 4); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finishaxeeffect_dust.ani",400,0,0); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crack.ani",400,-1,-1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crackb.ani",400,-1,-1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffecttop_cracka.ani",400,1,1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffecttop_rock.ani",400,1,1); + parentObj.sq_PlaySound("SUMMON_KRUTA_STRIKE_FINISH"); + break; + case 600: + local pAni = parentObj.getCurrentAnimation(); + local fireT = pAni.getDelaySum(0,20); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,10,-135,0,80,fireT,0,0,0,0); + parentObj.sq_PlaySound("SUMMON_KRUTA_CHARGE"); + break; + case 601: + monsterattack_ksk(parentObj,12); + break; + case 602: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, -1, 0, 4.4*eclipsehive_bonus2) + sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, -1, 1, 1.1*eclipsehive_bonus2) + 200; + local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,6,0,0,0,totalDamage,sizeRate,0,0,0); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crack.ani",300,-1,-1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crackb.ani",300,-1,-1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffecttop_rock.ani",300,1,1); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/talisman/landingexplosion_eff_00.ani",300,0,0); + parentObj.sq_PlaySound("SUMMON_KRUTA_STRIKE_FINISH"); + break; + case 603: + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finishaxeeffect_dust.ani",300,-1,-1); + break; + case 1001: + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONKRUTA).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONKRUTA, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONKRUTA), -1); + break; + case 1002: + local skillIndex = parentObj.getVar("skillIndex").get_vector(0); + monsterattack_ksk(parentObj,skillIndex); + break; + } + return true; +} + +function proc_appendage_kruta_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + // appendage.getVar("speed").setBool(0,true); + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,14); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [4,2,1,0]; + local distanceX = [350,200,600,200]; + local distanceXmin = [50,0,0,0]; + local distanceY = [50,40,400,40]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 6) < 1 && i == 0) return; + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 3: + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 600; + local srcX = parentObj.getVar("skill2").get_vector(0); + local srcY = parentObj.getVar("skill2").get_vector(1); + local MoveX = parentObj.getVar("skill2").get_vector(2); + local MoveY = parentObj.getVar("skill2").get_vector(3); + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), v); + if(parentObj.isMovablePos(dstX, srcY + vy)){ + sq_setCurrentAxisPos(parentObj, 0, dstX); + sq_setCurrentAxisPos(parentObj, 1, srcY + vy); + } + else{ + parentObj.getVar("skill2").set_vector(0,parentObj.getXPos()); + parentObj.getVar("skill2").set_vector(1,parentObj.getYPos()); + parentObj.getVar("skill2").set_vector(2,0); + parentObj.getVar("skill2").set_vector(3,0) + } + if(currentT > fireT) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + case 14: + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + } +} + +function onStart_appendage_kruta_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_kruta_bykk(appendage) +{ + if(!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_lighthigherspirit_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + if(sqrChr.getVar("eclipsehive_select").getBool(0) == true){ + local add_bonus = 0.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 24) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 25) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) add_bonus = add_bonus + 20.0; + if(add_bonus > 0) eclipsehive_bonus2 = eclipsehive_bonus2 +add_bonus / 100.0 + } + + switch(flagIndex){ + case 101: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,1,0,0,0,totalDamage,0,0,0,0); + } + break; + case 201: + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,2,0,0,0,5,0,0,0,0); + break; + case 301://??嚙踝蕭 + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit_buff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit_buff.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, 77, false, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit_buff.nut", true); + AddAppendage.sq_SetValidTime(8000); + break; + case 401: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 25, eclipsehive_bonus2) + 100; + local subtype = 41; + if(parentObj.getVar("skill4").getBool(0) == true) subtype = 42; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,subtype,150,0,0,totalDamage,0,0,0,0); + parentObj.getVar("skill4").setBool(0,false); + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + parentObj.getVar("skill4").setBool(0,true); + monsterattack_ksk(parentObj,3); + break; + case 1005: + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,9,100,0,0,0,15,0,0,0); + sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, 60, parentObj.getDirection()); + break; + } + return true; +} + +function proc_appendage_lighthigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//?嚙踝蕭?? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//??5?? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//??嚙踝蕭 + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//晡嚙踝蕭 + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local grant_timer = parentObj.getVar("grant").get_ct_vector(0); + if(grant_timer){ + local grant_time = grant_timer.Get(); + if(grant_timer && grant_time >= 4000 + sq_getRandom(0,4000) && sq_FindTarget( parentObj, 0, 400, 80, 200)){ + grant_timer.Reset(); + grant_timer.Start(10000,0); + monsterattack_ksk(parentObj,6); + return; + } + } + + if(t_03 && t_03.isOnEvent(currentT)){ + monsterattack_ksk(parentObj,2); + return; + } + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_02,t_01]; + local attackIndex = [3,1,0]; + local distanceX = [300,200,300]; + local distanceXmin = [50,0,0]; + local distanceY = [100,30,100]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 12) < 1 && i == 0) return; + monsterattack_ksk(parentObj,attackIndex[i]); + if(parentObj.getVar("lightning").size_vector() > 0){ + local attacknum = parentObj.getVar("lightning").get_vector(0); + parentObj.getVar("lightning").set_vector(0,attacknum + 1); + } + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + if(attackIndex == 5){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + +function onStart_appendage_lighthigherspirit_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_lighthigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + + parentObj.sendDestroyPacket(true); +} diff --git a/user/116.205.165.25/6_mage_8.c b/user/116.205.165.25/6_mage_8.c new file mode 100644 index 0000000..7071a6e --- /dev/null +++ b/user/116.205.165.25/6_mage_8.c @@ -0,0 +1,3089 @@ + + + +function onSourceKeyFrameFlag_appendage_luis_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 11, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,46,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://???嚙踝蕭 + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 12, eclipsehive_bonus) + 100; + local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46)); + createPassiveObject_k_k(sqrChr,targetObj,46,2,0,0,0,totalDamage,etcSub,0,0,0); + } + break; + case 301://嚙踝蕭牊 + sq_AddDrawOnlyAniFromParent(parentObj,"passiveobject/madeby_k_k/animation/luis/fireballstart.ani", 85, 1, 80); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 13, eclipsehive_bonus) + 100; + local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46)); + createPassiveObject_k_k(sqrChr,parentObj,46,3,65,0,100,totalDamage,etcSub,0,0,0); + break; + case 401://嚙??嚙? + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 14, eclipsehive_bonus) + 100; + local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46)); + createPassiveObject_k_k(sqrChr,targetObj,46,4,0,0,0,totalDamage,etcSub,0,0,0); + break; + case 501://嚙??嚙? + local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46)), bonusRate = 1; + if(sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){//sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && + bonusRate = sqrChr.getVar("LuisObj").get_obj_vector_size(); + parentObj.getVar("ronghe_bool").setBool(0, false); + } + if(parentObj.getVar("skill").getBool(0) == true){ + parentObj.getVar("skill").setBool(0,false); + local sub = 1; + if(etcSub > 0) sub = 10; + createPassiveObject_k_k(sqrChr,parentObj,46,5,150,0,0,0,sub,etcSub,bonusRate,0); + } + else{ + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj) createPassiveObject_k_k(sqrChr,targetObj,46,5,0,0,0,0,1,etcSub,bonusRate,0); + } + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONLUIS).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONLUIS, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONLUIS), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + parentObj.getVar("skill").setBool(0,true); + local attackIndex = 4; + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, BLACKLUNATIC_APDPATH)) attackIndex = 10; + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, attackIndex); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + case 2001://月蝕長矛 + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + parentObj.sq_PlaySound("R_LUIS_ATK"); + parentObj.sq_PlaySound("BLACK_LUNATIC_SPEAR_CAST"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 3, eclipsehive_bonus) + 100; + local count = sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 10); + for(local i = 0; i < count; i++){ + local base_X = -200 + i * 50; + local base_Z = 180 + i * 30; + if(i % 2 = 1) base_Z = base_Z + 20; + local angle = sq_ToDegree(sq_Atan2(base_X.tofloat(), (base_Z-30).tofloat())); + local moveX = -base_X; + createPassiveObjectEx_k_k(sqrChr,parentObj,targetObj,SKILL_BYKK_BLACKLUNATIC,1,base_X,0,base_Z,parentObj.getDirection(),totalDamage,angle.tointeger(),moveX,0,0); + } + } + break; + case 2002://月空破碎 + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + parentObj.sq_PlaySound("R_LUIS_ATK"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 2, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_BLACKLUNATIC,2,0,0,0,totalDamage,0,0,0,0); + } + break; + case 2003://月光追擊 + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + parentObj.sq_PlaySound("R_LUIS_ATK"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 1, eclipsehive_bonus) + 100; + local count = sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 13); + for(local i = 0; i < count; i++){ + createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_BLACKLUNATIC,3,sq_getRandom(-100,100),sq_getRandom(-50,50),0,totalDamage,0,0,0,0); + } + } + break; + case 2004://黑暗閃電 + parentObj.sq_PlaySound("R_LUIS_ATK"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 1, eclipsehive_bonus) + 100; + totalDamage = totalDamage * sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 13) * 110 / 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_BLACKLUNATIC,4,250,0,0,totalDamage,0,0,0,0); + break; + } + return true; +} + +function proc_appendage_luis_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + local t_06 = appendage.getVar("skill_10").get_timer_vector(0); + local t_07 = appendage.getVar("skill_11").get_timer_vector(0); + local t_08 = appendage.getVar("skill_12").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_05,t_04,t_03,t_02,t_01]; + local attackIndex = [4,3,2,1,0]; + local distanceX = [800,800,500,800,100]; + local distanceXmin = [0,0,50,0,0]; + local distanceY = [800,800,20,800,20]; + if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, BLACKLUNATIC_APDPATH)){ + skillt = [t_08,t_07,t_06]; + attackIndex = [9,8,7]; + distanceX = [600,600,600]; + distanceXmin = [0,0,0]; + distanceY = [200,200,200]; + } + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 7) < 1 && i == 0 && !CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, BLACKLUNATIC_APDPATH)) return; + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + break; + case STATE_ATTACK: + if(attackIndex == 5){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + + +function onStart_appendage_luis_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_luis_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_ramos_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local number = 0; + local bonus = 1.0; + local bonus_Max = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 23, 1.0) + 1100; + local bonus_deed = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 24, 1.0) + 100; + local bonus_spirit = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 25, 1.0) + 100; + local monster_Name_spirit = ["EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + local monster_Name_deed = ["SandorObj","AuxoObj","LuisObj","BabydragonObj","KrutaObj","HodorObj"]; + for(local i = 0; i < monster_Name_spirit.len(); i++){ + local monster_num_spirit = sqrChr.getVar(monster_Name_spirit[i]).get_obj_vector_size(); + if(monster_num_spirit > 0) number = number + monster_num_spirit; + } + bonus = bonus + (number * bonus_spirit).tofloat() / 1000.0; + number = 0; + for(local ui = 0; ui < monster_Name_deed.len(); ui++){ + local monster_num_deed = sqrChr.getVar(monster_Name_deed[ui]).get_obj_vector_size(); + if(monster_num_deed > 0) number = number + monster_num_deed; + } + bonus = bonus + (number * bonus_deed).tofloat() / 1000.0; + if(bonus > bonus_Max.tofloat() / 1000.0) bonus = bonus_Max.tofloat() / 1000.0; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://嚙踝蕭? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 2, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,1,0,0,0,totalDamage,0,0,0,0); + break; + case 201://嚙踝蕭嚙踝蕭1 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(0,0); + local delay2 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 5, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,21,0,0,0,totalDamage,delay1,delay2,0,0); + break; + case 202://嚙踝蕭嚙踝蕭嚙踝蕭2 + monsterattack_ksk(parentObj,2); + break; + case 203://嚙踝蕭嚙踝蕭2 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(0,0); + local delay2 = pAni.getDelaySum(1,1); + local delay3 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 6, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,22,0,0,0,totalDamage,delay1,delay2,delay3,0); + break; + case 301://嚙踝蕭?嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭? + monsterattack_ksk(parentObj,4); + break; + case 302://嚙踝蕭? + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(0,0); + local delay2 = pAni.getDelaySum(3,3); + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 7, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,31,0,0,0,totalDamage,group,uniqueId,delay1,delay2); + break; + case 303://嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭?1 + monsterattack_ksk(parentObj,5); + break; + case 304://嚙踝蕭?1 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(0,0); + local delay2 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 8, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,32,0,0,0,totalDamage,delay1,delay2,0,0); + break; + case 305://嚙踝蕭?1嚙踝蕭嚙踝蕭?2 + monsterattack_ksk(parentObj,6); + break; + case 306://嚙踝蕭?2 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(0,0); + local delay2 = pAni.getDelaySum(1,1); + local delay3 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 9, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,33,0,0,0,totalDamage,delay1,delay2,delay3,0); + break; + case 401://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(0,0); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 10, bonus*eclipsehive_bonus) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 11, bonus*eclipsehive_bonus) + 100; + local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 22, 1.0) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,41,100,0,0,totalDamage,totalDamage2,hittime,delay,0); + break; + case 402://嚙踝蕭?嚙踝蕭 + monsterattack_ksk(parentObj,8); + break; + case 403://嚙踝蕭?嚙踝蕭 + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(0,0); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,42,300,0,75,0,delay,0,0,0); + monsterattack_ksk(parentObj,9); + break; + case 501://?嚙踝蕭 + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(0,0); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 15, bonus*eclipsehive_bonus2) + 100; + local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 14, 1.0*eclipsehive_bonus2) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,5,0,0,0,totalDamage,hittime,delay,0,0); + sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 600, parentObj.getDirection()); + break; + case 502: + sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 100, parentObj.getDirection()); + break; + case 601://嚙踝蕭嚙?嚙? + break; + case 602://嚙踝蕭? + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(6,6); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 4, bonus*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,6,0,0,0,totalDamage,delay,0,0,0); + break; + case 603://嚙踝蕭嚙? + parentObj.sendDestroyPacket(true); + break; + case 701://嚙踝蕭瓊嚙踝蕭?嚙踝蕭嚙? + parentObj.getVar("skill").setBool(0,false); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,74,0,-1,-1,0,0,0,0,0); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,75,0,-1,-1,0,0,0,0,0); + sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 600, parentObj.getDirection()); + local objectManager = sqrChr.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(sqrChr)){ + targetObj = sq_GetCNRDObjectToActiveObject(targetObj); + sq_AddDrawOnlyAniFromParent(targetObj,"monster/character/mage/madeby_k_k/ramos/animation/meal/2down_03.ani", 0, 0, 0); + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_holdedmonster.nut"; + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, -1, false, appendagePath, true); + if(MasterAppendage){ + sq_HoldAndDelayDie(targetObj, sqrChr, true, false, false, 100, 5000, ENUM_DIRECTION_NEUTRAL , MasterAppendage); + local validT = MasterAppendage.getAppendageInfo(); + validT.setValidTime(5500); + } + } + } + break; + case 702://嚙踝蕭? + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(9,9); + local delay2 = pAni.getDelaySum(10,10); + local delay3 = pAni.getDelaySum(23,23); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 1, bonus) + 100; + local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 2, 1.0) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,71,0,0,0,totalDamage,hittime,delay,delay2,delay3); + break; + case 703://嚙踝蕭??葞?嚙踝蕭?嚙賦ㄛ嚙踝蕭?嚙踝蕭 + local effectObj1 = sqrChr.getVar("RamosEffect1").get_obj_vector(0); + local effectObj2 = sqrChr.getVar("RamosEffect2").get_obj_vector(0); + if(effectObj1) effectObj1.setValid(false); + if(effectObj2) effectObj2.setValid(false); + sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 100, parentObj.getDirection()); + local monsternumber = 0; + local objectManager = sqrChr.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(sqrChr)){ + monsternumber = monsternumber + 1; + } + } + if(monsternumber > 0){ + monsterattack_ksk(parentObj,13); + } + else{ + monsterattack_ksk(parentObj,14); + } + break; + case 704://嚙踝蕭?嚙踝蕭嚙踝蕭? + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(0,0); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 3, bonus) + 100; + local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 4, 1.0) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,72,0,0,0,totalDamage,hittime,delay,0,0); + break; + case 705://嚙踝蕭?嚙踝蕭 + monsterattack_ksk(parentObj,15);//14 + break; + case 706://晡嚙踝蕭嚙?+嚙踝蕭嚙踝蕭 + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(0,0); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 5, bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,73,0,0,0,totalDamage,delay,0,0,0); + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONRAMOS).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONRAMOS, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONRAMOS), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local attackIndex = 10; + if(parentObj.getVar("skill").getBool(0) == true) attackIndex = 12; + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, attackIndex); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER); + break; + } + return true; +} + +function proc_appendage_ramos_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙踝蕭嚙踝蕭嚙踝蕭? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//?? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//?嚙踝蕭 + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//?嚙踝蕭 + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + if(sqrChr.getState() == 53){ + monsterattack_ksk(parentObj,11); + return; + } + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)){ + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 16); + sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_IGNORE_FORCE); + } + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [10,7,3,1]; + local distanceX = [400,350,800,200]; + local distanceXmin = [0,0,0,0]; + local distanceY = [50,30,600,30]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_ksk(parentObj,attackIndex[i]); + if(attackIndex[i] == 2){ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,150); + } + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 4: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + if(sq_GetDistanceObject(parentObj, targetObj, false) < 90){ + monsterattack_ksk(parentObj,5); + return; + } + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 600;//pAni.getDelaySum(0,3); + local X1 = sq_GetAccel(parentObj.getXPos(), targetObj.getXPos(), currentT, fireT, true); + local Y1 = sq_GetAccel(parentObj.getYPos(), targetObj.getYPos(), currentT, fireT, true); + if(parentObj.isMovablePos(X1, Y1)){ + sq_setCurrentAxisPos(parentObj, 0, X1); + sq_setCurrentAxisPos(parentObj, 1, Y1); + } + } + break; + case 16: + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + } +} + +function onStart_appendage_ramos_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(sq_IsMyControlObject(parentObj)){ + monsterattack_ksk(parentObj,0); + } + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_ramos_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + // parentObj.sendDestroyPacket(true); + parentObj.setValid(false); +} + +function onAttackParent_appendage_ramos_bykk(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 10: + if(damager && !CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut")){ + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut"; + damager = sq_GetCNRDObjectToActiveObject(damager); + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, appendagePath, true); + if(MasterAppendage){ + sq_AccelMoveToAppendageForce(damager, sqrChr, parentObj, 200, 0, 0, 1000, true, MasterAppendage, true); + local validT = MasterAppendage.getAppendageInfo() + validT.setValidTime(2000); + } + } + break; + } +} + +function onSourceKeyFrameFlag_appendage_sandor_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + switch(flagIndex){ + case 101://?嚙踝蕭 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSANDOR, SKILL_BYKK_SUMMONSANDOR, 12, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 35) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == true){ + totalDamage = totalDamage * 70 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSANDOR,1,0,0,0,totalDamage,delay1,group,uniqueId,0); + break; + case 102: + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 33) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false){ + if(parentObj.getVar("attackbool").getBool(0)){ + parentObj.getVar("attackbool").setBool(0, false); + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,0); + parentObj.getVar("move").set_vector(2,0); + parentObj.getVar("move").set_vector(3,4); + monsterattack_ksk(parentObj,0); + } + else{ + parentObj.getVar("attackbool").setBool(0, true); + } + } + break; + case 201://嚙踝蕭嚙踝蕭 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSANDOR, SKILL_BYKK_SUMMONSANDOR, 14, eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 35) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == true){ + totalDamage = totalDamage * 70 / 100; + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSANDOR,1,0,0,0,totalDamage,delay1,group,uniqueId,0); + break; + case 202: + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 34) > 0){ + parentObj.getVar("attackbool").setBool(1, true); + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,0); + parentObj.getVar("move").set_vector(2,0); + parentObj.getVar("move").set_vector(3,4); + monsterattack_ksk(parentObj,0); + } + break; + case 301: + local attackIndex = parentObj.getAttackIndex(); + switch(attackIndex){ + case 2: + local hpMax = parentObj.getHpMax(); + local hp = parentObj.getHp(); + parentObj.setHp((hp + hpMax / 100 * 20).tointeger(), null, true); + break; + case 3: + if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_buff.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, 44, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_buff.nut", true); + AddAppendage.getVar("sqrChr").clear_obj_vector(); + AddAppendage.getVar("sqrChr").push_obj_vector(sqrChr); + AddAppendage.sq_SetValidTime(35000); + AddAppendage.getVar("custominfo").clear_vector(); + AddAppendage.getVar("custominfo").push_vector(300); + AddAppendage.getVar("custominfo").push_vector(20); + AddAppendage.getVar("custominfo").push_vector(20); + local skill_level = sq_GetSkillLevel(sqrChr, 44); + AddAppendage.getVar("custominfo").push_vector(skill_level); + + AddAppendage.getVar("a").clear_timer_vector(); + AddAppendage.getVar("a").push_timer_vector(); + local t = AddAppendage.getVar("a").get_timer_vector(0); + t.setParameter(1500, -1); + t.resetInstant(0); + + } + break; + } + break; + case 401: + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(7,7); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSANDOR, SKILL_BYKK_SUMMONSANDOR, 16, eclipsehive_bonus2) + 100; + local sizeRate = 100; + local add_Rate = 0; + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 33) > 0){ + sizeRate = sizeRate + 10; add_Rate = add_Rate + 10; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 34) > 0){ + sizeRate = sizeRate + 20; add_Rate = add_Rate + 20; + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 35) > 0){ + sizeRate = sizeRate + 20; + } + } + if(add_Rate > 0) totalDamage = totalDamage * (100 + add_Rate) / 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSANDOR,4,25,0,50,totalDamage,delay1,sizeRate,0,0); + break; + case 501: + for(local i = 0; i < 12; i++){ + sq_ReleaseActiveStatus(parentObj, i); + } + break; + case 1001: + local direction = parentObj.getVar("teleport").getInt(10); + local yPos = parentObj.getVar("teleport").getInt(12); + local xPos = parentObj.getVar("teleport").getInt(11); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + sq_SimpleMoveToNearMovablePos(parentObj,200); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSANDOR).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSANDOR, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSANDOR), -1); + break; + case 1002: + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,80); + parentObj.getVar("move").set_vector(2,7); + parentObj.getVar("move").set_vector(3,16); + monsterattack_ksk(parentObj,4); + break; + } + return true; +} + +function proc_appendage_sandor_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + if(t_03 && t_03.isOnEvent(currentT)){ + monsterattack_ksk(parentObj,2); + return; + } + else if(t_04 && t_04.isOnEvent(currentT)){ + monsterattack_ksk(parentObj,3); + return; + } + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_05,t_02,t_01]; + local attackIndex = [4,1,0]; + local distanceX = [300,200,200]; + local distanceXmin = [0,0,0]; + local distanceY = [30,20,20]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(i == 2){ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,30); + parentObj.getVar("move").set_vector(2,0); + parentObj.getVar("move").set_vector(3,4); + } + else if(i == 1){ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,60); + parentObj.getVar("move").set_vector(2,4); + parentObj.getVar("move").set_vector(3,6); + } + else if(i == 0){ + parentObj.getVar("move").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,60); + parentObj.getVar("move").set_vector(2,7); + parentObj.getVar("move").set_vector(3,16); + } + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 9) < 1 && i == 0) return; + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + switch(attackIndex){ + case 0: + case 1: + case 4: + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + if(attackIndex == 1) currentT = currentT - pAni.getDelaySum(0, 3); + if(attackIndex == 4) currentT = currentT - pAni.getDelaySum(0, 6); + local frameIndex = sq_GetAnimationFrameIndex(pAni); + local framestart = parentObj.getVar("move").get_vector(2); + local frameend = parentObj.getVar("move").get_vector(3); + local fireT = pAni.getDelaySum(framestart, frameend); + local srcX = parentObj.getVar("move").get_vector(0); + local MoveX = parentObj.getVar("move").get_vector(1); + local v = sq_GetAccel(0, MoveX, currentT, fireT, false); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), v); + if(frameIndex >= framestart && frameIndex <= frameend){ + if(parentObj.isMovablePos(dstX,parentObj.getYPos())){ + sq_setCurrentAxisPos(parentObj, 0, dstX); + } + else{ + parentObj.getVar("skill2").set_vector(0,parentObj.getXPos()); + parentObj.getVar("move").set_vector(1,0); + } + } + break; + case 5: + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + case STATE_SIT_FOREVER: + case STATE_DAMAGE: + case STATE_HOLD: + local timer = parentObj.getVar().get_ct_vector(0); + local currentT = timer.Get(); + if(currentT > 5000){ + monsterattack_ksk(parentObj,7); + timer.Reset();//嚙踝蕭嚙踝蕭嚙? + timer.Start(10000,0);//???嚙? + return; + } + break; + } +} + +function onStart_appendage_sandor_bykk(appendage) +{ + if (!appendage) return; + //local parentObj = appendage.getParent(); + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_sandor_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function onSourceKeyFrameFlag_appendage_spirit_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + if(sqrChr.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.1; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.1; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){ + if(flagIndex != 201 && flagIndex != 202 && flagIndex != 203 && flagIndex != 1002) eclipsehive_bonus = eclipsehive_bonus + 0.6; + else eclipsehive_bonus = eclipsehive_bonus + 0.1; + } + } + + switch(flagIndex){ + case 101://嚙踝蕭1 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(2,2); + local delay2 = pAni.getDelaySum(3,3); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARK, SKILL_BYKK_SUMMONSPIRITDARK, 5, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,101,0,0,0,totalDamage,delay1,delay2,0,0); + break; + case 102://嚙踝蕭2 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(4,4); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARK, SKILL_BYKK_SUMMONSPIRITDARK, 5, 1.2*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,102,0,0,0,totalDamage,delay1,0,0,0); + break; + case 201://嚙踝蕭1 + case 202://嚙踝蕭1 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(1,1); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIRE, SKILL_BYKK_SUMMONSPIRITFIRE, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,201,0,0,0,totalDamage,delay1,0,0,0); + break; + case 203: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + parentObj.getVar("skill2").set_vector(0,parentObj.getXPos()); + parentObj.getVar("skill2").set_vector(1,parentObj.getYPos()); + local moveX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()) + sq_getRandom(0,60); + parentObj.getVar("skill2").set_vector(2,moveX); + parentObj.getVar("skill2").set_vector(3,targetObj.getYPos() - parentObj.getYPos()); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIRE, SKILL_BYKK_SUMMONSPIRITFIRE, 6, 1.2*eclipsehive_bonus) + 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,202,0,0,0,totalDamage,500,group,uniqueId,0); + } + monsterattack_ksk(parentObj,4); + break; + case 301://嚙踝蕭1 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(3,3); + local delay2 = pAni.getDelaySum(5,5); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHT, SKILL_BYKK_SUMMONSPIRITLIGHT, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,301,0,0,0,totalDamage,delay1,delay2,0,0); + break; + case 302://嚙踝蕭2 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(2,2); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHT, SKILL_BYKK_SUMMONSPIRITLIGHT, 6, 1.2*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,302,0,0,0,totalDamage,delay1,0,0,0); + break; + case 401://?1 + local pAni = parentObj.getCurrentAnimation(); + local delay1 = pAni.getDelaySum(2,2); + local delay2 = pAni.getDelaySum(3,3); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATER, SKILL_BYKK_SUMMONSPIRITWATER, 6, eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,401,0,0,0,totalDamage,delay1,delay2,0,0); + break; + case 402://?2 + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATER, SKILL_BYKK_SUMMONSPIRITWATER, 6, 1.2*eclipsehive_bonus) + 100; + createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_SUMMONSPIRITCOMMON,402,0,0,0,totalDamage,0,0,0,0); + } + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos()+sq_getRandom(-10,10); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 200+sq_getRandom(-20,20)); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + local Index = parentObj.getCollisionObjectIndex(); + local skill_level = sq_GetSkillLevel(sqrChr, 49); + switch(Index){ + case MONSTER_ID_SPIRITDARK://嚙踝蕭 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 20, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 19, 1.0) + 100,prob = sq_GetLevelData(sqrChr,49, 21, skill_level),time = sq_GetLevelData(sqrChr,49, 23, skill_level); + local Ex_level = sq_GetSkillLevel(sqrChr, 53); + if(Ex_level > 0){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 53, 53, 1, 1.0) + 100; + sizeRate = sq_GetBonusRateWithPassive(sqrChr, 53, 53, 0, 1.0) + 100; + prob = sq_GetLevelData(sqrChr,53, 2, Ex_level); + time = sq_GetLevelData(sqrChr,53, 4, Ex_level); + } + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + local add_Rate = 0, add_Rate2 = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;} + if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; } + } + local sub = 1002; + if(sqrChr.getVar("sacrifice").getBool(0)){ + sub = 1001; + sqrChr.getVar("sacrifice").setBool(0, false); + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,20,totalDamage,sizeRate,1,prob,time); + break; + case MONSTER_ID_SPIRITFIRE://嚙踝蕭 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 7, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 6, 1.0) + 100,prob = sq_GetLevelData(sqrChr,49, 8, skill_level),time = sq_GetLevelData(sqrChr,49, 10, skill_level); + local Ex_level = sq_GetSkillLevel(sqrChr, 51); + if(Ex_level > 0){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 51, 51, 1, 1.0) + 100; + sizeRate = sq_GetBonusRateWithPassive(sqrChr, 51, 51, 0, 1.0) + 100; + prob = sq_GetLevelData(sqrChr,51, 2, Ex_level); + time = sq_GetLevelData(sqrChr,51, 4, Ex_level); + } + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + local add_Rate = 0, add_Rate2 = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;} + if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; } + } + local sub = 1002; + if(sqrChr.getVar("sacrifice").getBool(1)){ + sub = 1001; + sqrChr.getVar("sacrifice").setBool(1, false); + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,35,totalDamage,sizeRate,2,prob,time); + break; + case MONSTER_ID_SPIRITLIGHT://嚙踝蕭 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 26, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 25, 0.67) + 100,prob = sq_GetLevelData(sqrChr,49, 27, skill_level),time = sq_GetLevelData(sqrChr,49, 29, skill_level); + local Ex_level = sq_GetSkillLevel(sqrChr, 54); + if(Ex_level > 0){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 54, 54, 1, 1.0) + 100; + sizeRate = sq_GetBonusRateWithPassive(sqrChr, 54, 54, 0, 0.67) + 100; + prob = sq_GetLevelData(sqrChr,54, 2, Ex_level); + time = sq_GetLevelData(sqrChr,54, 4, Ex_level); + } + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + local add_Rate = 0, add_Rate2 = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;} + if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; } + } + local sub = 1002; + if(sqrChr.getVar("sacrifice").getBool(2)){ + sub = 1001; + sqrChr.getVar("sacrifice").setBool(2, false); + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,35,totalDamage,sizeRate,3,prob,time); + break; + case MONSTER_ID_SPIRITWATER://? + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 15, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 14, 0.2) + 100,prob = sq_GetLevelData(sqrChr,49, 16, skill_level),time = sq_GetLevelData(sqrChr,49, 18, skill_level); + local Ex_level = sq_GetSkillLevel(sqrChr, 52); + if(Ex_level > 0){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, 52, 52, 1, 1.0) + 100; + sizeRate = sq_GetBonusRateWithPassive(sqrChr, 52, 52, 0, 0.2) + 100; + prob = sq_GetLevelData(sqrChr,52, 2, Ex_level); + time = sq_GetLevelData(sqrChr,52, 4, Ex_level); + } + if(sqrChr.getVar("eclipsehive_select").getBool(0)){ + local add_Rate = 0, add_Rate2 = 0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;} + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;} + if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; } + } + local sub = 1002; + if(sqrChr.getVar("sacrifice").getBool(3)){ + sub = 1001; + sqrChr.getVar("sacrifice").setBool(3, false); + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,35,totalDamage,sizeRate,4,prob,time); + break; + } + parentObj.setValid(false); + break; + } + return true; +} + +function proc_appendage_spirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙踝蕭嚙踝蕭1 + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙踝蕭嚙踝蕭2 + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + local Index = parentObj.getCollisionObjectIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,2); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + local tiaozheng = 0; + if(sqrChr.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) tiaozheng = tiaozheng - 100; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) tiaozheng = tiaozheng - 100; + } + if(currentTT < ATK_TIME + tiaozheng) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_02,t_01],attackIndex = [1,0],distanceX,distanceY; + switch(Index){ + case MONSTER_ID_SPIRITDARK://嚙踝蕭 + distanceX = [75,50];distanceY = [15,8]; + break; + case MONSTER_ID_SPIRITFIRE://嚙踝蕭 + distanceX = [400,50];distanceY = [300,8]; + break; + case MONSTER_ID_SPIRITLIGHT://嚙踝蕭 + distanceX = [150,100];distanceY = [35,8]; + break; + case MONSTER_ID_SPIRITWATER://? + distanceX = [400,75];distanceY = [400,8]; + break; + } + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + if(attackIndex == 2){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + return; + } + switch(Index){ + case MONSTER_ID_SPIRITDARK://嚙踝蕭 + break; + case MONSTER_ID_SPIRITFIRE://嚙踝蕭 + switch(attackIndex){ + case 4: + local pAni = parentObj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local fireT = 500; + local srcX = parentObj.getVar("skill2").get_vector(0); + local srcY = parentObj.getVar("skill2").get_vector(1); + local MoveX = parentObj.getVar("skill2").get_vector(2);//嚙?嚙踝蕭嚙綞嚙踝蕭? + local MoveY = parentObj.getVar("skill2").get_vector(3);//嚙?嚙踝蕭嚙緙嚙踝蕭? + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); + local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); + local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), v);//嚙踝蕭嚙踝蕭菾嚙踝蕭?蓱?嚙踝蕭?? + if(parentObj.isMovablePos(dstX, srcY + vy)){ + sq_setCurrentAxisPos(parentObj, 0, dstX);//?嚙踝蕭?嚙踝蕭x嚙? + sq_setCurrentAxisPos(parentObj, 1, srcY + vy);//?嚙踝蕭?嚙踝蕭y嚙? + } + else{ + parentObj.getVar("skill2").set_vector(0,parentObj.getXPos()); + parentObj.getVar("skill2").set_vector(1,parentObj.getYPos()); + parentObj.getVar("skill2").set_vector(2,0); + parentObj.getVar("skill2").set_vector(3,0); + } + if(currentT > fireT) parentObj.sendStateOnlyPacket(STATE_STAND); + break; + } + break; + case MONSTER_ID_SPIRITLIGHT://嚙踝蕭 + break; + case MONSTER_ID_SPIRITWATER://? + break; + } + break; + } +} + +function onStart_appendage_spirit_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_spirit_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + + +function onSourceKeyFrameFlag_appendage_waterhigherspirit_bykk(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + // if(!sq_IsMyControlObject(sqrChr)) return true; + + local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0; + local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0; + + if(sqrChr.getVar("eclipsehive_select").getBool(0) == true){ + local add_bonus = 0.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 24) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 25) > 0) add_bonus = add_bonus + 10.0; + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) add_bonus = add_bonus + 20.0; + if(add_bonus > 0) eclipsehive_bonus2 = eclipsehive_bonus2 +add_bonus / 100.0 + } + + switch(flagIndex){ + case 101: + local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); + if(targetObj) createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,1,0,0,0,0,0,0,0,0); + break; + case 201: + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/waterhigherspirit/animation/ice_wind.ani",0,0,0); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 7, eclipsehive_bonus) + 100; + local pAni = parentObj.getCurrentAnimation(); + local delay = pAni.getDelaySum(2, 2); + //printp("delay="+delay.tostring()+"\n"); + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,2,0,0,0,totalDamage,delay,0,0,0); + break; + case 301: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 14, eclipsehive_bonus) + 100; + for(local i = 0; i < 3; i++){ + local xpos = 50; + local zpos = 75; + if(i % 3 == 1){ + xpos = 60; + zpos = 55; + } + else if(i % 3 == 2){ + xpos = 65; + zpos = 100; + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,3,xpos,0,zpos,totalDamage,0,0,0,0); + } + break; + case 401: + if(parentObj.getVar("skill4").getBool(0) == false){ + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 19, eclipsehive_bonus2) + 100; + for(local i = 0; i < 7; i++){ + local xpos = 50; + local zpos = 75; + if(i % 3 == 1){ + xpos = 60; + zpos = 55; + } + else if(i % 3 == 2){ + xpos = 65; + zpos = 100; + } + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,3,xpos,0,zpos,totalDamage,0,0,0,0); + } + } + else{ + local pAni = parentObj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + } + break; + case 402: + if(parentObj.getVar("skill4").getBool(0) == true){ + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,4,150,0,0,0,0,0,0,0); + parentObj.getVar("skill4").setBool(0, false); + } + break; + case 601: + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,9,100,0,0,1,0,0,0,0); + sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/waterhigherspirit/animation/ice_wind.ani",0,0,0); + sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, sq_getRandom(201,299), parentObj.getDirection()); + break; + case 1001://?嚙踝蕭嚙踝蕭嚙? + local direction = sqrChr.getDirection(); + local yPos = sqrChr.getYPos(); + local zPos = parentObj.getZPos(); + local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50); + sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5); + sq_SetCurrentDirection(parentObj, direction); + if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITWATERHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER), -1); + break; + case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + parentObj.getVar("skill4").setBool(0, true); + monsterattack_ksk(parentObj,3); + break; + } + return true; +} + +function proc_appendage_waterhigherspirit_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//晡?嚙踝蕭? + local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//?嚙踝蕭嚙踝蕭? + local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//???嚙踝蕭? + local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//嚙踝蕭嚙踝蕭??? + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + local attackIndex = parentObj.getAttackIndex(); + + switch(state){ + case STATE_STAND: + if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5); + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local grant_timer = parentObj.getVar("grant").get_ct_vector(0); + if(grant_timer){ + local grant_time = grant_timer.Get(); + if(grant_timer && grant_time >= 4000 + sq_getRandom(0,4000) && sq_FindTarget( parentObj, 0, 400, 50, 200)){ + grant_timer.Reset(); + grant_timer.Start(10000,0); + monsterattack_ksk(parentObj,6); + return; + } + } + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt = [t_04,t_03,t_02,t_01]; + local attackIndex = [3,2,1,0]; + local distanceX = [400,300,200,300]; + local distanceXmin = [50,50,10,0]; + local distanceY = [20,20,20,100]; + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 13) < 1 && i == 0) return; + monsterattack_ksk(parentObj,attackIndex[i]); + if(parentObj.getVar("watertornado").size_vector() > 0){ + local attacknum = parentObj.getVar("watertornado").get_vector(0); + parentObj.getVar("watertornado").set_vector(0,attacknum + 1); + } + return; + } + } + } + } + } + else{ + if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + break; + case STATE_ATTACK: + if(attackIndex == 5){ + if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND); + } + break; + } +} + +function onStart_appendage_waterhigherspirit_bykk(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_waterhigherspirit_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) return; + parentObj.sendDestroyPacket(true); +} + +function proc_appendage_whipwithsid_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local sourceObj = appendage.getSource(); + local bonusrater = parentObj.getVar("whip_kk").get_vector(1); + local hitr = parentObj.getVar("whip_kk").get_vector(0); + local ptime = parentObj.getVar("whip_kk").get_vector(2); + + local t_01 = appendage.getVar("atktime").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t_01 && t_01.isOnEvent(currentT) == true){ + local ap = sq_getNewAttackInfoPacket(); + ap.powerRate = bonusrater; + ap.element = ENUM_ELEMENT_NONE ; + ap.useWeapon = true; + ap.eType = ATTACKTYPE_MAGICAL; + ap.backForce = 2; + ap.upForce = 10; + sq_SendHitObjectPacketByAttackInfo(sourceObj, parentObj, ap); + } + + if(currentT >= ptime * hitr+ 200){ + appendage.setValid(false); + } +} + +function onStart_appendage_whipwithsid_bykk(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + + local hitr = parentObj.getVar("whip_kk").get_vector(0); + local ptime = parentObj.getVar("whip_kk").get_vector(2); + + appendage.getVar("atktime").clear_timer_vector(); + appendage.getVar("atktime").push_timer_vector(); + local t_01 = appendage.getVar("atktime").get_timer_vector(0); + t_01.setParameter(ptime, hitr); + t_01.resetInstant(0); + +} + +function onEnd_appendage_whipwithsid_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + +} + +function drawAppend_appendage_whipwithsid_bykk(appendage, isOver, x, y, isFlip) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local var = appendage.getVar(); + local Ani = var.GetAnimationMap("animation", "passiveobject/madeby_k_k/animation/dominionpowerup/dominionpowerupawakening_damage.ani"); + if(Ani && isOver){ + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y + 1, isFlip); + } + +} + + +function onStart_appendage_casillas_skill_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj) appendage.setValid(false); +} + +function onEnd_appendage_casillas_skill_bykk(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + local drawnumber = parentObj.getVar("drawobj").get_obj_vector_size(); + for(local i = 0; i < drawnumber; i++){ + local drawObj = parentObj.getVar("drawobj").get_obj_vector(i); + if(drawObj){ + drawObj.setValid(false); + } + } + parentObj.getVar("drawobj").clear_obj_vector(); +} + +function onDamageParent_appendage_casillas_skill_bykk(appendage ,attacker, boundingBox, isStuck) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + local sourceObj = appendage.getSource(); + if(!parentObj || parentObj.getState() == STATE_DIE) appendage.setValid(false); + + local ring_number = parentObj.getVar("casillasatck").get_vector(0); + if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(attacker); + if(colObj.getCollisionObjectIndex() == 24381 && colObj.getVar("skillIndex").get_vector(0) == 82 && colObj.getVar("subtype").get_vector(0) != 100){ + ring_number = ring_number + 1; + parentObj.getVar("casillasatck").set_vector(0, ring_number); + ring_number = parentObj.getVar("casillasatck").get_vector(0); + if(ring_number >= 3){ + parentObj.getVar("casillasatck").set_vector(0, 0); + local totalDamage = sq_GetBonusRateWithPassive(sourceObj, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 11, 1.0) + 100; + createPassiveObject_k_k(sourceObj,parentObj,SKILL_BYKK_SUMMONCASILLAS,100,0,0, sq_GetCenterZPos(boundingBox),totalDamage,0,0,0,0); + } + } + + } +} + +function drawAppend_appendage_casillas_skill_bykk(appendage, isOver, x, y, isFlip) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local ring_number = parentObj.getVar("casillasatck").get_vector(0); + local size = 1.5; + local var = appendage.getVar(); + local Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/casillas/skill/skill01.ani"); + local Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/casillas/skill/skill01.ani"); + Ani_02.setImageRateFromOriginal(size, size); + local hight = parentObj.getZPos(); + if(ring_number < 1) return; + if(ring_number >= 1 && Ani_01 && !isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y + hight, isFlip); + } + if(ring_number >= 2 && Ani_01 && !isOver){ + sq_AnimationProc(Ani_02); + sq_drawCurrentFrame(Ani_02, x, y + hight, isFlip); + } +} + + +function onStart_appendage_spikekings_grant_bykk(appendage) +{ + if (!appendage) return; + // print("test"); + local monsterObj = appendage.getParent(); + monsterObj.getVar("grant").clear_ct_vector(); + monsterObj.getVar("grant").push_ct_vector(); + local timer = monsterObj.getVar("grant").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_spikekings_grant_bykk(appendage) +{ + if (!appendage) return; + local monsterObj = appendage.getParent(); + monsterObj.getVar("grant").clear_ct_vector(); +} + +function drawAppend_appendage_spikekings_grant_bykk(appendage, isOver, x, y, isFlip) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if (!parentObj){ + appendage.setValid(false); + return; + } + + local monster_id = appendage.getVar().get_vector(0); + if(!monster_id || monster_id <= 0) return; + + local var = appendage.getVar(); + local Ani_01; + local Ani_02; + + switch(monster_id){ + case MONSTER_ID_DARKHIGHERSPIRIT: + case MONSTER_ID_LIGHTHIGHERSPIRIT: + Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_circle_element.ani"); + Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_energy_element.ani"); + break; + case MONSTER_ID_FIREHIGHERSPIRIT: + Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_circle_red.ani"); + Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_energy_red.ani"); + break; + case MONSTER_ID_WATERHIGHERSPIRIT: + Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_circle_blue.ani"); + Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_energy_blue.ani"); + break; + } + local hight = parentObj.getZPos(); + if(Ani_01 && !isOver){ + sq_AnimationProc(Ani_01); + sq_drawCurrentFrame(Ani_01, x, y + hight, isFlip); + } + if(Ani_02 && isOver){ + sq_AnimationProc(Ani_02); + sq_drawCurrentFrame(Ani_02, x, y + hight, isFlip); + } +} + +function whip_bykk(obj,subtype) +{ + local skill_level_01 = sq_GetSkillLevel(obj, SKILL_BYKK_DOMINIONPOWERUP);//??嚙踝蕭嚙踝蕭嚙? + local skill_level_02 = sq_GetSkillLevel(obj, SKILL_BYKK_ECLIPSEHIVE);//?嚙踝蕭旓?嚙踝蕭? + switch(subtype){ + case 1: + if(skill_level_01 > 0){//嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭 + if(obj.getVar("whip_kk").getBool(0) == true){// + if(skill_level_02 > 0){ + obj.sq_SetCurrentAnimation(ANI_WHIP_AWAKENING_02);//?嚙踝蕭 + } + else{ + obj.sq_SetCurrentAnimation(ANI_WHIP_EX_02);//?嚙踝蕭 + } + /*local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetCurrentAttackPower(attackInfo, -1); + sq_SetCurrentAttackBonusRate(attackInfo, 100); + }*/ + obj.getVar("whip_kk").setBool(0,false); + obj.getVar("whip_kk").setBool(1,false); + } + else{//嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙? + if(skill_level_02 > 0){ + obj.sq_SetCurrentAnimation(ANI_WHIP_AWAKENING_01);//?嚙踝蕭 + obj.getVar("whip_kk").setBool(1,true); + } + else{ + obj.sq_SetCurrentAnimation(ANI_WHIP_EX_01);//?嚙踝蕭 + } + /*local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo){ + sq_SetCurrentAttackPower(attackInfo, -1); + sq_SetCurrentAttackBonusRate(attackInfo, 100); + }*/ + obj.getVar("whip_kk").setBool(0,true); + } + } + else{ + //local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/whiptomonsterswing2.ani", 0, 0, 0); + //local animation = pooledObj.getCurrentAnimation(); + //sq_SetFrameDelayTime(animation, 0, 40); + //sq_SetFrameDelayTime(animation, 1, 40); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/whiptomonsterswing2.ani"), 0, 0); + } + break; + case 2: + if(skill_level_01 > 0){ + if(obj.getVar("whip_kk").getBool(0) == true){ + obj.setSkillCommandEnable(20,true); + local b_useskill = obj.sq_IsEnterSkill(20); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(20); + obj.sq_AddSetStatePacket(24, STATE_PRIORITY_USER, true); + } + } + } + break; + case 3: + local state = obj.sq_GetState(); + if(state == 24){ + if(!obj.isEnemy(damager)){ + local pooledObj = sq_CreateDrawOnlyObject(obj, "passiveobject/madeby_k_k/animation/whip/whiptomonsterhitnewbuff.ani", ENUM_DRAWLAYER_COVER, true); + pooledObj.setCurrentPos(damager.getXPos(),damager.getYPos(), sq_GetCenterZPos(bounding_box)); + } + else{ + if(obj.getVar("whip_kk").getBool(1) == true){ + local hitr = 5; + local totalDamage1 = sq_GetBonusRateWithPassive(obj, 20, 20, 14, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(obj, 20, 20, 16, 1.0) + 100; + local bonusrater = (totalDamage1 + totalDamage2) / 2 / hitr; + local ptime = 500; + damager.getVar("whip_kk").clear_vector(); + damager.getVar("whip_kk").push_vector(hitr); + damager.getVar("whip_kk").push_vector(bonusrater); + damager.getVar("whip_kk").push_vector(ptime); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, 24, false, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut", true); + } + } + } + break; + } +} + +function onattack_whip_k_k(obj, damager, bounding_box, is_stuck) +{ + local state = obj.sq_GetState(); + if(state == 24){ + if(!obj.isEnemy(damager)){ + local pooledObj = sq_CreateDrawOnlyObject(obj, "passiveobject/madeby_k_k/animation/whip/whiptomonsterhitnewbuff.ani", ENUM_DRAWLAYER_COVER, true); + pooledObj.setCurrentPos(damager.getXPos(),damager.getYPos(), sq_GetCenterZPos(bounding_box)); + if(damager.isObjectType(OBJECTTYPE_ACTIVE)) damager = sq_GetCNRDObjectToActiveObject(damager); + if(sq_GetLevelData(obj, 20, 17, sq_GetSkillLevel(obj, 20)) > 0) obj.sq_SetSuperArmorUntilTime(damager, 40000); + } + else{ + if(obj.getVar("whip_kk").getBool(1) == true){ + local hitr = 5; + local totalDamage1 = sq_GetBonusRateWithPassive(obj, 20, 20, 14, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(obj, 20, 20, 16, 1.0) + 100; + local bonusrater = (totalDamage1 + totalDamage2) / 2 / hitr; + local ptime = 500; + damager.getVar("whip_kk").clear_vector(); + damager.getVar("whip_kk").push_vector(hitr); + damager.getVar("whip_kk").push_vector(bonusrater); + damager.getVar("whip_kk").push_vector(ptime); + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, 24, false, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut", true); + } + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(activeObj.getCollisionObjectIndex() == 66473 || activeObj.getCollisionObjectIndex() == 66467){ + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createPassiveObject_k_k(obj,activeObj,SKILL_BYKK_MOONSHADOW,3,0,0,sq_GetObjectHeight(activeObj) / 2,10,group,uniqueId,0,0); + } + } + } + } +} + +function onChangeSkillEffect_Mage_summoner(obj, skillIndex, reciveData) +{ + if(!obj) return; + print("test"); + switch(skillIndex){ + case SKILL_BYKK_COMMUNION: + local subtype = reciveData.readDword(); + switch(subtype){ + case 1: + local id = reciveData.readDword(); + local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword())); + switch(id){ + case MONSTER_ID_RAMOS: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_ramos.nut", "RamosObj", 122); + break; + case MONSTER_ID_KRUTA: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_kruta.nut", "KrutaObj", 121); + break; + case MONSTER_ID_HEILROM: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_heilrom.nut", "HeilromObj", 119); + break; + case MONSTER_ID_ECHEVERRA: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra.nut", "EcheverraObj", 47); + break; + case MONSTER_ID_SANDOR: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_sandor.nut", "SandorObj", 44); + break; + case MONSTER_ID_AUXO: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_auxoex.nut", "AuxoObj", 45); + break; + case MONSTER_ID_AUXOOLD: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_auxo.nut", "AuxoObj", 45); + break; + case MONSTER_ID_LIGHTHIGHERSPIRIT: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit.nut", "LighthigherspiritObj", 77); + break; + case MONSTER_ID_FIREHIGHERSPIRIT: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_firehigherspirit.nut", "FirehigherspiritObj", 79); + break; + case MONSTER_ID_DARKHIGHERSPIRIT: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_darkhigherspirit.nut", "DarkhigherspiritObj", 76); + break; + case MONSTER_ID_WATERHIGHERSPIRIT: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_waterhigherspirit.nut", "WaterhigherspiritObj", 78); + break; + case MONSTER_ID_LUIS: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_luis.nut", "LuisObj", 46); + break; + case MONSTER_ID_BABYDRAGON: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_babydragon.nut", "BabydragonObj", 80); + break; + case MONSTER_ID_CASILLAS: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_casillas.nut", "CassillasObj", 82); + break; + case MONSTER_ID_HODOR: + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_hodor.nut", "HodorObj", 25); + break; + case MONSTER_ID_SPIRITDARK://嚙踝蕭 + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritDarkObj", 23); + break; + case MONSTER_ID_SPIRITFIRE://嚙踝蕭 + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritFireObj", 21); + break; + case MONSTER_ID_SPIRITLIGHT://嚙踝蕭 + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritLightObj", 24); + break; + case MONSTER_ID_SPIRITWATER://? + setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritWaterObj", 22); + break; + } + break; + } + break; + } +} + +function setMonsterAppendage_Summoner_byKK(obj, monster_obj, appendagepath, monstername, skill_index) +{ + if(!obj) return; + if(!monster_obj) return; + if(appendagepath == null || monstername == null || skill_index == null) return; + appendagepath = appendagepath.tostring(); + monstername = monstername.tostring(); + local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true); + AddAppendage.getVar("sqrChr").clear_obj_vector(); + AddAppendage.getVar("sqrChr").push_obj_vector(obj); + local monsternum = obj.getVar(monstername).get_obj_vector_size(); + if(monsternum > 0){ + obj.getVar(monstername).push_obj_vector(monster_obj); + } + else{ + obj.getVar(monstername).clear_obj_vector(); + obj.getVar(monstername).push_obj_vector(monster_obj); + } + setMonsterInfo_Mage(obj, monster_obj, skill_index, AddAppendage); + if(sq_GetSkill(obj, skill_index).isInCoolTime()) obj.endSkillCoolTime(skill_index); + } +} + +function setMonsterInfo_Mage(obj, monster_obj, skill_index, appendage) +{ + if(!obj) return; + + monster_obj.setMapFollowParent(obj); + monster_obj.setMapFollowType(1); + + local cooltime_Balance = obj.getVar("eclipsehive_cooltime").getInt(10); + + local monster_id = monster_obj.getCollisionObjectIndex(); + switch(monster_id){ + case MONSTER_ID_RAMOS: + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 19, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 20, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 21, skill_level) * cooltime_Balance / 100; + local coolt_04 = 12000 * cooltime_Balance / 100; + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 8) > 0){ + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + } + break; + case MONSTER_ID_KRUTA: + + monster_obj.getVar("skill").clear_vector(); + monster_obj.getVar("skill").push_vector(4); + monster_obj.getVar("skill2").clear_vector(); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skillIndex").clear_vector(); + monster_obj.getVar("skillIndex").push_vector(7); + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100; + local coolt_04 = 15000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 30) > 0){ + coolt_02 = coolt_02 - 1000; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 31) > 0){ + coolt_03 = coolt_03 - 1000; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + + local sizenum = sq_GetLevelData(obj, SKILL_BYKK_SUMMONKRUTA, 15, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONKRUTA)); + if(sizenum > 0){ + sq_SendCreatePassiveObjectPacket(monster_obj, 1008606, 0, 0, 0, sizenum * 100 - 10, monster_obj.getDirection()); + } + break; + case MONSTER_ID_HEILROM: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local range = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 8, skill_level); + local elementAttack = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 4, skill_level); + local attackSpeed = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 9, skill_level); + local moveSpeed = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 10, skill_level); + local castSpeed = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 11, skill_level); + appendage.getVar("buffPx").clear_vector(); + appendage.getVar("buffPx").push_vector(range); + appendage.getVar("buffPx").push_vector(elementAttack); + appendage.getVar("buffPx").push_vector(attackSpeed); + appendage.getVar("buffPx").push_vector(moveSpeed); + appendage.getVar("buffPx").push_vector(castSpeed); + appendage.getVar("buffPx").push_vector(skill_level); + appendage.getVar("buff01").clear_timer_vector(); + appendage.getVar("buff01").push_timer_vector(); + local t = appendage.getVar("buff01").get_timer_vector(0); + t.setParameter(1000, -1); + t.resetInstant(0); + appendage.getVar("buff02").push_timer_vector(); + local t2 = appendage.getVar("buff02").get_timer_vector(0); + t2.setParameter(15000, -1); + t2.resetInstant(0); + break; + case MONSTER_ID_ECHEVERRA: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100; + local coolt_04 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100; + local coolt_05 = obj.sq_GetLevelData(skill_index, 9, skill_level) * cooltime_Balance / 100; + local coolt_06 = 15000 * cooltime_Balance / 100; + + local isBool = obj.sq_GetLevelData(skill_index, 14, skill_level) + if(isBool < 1){ + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + } + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_5").clear_timer_vector(); + appendage.getVar("skill_5").push_timer_vector(); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + t_05.setParameter(coolt_05, -1); + t_05.resetInstant(0); + } + appendage.getVar("skill_6").clear_timer_vector(); + appendage.getVar("skill_6").push_timer_vector(); + local t_06 = appendage.getVar("skill_6").get_timer_vector(0); + t_06.setParameter(coolt_06, -1); + t_06.resetInstant(0); + if(sq_GetIntData(obj, 47, 13) > 0 && !obj.getVar("grant").get_ct_vector(0)){ + obj.getVar("grant").clear_ct_vector(); + obj.getVar("grant").push_ct_vector(); + local timer = obj.getVar("grant").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + break; + case MONSTER_ID_SANDOR: + + monster_obj.getVar("move").clear_vector(); + monster_obj.getVar("move").push_vector(0); + monster_obj.getVar("move").push_vector(0); + monster_obj.getVar("move").push_vector(0); + monster_obj.getVar("move").push_vector(0); + + monster_obj.getVar().clear_ct_vector();//?嚙? + monster_obj.getVar().push_ct_vector();//吤嚙踝蕭 + local timer = monster_obj.getVar().get_ct_vector(0);//嚙踝蕭嚙踝蕭 + timer.Reset();//嚙踝蕭嚙踝蕭嚙? + timer.Start(10000,0);//???嚙? + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100; + local coolt_04 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100; + local coolt_05 = 8000 * cooltime_Balance / 100; + + local speedRate = obj.sq_GetLevelData(skill_index, 13, skill_level); + if(speedRate > 0){ + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, speedRate.tofloat(), 3600000); + if(ap) ap.sq_Append(monster_obj, monster_obj); + local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, speedRate.tofloat(), 3600000); + if(ap2) ap2.sq_Append(monster_obj, monster_obj); + } + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + local decreaseRate = 0; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 34) > 0) decreaseRate = decreaseRate - 20; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) > 0) decreaseRate = decreaseRate - 20; + if(decreaseRate < 0){ + coolt_01 = coolt_01 * (100 - decreaseRate) / 100; + coolt_02 = coolt_02 * (100 - decreaseRate) / 100; + } + } + + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_protect.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_protect.nut", true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, 44, sq_GetSkillLevel(obj, 44)); + } + } + //else monsterattack_ksk(monster_obj, 3); + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) < 1){ + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + } + } + appendage.getVar("skill_5").clear_timer_vector(); + appendage.getVar("skill_5").push_timer_vector(); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + t_05.setParameter(coolt_05, -1); + t_05.resetInstant(0); + break; + case MONSTER_ID_AUXO: + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 30, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 31, skill_level) * cooltime_Balance / 100; + local coolt_04 = 10000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){ + coolt_01 = coolt_01 * 90 / 100; + coolt_03 = coolt_03 * 90 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){ + coolt_03 = coolt_03 - 1000; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){ + coolt_03 = coolt_03 - 1000; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_03, -1); + t_02.resetInstant(0); + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_04, -1); + t_03.resetInstant(0); + monster_obj.getVar("Root").clear_vector(); + monster_obj.getVar("Root").push_vector(0); + break; + case MONSTER_ID_AUXOOLD: + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100; + local coolt_04 = 10000 * cooltime_Balance / 150; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){ + coolt_01 = coolt_01 * 90 / 100; + coolt_02 = coolt_02 * 90 / 100; + coolt_03 = coolt_03 * 90 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){ + coolt_03 = coolt_03 - 1000; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){ + coolt_03 = coolt_03 - 1000; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + break; + case MONSTER_ID_LIGHTHIGHERSPIRIT: + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = 10000 * cooltime_Balance / 100; + local coolt_04 = 10000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){ + coolt_01 = coolt_01 * 80 / 100; + coolt_02 = coolt_02 * 80 / 100; + } + else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){ + coolt_01 = coolt_01 * 90 / 100; + coolt_02 = coolt_02 * 90 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){ + coolt_03 = coolt_03 * 85 /100; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + local timer = obj.getVar("pulled").get_ct_vector(0); + if(!timer){ + obj.getVar("pulled").clear_ct_vector(); + obj.getVar("pulled").push_ct_vector(); + local timer = obj.getVar("pulled").get_ct_vector(0); + timer.Reset(); + timer.Start(1000000,0); + } + else{ + timer.Reset(); + timer.Start(1000000,0); + } + break; + case MONSTER_ID_FIREHIGHERSPIRIT: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 16, skill_level) * cooltime_Balance / 100; + local coolt_04 = 10000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){ + coolt_01 = coolt_01 * 80 / 100; + coolt_02 = coolt_02 * 80 / 100; + } + else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){ + coolt_01 = coolt_01 * 90 / 100; + coolt_02 = coolt_02 * 90 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){ + coolt_03 = coolt_03 * 85 /100; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + local timer = obj.getVar("pulled").get_ct_vector(0); + if(!timer){ + obj.getVar("pulled").clear_ct_vector(); + obj.getVar("pulled").push_ct_vector(); + local timer = obj.getVar("pulled").get_ct_vector(0); + timer.Reset(); + timer.Start(1000000,0); + } + else{ + timer.Reset(); + timer.Start(1000000,0); + } + break; + case MONSTER_ID_DARKHIGHERSPIRIT: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 17, skill_level) * cooltime_Balance / 100; + local coolt_04 = 10000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){ + coolt_01 = coolt_01 * 80 / 100; + coolt_02 = coolt_02 * 80 / 100; + } + else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){ + coolt_01 = coolt_01 * 90 / 100; + coolt_02 = coolt_02 * 90 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){ + coolt_03 = coolt_03 * 85 /100; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + // if(skill_level >= 20){ + // monster_obj.getVar("darkaura").clear_vector(); + // monster_obj.getVar("darkaura").push_vector(0); + // } + break; + case MONSTER_ID_WATERHIGHERSPIRIT: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 18, skill_level) * cooltime_Balance / 100; + local coolt_04 = 10000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){ + coolt_01 = coolt_01 * 80 / 100; + coolt_02 = coolt_02 * 80 / 100; + } + else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){ + coolt_01 = coolt_01 * 90 / 100; + coolt_02 = coolt_02 * 90 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){ + coolt_03 = coolt_03 * 85 /100; + } + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + break; + case MONSTER_ID_LUIS: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100; + local coolt_04 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100; + // if(coolt_04 < 2500) coolt_04 = 2500; + local coolt_05 = 8000 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0){ + coolt_01 = coolt_01 * 50 / 100; + coolt_02 = coolt_02 * 50 / 100; + coolt_03 = coolt_03 * 50 / 100; + coolt_04 = coolt_04 * 50 / 100; + } + } + + if(obj.sq_GetLevelData(skill_index, 24, skill_level) < 1){ + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + } + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + if(skill_level >= 10){ + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + } + appendage.getVar("skill_5").clear_timer_vector(); + appendage.getVar("skill_5").push_timer_vector(); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + t_05.setParameter(coolt_05, -1); + t_05.resetInstant(0); + break; + case MONSTER_ID_BABYDRAGON: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = (obj.sq_GetLevelData(skill_index, 5, skill_level) * 110 / 100) * cooltime_Balance / 100; + local coolt_03 = (obj.sq_GetLevelData(skill_index, 6, skill_level) * 110 / 100) * cooltime_Balance / 100; + local coolt_04 = 6000 * cooltime_Balance / 100; + + if(obj.sq_GetLevelData(skill_index, 12, skill_level) > 0){ + appendage.getVar("custom").setBool(0, true); + coolt_01 = coolt_01 * 70 / 100; + coolt_02 = coolt_02 * 70 / 100; + coolt_03 = coolt_03 * 70 / 100; + } + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 28) > 0){ + coolt_03 = coolt_03 * 70 / 100; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 29) > 0){ + coolt_01 = coolt_01 * 70 / 100; + coolt_02 = coolt_02 * 70 / 100; + } + } + + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 27) > 0 && obj.getVar("eclipsehive_select").getBool(0) == false){ + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + } + if(skill_level >= 5){ + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + + break; + case MONSTER_ID_CASILLAS: + monster_obj.getVar("move").clear_vector(); + monster_obj.getVar("move").push_vector(0); + monster_obj.getVar("move").push_vector(0); + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100; + local coolt_02 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100; + local coolt_03 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100; + local coolt_04 = 800 * cooltime_Balance / cooltime_Balance; + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + if(obj.sq_GetLevelData(skill_index, 17, skill_level) > 0){ + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + } + break; + case MONSTER_ID_HODOR: + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;//嚙踝蕭嚙踝蕭? + local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;//吤嚙踝蕭Buff + local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;//嚙踝蕭? + local coolt_04 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100;//嚙踝蕭?嚙? + local coolt_05 = obj.sq_GetLevelData(skill_index, 8, skill_level) * cooltime_Balance / 100;//3?嚙踝蕭 + local coolt_06 = obj.sq_GetLevelData(skill_index, 9, skill_level) * cooltime_Balance / 100;//?艉 + local coolt_07 = obj.sq_GetLevelData(skill_index, 10, skill_level) * cooltime_Balance / 100;//嚙踝蕭?嚙踝蕭? + local coolt_08 = 6000 * cooltime_Balance / 100;//嚙踝蕭?嚙踝蕭? + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 30) > 0){ + coolt_05 = coolt_05 - 500; + coolt_06 = coolt_06 - 500; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 31) > 0){ + coolt_05 = coolt_05 - 500; + coolt_06 = coolt_06 - 500; + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 32) > 0){ + coolt_05 = coolt_05 - 1000; + coolt_06 = coolt_06 - 1000; + } + } + + if(obj.sq_GetLevelData(skill_index, 14, skill_level) < 1){ + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + } + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + if(obj.sq_GetLevelData(skill_index, 16, skill_level) < 1){ + appendage.getVar("skill_3").clear_timer_vector(); + appendage.getVar("skill_3").push_timer_vector(); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + t_03.setParameter(coolt_03, -1); + t_03.resetInstant(0); + } + if(skill_level >= 5){ + appendage.getVar("skill_4").clear_timer_vector(); + appendage.getVar("skill_4").push_timer_vector(); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + t_04.setParameter(coolt_04, -1); + t_04.resetInstant(0); + appendage.getVar("skill_5").clear_timer_vector(); + appendage.getVar("skill_5").push_timer_vector(); + local t_05 = appendage.getVar("skill_5").get_timer_vector(0); + t_05.setParameter(coolt_05, -1); + t_05.resetInstant(0); + appendage.getVar("skill_6").clear_timer_vector(); + appendage.getVar("skill_6").push_timer_vector(); + local t_06 = appendage.getVar("skill_6").get_timer_vector(0); + t_06.setParameter(coolt_06, -1); + t_06.resetInstant(0); + } + if(skill_level >= 10){ + appendage.getVar("skill_7").clear_timer_vector(); + appendage.getVar("skill_7").push_timer_vector(); + local t_07 = appendage.getVar("skill_7").get_timer_vector(0); + t_07.setParameter(coolt_07, -1); + t_07.resetInstant(0); + } + appendage.getVar("skill_8").clear_timer_vector(); + appendage.getVar("skill_8").push_timer_vector(); + local t_08 = appendage.getVar("skill_8").get_timer_vector(0); + t_08.setParameter(coolt_08, -1); + t_08.resetInstant(0); + break; + case MONSTER_ID_SPIRITDARK: + case MONSTER_ID_SPIRITFIRE: + case MONSTER_ID_SPIRITLIGHT: + case MONSTER_ID_SPIRITWATER: + if(monster_id == MONSTER_ID_SPIRITFIRE){ + monster_obj.getVar("skill2").clear_vector(); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skill2").push_vector(0); + monster_obj.getVar("skill2").push_vector(0); + } + + local skill_level = sq_GetSkillLevel(obj, skill_index); + local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100; + local coolt_02 = coolt_01 * 3 * cooltime_Balance / 100; + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + local decreaseRate = 0; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) > 0) decreaseRate = decreaseRate - 10; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) decreaseRate = decreaseRate - 20; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) decreaseRate = decreaseRate - 20; + if(decreaseRate < 0) coolt_01 = coolt_01 * (100 + decreaseRate) / 100; + } + + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + t_01.setParameter(coolt_01, -1); + t_01.resetInstant(0); + appendage.getVar("skill_2").clear_timer_vector(); + appendage.getVar("skill_2").push_timer_vector(); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + t_02.setParameter(coolt_02, -1); + t_02.resetInstant(0); + break; + } +} + +function createPassiveObject_k_k(obj,monsterobj,skillIndex,subtype,x,y,z,pvector1,pvector2,pvector3,pvector4,pvector5) +{ + if(!obj || !monsterobj) return; + if(pvector1 == null) pvector1 = 0; + if(pvector2 == null) pvector2 = 0; + if(pvector3 == null) pvector3 = 0; + if(pvector4 == null) pvector4 = 0; + if(pvector5 == null) pvector5 = 0; + // local bonusRate = obj.getVar("summoners_bonusRate").get_vector(0).tofloat() / 1000.0; + //print("bonusRate = "+bonusRate); + // pvector1 = (pvector1.tofloat() * bonusRate).tointeger(); + if((skillIndex == SKILL_BYKK_SUMMONRAMOS && subtype == 41) || (skillIndex == 25 && subtype == 7) || (skillIndex == 46 && subtype == 6)) pvector2 = (pvector2.tofloat() * summoners_kuk_setbonusRate(obj).tofloat() / 1000.0).tointeger(); + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, monsterobj)){ + destX_01 = monsterobj.getXPos() - obj.getXPos(); + destY_01 = monsterobj.getYPos() - obj.getYPos(); + if(monsterobj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - monsterobj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pvector1); + sq_BinaryWriteDword(pvector2); + sq_BinaryWriteDword(pvector3); + sq_BinaryWriteDword(pvector4); + sq_BinaryWriteDword(pvector5); + sq_SendCreatePassiveObjectPacket(obj, 24381, 0, destX_01 + x, destY_01 + y, z - obj.getZPos(), monsterobj.getDirection()); +} + +function summonmonster_mage_plus_Kwk(obj,monsterobj,x,y,z,substate,monsterId,summontime,level,team) +{ + if(obj.getVar("Summonnum").size_vector() == 0){ + obj.getVar("Summonnum").clear_vector(); + obj.getVar("Summonnum").push_vector(0); + } + + sq_BinaryStartWrite(); + sq_BinaryWriteByte(substate); + sq_BinaryWriteDword(monsterId); + sq_BinaryWriteWord(team); + sq_BinaryWriteWord(level); + sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0)); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(summontime); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, monsterobj)){ + destX_01 = monsterobj.getXPos() - obj.getXPos(); + destY_01 = monsterobj.getYPos() - obj.getYPos(); + if(monsterobj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - monsterobj.getXPos(); + } + sq_SendCreatePassiveObjectPacket(obj, 48024, 0, destX_01 + x, destY_01 + y, z, monsterobj.getDirection()); + obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1); +} + +function monsterattack_ksk(monsterObj,attackIndex) +{ + if(!monsterObj) return; + local activeObj = sq_GetCNRDObjectToCollisionObject(monsterObj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_IntVectorPush(sq_GetGlobalIntVector(),attackIndex); + sq_AddSetStatePacketCollisionObject(activeObj, 8, sq_GetGlobalIntVector(), STATE_PRIORITY_USER, true); +} + + +function monsterpulled_bykkkkkkk(obj,monsterobj,x,y,z) +{ + local timer = obj.getVar("pulled").get_ct_vector(0); + if(!timer) return; + local currentT = timer.Get(); + //printp("currentT="+currentT.tostring()+"\n"); + if(currentT <= 2000) return; + timer.Reset();//嚙踝蕭嚙踝蕭嚙? + timer.Start(10000,0);//???嚙? + local objectManager = obj.getObjectManager(); + local objectNumber = objectManager.getCollisionObjectNumber(); + for(local i = 0; i < objectNumber; i++){ + local targetObj = objectManager.getCollisionObject(i); + if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut") && sq_Abs(targetObj.getXPos() - monsterobj.getXPos() + x) <= 300 && sq_Abs(targetObj.getYPos() - monsterobj.getYPos() + y) <= 150){ + local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut"; + local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, appendagePath, true); + if(MasterAppendage){ + sq_AccelMoveToAppendageForce(targetObj, obj, monsterobj, x, y, z, 500, true, MasterAppendage, true); + local validT = MasterAppendage.getAppendageInfo() + validT.setValidTime(2000); + } + } + } +} + +function creatdrawobject_kwk(obj,path,istrue,x,y,z,drawlayerkind) +{ + local ani = sq_CreateAnimation("",path); + local pooledObj = sq_CreatePooledObject(ani,istrue); + sq_SetCurrentDirection(pooledObj, obj.getDirection()); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayerkind); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function summoners_kuk_setbonusRate(obj) +{ + local bonusRate = 1000; + if(sq_GetSkillLevel(obj, 48) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,48, 1, sq_GetSkillLevel(obj, 48))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, 75) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,75, 3, sq_GetSkillLevel(obj, 75))) / 1000; + if(sq_GetSkillLevel(obj, 20) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,20, 18, sq_GetSkillLevel(obj, 20)) / 10) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_COMMUNION) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_COMMUNION, 0, sq_GetSkillLevel(obj, SKILL_BYKK_COMMUNION))) / 1000; + print("bonusRate3 = "+bonusRate); + //if(obj.getVar("summoners_bonusRate").getBool(0)) bonusRate = bonusRate + sq_GetLevelData(obj, 81, 5, sq_GetSkillLevel(obj, 81)); + // print("bonusRate4 = "+bonusRate); + if(obj.getVar("echeverra_buff").getBool(0)){ + local number = 0; + local monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + for(local i = 0; i < monster_Name.len(); i++){ + local monster_num = obj.getVar(monster_Name[i]).get_obj_vector_size(); + if(monster_num > 0) number = number + monster_num; + } + if(number >= 3) number = 3; + bonusRate = bonusRate * (1000 + number * 50) / 1000; + } + //print("bonusRate5 = "+bonusRate); + local monster_num = 0; + local num = 0; + local monster_Name = []; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && obj.getVar("AuxoObj").get_obj_vector_size() > 0) monster_Name = ["SandorObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","LuisObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0 && obj.getVar("LuisObj").get_obj_vector_size() > 0) monster_Name = ["SandorObj","AuxoObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0 && (obj.getVar("DarkhigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("LighthigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("WaterhigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("FirehigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("EcheverraObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && obj.getVar("BabydragonObj").get_obj_vector_size() > 0) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && (obj.getVar("KrutaObj").get_obj_vector_size() > 0 || obj.getVar("HodorObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if((sq_GetLevelData(obj, SKILL_BYKK_SUMMONCASILLAS, 18, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONCASILLAS)) > 0 && obj.getVar("CassillasObj").get_obj_vector_size() > 0) || (sq_GetLevelData(obj, SKILL_BYKK_SUMMONRAMOS, 26, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONRAMOS)) > 0 && obj.getVar("RamosObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if(monster_Name.len() > 0){ + for(local ui = 0; ui < monster_Name.len(); ui++){ + local number = obj.getVar(monster_Name[ui]).get_obj_vector_size(); + if(number > 0) num = num + number; + } + if(num < 1) bonusRate = bonusRate * (1000 + 500) / 1000; + } + //print("bonusRate6 = "+bonusRate); + if((sq_GetLevelData(obj, SKILL_BYKK_SUMMONCASILLAS, 19, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONCASILLAS)) > 0 && obj.getVar("CassillasObj").get_obj_vector_size() > 0) || (sq_GetLevelData(obj, SKILL_BYKK_SUMMONRAMOS, 27, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONRAMOS)) > 0 && obj.getVar("RamosObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + else monster_Name = []; + if(monster_Name.len() > 0){ + for(local ui = 0; ui < monster_Name.len(); ui++){ + local number = obj.getVar(monster_Name[ui]).get_obj_vector_size(); + if(number > 0) num = num + number; + } + if(num < 1) bonusRate = bonusRate * (1000 + 500) / 1000; + } + print("bonusRate final = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); +} + +function summonmonster_by_kwk(obj,skillIndex) +{ + if(!obj) return; + local state = 22; + switch(skillIndex){ + case SKILL_BYKK_SUMMONHODOR: + case SKILL_BYKK_SUMMONSANDOR: + case SKILL_BYKK_SUMMONAUXO: + case SKILL_BYKK_SUMMONLUIS: + case SKILL_BYKK_SUMMONBABYDRAGON: + case SKILL_BYKK_SUMMONCASILLAS: + case SKILL_BYKK_SUMMONKRUTA: + case SKILL_BYKK_SUMMONRAMOS: + state = 20; + break; + } + + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(state); + obj.sq_IntVectPush(skillIndex); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_IGNORE_FORCE, true); + return; +} + +function onStartDungeon_summoner_bykk(obj) +{ + if(!obj) return; + local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_MOONSHADOW); + setEclipsehive_summoner_bykk(obj); + summoners_kuk_setbonusRate(obj); +} + +function reset_summoner_bykk(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut"); + if(!addAppendage) return; + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut"); + setEclipsehive_summoner_bykk(obj); + summoners_kuk_setbonusRate(obj); +} + +function summoner_kak_monsterSkill(obj,skillIndex,monstername,attackIndex) +{ + if(!obj.isMyControlObject()) return; + local number = obj.getVar(monstername).get_obj_vector_size(); + if(number > 0 && !sq_GetSkill(obj, skillIndex).isInCoolTime()){ + if(obj.getVar("eclipsehive_select").getBool(0) == false) number = 0; + if(skillIndex == SKILL_BYKK_SUMMONSANDOR && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) > 0){ + local sub = sq_getRandom(1, 3); + local direction = sq_GetDirection(obj); + switch(sub){ + case 1: + for(local i = 0; i < number; i++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i)); + if(monsterObj){ + monsterObj.getVar("teleport").setInt(10, direction); + monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), direction, 50)); + monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj)); + monsterattack_ksk(monsterObj,attackIndex); + } + } + break; + case 2: + local randomnumber = sq_getRandom(0, 90); + for(local i = 0; i < number; i++){ + local angle = 360 / number * i + randomnumber; + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i)); + if(monsterObj){ + monsterObj.getVar("teleport").setInt(10, direction); + monsterObj.getVar("teleport").setInt(11, sq_GetXPos(obj) + x); + monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj) + y); + monsterattack_ksk(monsterObj,attackIndex); + } + } + break; + case 3: + for(local i = 0; i < number; i++){ + local x = 0, y = 10 * i; + if(i % 2 == 0) y = -y; + else y = 10 * (i + 1); + if(number % 2 == 0 && number > 5) x = -40 * (i / 2); + //print(x+" && "+y); + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i)); + if(monsterObj){ + monsterObj.getVar("teleport").setInt(10, direction); + monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), direction, 100 + x)); + monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj) + y); + monsterattack_ksk(monsterObj,attackIndex); + } + } + break; + } + } + else{ + for(local i = 0; i < number; i++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i)); + if(monsterObj){ + if(skillIndex == SKILL_BYKK_SUMMONKRUTA) monsterObj.getVar("skillIndex").set_vector(0, 4); + if(skillIndex == SKILL_BYKK_SUMMONSANDOR){ + monsterObj.getVar("teleport").setInt(10, obj.getDirection()); + monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50)); + monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj)); + } + monsterattack_ksk(monsterObj,attackIndex); + if(((skillIndex == 80 && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 29) > 0) || ((skillIndex == 45 || skillIndex == 46) && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0)) && obj.getVar("eclipsehive_select").getBool(0)){ + number = 1; + monsterObj.getVar("ronghe_bool").setBool(0, true); + break; + } + } + } + } + local state = obj.getState(); + if(state == 14 || state == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + // obj.startSkillCoolTime(skillIndex, sq_GetSkillLevel(obj, skillIndex), -1); + return 1; + } + return 0; +} + +function setEclipsehive_summoner_bykk(obj) +{ + local stage = sq_GetGlobaludpModuleStage(); + local mapIndex = sq_GetMapIndex(stage); + if(obj.getVar("map").getInt(10) == mapIndex || obj.getVar("map").getBool(0) == false){ + obj.getVar("map").setBool(0, true); + local skill = sq_GetSkill(obj, SKILL_BYKK_ECLIPSEHIVE), skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ECLIPSEHIVE); + if(skill.isSealFunction()){ + obj.getVar("eclipsehive_select").setBool(0, false); + obj.getVar("eclipsehive_bonus").setInt(10, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 6, skill_level)) / 10); + obj.getVar("eclipsehive_bonus").setInt(11, 100); + obj.getVar("eclipsehive_cooltime").setInt(10, 100); + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 16) > 0){ + obj.getVar("eclipsehive_bonus").setInt(10, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 6, skill_level)) / 10 + 8); + } + /*local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_eclipsehive.nut"); + if(addAppendage){ + local change_appendage = addAppendage.sq_getChangeStatus("eclipsehive"); + if(change_appendage) change_appendage.clearParameter(); + }*/ + local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"); + if(addAppendage2){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"); + //local skillLevel = sq_GetSkillLevel(obj, 2); + //local lifeTime = sq_GetLevelData(obj, 2, 0, skillLevel); + //addAppendage2.getAppendageInfo().setValidTime(lifeTime); + //addAppendage2.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, 2, skillLevel); + } + } + else{ + obj.getVar("eclipsehive_select").setBool(0, true); + obj.getVar("eclipsehive_bonus").setInt(10, (1000 - sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 4, skill_level)) / 10); + obj.getVar("eclipsehive_bonus").setInt(11, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 2, skill_level)) / 10); + obj.getVar("eclipsehive_cooltime").setInt(10, 100 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 3, skill_level)); + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 16) > 0){ + obj.getVar("eclipsehive_bonus").setInt(11, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 2, skill_level)) / 10 + 15); + } + /*local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_eclipsehive.nut"); + if(addAppendage){ + local skillLevel = obj.sq_GetSkillLevel(SKILL_BYKK_ECLIPSEHIVE); + local value1 = sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 0, skillLevel); + local change_appendage = addAppendage.sq_getChangeStatus("eclipsehive"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("eclipsehive",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -value1.tofloat()); + } + }*/ + local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"); + if(addAppendage2){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"); + } + } + } + else obj.getVar("map").setInt(10, mapIndex); +} + +function getImmuneTypeDamageRate_appendage_sandor_protect_bykk(appendage, damageRate, attacker) +{ + //print("damageRate = "+damageRate); + local newRate = 10; + return newRate; +} + +function startSkillCoolTime_summoner_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + local newCoolTime = 0; + switch(skillIndex){ + case 49: + if(obj.getVar("eclipsehive_select").getBool(0)){ + local decreaseRate = 0; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) > 0) decreaseRate = decreaseRate - 10; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) decreaseRate = decreaseRate - 10; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) decreaseRate = decreaseRate - 30; + if(decreaseRate < 0){ + newCoolTime = currentCoolTime * (100 + decreaseRate) / 100; + return newCoolTime; + } + } + else return currentCoolTime; + break; + case 46: + + break; + case 2: + print("currentCoolTime ="+currentCoolTime); + if(currentCoolTime < 40000) return 40000; + break; + } +} + +function onAfterSetState_Throw_summoner_bykk(obj, state, datas, isResetTimer) +{ + + local ThrowIndex = obj.getThrowIndex(); + local ThrowState = obj.getThrowState(); + + if(ThrowIndex == 49){ + if (obj.getThrowState() == 0){ + + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) > 0 && obj.getVar("eclipsehive_select").getBool(0)){ + + if(obj.getHp() < obj.getHpMax() * 5 / 100){ + if (obj.isMessage()) sq_AddMessage(3599); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + return; + } + else{ + obj.sq_SendSetHpPacket(obj.getHp() - obj.getHpMax() * 5 / 100, true, obj); + } + + local monstername = ["SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"], skillIndex = [53, 51, 54, 52], bonusNum = [20, 7, 26, 15]; + local num = 0; + local totalDamage = 0; + for(local ui = 0; ui < monstername.len(); ui++){ + local number = obj.getVar(monstername[ui]).get_obj_vector_size(); + if(number > 0){ + if(sq_GetSkillLevel(obj, skillIndex[ui]) > 0) + totalDamage = totalDamage + sq_GetLevelData(obj, skillIndex[ui], 1, sq_GetSkillLevel(obj, skillIndex[ui])) * number; + else + totalDamage = totalDamage + sq_GetLevelData(obj, 49, bonusNum[ui], sq_GetSkillLevel(obj, 49)) * number; + } + num = num + number; + } + + if(num > 0){ + local sizeRate = 100, bonusRate = 0; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){sizeRate = sizeRate + 10; bonusRate = bonusRate + 10;} + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){sizeRate = sizeRate + 20; bonusRate = bonusRate + 10;} + totalDamage = totalDamage * (100 + bonusRate) / 100; + // print("totalDamage = "+totalDamage); + createPassiveObject_k_k(obj, obj,SKILL_BYKK_SUMMONSPIRITCOMMON,2001,150,0,0,totalDamage,sizeRate,0,0,0); + } + return; + } + // print("test"); + local num = 0; + local monstername = ["SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + local monsternumber = [0,1,2,3]; + for(local ui = 0; ui < monstername.len(); ui++){ + local number = obj.getVar(monstername[ui]).get_obj_vector_size(); + if(number > 0){ + obj.getVar("sacrifice").setBool(monsternumber[ui], true); + for(local i = 0; i < number; i++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername[ui]).get_obj_vector(i)); + if(monsterObj){ + monsterattack_ksk(monsterObj,3); + num = num + 1; + } + } + } + } + if(num > 0 && sq_GetLevelData(obj, 49, 31, sq_GetSkillLevel(obj, 49)) > 0){ + obj.sq_SendSetHpPacket(obj.getHp() + obj.getHpMax() * 2 / 100 * num, true, obj); + obj.sq_SendSetMpPacket(obj.getHp() + obj.getMpMax() * 2 / 100 * num, true, obj); + } + } + } + else if(ThrowIndex == 81){ + if (obj.getThrowState() == 1){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_masterreckless.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_masterreckless.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 81, false, "character/mage/k_k_made/appendage/aptosummoner/ap_masterreckless.nut", true); + local rad = sq_GetLevelData(obj, 81, 5, sq_GetSkillLevel(obj, 81)) / 10; + obj.getVar("apGetSetbyKK").setInt(0, rad); + } + } +} + diff --git a/user/116.205.165.25/6_mage_9.c b/user/116.205.165.25/6_mage_9.c new file mode 100644 index 0000000..7879987 --- /dev/null +++ b/user/116.205.165.25/6_mage_9.c @@ -0,0 +1,1881 @@ + + +function createPassiveObjectEx_k_k(obj,monsterobj,targetObj,skillIndex,subtype,x,y,z,direction,pvector1,pvector2,pvector3,pvector4,pvector5) +{ + if(!obj || !monsterobj) return; + if(pvector1 == null) pvector1 = 0; + if(pvector2 == null) pvector2 = 0; + if(pvector3 == null) pvector3 = 0; + if(pvector4 == null) pvector4 = 0; + if(pvector5 == null) pvector5 = 0; + // local bonusRate = obj.getVar("summoners_bonusRate").get_vector(0).tofloat() / 1000.0; + //print("bonusRate = "+bonusRate); + // pvector1 = (pvector1.tofloat() * bonusRate).tointeger(); + if((skillIndex == SKILL_BYKK_SUMMONRAMOS && subtype == 41) || (skillIndex == 25 && subtype == 7) || (skillIndex == 46 && subtype == 6)) pvector2 = (pvector2.tofloat() * summoners_kuk_setbonusRate(obj).tofloat() / 1000.0).tointeger(); + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, monsterobj)){ + destX_01 = targetObj.getXPos() - obj.getXPos(); + destY_01 = targetObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - targetObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pvector1); + sq_BinaryWriteDword(pvector2); + sq_BinaryWriteDword(pvector3); + sq_BinaryWriteDword(pvector4); + sq_BinaryWriteDword(pvector5); + sq_SendCreatePassiveObjectPacket(obj, 24381, 0, destX_01 + x, destY_01 + y, z - obj.getZPos(), direction); +} + + +function checkExecutableSkill_Blacklunatic(obj) +{ + if(!obj) return false; + + local LuisObj = obj.getVar("LuisObj").get_obj_vector_size(); + if(LuisObj > 0){ + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_BLACKLUNATIC); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKLUNATIC, STATE_PRIORITY_USER, true); + return true; + } + } + else if(obj.isMessage()){ + sq_AddMessage(71099); + } + return false; +} + +function checkCommandEnable_Blacklunatic(obj) +{ + if(!obj) return false; + return true; +} + +function onSetState_Blacklunatic(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_StopMove(); + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local castTime = 200; + obj.getVar("caseTimE").clear_vector(); + obj.getVar("caseTimE").push_vector(castTime); + sq_StartDrawCastGauge(obj, castTime, true); + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_StopMove(); + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("R_WZ_BLACK_LUNATIC"); + obj.sq_PlaySound("BLACK_LUNATIC_START"); + local monsternum = obj.getVar("LuisObj").get_obj_vector_size(); + if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0 && monsternum > 2){ + for(local i = 2; i < monsternum; i++){ + local LuisObj = obj.getVar("LuisObj").get_obj_vector(i); + if(LuisObj) LuisObj.setValid(false); + } + } + if(monsternum > 0 && sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) < 1) monsternum = 1; + if(monsternum > 0){ + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLACKLUNATIC, -1, 0, 1.0) + 100; + createPassiveObject_k_k(obj,obj,SKILL_BYKK_BLACKLUNATIC,5,100,0,0,totalDamage,0,0,0,0); + } + for(local i = 0; i < monsternum; i++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar("LuisObj").get_obj_vector(i)); + if(monsterObj){ + //monsterObj.getVar("skill").setBool(0,true); + local yPos = obj.getYPos(); + local xPos = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 100); + sq_MoveToNearMovablePos(monsterObj, xPos, yPos, sq_GetZPos(monsterObj), xPos, yPos, sq_GetZPos(monsterObj), 100, -1, 5); + sq_SetCurrentDirection(monsterObj, obj.getDirection()); + monsterattack_ksk(monsterObj,11); + + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monsterObj, obj, 220, false, BLACKLUNATIC_APDPATH, true); + print("load");//" + local monsterAppendage = CNSquirrelAppendage.sq_GetAppendage(monsterObj, "character/mage/k_k_made/appendage/aptomonster/ap_luis.nut"); + if(monsterAppendage){ + local coolTime_01 = sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 22); + local coolTime_02 = sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 24); + local coolTime_03 = sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 23); + + if(obj.getVar("eclipsehive_select").getBool(0) == false){ + if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0){ + coolTime_01 = coolTime_01 * 50 / 100; + coolTime_02 = coolTime_02 * 50 / 100; + coolTime_03 = coolTime_03 * 50 / 100; + } + } + print("coolTime_01 = "+coolTime_01+" ,coolTime_02 = "+coolTime_02+" ,coolTime_03 = "+coolTime_03); + + monsterAppendage.getVar("skill_10").clear_timer_vector(); + monsterAppendage.getVar("skill_10").push_timer_vector(); + local t_02 = monsterAppendage.getVar("skill_10").get_timer_vector(0); + t_02.setParameter(coolTime_01, -1); + t_02.resetInstant(0); + monsterAppendage.getVar("skill_11").clear_timer_vector(); + monsterAppendage.getVar("skill_11").push_timer_vector(); + local t_03 = monsterAppendage.getVar("skill_11").get_timer_vector(0); + t_03.setParameter(coolTime_02, -1); + t_03.resetInstant(0); + monsterAppendage.getVar("skill_12").clear_timer_vector(); + monsterAppendage.getVar("skill_12").push_timer_vector(); + local t_04 = monsterAppendage.getVar("skill_12").get_timer_vector(0); + t_04.setParameter(coolTime_03, -1); + t_04.resetInstant(0); + } + } + } + break; + } +} + +function onEndCurrentAni_Blacklunatic(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + obj.setSkillSubState(substate); + switch(substate){ + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_Blacklunatic(obj, new_state) +{ + if(!obj) return; + if(new_state != 139) sq_EndDrawCastGauge(obj); +} + +function onProcCon_Blacklunatic(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + local casttime = obj.getVar("caseTimE").get_vector(0); + if(substate == 0){ + if(obj.sq_GetStateTimer() >= casttime){ + sq_EndDrawCastGauge(obj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKLUNATIC, STATE_PRIORITY_USER, true); + } + } +} + +function procAppend_Summoner_bykk(obj) +{ + // if(!sq_GetSkill(obj, SKILL_BYKK_BLACKLUNATIC).isInCoolTime() && obj.getVar("LuisObj").get_obj_vector_size() > 0 && obj.isMyControlObject()){ + // local monsternum = obj.getVar("LuisObj").get_obj_vector_size(); + // if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0 && monsternum > 2){ + // for(local i = 2; i < monsternum; i++){ + // local LuisObj = obj.getVar("LuisObj").get_obj_vector(i); + // if(LuisObj) LuisObj.setValid(false); + // } + // } + // if(monsternum > 0 && false) monsternum = 1; + // if(monsternum > 0){ + // local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLACKLUNATIC, -1, 0, 1.0) + 100; + // local LuisObj = obj.getVar("LuisObj").get_obj_vector(0); + // createPassiveObject_k_k(obj,LuisObj,SKILL_BYKK_BLACKLUNATIC,5,0,0,0,totalDamage,0,0,0,0); + // } + // for(local i = 0; i < monsternum; i++){ + // local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar("LuisObj").get_obj_vector(i)); + // if(monsterObj){ + // //monsterObj.getVar("skill").setBool(0,true); + // // local yPos = obj.getYPos(); + // // local xPos = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 100); + // // sq_MoveToNearMovablePos(monsterObj, xPos, yPos, sq_GetZPos(monsterObj), xPos, yPos, sq_GetZPos(monsterObj), 100, -1, 5); + // // sq_SetCurrentDirection(monsterObj, obj.getDirection()); + // monsterattack_ksk(monsterObj,11); + + // local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monsterObj, obj, 220, false, BLACKLUNATIC_APDPATH, true); + // print("load");//" + // local monsterAppendage = CNSquirrelAppendage.sq_GetAppendage(monsterObj, "character/mage/k_k_made/appendage/aptomonster/ap_luis.nut"); + // if(monsterAppendage){ + // local coolTime_01 = sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 22); + // local coolTime_02 = sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 24); + // local coolTime_03 = sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 23); + + // if(obj.getVar("eclipsehive_select").getBool(0) == false){ + // if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0){ + // coolTime_01 = coolTime_01 * 70 / 100; + // coolTime_02 = coolTime_02 * 70 / 100; + // coolTime_03 = coolTime_03 * 70 / 100; + // } + // } + // print("coolTime_01 = "+coolTime_01+" ,coolTime_02 = "+coolTime_02+" ,coolTime_03 = "+coolTime_03); + + // monsterAppendage.getVar("skill_10").clear_timer_vector(); + // monsterAppendage.getVar("skill_10").push_timer_vector(); + // local t_02 = monsterAppendage.getVar("skill_10").get_timer_vector(0); + // t_02.setParameter(coolTime_01, -1); + // t_02.resetInstant(0); + // monsterAppendage.getVar("skill_11").clear_timer_vector(); + // monsterAppendage.getVar("skill_11").push_timer_vector(); + // local t_03 = monsterAppendage.getVar("skill_11").get_timer_vector(0); + // t_03.setParameter(coolTime_02, -1); + // t_03.resetInstant(0); + // monsterAppendage.getVar("skill_12").clear_timer_vector(); + // monsterAppendage.getVar("skill_12").push_timer_vector(); + // local t_04 = monsterAppendage.getVar("skill_12").get_timer_vector(0); + // t_04.setParameter(coolTime_03, -1); + // t_04.resetInstant(0); + // t_04.setEventOnStart(true); + // } + // } + // } + // obj.startSkillCoolTime(SKILL_BYKK_BLACKLUNATIC, sq_GetSkillLevel(obj, SKILL_BYKK_BLACKLUNATIC), -1); + // } +} + + +function onStart_appendage_luis_blacklunatic(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + local sqrChr = appendage.getSource(); + sqrChr = sq_GetCNRDObjectToSQRCharacter(sqrChr); + if (!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + + local group = sq_GetGroup(parentObj);//组 + local uniqueId = sq_GetUniqueId(parentObj);//唯一ID + local skillLevel = sq_GetSkillLevel(sqrChr, 220); + local lifeTime = sq_GetIntData(sqrChr, 220, 2); + if(sq_GetIntData(sqrChr, 220, 51) > 0 && sq_GetIntData(sqrChr, 220, 52) > 0) lifeTime = lifeTime + 5000; + appendage.sq_SetValidTime(lifeTime + 1100); + + if(sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 53) > 0){ + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 53).tofloat() , 0); + if (ap){ + ap.getAppendageInfo().setValidTime(lifeTime); + ap.sq_Append(parentObj, sqrChr); + } + } + + sqrChr.sq_SetSuperArmorUntilTime(parentObj, lifeTime + 1100); + local subliftTime_01 = lifeTime - lifeTime / 5 * (4); + local subliftTime_02 = lifeTime - lifeTime / 5 * (3); + local subliftTime_03 = lifeTime - lifeTime / 5 * (0); + local subliftTime_04 = lifeTime - lifeTime / 5 * (1); + local subliftTime_05 = lifeTime - lifeTime / 5 * (2); + local subliftTime = [0,subliftTime_01,subliftTime_02,subliftTime_03,subliftTime_04,subliftTime_05]; + for(local i = 1; i < 6; i++){ + createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONLUIS,10,0,-1,20,i,subliftTime[i],group,uniqueId,0); + } +} + +function onEnd_appendage_luis_blacklunatic(appendage) +{ + if (!appendage) return; +} + +function onDamageParent_appendage_luis_blacklunatic(appendage ,attacker, boundingBox, isStuck) +{ + if (!appendage) return; +} + +function drawAppend_appendage_luis_blacklunatic(appendage, isOver, x, y, isFlip) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if (!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } +} + + + +//至高精灵王 +function checkExecutableSkill_HighestEcheverra(obj) +{ + if (!obj) return false; + local monsternum = obj.getVar("EcheverraObj").get_obj_vector_size(); + if(monsternum <= 0){ + if(obj.isMessage()) sq_AddMessage(71099); + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HIGHESTECHEVERRA); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_HIGHESTECHEVERRA, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HighestEcheverra(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HighestEcheverra(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(299); break; + case 1: obj.sq_SetCurrentAnimation(300); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + if(subState == 1) speedRate = 4000 / currentAni.getDelaySum(0, 0); + print("speedRate = "+speedRate); + if(speedRate >= 150) currentAni.setSpeedRate(150.0); +} + +function onEndCurrentAni_HighestEcheverra(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_HIGHESTECHEVERRA, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_HighestEcheverra(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_HighestEcheverra(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1010: + sq_SetMyShake(obj, 5, 150); + //`camera move` + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(10, 14); + obj.sq_SetXScrollStart(300, delay); + break; + case 1011: + local EcheverraObj = obj.getVar("EcheverraObj").get_obj_vector(0); + if(EcheverraObj && EcheverraObj.getState() != STATE_DIE){ + local monsterObj = sq_GetCNRDObjectToActiveObject(EcheverraObj); + monsterObj.getVar("teleport").setInt(10, obj.getDirection()); + monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50)); + monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj)); + monsterObj.getVar("isHighestEcheverra").setBool(0, true); + monsterattack_ksk(monsterObj,5); + } + //`hide` + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + print("speedRate2 = "+speedRate); + createPassiveObject_k_k(obj,obj,SKILL_BYKK_HIGHESTECHEVERRA,3,0,20,20,speedRate,0,0,0,0); + break; + case 2002://`laser` + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local offset = [[-100,-5,180,60,100],[-31,5,271,45,100],[-33,1,358,80,100],[20,0,250,45,100],[54,-3,308,50,100],[110,-2,300,55,100],[100,1,425,70,100]]; + local angle = [2303,4581,2794,3666,4582,3714,4212]; + local aniPath = "character/mage/animation/summoner_bykk/effect/highestecheverra/laser/laser_body_1.ani"; + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + local alsName = [10002, 10004, 10006, 10007, 10010]; + for(local i = 0; i < 7; i++){ + local offsetX = sq_GetDistancePos(xPos, direction, offset[i][0] + 100); + local pooledObj = createOnlyDrawObjectEX_HighestEcheverra_bykk(obj,aniPath,true,direction, offsetX, yPos + offset[i][1], offset[i][2],ENUM_DRAWLAYER_NORMAL,100,100); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-angle[i].tofloat() / 100.0)); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + for(local ui = 0; ui < 10; ui++){ + local aniPath = "character/mage/animation/summoner_bykk/effect/highestecheverra/laser/laser_0"+(ui+1).tostring()+".ani"; + if(ui == 9) aniPath = "character/mage/animation/summoner_bykk/effect/highestecheverra/laser/laser_"+(ui+1).tostring()+".ani"; + local pooledObj = createOnlyDrawObjectEX_HighestEcheverra_bykk(obj,aniPath,true,direction, offsetX, yPos + offset[i][1] + ui + 1, offset[i][2] + ui + 1,ENUM_DRAWLAYER_NORMAL,offset[i][3],offset[i][4]); + sq_SetCustomRotate(pooledObj, sq_ToRadian(-angle[i].tofloat() / 100.0)); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + } + local aniPath = "character/mage/animation/summoner_bykk/effect/highestecheverra/lasersik/bottom/highestecheverra_floorsik.ani"; + local baseX = 50; + local offset = [[350,-5],[300,20],[400,0],[250,18],[325,20],[500,20],[550,15]]; + for(local i = 0; i < offset.len(); i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, offset[i][0] + baseX, offset[i][1], 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + break; + case 2005://`laserAttackStart` + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HIGHESTECHEVERRA, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_HIGHESTECHEVERRA, 1); + createPassiveObject_k_k(obj,obj,SKILL_BYKK_HIGHESTECHEVERRA,1,150,0,0,totalDamage,hitMax,speedRate,0,0); + break; + case 2015:// + sq_SetMyShake(obj, 20, 450); + //`explosion` + obj.sq_PlaySound("HIGHEST_ECHEVERRA_EXP"); + obj.sq_PlaySound("WZ_HIGHEST_ECHEVERRA_01_3"); + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HIGHESTECHEVERRA, -1, 1, 1.0); + createPassiveObject_k_k(obj,obj,SKILL_BYKK_HIGHESTECHEVERRA,2,450,0,0,totalDamage,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_HighestEcheverra(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_HighestEcheverra(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_HIGHESTECHEVERRA){ + obj.sq_SetXScrollStop(500); + } +} + +function createOnlyDrawObjectEX_HighestEcheverra_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + + +//束缚印记 +function checkExecutableSkill_ThrowStickyTrap(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(150); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(150, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ThrowStickyTrap(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ThrowStickyTrap(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(301); + break; + case 1: + obj.sq_SetCurrentAnimation(302); + // obj.sq_PlaySound("R_WZ_THROWST"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_ThrowStickyTrap(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(150, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ThrowStickyTrap(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_ThrowStickyTrap(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("WZ_STICKY"); + obj.sq_PlaySound("STICKY_READY"); + break; + case 2: + local totalDamage = sq_GetBonusRateWithPassive(obj, 150, -1, 0, 1.0); + local holdTime = sq_GetBonusRateWithPassive(obj, 150, -1, 1, 1.0) + 100; + createPassiveObject_k_k(obj,obj,150,1,100,0,70,totalDamage,holdTime,0,0,0); + break; + } + return true; +} + +function onTimeEvent_ThrowStickyTrap(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ThrowStickyTrap(obj, new_state) +{ + if(!obj) return; +} + +function drawAppend_appendage_throwstickytrap_hold(appendage, isOver, x, y, isFlip) +{ + local var = appendage.getVar(); + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + //自定义ani + local Ani = var.GetAnimationMap("throwstickytrap_hold", "character/mage/animation/summoner_bykk/effect/throwstickytrap/throwglue_glueloop01.ani"); + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y - 60, isFlip); +} + + +//////////////////////////////////// +function checkExecutableSkill_SummonHodor(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + if(sq_getGrowType(obj) == 2){ + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONHODOR,"HodorObj",10); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONHODOR); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONHODOR); + return true; + } + } + return false; +} + +function checkExecutableSkill_SummonSandor(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONSANDOR,"SandorObj",6); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSANDOR); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONSANDOR); + } + return false; +} + +function checkExecutableSkill_SummonAuxo(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONAUXO,"AuxoObj",5); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONAUXO); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONAUXO); + } + return false; +} + +function checkExecutableSkill_SummonLuis(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONLUIS,"LuisObj",6); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONLUIS); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONLUIS); + } + return false; +} + +function checkExecutableSkill_SummonEcheverra(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONECHEVERRA,"EcheverraObj",5); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONECHEVERRA); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONECHEVERRA); + } + return false; +} + +function checkExecutableSkill_SummonSpiritDarkHigher(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,"DarkhigherspiritObj",4); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITDARKHIGHER); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER); + } + return false; +} + +function checkExecutableSkill_SummonSpiritLightHigher(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,"LighthigherspiritObj",4); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER); + } + return false; +} + +function checkExecutableSkill_SummonSpiritWaterHigher(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,"WaterhigherspiritObj",4); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITWATERHIGHER); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER); + } + return false; +} + +function checkExecutableSkill_SummonSpiritFireHigher(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,"FirehigherspiritObj",4); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITFIREHIGHER); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER); + } + return false; +} + +function checkExecutableSkill_SummonBabyDragon(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONBABYDRAGON,"BabydragonObj",7); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONBABYDRAGON); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONBABYDRAGON); + } + return false; +} + +function checkExecutableSkill_SummonCasillas(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONCASILLAS,"CassillasObj",4); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONCASILLAS); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONCASILLAS); + } + return false; +} + +function checkExecutableSkill_SummonSandorEx(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSANDOREX); + if(b_useskill){ + // summoner_monsterskill_bykk(obj,"SandorexObj",4,SKILL_BYKK_SUMMONSANDOREX,1); + return true; + } + return false; +} + +function checkExecutableSkill_SummonHeilrom(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONHEILROM,"HeilromObj",0); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONHEILROM); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONHEILROM); + } + return false; +} + +function checkExecutableSkill_SummonSpiritFireEx(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITFIREEX); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONSPIRITFIREEX); + } + return false; +} + +function checkExecutableSkill_SummonKruta(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONKRUTA,"KrutaObj", 13); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONKRUTA); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONKRUTA); + } + return false; +} + +function checkExecutableSkill_SummonRamos(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local isTrue = summoner_kak_monsterSkill(obj,SKILL_BYKK_SUMMONRAMOS,"RamosObj",17); + if(isTrue == 1) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONRAMOS); + if(b_useskill){ + summonmonster_by_kwk(obj,SKILL_BYKK_SUMMONRAMOS); + } + return false; +} + +function checkExecutableSkill_SummonSpiritFire(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local monsternum = obj.getVar("SpiritFireObj").get_obj_vector_size(); + if(monsternum > 0){ + local state = obj.getState(); + if(state == 14 || state == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.startCantUseSkillWarning(); + if (obj.isMessage()) sq_AddMessage(2); + return true; + } + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITFIRE); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(22); + obj.sq_IntVectPush(SKILL_BYKK_SUMMONSPIRITFIRE); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkExecutableSkill_SummonSpiritWater(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local monsternum = obj.getVar("SpiritWaterObj").get_obj_vector_size(); + if(monsternum > 0){ + local state = obj.getState(); + if(state == 14 || state == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.startCantUseSkillWarning(); + if (obj.isMessage()) sq_AddMessage(2); + return true; + } + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITWATER); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(22); + obj.sq_IntVectPush(SKILL_BYKK_SUMMONSPIRITWATER); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkExecutableSkill_SummonSpiritDark(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local monsternum = obj.getVar("SpiritDarkObj").get_obj_vector_size(); + if(monsternum > 0){ + local state = obj.getState(); + if(state == 14 || state == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.startCantUseSkillWarning(); + if (obj.isMessage()) sq_AddMessage(2); + return true; + } + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITDARK); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(22); + obj.sq_IntVectPush(SKILL_BYKK_SUMMONSPIRITDARK); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkExecutableSkill_SummonSpiritLight(obj) +{ + if(!obj) return false; + if(!obj.isMyControlObject()) return false; + local monsternum = obj.getVar("SpiritLightObj").get_obj_vector_size(); + if(monsternum > 0){ + local state = obj.getState(); + if(state == 14 || state == 0){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.startCantUseSkillWarning(); + if (obj.isMessage()) sq_AddMessage(2); + return true; + } + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONSPIRITLIGHT); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(22); + obj.sq_IntVectPush(SKILL_BYKK_SUMMONSPIRITLIGHT); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkExecutableSkill_RingOfDomination(obj) +{ + if (!obj) return false; + if(!obj.isMyControlObject()) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RINGOFDOMINATION); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_USER, true); + return true; + } + return false; +} + +function checkCommandEnable_RingOfDomination(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == STATE_STAND) return true; + if(state == STATE_ATTACK){ + return obj.sq_IsCommandEnable(SKILL_BYKK_RINGOFDOMINATION); + } + return true; +} + +function onSetState_RingOfDomination(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local direction = obj.getDirection();//嚙踝蕭嚙踝蕭菾嚙踝蕭 + local xpos = sq_GetDistancePos(obj.getXPos(), direction, 185);//嚙踝蕭嚙踝蕭菾嚙踝蕭嚙踝蕭pos + local ypos = obj.getYPos(); + onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/start/rodstarta_p01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/start/rodstartringa_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/start/rodstartringb_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + sq_SetCustomDamageType(obj, true, 1); + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.getVar("monster_enum").clear_vector(); + obj.getVar("monster_enum").push_vector(0); + obj.setTimeEvent(1001,900,1,false); + obj.sq_PlaySound("R_RING_DOMINATION_01"); + obj.getVar("map").setBool(0, false); + setEclipsehive_summoner_bykk(obj); + break; + case 1: + obj.sq_SetCurrentAnimation(68); + obj.setTimeEvent(1002,900,1,false); + break; + case 2: + RemoveAllAni_RingOfDomination(obj); + local direction = obj.getDirection();//嚙踝蕭嚙踝蕭菾嚙踝蕭 + local xpos = sq_GetDistancePos(obj.getXPos(), direction, 185);//嚙踝蕭嚙踝蕭菾嚙踝蕭嚙踝蕭pos + local ypos = obj.getYPos(); + onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/end/rodendringa_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/end/rodendringb_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_RING_DOMINATION_02"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 20://嚙踝蕭?嚙?1 + local skillIndex = sq_GetVectorData(datas, 1); + obj.getVar("sm_skindex").clear_vector(); + obj.getVar("sm_skindex").push_vector(skillIndex); + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + switch(skillIndex){ + case SKILL_BYKK_SUMMONAUXO: + obj.sq_PlaySound("WZ_INVOKE_AUXO"); + break; + case SKILL_BYKK_SUMMONHODOR: + obj.sq_PlaySound("WZ_INVOKE"); + break; + case SKILL_BYKK_SUMMONSANDOR: + obj.sq_PlaySound("WZ_INVOKE_SANDOR"); + break; + case SKILL_BYKK_SUMMONLUIS: + obj.sq_PlaySound("WZ_INVOKE_LUIS"); + break; + case SKILL_BYKK_SUMMONBABYDRAGON: + obj.sq_PlaySound("WZ_INVOKE_FREET"); + break; + case SKILL_BYKK_SUMMONKRUTA: + obj.sq_PlaySound("WZ_SUMMON_KRUTA"); + break; + case SKILL_BYKK_SUMMONCASILLAS: + obj.sq_PlaySound("WZ_CASILLAS"); + break; + case SKILL_BYKK_SUMMONRAMOS: + obj.sq_PlaySound("WZ_RAMOS"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT,SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 21://嚙踝蕭?嚙?2 + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + local monster_level = sq_GetSkillLevel(obj, 174); + local monster_time = 3600000; + local skillIndex = obj.getVar("sm_skindex").get_vector(0); + switch(skillIndex){ + case SKILL_BYKK_SUMMONAUXO: + local skill = sq_GetSkill(obj, SKILL_BYKK_SUMMONAUXO); + local montser_id = MONSTER_ID_AUXO; + local subtype = 15; + if(skill.isSealFunction()){montser_id = MONSTER_ID_AUXOOLD; subtype = 5;} + local seedNumber = sq_GetLevelData(obj, SKILL_BYKK_SUMMONAUXO, 8, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONAUXO)); + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,0,montser_id,monster_time,monster_level,0); + if(seedNumber > 0) createPassiveObject_k_k(obj,obj,45,subtype,100,0,70,0,0,0,0,0); + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONAUXO, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONAUXO)) > 1){ + local num_max = sq_GetLevelData(obj, SKILL_BYKK_SUMMONAUXO, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONAUXO)) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,0,montser_id,monster_time,monster_level,0); + if(seedNumber > 0) createPassiveObject_k_k(obj,obj,45,subtype,x,y,70,0,0,0,0,0); + } + } + // local skill02 = sq_GetSkill(obj, 45); + // local prob = obj.sq_GetIntData(45, 10); + // if(sq_getRandom(0,99) >= 100 - prob){ + // local subtype = 5; + // if(!skill02.isSealFunction()) subtype = 15; + // for(local i = 0; i < 6; i++){ + // createPassiveObject_k_k(obj,obj,45,subtype,100,0,70,0,0,0,0,0); + // } + // } + break; + case SKILL_BYKK_SUMMONHODOR: + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,0,MONSTER_ID_HODOR,monster_time,monster_level,0); + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONHODOR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONHODOR)) > 1){ + local num_max = sq_GetLevelData(obj, SKILL_BYKK_SUMMONHODOR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONHODOR)) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,0,MONSTER_ID_HODOR,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONSANDOR: + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,0,MONSTER_ID_SANDOR,monster_time,monster_level,0); + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONSANDOR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONSANDOR)) > 1){ + local num_max = sq_GetLevelData(obj, SKILL_BYKK_SUMMONSANDOR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONSANDOR)) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,0,MONSTER_ID_SANDOR,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONLUIS: + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,0,MONSTER_ID_LUIS,monster_time,monster_level,0); + if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 50) > 0){ + summonmonster_mage_plus_Kwk(obj,obj,145,0,0,0,MONSTER_ID_LUIS,monster_time,monster_level,0); + break; + } + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONLUIS, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONLUIS)) > 1){ + local num_max = sq_GetLevelData(obj, SKILL_BYKK_SUMMONLUIS, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONLUIS)) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,145 + i * 45,y,0,0,MONSTER_ID_LUIS,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONBABYDRAGON: + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,0,MONSTER_ID_BABYDRAGON,monster_time,monster_level,0); + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONBABYDRAGON, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONBABYDRAGON)) > 1){ + local num_max = sq_GetLevelData(obj, SKILL_BYKK_SUMMONBABYDRAGON, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONBABYDRAGON)) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,0,MONSTER_ID_BABYDRAGON,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONKRUTA: + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,0,MONSTER_ID_KRUTA,monster_time,monster_level,0); + //print(sq_GetLevelData(obj, SKILL_BYKK_SUMMONKRUTA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONKRUTA))); + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONKRUTA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONKRUTA)) > 1){ + local num_max = sq_GetLevelData(obj, SKILL_BYKK_SUMMONKRUTA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONKRUTA)) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,0,MONSTER_ID_KRUTA,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONCASILLAS: + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,6,MONSTER_ID_CASILLAS,monster_time,monster_level,0); + if(sq_GetLevelData(obj, SKILL_BYKK_SUMMONCASILLAS, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONCASILLAS)) > 1){ + for(local i = 0; i < sq_GetLevelData(obj, SKILL_BYKK_SUMMONCASILLAS, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONCASILLAS)) - 1; i++){ + summonmonster_mage_plus_Kwk(obj,obj,145 + i * 45,0,0,0,MONSTER_ID_CASILLAS,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONRAMOS: + createPassiveObject_k_k(obj,obj,SKILL_BYKK_SUMMONRAMOS,200,100,0,0,0,0,0,0,0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT,SPEED_VALUE_DEFAULT, 2.0, 2.0); + break; + case 22://嚙踝蕭?嚙?1 + local skillIndex = sq_GetVectorData(datas, 1); + obj.getVar("sm_skindex").clear_vector(); + obj.getVar("sm_skindex").push_vector(skillIndex); + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT,SPEED_VALUE_DEFAULT, 2.0, 2.0); + break; + case 23://嚙踝蕭?嚙?2 + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + local skillIndex = obj.getVar("sm_skindex").get_vector(0); + local monster_level = sq_GetSkillLevel(obj, 174); + local monster_time = 3600000; + local montser_id = MONSTER_ID_ECHEVERRA; + local summonsub = 0; + switch(skillIndex){ + case SKILL_BYKK_SUMMONECHEVERRA: + obj.sq_PlaySound("WZ_INVOKE_ECHEVERRA"); + break; + case SKILL_BYKK_SUMMONSPIRITDARKHIGHER: + obj.sq_PlaySound("WZ_SUMMON_DMURKER"); + montser_id = MONSTER_ID_DARKHIGHERSPIRIT; + break; + case SKILL_BYKK_SUMMONSPIRITFIREHIGHER: + obj.sq_PlaySound("WZ_SUMMON_FHULK"); + montser_id = MONSTER_ID_FIREHIGHERSPIRIT; + break; + case SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER: + obj.sq_PlaySound("WZ_SUMMON_GLARINE"); + montser_id = MONSTER_ID_LIGHTHIGHERSPIRIT; + break; + case SKILL_BYKK_SUMMONSPIRITWATERHIGHER: + obj.sq_PlaySound("WZ_SUMMON_AQUARESS"); + montser_id = MONSTER_ID_WATERHIGHERSPIRIT; + break; + case SKILL_BYKK_SUMMONHEILROM: + obj.sq_PlaySound("WZ_SUMMON_HEILROM"); + montser_id = MONSTER_ID_HEILROM; + break; + case SKILL_BYKK_SUMMONSPIRITFIRE: + obj.sq_PlaySound("WZ_SUMMON_ADOR"); + montser_id = MONSTER_ID_SPIRITFIRE; + summonsub = 1; + break; + case SKILL_BYKK_SUMMONSPIRITWATER: + obj.sq_PlaySound("WZ_SUMMON_NIAS"); + montser_id = MONSTER_ID_SPIRITWATER; + summonsub = 2; + break; + case SKILL_BYKK_SUMMONSPIRITDARK: + obj.sq_PlaySound("WZ_SUMMON_STALKER"); + montser_id = MONSTER_ID_SPIRITDARK; + summonsub = 3; + break; + case SKILL_BYKK_SUMMONSPIRITLIGHT: + obj.sq_PlaySound("WZ_SUMMON_WISP"); + montser_id = MONSTER_ID_SPIRITLIGHT; + summonsub = 4; + break; + } + local sizeRate = obj.sq_GetIntData(skillIndex, 5).tofloat() / 490.0; + for(local i = 1; i < 5; i++){ + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/summonspirit"+i.tostring()+".ani", 0, -1, -1); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + } + summonmonster_mage_plus_Kwk(obj,obj,100,0,0,summonsub,montser_id,monster_time,monster_level,0); + + switch(skillIndex){ + case SKILL_BYKK_SUMMONECHEVERRA: + case SKILL_BYKK_SUMMONSPIRITDARKHIGHER: + case SKILL_BYKK_SUMMONSPIRITFIREHIGHER: + case SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER: + case SKILL_BYKK_SUMMONSPIRITWATERHIGHER: + local skill_level = sq_GetSkillLevel(obj, skillIndex); + if(sq_GetLevelData(obj, skillIndex, 2, skill_level) > 1){ + local num_max = sq_GetLevelData(obj, skillIndex, 2, skill_level) - 1 + for(local i = 0; i < num_max; i++){ + local angle = 360 / num_max * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,0,montser_id,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONSPIRITFIRE: + local skill_level1 = sq_GetSkillLevel(obj, 51); + local skill_level2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONSPIRITFIRE); + local number = sq_GetLevelData(obj, 51, 9, skill_level1); + local min_level = sq_GetLevelData(obj, 51, 10, skill_level1); + if(skill_level2 >= min_level){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1){ + for(local i = 0; i < number; i++){ + summonmonster_mage_plus_Kwk(obj,obj,100 + (i + 1) * 40,0,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + } + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local add_number = sq_GetLevelData(obj, skillIndex, 2, skill_level); + if(add_number > 1){ + for(local i = 0; i < add_number - 1; i++){ + local angle = 360 / add_number * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONSPIRITWATER: + local skill_level1 = sq_GetSkillLevel(obj, 52); + local skill_level2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONSPIRITWATER); + local number = sq_GetLevelData(obj, 52, 5, skill_level1); + local min_level = sq_GetLevelData(obj, 52, 6, skill_level1); + if(skill_level2 >= min_level){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1){ + for(local i = 0; i < number; i++){ + summonmonster_mage_plus_Kwk(obj,obj,100 + (i + 1) * 40,0,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + } + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local add_number = sq_GetLevelData(obj, skillIndex, 2, skill_level); + if(add_number > 1){ + for(local i = 0; i < add_number - 1; i++){ + local angle = 360 / add_number * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONSPIRITDARK: + local skill_level1 = sq_GetSkillLevel(obj, 53); + local skill_level2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONSPIRITDARK); + local number = sq_GetLevelData(obj, 53, 6, skill_level1); + local min_level = sq_GetLevelData(obj, 53, 7, skill_level1); + if(skill_level2 >= min_level){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1){ + for(local i = 0; i < number; i++){ + summonmonster_mage_plus_Kwk(obj,obj,100 + (i + 1) * 40,0,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + } + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local add_number = sq_GetLevelData(obj, skillIndex, 2, skill_level); + if(add_number > 1){ + for(local i = 0; i < add_number - 1; i++){ + local angle = 360 / add_number * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + break; + case SKILL_BYKK_SUMMONSPIRITLIGHT: + local skill_level1 = sq_GetSkillLevel(obj, 54); + local skill_level2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONSPIRITLIGHT); + local number = sq_GetLevelData(obj, 54, 6, skill_level1); + local min_level = sq_GetLevelData(obj, 54, 7, skill_level1); + if(skill_level2 >= min_level){ + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1){ + for(local i = 0; i < number; i++){ + summonmonster_mage_plus_Kwk(obj,obj,100 + (i + 1) * 40,0,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + } + local skill_level = sq_GetSkillLevel(obj, skillIndex); + local add_number = sq_GetLevelData(obj, skillIndex, 2, skill_level); + if(add_number > 1){ + for(local i = 0; i < add_number - 1; i++){ + local angle = 360 / add_number * (i + 1); + local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger(); + local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); + summonmonster_mage_plus_Kwk(obj,obj,x,y,0,summonsub,montser_id,monster_time,monster_level,0); + } + } + break; + } + break; + case 31: + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + break; + case 32: + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + break; + } +} + +function onProcCon_RingOfDomination(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + if(substate <= 1){ + if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onEndCurrentAni_RingOfDomination(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_USER, true); + break; + case 2: + sq_SetCustomDamageType(obj, true, 0); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 20: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(21); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_USER, true); + break; + case 21: + case 23: + case 32: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + case 22: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(23); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_USER, true); + break; + case 31: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(32); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_USER, true); + break; + } +} + +function onEndState_RingOfDomination(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_RINGOFDOMINATION){ + RemoveAllAni_RingOfDomination(obj); + sq_SetCustomDamageType(obj, true, 0); + } +} + +function onTimeEvent_RingOfDomination(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + + if(!obj.isMyControlObject()) return false; + + if(timeEventIndex == 1001){ + local direction = obj.getDirection();//嚙踝蕭嚙踝蕭菾嚙踝蕭 + local xpos = sq_GetDistancePos(obj.getXPos(), direction, 185);//嚙踝蕭嚙踝蕭菾嚙踝蕭嚙踝蕭pos + local ypos = obj.getYPos(); + local pooledobj_01 = onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/loop/rodloopringa_01.ani", xpos, ypos, ENUM_DRAWLAYER_COVER); + local pooledobj_02 = onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/loop/rodloopringb_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + local pooledobj_03 = onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/loop/rodsummoneffa_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + local pooledobj_04 = onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/loop/rodsummoneffb_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + local pooledobj_05 = onAddPooledObj_RingOfDomination(obj, "passiveobject/madeby_k_k/animation/ringofdomination/loop/rodsummonefffloor_01.ani", xpos, ypos, ENUM_DRAWLAYER_NORMAL); + obj.getVar("aniobj").clear_obj_vector(); + obj.getVar("aniobj").push_obj_vector(pooledobj_01); + obj.getVar("aniobj").push_obj_vector(pooledobj_02); + obj.getVar("aniobj").push_obj_vector(pooledobj_03); + obj.getVar("aniobj").push_obj_vector(pooledobj_04); + obj.getVar("aniobj").push_obj_vector(pooledobj_05); + + local skill_Id = [44,45,46,47,76,77,78,79,80,121,119,82,25,122,23,21,24,22]; + local monster_Id = [MONSTER_ID_SANDOR,MONSTER_ID_AUXO,MONSTER_ID_LUIS,MONSTER_ID_ECHEVERRA,MONSTER_ID_DARKHIGHERSPIRIT,MONSTER_ID_LIGHTHIGHERSPIRIT,MONSTER_ID_WATERHIGHERSPIRIT,MONSTER_ID_FIREHIGHERSPIRIT,MONSTER_ID_BABYDRAGON,MONSTER_ID_KRUTA,MONSTER_ID_HEILROM,MONSTER_ID_CASILLAS,MONSTER_ID_HODOR,MONSTER_ID_RAMOS,MONSTER_ID_SPIRITDARK,MONSTER_ID_SPIRITFIRE,MONSTER_ID_SPIRITLIGHT,MONSTER_ID_SPIRITWATER]; + local monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + if(sq_GetLevelData(obj, 45, 8, sq_GetSkillLevel(obj, 45)) > 0){ + local monster_Name = ["AuxoObj","LuisObj","HeilromObj","CassillasObj","RamosObj"]; + } + + for(local i = 0;i < monster_Id.len(); i++){ + local skill_level = sq_GetSkillLevel(obj, skill_Id[i]); + //print(monster_Name[i]+",level = "+skill_level); + local limit_level = sq_GetLevelData(obj, SKILL_BYKK_RINGOFDOMINATION, 2, sq_GetSkillLevel(obj, SKILL_BYKK_RINGOFDOMINATION)); + if(skill_Id[i] == 122) limit_level = 0; + if(skill_level > limit_level){ + local subtype = 15; + if(skill_Id[i] == 45 && sq_GetSkill(obj, 45).isSealFunction()){monster_Id[i] = MONSTER_ID_AUXOOLD; subtype = 5;} + local obj_Monster = obj.getVar(monster_Name[i]).get_obj_vector(0); + if(!obj_Monster){ + local monster_level = sq_GetSkillLevel(obj, 174); + local monster_time = 3600000; + local monster_Num = obj.sq_GetLevelData(skill_Id[i], 2, skill_level); + if(skill_Id[i] == 122) monster_Num = 1; + else if(skill_Id[i] == 47 && sq_GetLevelData(obj,SKILL_BYKK_SUMMONECHEVERRA, 0, skill_level) > 0 && monster_Num == 1) monster_Num = 2; + else if(skill_Id[i] == 46 && sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 50) > 0) monster_Num = 2; + else if(skill_Id[i] == 23 && sq_GetSkillLevel(obj, 53) > 0 && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1) monster_Num = 3; + else if(skill_Id[i] == 21 && sq_GetSkillLevel(obj, 51) > 0 && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1) monster_Num = 3; + else if(skill_Id[i] == 24 && sq_GetSkillLevel(obj, 54) > 0 && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1) monster_Num = 3; + else if(skill_Id[i] == 22 && sq_GetSkillLevel(obj, 52) > 0 && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) < 1) monster_Num = 3; + + // if((skill_Id[i] == 21 || skill_Id[i] == 22 || skill_Id[i] == 23 || skill_Id[i] == 24) && sq_GetLevelData(obj, skill_Id[i], 2, sq_GetSkillLevel(obj, skill_Id[i])) > 1){ + // monster_Num = monster_Num + sq_GetLevelData(obj, skill_Id[i], 2, sq_GetSkillLevel(obj, skill_Id[i])) - 1; + // print(monster_Num); + // } + local seedNumber = sq_GetLevelData(obj, SKILL_BYKK_SUMMONAUXO, 8, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONAUXO)); + summonmonster_mage_plus_Kwk(obj,obj,190,0,0,0,monster_Id[i],monster_time,monster_level,0); + if(monster_Num >= 2){ + for(local ac = 0;ac < monster_Num - 1; ac++){ + summonmonster_mage_plus_Kwk(obj,obj,190 + (ac + 1) * 40,0,0,0,monster_Id[i],monster_time,monster_level,0); + if(skill_Id[i] == 45){ + if(seedNumber > 0) createPassiveObject_k_k(obj,obj,45,subtype,190 + (ac + 1) * 40,0,70,0,0,0,0,0); + } + } + } + } + } + } + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){ + summonmonster_mage_plus_Kwk(obj,obj,190,0,0,0,MONSTER_ID_DARKHIGHERSPIRIT + sq_getRandom(0, 3),3600000,sq_GetSkillLevel(obj, 174),0); + } + } + + if(timeEventIndex == 1002){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION, STATE_PRIORITY_USER, true); + } + return true; +} + +function onAddPooledObj_RingOfDomination(obj, aniPath, x, y, abc) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,true); + sq_SetCurrentDirection(pooledObj, obj.getDirection()); + pooledObj.setCurrentPos(x,y,0); + pooledObj = sq_SetEnumDrawLayer(pooledObj, abc); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + + return pooledObj; +} + +function RemoveAllAni_RingOfDomination(obj) +{ + local objVar = obj.getVar("aniobj"); + local size = objVar.get_obj_vector_size(); + for(local i=0;i 0) obj_kruta.getVar("skillIndex").set_vector(0,11); + else obj_kruta.getVar("skillIndex").set_vector(0, 7); + monsterattack_ksk(obj_kruta,13); + } + } + break; + } +} + +function checkExecutableSkill_MoonShadow(obj) +{ + if(!obj) return false; + if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 16) > 0) return true; + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_MOONSHADOW); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_MOONSHADOW, STATE_PRIORITY_USER, true); + return true; + } + return false; +} + +function checkCommandEnable_MoonShadow(obj) +{ + if(!obj) return false; + local state = obj.sq_GetState(); + if(state == STATE_STAND) return true; + if(state == STATE_ATTACK){ + return obj.sq_IsCommandEnable(SKILL_BYKK_MOONSHADOW); + } + return true; +} + +function onSetState_MoonShadow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_MOONSHADOW); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_MOONSHADOW, skill_level); + sq_StartDrawCastGauge(obj, castTime, true); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_PlaySound("WZ_MOONSHADOW"); + local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_MOONSHADOW); + local attacknumber = sq_GetIntData(obj, SKILL_BYKK_MOONSHADOW, 7); + local time = sq_GetLevelData(obj,SKILL_BYKK_MOONSHADOW, 1, skill_level); + // obj.getVar("moonshadow").clear_vector(); + // obj.getVar("moonshadow").push_vector(attacknumber); + local monsternumber = 0; + obj.sq_AddSkillLoad(SKILL_BYKK_MOONSHADOW, 139, attacknumber, time); + local monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + for(local ui = 0; ui < monster_Name.len(); ui++){ + local number = obj.getVar(monster_Name[ui]).get_obj_vector_size(); + // print(monster_Name[ui]+" = "+number); + if(number > 0){ + for(local pi = 0; pi < number; pi++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monster_Name[ui]).get_obj_vector(pi)); + if(monsterObj){ + local group = sq_GetGroup(monsterObj); + local uniqueId = sq_GetUniqueId(monsterObj); + createPassiveObject_k_k(obj,monsterObj,SKILL_BYKK_MOONSHADOW,1,0,0,0,0,time,group,uniqueId,0); + } + } + monsternumber = monsternumber + number; + } + } + // print("monsternumber = "+monsternumber); + if(monsternumber > 0) obj.sq_PlaySound("MOONSHADOW"); + if(monsternumber <= 0) obj.sq_RemoveSkillLoad(SKILL_BYKK_MOONSHADOW); + obj.getVar("time").clear_ct_vector(); + obj.getVar("time").push_ct_vector(); + local timer = obj.getVar("time").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + break; + } +} + +function onEndCurrentAni_MoonShadow(obj) +{ + if(!obj) return; + if(!obj.sq_IsMyControlObject()) return; + local substate = obj.getSkillSubState(); + switch(substate){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_MOONSHADOW, STATE_PRIORITY_USER, true); + break; + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_MoonShadow(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_MOONSHADOW){ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } +} + +function checkExecutableSkill_MassTeleport(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MASSTELEPORT); + if (isUse){ + obj.sq_AddSetStatePacket(SKILL_BYKK_MASSTELEPORT , STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + + +function checkCommandEnable_MassTeleport(obj) +{ + if (!obj) return false; + local state = obj.sq_GetState(); + if (state == STATE_STAND) + return true; + if(state == STATE_ATTACK){ + return obj.sq_IsCommandEnable(SKILL_BYKK_MASSTELEPORT); + } + return true; +} + + +function onSetState_MassTeleport(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(68);//68 + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"]; + + for(local i = 0;i < monster_Name.len(); i++){ + local number = obj.getVar(monster_Name[i]).get_obj_vector_size(); + if(number > 0){ + for(local ui = 0; ui < number; ui++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monster_Name[i]).get_obj_vector(ui)); + if(monsterObj){ + local yPos = obj.getYPos(); + local xPos = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 100); + sq_MoveToNearMovablePos(monsterObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5); + } + } + } + } +} + +function onEndCurrentAni_MassTeleport(obj) +{ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function checkExecutableSkill_BugFall(obj) +{ + if(!obj) return false; + + local RamosObj = obj.getVar("RamosObj").get_obj_vector_size(); + if(RamosObj > 0){ + local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_BUGFALL); + if(b_useskill){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(SKILL_BYKK_BUGFALL, STATE_PRIORITY_USER, true); + return true; + } + } + else if(obj.isMessage()){ + sq_AddMessage(71099); + } + return false; +} + +function checkCommandEnable_BugFall(obj) +{ + if(!obj) return false; + local state = obj.sq_GetState(); + if(state == STATE_STAND) return true; + if(state == STATE_ATTACK){ + return obj.sq_IsCommandEnable(SKILL_BYKK_BUGFALL); + } + return true; +} + +function onSetState_BugFall(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + switch(substate){ + case 0: + obj.sq_StopMove(); + local Ani = obj.sq_GetThrowChargeAni(3); + obj.setCurrentAnimation(Ani); + local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BUGFALL); + local castTime = sq_GetCastTime(obj, SKILL_BYKK_BUGFALL, skill_level); + obj.getVar("caseTimE").clear_vector(); + obj.getVar("caseTimE").push_vector(castTime); + sq_StartDrawCastGauge(obj, castTime, true); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_StopMove(); + local Ani = obj.sq_GetThrowShootAni(3); + obj.setCurrentAnimation(Ani); + local monsternum = obj.getVar("RamosObj").get_obj_vector_size(); + for(local i = 0; i < monsternum; i++){ + local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar("RamosObj").get_obj_vector(i)); + if(monsterObj){ + monsterObj.getVar("skill").setBool(0,true); + monsterattack_ksk(monsterObj,17); + } + } + break; + } +} + +function onEndCurrentAni_BugFall(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + obj.setSkillSubState(substate); + switch(substate){ + case 1: + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + break; + } +} + +function onEndState_BugFall(obj, new_state) +{ + if(!obj) return; + if(new_state != 139) + sq_EndDrawCastGauge(obj); +} + +function onProcCon_BugFall(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + local casttime = obj.getVar("caseTimE").get_vector(0); + if(substate == 0){ + if(obj.sq_GetStateTimer() >= casttime){ + sq_EndDrawCastGauge(obj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(SKILL_BYKK_BUGFALL, STATE_PRIORITY_USER, true); + } + } +} + + + +//種花人 +function procSkill_zhonghuaren(obj) +{ + if(sq_GetLevelData(obj, 45, 8, sq_GetSkillLevel(obj, 45)) < 1) return; + obj.setSkillCommandEnable(137, false); + obj.setSkillCommandEnable(80, false); + obj.setSkillCommandEnable(47, false); + obj.setSkillCommandEnable(25, false); + obj.setSkillCommandEnable(121, false); + obj.setSkillCommandEnable(44, false); + obj.setSkillCommandEnable(118, false); + obj.setSkillCommandEnable(21, false); + obj.setSkillCommandEnable(22, false); + obj.setSkillCommandEnable(23, false); + obj.setSkillCommandEnable(24, false); + obj.setSkillCommandEnable(76, false); + obj.setSkillCommandEnable(77, false); + obj.setSkillCommandEnable(78, false); + obj.setSkillCommandEnable(79, false); +} + +/////////////////////////summoner_end + + diff --git a/user/116.205.165.25/7_swordman_1.c b/user/116.205.165.25/7_swordman_1.c new file mode 100644 index 0000000..41ee245 --- /dev/null +++ b/user/116.205.165.25/7_swordman_1.c @@ -0,0 +1,2540 @@ + +function createOnlyDrawObject_Swordman_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createSkillPassive_Swordman_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + + + +//obj + +function setCustomData_po_swordman_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("job").setInt(0, job); + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_SMBYKK_ASHENFORK: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + print("sizeRate = "+sizeRate); + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/ashenforksub.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/ashenforksubflash.ani"),true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/ashenforksubdust.ani", 0, 0, 0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -110, -40, -17, 220, 80, 40); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMaxHitCounterPerObject(hitMax); + sq_SetFrameDelayTime(currentAni, 0, 165); + sq_SetFrameDelayTime(currentAni, 1, 165); + obj.setTimeEvent(0, 17, -1, true); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_SMBYKK_WEAPONCOMBO: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local subState = receiveData.readDword(); + local aniPath = ["passiveobject/0_swordman_bykk/1weaponmaster/animation/weaponshortswordsub/short_new_01_wave.ani","passiveobject/0_swordman_bykk/1weaponmaster/animation/weaponshortswordsub/short_new_03_wave.ani","passiveobject/0_swordman_bykk/1weaponmaster/animation/weaponshortswordsub/short_new_01_wave.ani"]; + local ani = sq_CreateAnimation("",aniPath[subState]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 800.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/weaponcomboheavywind/ura_ls_wind_05.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_SMBYKK_CHARGECRASH: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/chargecrash/damage-back.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/chargecrash/damage-front.ani"),true); + currentAni.setSpeedRate(130.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_SMBYKK_FLOWMINDTWO: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/character/swordman/animation/bluntmasterysub/hit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/character/swordman/animation/bluntmasterysub/sub1.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/character/swordman/animation/bluntmasterysub/sub2.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 2, 120); + break; + } + break; + case SKILL_SMBYKK_FLOWMINDTHREE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 50, 1, false); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 100); + sq_SetFrameDelayTime(currentAni, 1, 100); + } + break; + } + break; + case SKILL_SMBYKK_MOMENTARYSLASH: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, weaponSubType); + obj.getVar("custom").setInt(2, sq_GetIntData(sqrChr, SKILL_SMBYKK_MOMENTARYSLASH, 5)); + obj.getVar("custom").setInt(3, sq_GetIntData(sqrChr, SKILL_SMBYKK_MOMENTARYSLASH, 6)); + obj.getVar("custom").setInt(4, sub); + local baseAniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/"; + local aniPath = ["momentaryslash/momentaryslash_0.ani", "momentaryslash/momentaryslash_1.ani", "momentaryslash/momentaryslash_2.ani", "momentaryslash/momentaryslash_3.ani", "momentaryslash/momentaryslash_4.ani", "momentaryslash/momentaryslash_5.ani"]; + local atkIndex = [57,52,53,54,0,56]; + local ani = sq_CreateAnimation("", baseAniPath + aniPath[weaponSubType]); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[weaponSubType] - sub)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + if(weaponSubType == 5 && sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 7){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_LIGHTSWORDMASTERY); + local proc = sq_GetLevelData(sqrChr, SKILL_SMBYKK_LIGHTSWORDMASTERY, 9, skillLevel); + local time = sq_GetLevelData(sqrChr, SKILL_SMBYKK_LIGHTSWORDMASTERY, 11, skillLevel); + local level = sq_GetSkillLevel(sqrChr, 174) + 5; + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, proc, level, time); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/momentaryslash/start.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMoveParticle("particle/1weaponmaster/momentaryslash.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj, 0, 300); + break; + case 3: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(10, 10, 1, false); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 50); + sq_SetFrameDelayTime(currentAni, 1, 50); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("custom").setInt(0, sq_GetZPos(targetObj)); + obj.getVar("custom").setInt(1, sq_GetZPos(obj)); + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_swordman_bykk/momentaryslash/rorate.ani"); + obj.setCurrentAnimation(ani); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/swordman/1weaponmaster_bykk/ap_momentaryslash_blunt.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, "character/swordman/1weaponmaster_bykk/ap_momentaryslash_blunt.nut", true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + obj.setTimeEvent(11, 1, 60, true); + } + break; + case 5:// + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + break; + } + break; + case SKILL_SMBYKK_ILLUSIONSLASH: + switch(subtype){ + case 0: + local subState = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_GetCustomAni(sqrChr, ANI_SMBYKK_ILLUSIONSLASH1_SHADOW + subState); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword() - 1000; + local weaponSubType = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashmelee"+sub.tostring()+".ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speed = 100.0; + if(weaponSubType == 0){ + speed = 60.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(60.0); + } + // if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0); + // else sq_SetVelocity(obj, 0, -100.0); + obj.sq_SetMoveParticle("particle/1weaponmaster/illusionslashmelee.ptl", 0.0, 0.0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local bonusGet = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashwave.ani"; + if(weaponSubType == 2) aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashsub/1_shockwave_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, weaponSubType==2?13:12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + if(weaponSubType != 2){ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashwavebottom1.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashwavebottom2.ani"),true); + sq_CreateParticle("passiveobject/0_swordman_bykk/particle/1weaponmaster/illusionslash.ptl", obj, 0, -30, 0, true, 30, 0, 1); + sq_CreateParticle("passiveobject/0_swordman_bykk/particle/1weaponmaster/illusionslash.ptl", obj, 0, 30, 0, true, 30, 0, 1); + obj.sq_SetMoveParticle("particle/1weaponmaster/illusionslash_move.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj, 0, weaponSubType==0?300:375); + local hitMax = sq_GetIntData(sqrChr, SKILL_SMBYKK_ILLUSIONSLASH, 16); + if(weaponSubType == 0) hitMax = 3; + if(bonusGet > 0) { + hitMax = sq_GetIntData(sqrChr, SKILL_SMBYKK_ILLUSIONSLASH, 17); + if(weaponSubType == 0) hitMax = 4; + } + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.setTimeEvent(0, 12000 / speedRate, -1, true); + } + else{ + local aniSet = ["passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashsub/2_ground_dodge .ani", + "passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashsub/3_sword_dodge.ani", + "passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashsub/4_attackt_dodge.ani", + "passiveobject/0_swordman_bykk/1weaponmaster/animation/illusionslashsub/5_light_dodge.ani"]; + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + for(local i = 0; i < aniSet.len(); i++){ + createOnlyDrawObjectEX_Swordman_bykk(obj,aniSet[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 120); + sq_CreateParticle("passiveobject/0_swordman_bykk/particle/1weaponmaster/illusionslashsub.ptl", obj, 20, 0, 20, true, 30, 0, 1); + } + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 10: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword() % 3 + 1; + local weaponSubType = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, sub); + obj.getVar("custom").setInt(3, weaponSubType); + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_swordman_bykk/stateoflimit/state_of_limit_illusion_"+sub.tostring()+".ani"); + obj.setCurrentAnimation(ani); + break; + case 20: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local bonusGet = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, weaponSubType); + obj.getVar("custom").setInt(3, bonusGet); + obj.getVar("custom").setInt(4, speedRate); + local ani = sq_CreateAnimation("","character/swordman/effect/animation/1_swordman_bykk/stateoflimit/state_of_limit_illusion_4.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(weaponSubType == 2){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + else sq_ClearAttackBox(currentAni); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 11: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/illusionslash/state_of_limit_illusion_wind_meele_0"+(sub - 1).tostring()+".ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speed = 50.0; + if(weaponSubType == 0){ + speed = 60.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(30.0); + } + obj.sq_SetMoveParticle("particle/1weaponmaster/illusionslashmelee.ptl", 0.0, 0.0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 12: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local bonusGet = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = 0; + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/illusionslash/state_of_limit_illusion_wave_shadow.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speed = weaponSubType==0?300:375; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + else sq_SetVelocity(obj, 0, -speed.tofloat()); + local hitMax = sq_GetIntData(sqrChr, SKILL_SMBYKK_ILLUSIONSLASH, 16); + if(weaponSubType == 0) hitMax = 3; + if(bonusGet > 0) { + hitMax = sq_GetIntData(sqrChr, SKILL_SMBYKK_ILLUSIONSLASH, 17); + if(weaponSubType == 0) hitMax = 4; + } + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.setTimeEvent(0, 12000 / speedRate, -1, true); + obj.setTimeEvent(255, 1000, -1, false); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_CreateParticle("passiveobject/0_swordman_bykk/particle/1weaponmaster/illusionslash_shadow.ptl", obj, 0, -1, 0, false, 200, 0, 4); + break; + case 13: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/illusionslash/state_of_limit_illusion_wind_meele_03.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_SMBYKK_HUNDREDSWORD: + switch(subtype){ + case 1: + local delay = receiveData.readDword(); + local addDamageRate = receiveData.readDword(); + local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ + if(sq_Abs(sq_GetXPos(object) - xPos) <= 275 && sq_Abs(sq_GetYPos(object) - yPos) <= 138){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_SM_HUNDREDSWORD_HOLD)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_SM_HUNDREDSWORD_HOLD, true); + sq_HoldAndDelayDie(activeObj, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(addDamageRate > 0){ + AddAppendage.getVar().setBool(0, true); + AddAppendage.getVar("custom").setInt(0, addDamageRate); + } + if(!sq_IsFixture(activeObj) && sq_IsHoldable(obj, activeObj) && sq_IsGrabable(obj, activeObj)){ + local zPos = sq_GetZPos(activeObj); + sq_MoveToAppendageForce(activeObj, sqrChr, activeObj, 0, 0, zPos>0?0:60, delay, true, AddAppendage); + } + } + } + } + } + obj.setTimeEvent(255, 1000, 1, false); + break; + } + break; + case SKILL_SMBYKK_METEORSWORD: + switch(subtype){ + case 1: + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/meteorsword/meteorsword_target.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, 3, -1, true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/meteorsword/up_meteorsword_shock1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 3: + local sub = receiveData.readDword(); + local isTrue = receiveData.readDword(); + obj.getVar("custom").setInt(100, sub); + obj.getVar("custom").setInt(101, isTrue); + local delayTime = 500; + if(sub < 1) delayTime = 300; + obj.setTimeEvent(6, delayTime, 1, false); + local flashScreenObj = sq_flashScreen(obj,delayTime,999999999,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local size = sqrChr.getVar("flashobj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local flashScreenObj = sqrChr.getVar("flashobj").get_obj_vector(i); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + } + } + sqrChr.getVar("flashobj").clear_obj_vector();//清除 + sqrChr.getVar("flashobj").push_obj_vector(flashScreenObj);//加入 + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 1, 5000); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/meteorsword/dropsword"+sub.tostring()+"_meteorsword_swords.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 17)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetMyShake(obj, 2, 50); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 5://totalDamage,holdTime,weaponSubType + local totalDamage = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, holdTime); + obj.getVar("custom").setInt(2, weaponSubType); + obj.getVar("custom").setInt(3, sizeRate); + obj.getVar("custom").setInt(4, sub); + + local sub = [1,3,4,2,0,5]; + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/meteorsword/bigswordboom"+sub[weaponSubType].tostring()+"_sword_inner.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/1weaponmaster/meteorsword.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,2,-3000); + + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 75.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 15: + local totalDamage = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local subSet = receiveData.readDword(); + obj.getVar("custom").setInt(1, holdTime); + + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_STATEOFLIMIT); + local heavy_addRate = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 19, skillLevel); + local short_proc = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 20, skillLevel); + local short_time = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 22, skillLevel); + local blun_proc = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 23, skillLevel); + local blun_time = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 25, skillLevel); + local blun_totalDamage = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 26, skillLevel) - 100; + local light_proc = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 30, skillLevel); + local light_time = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 32, skillLevel); + local light_damge = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 33, skillLevel); + local light_totalDamage = sq_GetLevelData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 34, skillLevel) - 100; + local level = sq_GetSkillLevel(sqrChr, 174) + 5 + + if(weaponSubType == 2) totalDamage = totalDamage + heavy_addRate; + local sub = [1,3,4,2,0,5]; + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/meteorsword/bigswordboom"+sub[weaponSubType].tostring()+"_sword.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/meteorsword/dropsword1_meteorsword_crack.ani"),true); + createOnlyDrawObject_Swordman_bykk(obj,"passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/meteorsword/bigswordboom_01.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + switch(weaponSubType){ + case 0: sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_HOLD, short_proc, level,short_time); break; + case 2: sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, blun_proc, level, blun_time); break; + case 5: sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, light_proc, level, light_time, light_damge); break; + } + if(weaponSubType == 2) createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,6,blun_totalDamage,sizeRate,0,0,0,0,0,0); + else if(weaponSubType == 5) createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,7,light_totalDamage,sizeRate,0,0,0,0,0,0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(75.0); + if(subSet > 0){ + sq_flashScreen(obj,80,300,80, 205, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local aniSet = [["character/swordman/effect/animation/meteorsword/exp_meteorsword_exp_dust1.ani", ENUM_DRAWLAYER_NORMAL], + ["character/swordman/effect/animation/meteorsword/exp_meteorsword_exp_dust2.ani", ENUM_DRAWLAYER_NORMAL], + ["character/swordman/effect/animation/meteorsword/exp_meteorsword_shock.ani", ENUM_DRAWLAYER_BOTTOM], + ["character/swordman/effect/animation/meteorsword/exp_meteorsword_crack.ani", ENUM_DRAWLAYER_BOTTOM]]; + local direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj); + for(local i = 0; i < aniSet.len(); i++){ + createOnlyDrawObjectEX_Swordman_bykk(obj,aniSet[i][0],true,direction,x,y,0,aniSet[i][1],sizeRate,sizeRate); + } + sq_SetMyShake(obj, 15, 300); + } + else sq_SetMyShake(obj, 8, 300); + + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 75.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sizeRate = sizeRate * 1.3; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 6: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/chargecrash/damage-back.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/chargecrash/damage-front.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 7: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/meteorsword/lightswordshockwave.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_SMBYKK_MOMENTARYSLASHEX: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local moveX = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + obj.getVar("custom").setInt(1, moveX); + obj.getVar("custom").setInt(2, sq_GetXPos(obj)); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/momentaryslashex/new_bigwave.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(42, 10, 250, true); + break; + } + break; + case SKILL_SMBYKK_SWORDOFMIND: + switch(subtype){ + case 1: + sqrChr.getVar("SwordOfMindObj").push_obj_vector(obj); + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_swordman_bykk/swordofmind/charge_spin_eff.ani"); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setLoop(true); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + sqrChr.getVar("SwordOfMindObj").push_obj_vector(obj); + local chargeTime = receiveData.readDword(); + obj.setTimeEvent(1, chargeTime, 1, false); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3://totalDamage,totalDamageExp,hitMax,weaponSubType,group,uniqueId + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local stateoflimitSet = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, weaponSubType); + obj.getVar("custom").setInt(3, hitMax); + obj.getVar("custom").setInt(9, stateoflimitSet); + switch(weaponSubType){ + case 2: + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_SWORDOFMIND); + local proc = sq_GetLevelData(sqrChr, SKILL_SMBYKK_SWORDOFMIND, 6, skillLevel); + local time = sq_GetLevelData(sqrChr, SKILL_SMBYKK_SWORDOFMIND, 8, skillLevel); + obj.getVar("custom").setInt(10, proc); + obj.getVar("custom").setInt(11, time); + obj.getVar("custom").setInt(12, sq_GetSkillLevel(sqrChr, 174) + 5); + break; + case 5: + obj.getVar("custom").setInt(3, hitMax + 1); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_SWORDOFMIND); + local proc = sq_GetLevelData(sqrChr, SKILL_SMBYKK_SWORDOFMIND, 13, skillLevel); + local time = sq_GetLevelData(sqrChr, SKILL_SMBYKK_SWORDOFMIND, 16, skillLevel); + obj.getVar("custom").setInt(10, proc); + obj.getVar("custom").setInt(11, time); + obj.getVar("custom").setInt(12, sq_GetSkillLevel(sqrChr, 174) + 5); + break; + } + obj.setTimeEvent(2, 50, -1, true); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_swordman_bykk/swordofmind/cross_eff.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_SMBYKK_FLASHCUT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageExp); + obj.getVar("custom").setInt(2, hitMax); + obj.setTimeEvent(2, 50, -1, true); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/flashcut/flashcutcut.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_SMBYKK_INVISIBLESWORDCUT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamageExp); + obj.getVar("custom").setInt(1, speedRate); + obj.getVar("custom").setInt(2, hitMax); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/invisibleswordcut/slasheffecta_67.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 2: + local totalDamage = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/invisibleswordcut/slasheffectb_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.setSpeedRate(speedRate.tofloat()); + sq_flashScreen(obj,40,80,520,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 10, 400); + break; + } + break; + case SKILL_SMBYKK_HANDLINGSWORD: + switch(subtype){ + case 1: + sqrChr.getVar("handlingsword_mainAtkObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, 5); + obj.setMapFollowParent(obj.getParent()); + obj.setMapFollowType(1); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, group); + obj.getVar("custom").setInt(2, uniqueId); + print("group = "+group); + print("uniqueId = "+uniqueId); + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/handlingsword_launch_eff_g.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + break; + case 3: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local set = receiveData.readDword(); + if(set > 0){ + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4://totalDamage,totalDamageExp,14,group,uniqueId + local totalDamage = receiveData.readDword(); + local totalDamageExp = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamageExp); + obj.getVar("custom").setInt(1, hitMax); + obj.getVar("custom").setInt(4, totalDamage); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(2, group); + obj.getVar("custom").setInt(3, uniqueId); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, APDPATH_SM_HANDLINGSWORD_HOLD)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, true, APDPATH_SM_HANDLINGSWORD_HOLD, true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(targetObj) && sq_IsHoldable(obj, targetObj) && sq_IsGrabable(obj, targetObj) && targetObj.getZPos() == 0){ + sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, 30, 500, true, AddAppendage); + } + obj.setTimeEvent(43, 100, -1, false); + } + } + sq_AddDrawOnlyAniFromParent(sqrChr, "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/handlingsword_finish_start_sword_normal_a.ani", 0, -1, 0); + local mainAtkObj = sqrChr.getVar("handlingsword_mainAtkObj").get_obj_vector(0); + if(mainAtkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); + colObj.getVar("custom").setInt(1, 0); + colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + obj.setTimeEvent(25, 500, 1, false); + break; + case 5: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/handlingsword_finish_b_atkeff_a.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(group == 0 && uniqueId == 0) break; + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, true, APDPATH_SM_HANDLINGSWORD_HOLD, true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + break; + } + break; + case SKILL_SMBYKK_STATEOFINVISIBLESWORD: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local subState = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95shortswordone_stswslashonel.ani", atkIndex = 36; + switch(weaponSubType){ + case 0: + switch(subState){ + case 1: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95shortswordoneadd_oneslashadd.ani"; atkIndex = 37; break; + case 10: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95shortswordonefallstart_onefallslash.ani"; atkIndex = 38; break; + } + break; + case 2: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95maceone_maceswing.ani"; atkIndex = 35; break; + case 3: + switch(subState){ + case 0: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95longswordone_weapon.ani"; atkIndex = 44; break; + case 1: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95longswordoneadd_slashl.ani"; atkIndex = 45; break; + case 10: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95longswordonefallstart_fxbodyl.ani"; atkIndex = 46; break; + } + break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if((weaponSubType == 0 && subState != 10) || (weaponSubType == 3 && subState == 10)) sq_moveWithParent(sqrChr, obj); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + if(weaponSubType == 0 && subState == 10){ + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.setTimeEvent(30, currentAni.getDelaySum(0, 2), 1, false); + } + break; + case 2: + local totalDamage = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local subState = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindtwo/flowmindlv95shortswordtwo_twoslash.ani", atkIndex = 43; + switch(weaponSubType){ + case 1: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindtwo/flowmindlv95katanatwo_katanatwoslash.ani"; atkIndex = 41; break; + case 2: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95maceone_maceswing.ani"; atkIndex = 42; break; + case 5: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindtwo/flowmindlv95beamswordtwo_beamswordtwoslashl.ani"; atkIndex = 48; break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(weaponSubType != 2) sq_moveWithParent(sqrChr, obj); + if(weaponSubType == 1){ + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(31, currentAni.getDelaySum(0, 1), 1, false); + } + break; + case 3: + local totalDamage = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local subState = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindthree/flowmindlv95katanathree_katanathreeslashl.ani", atkIndex = 39; + switch(weaponSubType){ + case 3: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindthree/flowmindlv95longswordthree_weapon.ani"; atkIndex = 47; break; + case 5: aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindthree/flowmindlv95beamswordthree_beamswordthreeslashl.ani"; atkIndex = 40; break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_moveWithParent(sqrChr, obj); + if(weaponSubType == 1){ + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(32, currentAni.getDelaySum(0, 1), 1, false); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local weaponSubType = receiveData.readDword(); + local subState = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindlv95longswordoneadd_tornado.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("custom").setInt(0, hitMax); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(33, currentAni.getDelaySum(0, 4), 1, false); + break; + } + break; + case SKILL_SMBYKK_STATEOFLIMIT: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_crash_05.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.getVar("custom").setInt(1, sub); + obj.getVar("custom").setInt(2, sq_GetXPos(obj)); + obj.getVar("custom").setInt(3, sq_GetYPos(obj)); + obj.getVar("custom").setInt(4, sizeRate); + local target = sqrChr; + if(sub > 0){ + obj.getVar("setTar_boss").clear_obj_vector(); + obj.getVar("setTar_named").clear_obj_vector(); + obj.getVar("setTar_normal").clear_obj_vector(); + obj.getVar("setTar").clear_obj_vector(); + obj.getVar("setTar_Shoot").clear_obj_vector(); + local rangeX = 1000, rangeY = 300; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + obj.getVar("setTar_boss").push_obj_vector(activeObj); + continue; + } + else if(sq_IsNamed(activeObj)){ + obj.getVar("setTar_named").push_obj_vector(activeObj); + continue; + } + else{ + obj.getVar("setTar_normal").push_obj_vector(activeObj); + continue; + } + } + } + local bossSize = obj.getVar("setTar_boss").get_obj_vector_size(); + local namedSize = obj.getVar("setTar_named").get_obj_vector_size(); + local normalSize = obj.getVar("setTar_normal").get_obj_vector_size(); + if(bossSize > 0){ + for(local i = 0; i < bossSize; i++){ + local targetObj = obj.getVar("setTar_boss").get_obj_vector(i); + if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); + } + } + if(namedSize > 0){ + for(local i = 0; i < namedSize; i++){ + local targetObj = obj.getVar("setTar_named").get_obj_vector(i); + if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); + } + } + if(normalSize > 0){ + for(local i = 0; i < normalSize; i++){ + local targetObj = obj.getVar("setTar_normal").get_obj_vector(i); + if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); + } + } + local sizeTar = obj.getVar("setTar").get_obj_vector_size(); + if(sizeTar > 0){ + local targetObj = obj.getVar("setTar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + target = targetObj; + } + } + else obj.getVar("custom").setInt(1, 0); + } + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(target); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_backstep_01.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 700.0); + else sq_SetVelocity(obj, 0, -700.0); + break; + } + break; + case SKILL_SMBYKK_SHORTSWORDMASTERY: + switch(subtype){ + case 1://totalDamage,proc,time,level + local totalDamage = receiveData.readDword(); + local proc = receiveData.readDword(); + local time = receiveData.readDword(); + local level = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/guardwave.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, proc, level, time); + break; + } + break; + case SKILL_SMBYKK_BLUNTMASTERY: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local upForceSet = receiveData.readDword(); + local ani = sq_CreateAnimation("", "passiveobject/character/swordman/animation/bluntmasterysub/hit.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/character/swordman/animation/bluntmasterysub/sub1.ani"),true); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/character/swordman/animation/bluntmasterysub/sub2.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + sq_SetCurrentAttacknUpForce(attackInfo, upForceSet); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 120); + break; + case 2: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknUpForce(attackInfo, 0); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + obj.setTimeEvent(255, 200, 1, false); + } + break; + } + break; + case SKILL_SMBYKK_BLADEMASTERY: + switch(subtype){ + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(subtype == 1){ + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_swordman_bykk/overbleed/atk.ani"); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("R_FLASHCUT_HIT"); + } + else{ + local ani = sq_CreateAnimation("", "character/swordman/effect/animation/1_swordman_bykk/overbleed/overbleed.ani"); + obj.setCurrentAnimation(ani); + // obj.sq_PlaySound("R_FLASHCUT_HIT"); + obj.sq_PlaySound("UNLIMITEDSPEEDSLASH_FINISH"); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetCustomRotate(obj, sq_ToRadian(sq_getRandom(0, 90).tofloat())); + } + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackeDamageAct(attackInfo, DAMAGEACT_NONE); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + break; + } + break; + case SKILL_SMBYKK_MYSTICEQUIP: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniSet = ANI_SMBYKK_MYSTICEQUIP_BODY; + if(sub > 0) aniSet = ANI_SMBYKK_MYSTICEQUIPJUMP_BODY; + local ani = sq_GetCustomAni(sqrChr, aniSet); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + switch(sub){ + case 0: sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/mysticequip/mysticequip_shockwave00.ani", 0, 0, 0); break; + case 1: sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/mysticequip/mysticequipjump_shockwave.ani", 0, 0, 0); break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + switch(skillIndex){ + case 231: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/swordmanslash/ultimatespeedslashb_slash1.ani"; + switch(sub){ + case 2: aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/swordmanslash/ultimatespeedslashb_slash2.ani"; break; + case 3: aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/swordmanslash/ultimatespeedslashb_slash3.ani"; break; + case 4: aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/swordmanslash/ultimatespeedslashb_slash4.ani"; break; + case 5: aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/swordmanslash/ultimatespeedslashb_slash5.ani"; break; + } + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61 + sub)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetAddWeaponDamage(attackInfo, true); + break; + case 2: + local size = obj.getVar("VSObj").get_obj_vector_size(); + if(size <= 0) obj.getVar("VSObj").clear_obj_vector(); + sqrChr.getVar("VSObj").push_obj_vector(obj); + obj.getVar("set").setInt(0, 100); + if(sq_Abs(sq_GetXPos(obj) - sq_GetXPos(sqrChr)) > 50) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + local aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvs_00.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 67)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_01_1"); + else obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_01_1"); + break; + case 3: + local size = obj.getVar("VSObj").get_obj_vector_size(); + if(size <= 0) obj.getVar("VSObj").clear_obj_vector(); + sqrChr.getVar("VSObj").push_obj_vector(obj); + obj.getVar("set").setInt(0, 100); + if(sq_Abs(sq_GetXPos(obj) - sq_GetXPos(sqrChr)) > 50) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/vsfinish/ultimatespeedslashvs_finish.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_02_1"); + else obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_02_2"); + break; + case 4: + local size = obj.getVar("VSObj").get_obj_vector_size(); + if(size <= 0) obj.getVar("VSObj").clear_obj_vector(); + sqrChr.getVar("VSObj").push_obj_vector(obj); + obj.getVar("set").setInt(0, 100); + if(sq_Abs(sq_GetXPos(obj) - sq_GetXPos(sqrChr)) > 50) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + local totalDamage = receiveData.readDword(); + local totalDamageFinish = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamageFinish); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 67)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + } +} + +function setState_po_swordman_bykk(obj, state, datas) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0, state); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_SMBYKK_SWORDOFMIND: + switch(subtype){ + case 2: + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/swordofmind/charge_ani.ani"; + if(state == 21) aniPath = "character/swordman/effect/animation/1_swordman_bykk/swordofmind/charge_repeat.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + if(state == 21){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/1_swordman_bykk/swordofmind/charging.ani"),true); + } + break; + case 3: + local aniPath = ["character/swordman/effect/animation/1_swordman_bykk/swordofmind/normalhit/hit1_smoke.ani", + "character/swordman/effect/animation/1_swordman_bykk/swordofmind/normalhit/hit2_smoke.ani", + "character/swordman/effect/animation/1_swordman_bykk/swordofmind/normalhit/hit3_smoke.ani", + "character/swordman/effect/animation/1_swordman_bykk/swordofmind/last_hit.ani"]; + local weaponSubType = obj.getVar("custom").getInt(2); + if(weaponSubType == 2){ + aniPath = ["character/swordman/effect/animation/1_swordman_bykk/swordofmind/dunhit/dunhit1_hit_smoke.ani", + "character/swordman/effect/animation/1_swordman_bykk/swordofmind/dunhit/dunhit2_hit_smoke.ani", + "character/swordman/effect/animation/1_swordman_bykk/swordofmind/dunhit/dunhit3_hit_smoke.ani", + "character/swordman/effect/animation/1_swordman_bykk/swordofmind/dunhit/dunhit_finish_last_hit.ani"]; + } + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(state == 23){ + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/swordman/effect/animation/1_swordman_bykk/swordofmind/cross_eff.ani"),true); + if(obj.getVar("custom").getInt(9) > 0){ + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_draw_02.ani"),true); + local totalDamage = obj.getVar("custom").getInt(1) * obj.getVar("custom").getInt(9) / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,4,totalDamage,0,0,0,0,0,0,0); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + sq_SetMyShake(obj, 10, 120); + } + else{ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + currentAni.setSpeedRate(200.0); + } + switch(weaponSubType){ + case 2: + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, obj.getVar("custom").getInt(10), obj.getVar("custom").getInt(12), obj.getVar("custom").getInt(11)); + break; + case 5: + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, obj.getVar("custom").getInt(10), obj.getVar("custom").getInt(12), obj.getVar("custom").getInt(11)); + break; + } + obj.setTimeEvent(3, 50, 1, false); + break; + } + break; + case SKILL_SMBYKK_FLASHCUT: + switch(subtype){ + case 1: + local aniPath = ["character/swordman/effect/animation/1_swordman_bykk/flashcut/fcfinish01_eff_00.ani", + "character/swordman/effect/animation/1_swordman_bykk/flashcut/fcfinish02_eff_00.ani", + "character/swordman/effect/animation/1_swordman_bykk/flashcut/fcfinish03_eff_00.ani", + "character/swordman/effect/animation/1_swordman_bykk/flashcut/fcfinish04_eff_00.ani", + "character/swordman/effect/animation/1_swordman_bykk/flashcut/fcfinish05_eff_00.ani"]; + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(state < 24) currentAni.setSpeedRate(300.0); + if(state != 24){ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + } + else{ + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + } + obj.setTimeEvent(3, 50, 1, false); + break; + } + break; + case SKILL_SMBYKK_HANDLINGSWORD: + switch(subtype){ + case 1: + local baseAniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/"; + local aniPathSet = [ + ["handlingsword_stand_sword_normal_a.ani","handlingsword_stand_sword_normal_b.ani","handlingsword_stand_sword_normal_c.ani","handlingsword_stand_sword_normal_d.ani","handlingsword_stand_sword_normal_e.ani"],//phase_stand + ["handlingsword_lifting_sword_normal_b.ani","handlingsword_lifting_sword_normal_c.ani","handlingsword_lifting_sword_normal_d.ani","handlingsword_lifting_sword_normal_e.ani"],//lifting + ["handlingsword_returning_sword_normal_e.ani"]//return + ]; + switch(state){ + case 20: + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/dummy_loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local swordCount = obj.getVar("custom").getInt(1); + if(swordCount < 1) break; + local currentAni = obj.getCurrentAnimation(); + switch(swordCount){ + case 5: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][4]),true); + case 4: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][3]),true); + case 3: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][2]),true); + case 2: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][1]),true); + case 1: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][0]),true); + break; + } + break; + case 21: + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/dummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local swordCount = obj.getVar("custom").getInt(1); + if(swordCount < 1) break; + local currentAni = obj.getCurrentAnimation(); + switch(swordCount){ + case 1: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[2][0]),true); + case 5: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][3]),true); + case 4: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][2]),true); + case 3: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][1]),true); + case 2: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][0]),true); + break; + } + currentAni.setSpeedRate(300.0); + break; + case 22: + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/dummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local swordCount = obj.getVar("custom").getInt(1); + if(swordCount < 1) break; + local currentAni = obj.getCurrentAnimation(); + switch(swordCount - 1){ + case 4: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][3]),true); + case 3: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][2]),true); + case 2: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][1]),true); + case 1: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[0][0]),true); + break; + } + switch(swordCount){ + case 5: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[2][0]),true); + case 4: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][3]),true); + case 3: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][2]),true); + case 2: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][1]),true); + case 1: + currentAni.addLayerAnimation(-1,sq_CreateAnimation("",baseAniPath + aniPathSet[1][0]),true); + break; + } + currentAni.setSpeedRate(300.0); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/dummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(400.0); + break; + case 21: + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/dummy.ani"; + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) + 1); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + sq_GetHeightObject(targetObj) / 2); + aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/handlingsword_flyingsword_eff_b.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local angle = sq_getRandom(0, 360); + obj.getVar("custom").setInt(10, angle); + sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); + sq_SetMyShake(obj, 3, 30); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(150.0); + } + else{ + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(400.0); + } + break; + case 22: + local aniPath = "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/ballhead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.getVar("move").setInt(2, sq_GetZPos(obj)); + obj.getVar("move").setInt(3, sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), sq_getRandom(-200, -100))); + obj.getVar("move").setInt(4, sq_GetYPos(sqrChr) + sq_getRandom(-100, 100)); + obj.setTimeEvent(22, 5, 50, true); + break; + } + break; + } + break; + case SKILL_SMBYKK_STATEOFLIMIT: + switch(subtype){ + case 2: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/tornado_start.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_dragon_04.ani"),true); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_dragon_01.ani"),true); + currentAni.setSpeedRate(200.0); + obj.sq_PlaySound("MENGRYONG_TORNADO"); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/tornado_loop.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/tornado_loopb.ani"),true); + currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/tornado_loopc.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_dragon_04.ani"),true); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/state_of_limit_dragon_01.ani"),true); + currentAni.setSpeedRate(200.0); + obj.setTimeEvent(40, 2, 50, true); + obj.sq_PlaySound("MENGRYONG_TORNADO"); + break; + case 22: + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/tornado_end.ani"); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/tornado_endb.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/state_of_limit_dragon_vanish_03.ani"),true); + currentAni.addLayerAnimation(5,sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/stateoflimit/rapidmoveslash/state_of_limit_dragon_vanish_01.ani"),true); + break; + } + + local sizeRate = obj.getVar("custom").getInt(4); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + switch(skillIndex){ + case 231: + switch(subtype){ + case 4: + switch(state){ + case 20: + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvs_00.ani"); + obj.setCurrentAnimation(ani); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_01_1"); + else obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_01_1"); + break; + case 21: + local ani = sq_CreateAnimation("", "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/vsfinish/ultimatespeedslashvs_finish.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_02_1"); + else obj.sq_PlaySound("SM_UNLIMITEDSPEEDSLASH_VS_02_2"); + break; + } + break; + } + break; + } + break; + } +} + +function onEndCurrentAni_po_swordman_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_SMBYKK_ASHENFORK: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_WEAPONCOMBO: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_CHARGECRASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_FLOWMINDTWO: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_FLOWMINDTHREE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_MOMENTARYSLASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_ILLUSIONSLASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_METEORSWORD: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_SWORDOFMIND: + switch(subtype){ + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 3: + switch(state){ + case 20: + case 21: + case 22: + if(obj.getVar("custom").getInt(4) + 1 >= obj.getVar("custom").getInt(3)){ + obj.getVar("custom").setInt(5, sq_GetXPos(obj)); + obj.getVar("custom").setInt(6, sq_GetYPos(obj)); + obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + obj.getVar("custom").setInt(4, obj.getVar("custom").getInt(4) + 1); + if(state == 22) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SMBYKK_FLASHCUT: + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + case 22: + case 23: + if(obj.getVar("custom").getInt(3) + 1 >= obj.getVar("custom").getInt(2)){ + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + obj.getVar("custom").setInt(3, obj.getVar("custom").getInt(3) + 1); + if(state == 23) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SMBYKK_INVISIBLESWORDCUT: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_HANDLINGSWORD: + switch(subtype){ + case 1: + switch(state){ + case 21: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 2: + local totalDamage = obj.getVar("custom").getInt(0); + local group = obj.getVar("custom").getInt(1); + local uniqueId = obj.getVar("custom").getInt(2); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,3,totalDamage,group,uniqueId,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: print("testendani"); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: + if(sqrChr && sqrChr.getState() != STATE_DIE && CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SM_HANDLINGSWORD_BUFF)){ + obj.setTimeEvent(26, 50, 5, true); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_SMBYKK_STATEOFINVISIBLESWORD: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_SMBYKK_STATEOFLIMIT: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_SMBYKK_SHORTSWORDMASTERY: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_BLUNTMASTERY: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_BLADEMASTERY: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_SMBYKK_MYSTICEQUIP: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + switch(skillIndex){ + case 231: + if(subtype == 4 && state == 20){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } +} + +function onTimeEvent_po_swordman_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + switch(skillIndex){ + case SKILL_SMBYKK_FLOWMINDTHREE: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + break; + case SKILL_SMBYKK_METEORSWORD: + if(sq_IsMyControlObject(obj)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj) + 4, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + 4); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) - 2)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 2); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + 2)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 2); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj) - 4, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - 4); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) - 2)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 2); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + 2)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 2); + } + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) - 2)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 2); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + if(sqrChr.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + 2)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 2); + } + } + break; + case SKILL_SMBYKK_SWORDOFMIND: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/swordofmind/charge_fin.ani", 0, 0, 0); + break; + } + break; + case 2: + switch(skillIndex){ + case SKILL_SMBYKK_METEORSWORD: + local totalDamage = obj.getVar("custom").getInt(0); + local rangeX = 140 * obj.getVar("custom").getInt(2) / 100; + local rangeY = 40 * obj.getVar("custom").getInt(2) / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,sq_getRandom(-rangeX, rangeX),sq_getRandom(-rangeY, rangeY),0,sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,4,totalDamage,sq_getRandom(1, 7),0,0,0,0,0,0); + if(timeEventCount >= obj.getVar("custom").getInt(1)){ + if(obj.getVar("custom").getInt(100) < 1) obj.setTimeEvent(5, 600, 1, false); + else obj.setTimeEvent(255, 750, 1, false); + } + break; + case SKILL_SMBYKK_SWORDOFMIND: + case SKILL_SMBYKK_FLASHCUT: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) + 1); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_SMBYKK_METEORSWORD: + local totalDamage = obj.getVar("custom").getInt(10); + local holdTime = obj.getVar("custom").getInt(11); + local weaponSubType = obj.getVar("custom").getInt(12); + local sizeRate = obj.getVar("custom").getInt(2); + local sub = 0; + if(timeEventCount >= obj.getVar("custom").getInt(13)){ + sub = 1; + local flashScreenObj = sqrChr.getVar("flashobj").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + sq_flashScreen(obj,0,0,300,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + + local rangeX = 130 * sizeRate / 100; + local rangeY = 40 * sizeRate / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,300,sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,5,totalDamage,holdTime,weaponSubType,sizeRate,sub,0,0,0); + break; + case SKILL_SMBYKK_SWORDOFMIND: + case SKILL_SMBYKK_FLASHCUT: + if(skillIndex == SKILL_SMBYKK_SWORDOFMIND && obj.getVar("custom").getInt(2) == 2 && state == 23) break; + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); + } + break; + } + break; + case 4: + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(50), 0, timeEventCount, 20); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 20 && state != 21) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5: + obj.getVar("set").setBool(0, true); + break; + case 6: + local isTrue = obj.getVar("custom").getInt(101); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 3, isTrue==1?1.1:1.0); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_METEORSWORD); + local createMax = sq_GetLevelData(sqrChr, SKILL_SMBYKK_METEORSWORD, 4, skillLevel); + local createTime = sq_GetLevelData(sqrChr, SKILL_SMBYKK_METEORSWORD, 5, skillLevel); + local sizeRate = sq_GetIntData(sqrChr, SKILL_SMBYKK_METEORSWORD, 4); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, createMax); + obj.getVar("custom").setInt(2, sizeRate); + if(sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_STATEOFLIMIT) > 0){ + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_SMBYKK_STATEOFLIMIT, -1, 7, isTrue==1?1.1:1.0); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_SMBYKK_STATEOFLIMIT); + local cMax = sq_GetIntData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 28); + local holdTime = sq_GetIntData(sqrChr, SKILL_SMBYKK_STATEOFLIMIT, 29); + if(obj.getVar("custom").getInt(100) > 0) holdTime = 0; + local weaponSubType = sqrChr.getWeaponSubType(); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, holdTime); + obj.getVar("custom").setInt(12, weaponSubType); + obj.getVar("custom").setInt(13, cMax); + obj.setTimeEvent(3, (createTime * createMax + 1200) / (cMax + 1), cMax, false); + } + obj.setTimeEvent(2, createTime, createMax, false); + break; + case 10: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + break; + case 11: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local v = sq_GetAccel(0, 120, timeEventCount, 50, true); + local angle = sq_GetUniformVelocity(0, 2160, timeEventCount, 60); + sq_SetCustomRotate(targetObj, sq_ToRadian(angle.tofloat())); + sq_setCurrentAxisPos(obj, 2, obj.getVar("custom").getInt(1) + v); + sq_setCurrentAxisPos(targetObj, 2, obj.getVar("custom").getInt(0) + v); + if(timeEventCount >= 60){ + // obj.getVar("custom").setInt(0, sq_GetZPos(targetObj)); + obj.setTimeEvent(12, 1, 60, true); + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 12: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local v = sq_GetAccel(120, 0, timeEventCount, 50, false); + local angle = sq_GetUniformVelocity(0, 2160, timeEventCount, 60); + sq_SetCustomRotate(targetObj, sq_ToRadian(angle.tofloat())); + sq_setCurrentAxisPos(obj, 2, obj.getVar("custom").getInt(1) + v); + sq_setCurrentAxisPos(targetObj, 2, obj.getVar("custom").getInt(0) + v); + if(timeEventCount >= 55){ + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + } + if(timeEventCount >= 60) sq_SendDestroyPacketPassiveObject(obj); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 20: + obj.getVar("custom").setInt(1, obj.getVar("custom").getInt(1) - 1); + local totalDamage = obj.getVar("custom").getInt(0); + local group = obj.getVar("custom").getInt(2); + local uniqueId = obj.getVar("custom").getInt(3); + createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,2,totalDamage,group,uniqueId,0,0,0,0,0); + //obj.sq_PlaySound("CONTROLBLADE_THROW"); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + break; + case 22: + if(!sqrChr || sqrChr.getState() == STATE_DIE){ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), obj.getVar("move").getInt(3), timeEventCount, 25); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), obj.getVar("move").getInt(4), timeEventCount, 25); + local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(2), sq_GetZPos(sqrChr) + sq_GetHeightObject(sqrChr) / 2, timeEventCount, 50); + if(timeEventCount == 25){ + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + } + if(timeEventCount > 25){ + vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(sqrChr), timeEventCount - 24, 25); + vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(sqrChr), timeEventCount - 24, 25); + } + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 50){ + local mainAtkObj = sqrChr.getVar("handlingsword_mainAtkObj").get_obj_vector(0); + if(mainAtkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); + local swordCount = colObj.getVar("custom").getInt(1); + if(swordCount < 5) colObj.getVar("custom").setInt(1, swordCount + 1); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 23: + local currentAni = obj.getCurrentAnimation(); + local hitMax = obj.getVar("custom").getInt(1); + obj.setTimeEvent(24, currentAni.getDelaySum(10, 32) / hitMax, hitMax, true); + break; + case 24: + obj.resetHitObjectList(); + sq_SetMyShake(obj, 5, 80); + break; + case 25: + local ani = sq_CreateAnimation("","passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/handlingsword_finish_a_swordnormal_p.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(4)); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(23, currentAni.getDelaySum(0, 9), 1, false); + local flashScreenObj = sqrChr.getVar("flashobj_handlingsowrd").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen){ + pflashScreen.fadeOut(); + } + local flashScreenObj = sq_flashScreen(sqrChr,200,999990,0,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sqrChr.getVar("flashobj_handlingsowrd").clear_obj_vector();//清除 + sqrChr.getVar("flashobj_handlingsowrd").push_obj_vector(flashScreenObj);//加入 + break; + case 26: + local mainAtkObj = sqrChr.getVar("handlingsword_mainAtkObj").get_obj_vector(0); + if(mainAtkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); + local swordCount = colObj.getVar("custom").getInt(1); + if(swordCount == 5) sq_SendDestroyPacketPassiveObject(obj); + } + createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,3,0,0,0,1,0,0,0,0); + if(timeEventCount >= 5) sq_SendDestroyPacketPassiveObject(obj); + break; + case 30: + local currentAni = obj.getCurrentAnimation(); + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(0, currentAni.getDelaySum(3, 7) / hitMax, hitMax, true); + break; + case 31: + local currentAni = obj.getCurrentAnimation(); + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(0, currentAni.getDelaySum(2, 6) / hitMax, hitMax, true); + break; + case 32: + local currentAni = obj.getCurrentAnimation(); + local hitMax = obj.getVar("custom").getInt(0); + print("hitMax = "+hitMax); + obj.setTimeEvent(0, currentAni.getDelaySum(2, 7) / hitMax, hitMax, true); + break; + case 33: + local currentAni = obj.getCurrentAnimation(); + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(0, currentAni.getDelaySum(5, 20) / hitMax, hitMax, true); + break; + case 40: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local moveX = sq_GetXPos(targetObj), moveY = sq_GetYPos(targetObj); + if(obj.getVar("custom").getInt(1) < 1) moveX = sq_GetDistancePos(moveX, sq_GetDirection(targetObj), 75); + local vx = sq_GetAccel(obj.getVar("custom").getInt(2), moveX, timeEventCount, 50, true); + local vy = sq_GetAccel(obj.getVar("custom").getInt(3), moveY, timeEventCount, 50, true); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + } + if(timeEventCount >= 50){ + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(0, 100, hitMax - 1, true); + obj.setTimeEvent(41, 120 * hitMax, 1, false); + } + break; + case 41: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 42: + local v = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(1), timeEventCount, 250); + local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(2), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + case 43: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, APDPATH_SM_HANDLINGSWORD_HOLD)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, true, APDPATH_SM_HANDLINGSWORD_HOLD, true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(targetObj) && sq_IsHoldable(obj, targetObj) && sq_IsGrabable(obj, targetObj)){ + sq_MoveToAppendageForce(targetObj, obj, obj, 0, 0, 30, 100, true, AddAppendage); + } + } + } + break; + case 255: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + switch(skillIndex){ + case 231: + switch(timeEventIndex){ + case 10: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + } +} + +function onAttack_po_swordman_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + if(isStuck) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.getVar("handlingsword_canShoot").getBool(0) && sqrChr.getState() != STATE_DIE){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + shootHandlingSword_bykk(sqrChr, group, uniqueId); + } + switch(skillIndex){ + case SKILL_SMBYKK_MOMENTARYSLASH: + switch(subtype){ + case 1: + if(obj.getVar("custom").getInt(1) == 2 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(0); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + if(sq_IsFixture(damager)){ + totalDamage = totalDamage * obj.getVar("custom").getInt(2) / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,3,totalDamage,group,uniqueId,0,0,0,0,0); + } + else if(sq_IsHoldable(obj, damager) && sq_IsGrabable(obj, damager)) { + totalDamage = totalDamage * obj.getVar("custom").getInt(3) / 100; + createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,1,sq_GetZPos(damager),sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,4,totalDamage,group,uniqueId,0,0,0,0,0); + } + } + break; + } + break; + case SKILL_SMBYKK_METEORSWORD: + switch(subtype){ + case 5: + case 15: + local holdTime = obj.getVar("custom").getInt(1); + print("holdTime = "+holdTime); + if(holdTime == 0) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, APDPATH_SM_STATEOFLIMITMETEORSWORD, true); + AddAppendage.sq_SetValidTime(holdTime); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + break; + } + break; + case SKILL_SMBYKK_FLASHCUT: + switch(subtype){ + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){ + if(!sqrChr.getVar("flashCutTar").is_obj_vector(damager)) sqrChr.getVar("flashCutTar").push_obj_vector(damager); + } + break; + } + break; + case SKILL_SMBYKK_INVISIBLESWORDCUT: + switch(subtype){ + case 2: + sq_AddDrawOnlyAniFromParent(damager, "passiveobject/0_swordman_bykk/1weaponmaster/animation/invisibleswordcut/hiteffectb_00.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + break; + } + break; + case SKILL_SMBYKK_HANDLINGSWORD: + switch(subtype){ + case 3: + local pooledObj = sq_AddDrawOnlyAniFromParent(damager, "passiveobject/0_swordman_bykk/1weaponmaster/animation/handlingsword/handlingsword_atk_eff_a.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + local angle = obj.getVar("custom").getInt(10); + print("angle = "+angle); + sq_SetCustomRotate(pooledObj, sq_ToRadian(angle.tofloat())); + break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + } +} + +function onKeyFrameFlag_po_swordman_bykk(obj, flagIndex) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_SMBYKK_ILLUSIONSLASH: + switch(subtype){ + case 10: + switch(flagIndex){ + case 3: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1) * 120 / 100; + local sub = obj.getVar("custom").getInt(2); + local weaponSubType = obj.getVar("custom").getInt(3); + createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,11,totalDamage,sizeRate,sub,weaponSubType,0,0,0,0); + break; + } + break; + case 20: + switch(flagIndex){ + case 3: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local weaponSubType = obj.getVar("custom").getInt(2); + local bonusGet = obj.getVar("custom").getInt(3); + local speedRate = obj.getVar("custom").getInt(4); + if(weaponSubType != 2) createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,75,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,12,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0); + // else createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,13,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1: + local weaponSubType = obj.getVar("custom").getInt(2); + if(weaponSubType != 2) break; + local sizeRate = obj.getVar("custom").getInt(1); + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/illusionslash/smash_shadow.ani"; + createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + break; + } + break; + } + break; + case SKILL_SMBYKK_INVISIBLESWORDCUT: + switch(flagIndex){ + case 1002: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(2, 31); + local hitMax = obj.getVar("custom").getInt(2); + obj.setTimeEvent(0, delay / hitMax, hitMax, true); + break; + case 1032: + //`CreateFinish` + local totalDamageExp = obj.getVar("custom").getInt(0); + local speedRate = obj.getVar("custom").getInt(1); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_INVISIBLESWORDCUT,2,totalDamageExp,speedRate,0,0,0,0,0,0); + break; + } + break; + case SKILL_SMBYKK_HANDLINGSWORD: + switch(flagIndex){ + case 1: + if(subtype == 5) obj.sq_PlaySound("CONTROLBLADE_THROW"); + if(subtype != 4) break; + local totalDamageExp = obj.getVar("custom").getInt(0); + local group = obj.getVar("custom").getInt(2); + local uniqueId = obj.getVar("custom").getInt(3); + if(sqrChr && sqrChr.getState() != STATE_DIE) createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,5,totalDamageExp,group,uniqueId,0,0,0,0,0); + break; + case 1003: + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetMyShake(obj, 20, 500); + local flashScreenObj = sqrChr.getVar("flashobj_handlingsowrd").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen){ + pflashScreen.fadeOut(); + sq_flashScreen(sqrChr,0,0,500,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + local size = obj.getVar("tar").get_obj_vector_size(); + if(size < 1) break; + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(activeObj) //activeObj.getVar("handlingsword_unhold").setBool(0, true); + CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_SM_HANDLINGSWORD_HOLD); + } + break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + switch(skillIndex){ + case 231: + switch(flagIndex){ + case 8: + sq_SetMyShake(obj, 5, 80); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvss1_04.ani", 177, 0, 91); + break; + case 13: + sq_SetMyShake(obj, 5, 80); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvss2_03.ani", 162, 0, 77); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + break; + case 17: + sq_SetMyShake(obj, 5, 80); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvss3_03.ani", 213, 0, 58); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 69)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + break; + case 21: + sq_SetMyShake(obj, 5, 80); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvss4_03.ani", 157, 0, 141); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 70)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + break; + case 25: + sq_SetMyShake(obj, 5, 80); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/5_ghost/animation/unlimitedspeedslashbvs/ultimatespeedslashvss5_04.ani", 294, 0, 35); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + break; + } + break; + } + break; + } + return true; +} + +function procAppend_po_swordman_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + switch(skillIndex){ + case SKILL_SMBYKK_MOMENTARYSLASH: + switch(subtype){ + case 2: + local sizeRate = obj.getVar("custom").getInt(0); + local time = sq_GetObjectTime(obj); + local sizeRateSet = sq_GetUniformVelocity(sizeRate, sizeRate * 2, time, 400); + local alphaSet = sq_GetUniformVelocity(255, 100, time, 400); + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(255, 255, 255, alphaSet); + sizeRateSet = sizeRateSet.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateSet, sizeRateSet); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRateSet); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRateSet, sizeRateSet, sizeRateSet); + break; + } + break; + case SKILL_SMBYKK_METEORSWORD: + if(obj.getVar("set").getBool(0)){ + if(sqrChr && sqrChr.getState() != STATE_DIE){ + obj.getVar("set").setBool(0, false); + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(2); + sqrChr.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + sq_SendDestroyPacketPassiveObject(obj); + } + } + switch(subtype){ + case 1: + if(!sqrChr || sqrChr.getState() != STATE_SMBYKK_METEORSWORD){sq_SendDestroyPacketPassiveObject(obj);return;} + if(sqrChr.getSkillSubState() == 1 || sqrChr.getSkillSubState() == 10){ + local offsetX = sq_GetXPos(obj), offsetY = sq_GetYPos(obj); + sqrChr.getVar("meteorSwordSet").setInt(1, offsetX); + sqrChr.getVar("meteorSwordSet").setInt(2, offsetY); + sqrChr.setSkillCommandEnable(SKILL_SMBYKK_METEORSWORD, true); + local b_useskill = sqrChr.sq_IsEnterSkill(SKILL_SMBYKK_METEORSWORD); + if(sq_GetObjectTime(obj) >= 600){ + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local sub = obj.getVar("custom").getInt(0); + if(sub > 0){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(11); + sqrChr.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + } + createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(sqrChr),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,3,sub,0,0,0,0,0,0,0); + } + sq_SendDestroyPacketPassiveObject(obj); + return; + } + else if(b_useskill != -1){ + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local sub = obj.getVar("custom").getInt(0); + if(sub > 0){ + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(11); + sqrChr.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + } + createSkillPassive_Swordman_bykk(sqrChr,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(sqrChr),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,3,sub,0,0,0,0,0,0,0); + } + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + break; + case 5: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local totalDamage = obj.getVar("custom").getInt(0); + local holdTime = obj.getVar("custom").getInt(1); + local weaponSubType = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(3); + local sub = obj.getVar("custom").getInt(4); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,15,totalDamage,holdTime,weaponSubType,sizeRate,sub,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_SMBYKK_MOMENTARYSLASHEX: + switch(subtype){ + case 1: + local sizeRate = obj.getVar("custom").getInt(0); + local time = sq_GetObjectTime(obj); + local targetSizeRate = obj.getVar("custom").getInt(1).tofloat() / 125.0; + local sizeRateSet = sq_GetUniformVelocity(sizeRate, (sizeRate * targetSizeRate).tointeger(), time, 2500); + local alphaSet = sq_GetUniformVelocity(255, 100, time, 800); + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(255, 255, 255, alphaSet); + sizeRateSet = sizeRateSet.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateSet, sizeRateSet); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRateSet); + sq_SetAttackBoundingBoxSizeRate(currentAni, 1.018, 1.018, 1.0); + if(time >= 2500) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_SMBYKK_HANDLINGSWORD: + switch(subtype){ + case 1: + if(!sqrChr || sqrChr.getState() == STATE_DIE || !CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SM_HANDLINGSWORD_BUFF)){ + sq_SendDestroyPacketPassiveObject(obj); + return; + } + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj), zPos = sq_GetZPos(obj); + local directionSet = sq_GetDirection(sqrChr), xPosSet = sq_GetXPos(sqrChr), yPosSet = sq_GetYPos(sqrChr) - 1, zPosSet = sq_GetZPos(sqrChr); + if(direction != directionSet) sq_SetCurrentDirection(obj, directionSet); + if(xPos != xPosSet) sq_setCurrentAxisPos(obj, 0, xPosSet); + if(yPos != yPosSet) sq_setCurrentAxisPos(obj, 1, yPosSet); + if(zPos != zPosSet) sq_setCurrentAxisPos(obj, 2, zPosSet); + break; + case 2: + local mainAtkObj = sqrChr.getVar("handlingsword_mainAtkObj").get_obj_vector(0); + if(!mainAtkObj) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_SMBYKK_STATEOFLIMIT: + switch(subtype){ + case 3: + if(sq_GetObjectTime(obj) >= 2500) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + } +} + + + diff --git a/user/116.205.165.25/7_swordman_2.c b/user/116.205.165.25/7_swordman_2.c new file mode 100644 index 0000000..ef435d8 --- /dev/null +++ b/user/116.205.165.25/7_swordman_2.c @@ -0,0 +1,3521 @@ + + + +function procSkill_Swordman_ghostsword_bykk(obj) +{ + local skill = sq_GetSkill(obj, 231); + local state = obj.getState(); + if(!skill.isInCoolTime() && (state == 0 || state == 8 || state > 13) && state != 231){ + obj.setSkillCommandEnable(231, true); + if(obj.sq_IsEnterSkill(231) != -1){ + obj.startSkillCoolTime(231, sq_GetSkillLevel(obj, 231), -1); + obj.sq_IntVectClear(); + switch(state){ + case 0: + case 14: + obj.sq_IntVectPush(0);//共鸣系列 + break; + case STATE_SPIRITMOVE: + obj.sq_IntVectPush(1);//剑术系列 + break; + default: + obj.sq_IntVectPush(2);//幻鬼系列 + break; + } + obj.sq_AddSetStatePacket(231, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + if(sq_GetSkillLevel(obj, 232) > 0){ + local timer = obj.getVar("ReturnISCt").get_ct_vector(0); + if(!timer){ + obj.getVar("ReturnISCt").clear_ct_vector(); + obj.getVar("ReturnISCt").push_ct_vector(); + timer = obj.getVar("ReturnISCt").get_ct_vector(0); + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + obj.getVar("ReturnISBool").setBool(0, true); + } + local currentT = timer.Get();//得到时间 + local coolTime = sq_GetIntData(obj, 232, 2); + if(currentT >= coolTime){ + timer.Reset();//初始化 + timer.Start(10000,0);//计时开始 + obj.getVar("ReturnISBool").setBool(0, true); + } + local VSObject = getVSObject(obj); + if((state == 2 || state == 3 || state == 4) && VSObject && obj.getVar("ReturnISBool").getBool(0)){ + obj.setSkillCommandEnable(231, true); + if(obj.sq_IsEnterSkill(231) != -1){ + obj.getVar("ReturnISBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_RETURNSPIRITMOVE, STATE_PRIORITY_IGNORE_FORCE, true); + als_ani(obj, "character/swordman/effect/animation/returnspiritmove/returnspiritmovestart_00.ani", 0, 0, 0, 0, 100, 0, 1, 1.0); + als_ani(obj, "character/swordman/effect/animation/returnspiritmove/returnspiritmovestart_01.ani", 0, 0, 0, 0, 100, 0, 1, 1.0); + } + } + } +} + + + +//空中 +function onAfterSetState_SM_Jump(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 1) return; + obj.getVar("jumpMessageSave").setInt(0, sq_GetVectorData(datas, 1)); + if(sq_GetVectorData(datas, 1) == 1 && sq_GetVectorData(datas, 3) == 1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(49); + obj.sq_AddSetStatePacket(7, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + +function onProcCon_SM_Jump(obj) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 1) return; + if(obj.getWeaponSubType() == 2){ + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND); + if(b_useskill != -1){// || sq_IsEnterCommand(obj, E_ATTACK_COMMAND) + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } + else{ + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND); + if(b_useskill != -1){ + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } + // if(obj.getVar("jumpMessageSave").getInt(0) != 1){ + // obj.setSkillCommandEnable(169, true); + // if(obj.sq_IsEnterSkill(169) != -1){ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(1); + // obj.sq_IntVectPush(1); + // obj.sq_IntVectPush(200); + // obj.sq_IntVectPush(1); + // obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); + // return; + // } + // } +} + +//空中攻击 +function onAfterSetState_SM_JumpAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 1) return; + local atkInfo = obj.sq_GetVectorData(datas, 0); + obj.getVar("smjatkSet").setInt(0, atkInfo); + if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 3){ + sq_SetCurrentAttackInfo(obj, obj.sq_GetJumpAttackInfo()); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), sq_GetIntData(obj, SKILL_SMBYKK_BLUNTMASTERY, 13)); + } +} + +function onAttack_SM_JumpAttack(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(isStuck) return; + if(sq_getGrowType(obj) != 1) return; + if(obj.getVar("smjatkSet").getInt(0) == 17) return; + if(obj.getWeaponSubType() != 2) return; + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) < 5) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 8, 1.0); + local sizeRate = 100 + 3 * sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY); + local upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 4, 1.0) + 100; + if(obj.getVar("smjatkSet").getInt(0) == 49){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 3, 1.0); + upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 2, 1.0) + 100; + } + createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_BLUNTMASTERY,1,totalDamage,sizeRate,upForceSet,0,0,0,0,0); + } +} + +function onKeyFrameFlag_SM_JumpAttack(obj, flagIndex) +{ + if(!obj) return false; + if(sq_getGrowType(obj) != 1) return false; + switch(flagIndex){ + case 0: + local atkInfo = obj.getVar("smjatkSet").getInt(0); + if(atkInfo == 49){ + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT) > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_STATEOFLIMIT, -1, 0, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,30,0,-20,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,3,totalDamage,0,0,0,0,0,0,0); + print("test"); + } + } + break; + } + return true; +} + +function onEndState_SM_JumpAttack(obj, new_state) +{ + if(!obj) return; + if(new_state != 7){ + obj.getVar("jumpAttackBool").setBool(0, false); + } +} + + +//银光落刃 +function onAfterSetState_SM_Ashenfork(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 1) return; + local weaponSubType = obj.getWeaponSubType(); + local bonusRate = 1.0; + if(weaponSubType == 2) bonusRate = (100 - sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 7)).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 0, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_ASHENFORK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onCreateObject_SM_Ashenfork(obj, createObject) +{ + if(!obj) return; + if(sq_getGrowType(obj) != 1) return; + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + local passiveObjId = colObj.getCollisionObjectIndex(); + // print("passiveObjId = "+passiveObjId); + if(passiveObjId == 20016){ + colObj.setValid(false); + local weaponSubType = obj.getWeaponSubType();//0短1太2钝3巨5光 + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_ASHENFORK); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 1, 1.0); + local sizeRate = sq_GetLevelData(obj, SKILL_SMBYKK_ASHENFORK, 2, skillLevel); + if(weaponSubType == 3){ + local totalDamageSub = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 4) / 100; + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 5); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ASHENFORK,2,totalDamageSub,hitMax,sizeRate,0,0,0,0,0); + } + else if(weaponSubType == 2){ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 3, 1.0); + sizeRate = sq_GetLevelData(obj, SKILL_SMBYKK_ASHENFORK, 4, skillLevel); + } + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ASHENFORK,1,totalDamage,sizeRate,0,0,0,0,0,0); + } + } +} + +//里·鬼剑术 +function checkExecutableSkill_SMWeaponCombo(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_WEAPONCOMBO); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SMWeaponCombo(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SMWeaponCombo(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + //0短1太2钝3巨5光 + local weaponSubType = obj.getWeaponSubType(); + local aniSet = [[ANI_SMBYKK_WEAPONCOMBOSHORT1, ANI_SMBYKK_WEAPONCOMBOSHORT2, ANI_SMBYKK_WEAPONCOMBOSHORT3], + [ANI_SMBYKK_WEAPONCOMBOBLADE1, ANI_SMBYKK_WEAPONCOMBOBLADE2, ANI_SMBYKK_WEAPONCOMBOBLADE3, ANI_SMBYKK_WEAPONCOMBOBLADE4], + [ANI_SMBYKK_WEAPONCOMBOBLUNT1, ANI_SMBYKK_WEAPONCOMBOBLUNT2, ANI_SMBYKK_WEAPONCOMBOBLUNT3, ANI_SMBYKK_WEAPONCOMBOBLUNT4], + [ANI_SMBYKK_WEAPONCOMBOHEAVY1, ANI_SMBYKK_WEAPONCOMBOHEAVY2], + [], + [ANI_SMBYKK_WEAPONCOMBOLIGHT1, ANI_SMBYKK_WEAPONCOMBOLIGHT2, ANI_SMBYKK_WEAPONCOMBOLIGHT3]]; + obj.sq_SetCurrentAnimation(aniSet[weaponSubType][subState]); + local speedRate = [0.9,1.3,1.1,0.75,1.0,1.2]; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate[weaponSubType], speedRate[weaponSubType]); + local atkSet = [[ATK_SMBYKK_WEAPONCOMBOSHORT1,ATK_SMBYKK_WEAPONCOMBOSHORT2,ATK_SMBYKK_WEAPONCOMBOSHORT3], + [ATK_SMBYKK_WEAPONCOMBOBLADE1,ATK_SMBYKK_WEAPONCOMBOBLADE2,ATK_SMBYKK_WEAPONCOMBOBLADE3,ATK_SMBYKK_WEAPONCOMBOBLADE4], + [ATK_SMBYKK_WEAPONCOMBOBLUNT1,ATK_SMBYKK_WEAPONCOMBOBLUNT2,ATK_SMBYKK_WEAPONCOMBOBLUNT3,ATK_SMBYKK_WEAPONCOMBOBLUNT4], + [ATK_SMBYKK_WEAPONCOMBOHEAVY1,ATK_SMBYKK_WEAPONCOMBOHEAVY2], + [], + [ATK_SMBYKK_WEAPONCOMBOLIGHT1,ATK_SMBYKK_WEAPONCOMBOLIGHT2,ATK_SMBYKK_WEAPONCOMBOLIGHT3]]; + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_WEAPONCOMBO, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_WEAPONCOMBO)).tofloat() / 100.0 + 1.0; + // print("bonusRate = "+bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100; + if(obj.getVar("weaponcombo_bool").getBool(0)){ + obj.getVar("weaponcombo_bool").setBool(0, false); + totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6)) / 100; + } + // print("totalDamage = "+totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[weaponSubType][subState])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage / 10); + obj.sq_PlaySound("R_SM_ATK"); + local soundSet = ["R_MINERALSWDA","R_KATANAA","R_STICKA","R_SQUARESWDA","","R_BEAMSWDA"]; + obj.sq_PlaySound(soundSet[weaponSubType]); + local soundSet2 = ["R_MINERALSWDC","R_KATANAC","R_STICKC","R_SQUARESWDC","","R_BEAMSWDC"]; + obj.sq_PlaySound(soundSet2[weaponSubType]); + obj.startRapidInput(); + switch(weaponSubType){ + case 0: + local effectPath = ["effect/animation/1_swordman_bykk/weaponcombo/short_new_01.ani","effect/animation/1_swordman_bykk/weaponcombo/short_new_02.ani","effect/animation/1_swordman_bykk/weaponcombo/short_new_03.ani"]; + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectPath[subState]), 0, 0); + effectPath = ["effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo1.ani","effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo2.ani","effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo3.ani"]; + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectPath[subState]), 0, 0); + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) > 0 && subState > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SHORTSWORDMASTERY, -1, 17, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 13); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_WEAPONCOMBO,1,totalDamage,sizeRate,subState,0,0,0,0,0); + } + break; + case 1: + local effectPath = [["character/swordman/effect/animation/weaponcombo/ura_katana_eff.ani"], + ["character/swordman/effect/animation/weaponcombo/katana_new1_under_effect.ani","character/swordman/effect/animation/weaponcombo/katana_new1_upper_effect.ani"], + ["character/swordman/effect/animation/weaponcombo/ura_katana_eff.ani"], + ["character/swordman/effect/animation/weaponcombo/katana_new2_under_effect.ani","character/swordman/effect/animation/weaponcombo/katana_new2_upper_effect.ani"]]; + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj) + 1; + for(local i = 0; i < effectPath[subState].len(); i++){ + local effectObj = createOnlyDrawObject_Swordman_bykk(obj,effectPath[subState][i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); + sq_moveWithParent(obj, effectObj); + } + break; + case 2: + // + break; + case 3: + if(subState == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){//使用[里 · 鬼剑术]时, 第1次斩击会出现飓风, 按住技能键可以蓄气进行第2次斩击 + local totalDamage = totalDamage * 30 / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,100,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_WEAPONCOMBO,2,totalDamage,0,0,0,0,0,0,0); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_WEAPONCOMBO); + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/shortswordmastery/heavyweaponcombochargedodge.ani"; + local pooledObj = createOnlyDrawObject_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -70),sq_GetYPos(obj) + 1,60,ENUM_DRAWLAYER_NORMAL); + local speedRate = 142000 / sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("weaponcombo_effect").clear_obj_vector(); + obj.getVar("weaponcombo_effect").push_obj_vector(pooledObj); + return; + } + break; + case 5: + local effectPath = [["light1-1.ani","light1-2.ani","light1-3.ani","light1-4.ani","light1-5.ani","light1-6.ani"], + ["light2-1.ani","light2-2.ani","light2-3.ani","light2-4.ani","light2-5.ani","light2-6.ani"], + ["light3-1.ani","light3-2.ani","light3-3.ani","light3-4.ani","light3-5.ani","light3-6.ani"]]; + for(local i = 0; i < 3; i++){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/weaponcombo/" + effectPath[subState][i]), 0, 0); + } + break; + } + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + + + + + + + if(weaponSubType == 5 && sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 3){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + local proc = sq_GetIntData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 5); + local time = sq_GetIntData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 6); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 1000, level, time); + } + + if(subState == 0) return; + if(subState + 1 < aniSet[weaponSubType].len()) obj.sq_SetStaticMoveInfo(0, 0, 50, false, 100, true); + else obj.sq_SetStaticMoveInfo(0, 0, 200, false, 120, true); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + + +} + +function onEndCurrentAni_SMWeaponCombo(obj) +{ + if(!obj) return; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ + local subState = obj.getSkillSubState(); + if(subState == 0) return; + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); +} + +function onProcCon_SMWeaponCombo(obj) +{ + if(!obj) return; + obj.setSkillCommandEnable(169, true); + if(obj.sq_IsEnterSkill(169) != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(6, STATE_PRIORITY_AUTO, true); + return; + } + + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(8, STATE_PRIORITY_AUTO, true); + return; + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_HUNDREDSWORD).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_SMBYKK_HUNDREDSWORD, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HUNDREDSWORD) != -1){ + obj.startSkillCoolTime(SKILL_SMBYKK_HUNDREDSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD), -1); + obj.sq_IntVectClear(); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(47, STATE_PRIORITY_AUTO, true); + return; + } + } + + if(!sq_GetSkill(obj, 46).isInCoolTime()){ + obj.setSkillCommandEnable(46, true); + if(obj.sq_IsEnterSkill(46) != -1){ + obj.startSkillCoolTime(46, sq_GetSkillLevel(obj, 46), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(46); + obj.sq_AddSetStatePacket(8, STATE_PRIORITY_AUTO, true); + return; + } + } + + if(!sq_GetSkill(obj, 8).isInCoolTime() && obj.getVar("weaponcomboBool1").getBool(0) == false){ + obj.setSkillCommandEnable(8, true); + if(obj.sq_IsEnterSkill(8) != -1){ + obj.getVar("weaponcomboBool1").setBool(0, true); + // obj.startSkillCoolTime(8, sq_GetSkillLevel(obj, 8), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(22, STATE_PRIORITY_AUTO, true); + return; + } + } + + if(!sq_GetSkill(obj, 1).isInCoolTime()){ + obj.setSkillCommandEnable(1, true); + if(obj.sq_IsEnterSkill(1) != -1){ + obj.startSkillCoolTime(1, sq_GetSkillLevel(obj, 1), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(19, STATE_PRIORITY_AUTO, true); + return; + } + } + + if(!sq_GetSkill(obj, 5).isInCoolTime()){ + obj.setSkillCommandEnable(5, true); + if(obj.sq_IsEnterSkill(5) != -1){ + obj.startSkillCoolTime(5, sq_GetSkillLevel(obj, 5), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(20, STATE_PRIORITY_AUTO, true); + return; + } + } + + if(!sq_GetSkill(obj, 58).isInCoolTime()){ + obj.setSkillCommandEnable(58, true); + if(obj.sq_IsEnterSkill(58) != -1){ + obj.startSkillCoolTime(58, sq_GetSkillLevel(obj, 58), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(32, STATE_PRIORITY_AUTO, true); + return; + } + } + + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 3) return; + + obj.setSkillCommandEnable(SKILL_SMBYKK_WEAPONCOMBO, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_WEAPONCOMBO); + if(b_useskill != -1) obj.addRapidInput(); + + local subState = obj.getSkillSubState(); + local nowFrame = sq_GetCurrentFrameIndex(obj); + local startFrame = [[5,5,4], + [5,4,5,4], + [5,4,6,5], + [6,8], + [], + [4,4,5]]; + if(obj.getRapidInputFrequency() > 1){ + if(nowFrame < startFrame[weaponSubType][subState]) return; + if(subState + 1 < startFrame[weaponSubType].len()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true); + return; + } + // else{ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true); + // } + } +} + +function onProc_SMWeaponCombo(obj) +{ + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ + local subState = obj.getSkillSubState(); + if(subState == 0){ + if(obj.isDownSkillLastKey()){ + local stateTime = obj.sq_GetStateTimer(); + if(stateTime >= sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 8) && obj.getVar("weaponcombo_bool").getBool(0) == false) obj.getVar("weaponcombo_bool").setBool(0, true); + } + else{ + if(sq_GetCurrentFrameIndex(obj) < 6) return; + local pooledObj = obj.getVar("weaponcombo_effect").get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true); + return; + } + } + } + + local subState = obj.getSkillSubState(); + if(obj.getVar("weaponComboBool").getBool(subState) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ + obj.getVar("weaponComboBool").setBool(subState, true); + obj.sq_SetStaticMoveInfo(0, 50, 150, false, 100, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("weaponComboBool").setBool(subState, true); + obj.sq_SetStaticMoveInfo(0, 0, 0, false, 100, true); + } + } +} + +function onKeyFrameFlag_SMWeaponCombo(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 2404: + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/weaponcombo/reslash_blunt03_dust01.ani"; + sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, -1, 0); + break; + case 100: + case 5103: + case 5203: + case 5303: + obj.resetHitObjectList(); + break; + } + return true; +} + +function onTimeEvent_SMWeaponCombo(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SMWeaponCombo(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_WEAPONCOMBO){ + obj.getVar("weaponcombo_bool").setBool(0, false); + obj.getVar("weaponcomboBool1").setBool(0, false); + for(local i = 0; i < 4; i++){ + obj.getVar("weaponComboBool").setBool(i, false); + } + } +} + +function onAttack_SMWeaponCombo(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(isStuck) return; + local weaponSubType = obj.getWeaponSubType(); + local soundSet = ["R_MINERALSWDA_HIT","R_KATANAA_HIT","R_STICKA_HIT","R_SQUARESWDA_HIT","","R_BEAMSWDA_HIT"]; + obj.sq_PlaySound(soundSet[weaponSubType]); + local soundSet2 = ["R_MINERALSWDC_HIT","R_KATANAC_HIT","R_STICKC_HIT","R_SQUARESWDC_HIT","","R_BEAMSWDC_HIT"]; + obj.sq_PlaySound(soundSet2[weaponSubType]); + if(weaponSubType == 2 && sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 3){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + if(sq_IsValidActiveStatus(activeObj, ACTIVESTATUS_STUN)){ + local totalDamage = sq_GetIntData(obj, SKILL_SMBYKK_BLUNTMASTERY, 7) - 100; + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_BLUNTMASTERY,2,totalDamage,group,uniqueId,0,0,0,0,0); + } + } + } +} + +//破军斩龙击 +function checkExecutableSkill_ChargeBurst(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_CHARGEBURST); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ChargeBurst(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ChargeBurst(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHDASH); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXSHOULDER); break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXPICK); break; + case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXUPPER); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 0: + obj.getVar("ChargeBurstTar").clear_obj_vector(); + obj.getVar("ChargeBurstSet").setInt(0, sq_GetXPos(obj)); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 10, 10, true); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/dash.ani"), 0, 0); + obj.sq_PlaySound("SM_CHARGE_CRASH"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXSHOULDER)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + obj.getVar("blademastery_canExp").setBool(0, true); + break; + case 1: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 2500 / currentAni.getDelaySum(0, 0); + // print("speedRate = "+speedRate); + if(speedRate < 100) currentAni.setSpeedRate(100.0); + else if(speedRate > 130) currentAni.setSpeedRate(130.0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrashex/shoulder.ani"), 0, -25); + break; + case 2: + obj.getVar("ChargeBurstSet").setInt(1, sq_GetXPos(obj)); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 2000 / currentAni.getDelaySum(0, 0); + // print("speedRate = "+speedRate); + if(speedRate < 120) currentAni.setSpeedRate(120.0); + else if(speedRate > 130) currentAni.setSpeedRate(130.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(2, delay / 15, 14, true); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrashex/pick.ani"), 0, -25); + obj.sq_PlaySound("SM_CHARGE_CRASH_UP"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 1, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXPICK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local size = obj.getVar("ChargeBurstTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ChargeBurstTar").get_obj_vector(i); + if(!targetObj) continue; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_SM_CHARGEBURST); + if(addAppendage){ + sq_MoveToAppendageForce(targetObj, obj, obj, 250, 0, sq_GetZPos(targetObj), delay, true, addAppendage); + } + } + } + break; + case 3: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 13000 / currentAni.getDelaySum(0, 0); + print("speedRate = "+speedRate); + if(speedRate < 100) currentAni.setSpeedRate(100.0); + else if(speedRate > 130) currentAni.setSpeedRate(130.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXUPPER)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local upForceSet = sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 3, sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGEBURST)) * 13 / 10; + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttacknUpForce(attackInfo, upForceSet); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrashex/upperdustfoward.ani", 0, -1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrashex/upperdustback.ani", 0, -1, 0); + obj.sq_SetStaticMoveInfo(0, 75, 0, false, 100, true); + obj.sq_SetMoveDirection(sq_GetDirection(obj), ENUM_DIRECTION_NEUTRAL); + break; + } +} + +function onEndCurrentAni_ChargeBurst(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + if(subState >= 1) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ChargeBurst(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_ChargeBurst(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local subState = obj.getSkillSubState(); + switch(subState){ + case 3: + local size = obj.getVar("ChargeBurstTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("ChargeBurstTar").get_obj_vector(i); + if(!targetObj) continue; + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_SM_CHARGEBURST); + } + } + break; + } + break; + case 4: + if(obj.getSkillSubState() == 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_AUTO, true); + } + break; + } + return true; +} + +function onTimeEvent_ChargeBurst(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetUniformVelocity(0, 325, timeEventCount, 9); + local dstX = sq_GetDistancePos(obj.getVar("ChargeBurstSet").getInt(0), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + break; + case 2: + local v = sq_GetUniformVelocity(obj.getVar("ChargeBurstSet").getInt(1), obj.getVar("ChargeBurstSet").getInt(0), timeEventCount, 10); + sq_setCurrentAxisPos(obj, 0, v); + break; + } +} + +function onEndState_ChargeBurst(obj, new_state) +{ + if(!obj) return; +} +// +function onAttack_ChargeBurst(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + if(isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("ChargeBurstTar").is_obj_vector(damager)){ + obj.getVar("ChargeBurstTar").push_obj_vector(damager); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_SM_CHARGEBURST)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SM_CHARGEBURST, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + } +} + +//破军升龙击 +function checkExecutableSkill_ChargeCrash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_CHARGECRASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ChargeCrash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_ChargeCrash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHDASH); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/dash.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 0, 1.0); + local weaponSubType = obj.getWeaponSubType(); + local hitMax = 1, dis = 190; + if(weaponSubType == 5){ + totalDamage = totalDamage - sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 15); + hitMax = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 13) + hitMax; + dis = 210; + } + else if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 6){ + local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 20, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY)); + totalDamage = totalDamage * (1000 + addRate) / 1000; + } + print("totalDamage = "+totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHDASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("chargeCrash_move").setInt(0, sq_GetXPos(obj)); + obj.getVar("chargeCrash_move").setInt(1, dis); + obj.setTimeEvent(1, delay / 35, 30, true); + if(hitMax > 1) obj.setTimeEvent(0, delay / hitMax, hitMax - 1, false); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrash/dustdash.ani", -10, 0, 0); + obj.sq_PlaySound("SM_CHARGE_CRASH"); + obj.sq_PlaySound("CCRASH_MOVING"); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrash/dustdashlast.ani", 0, 0, 0); + obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHUPPER); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/up-slash.ani"), 0, 0); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, 1.0); + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 6){ + local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 20, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY)); + totalDamage = totalDamage * (1000 + addRate) / 1000; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHUPPER)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("chargeCrash_bool").setBool(0, false); + switch(weaponSubType){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(0, delay / 2, 1, false); + break; + case 2: + case 3: + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 7 || sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 7){ + obj.getVar("chargeCrash_bool").setBool(0, true); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_CHARGECRASH); + obj.sq_PlaySound("CCRASH_GET", 3333); + } + break; + } + obj.sq_PlaySound("SM_CHARGE_CRASH_UP"); + obj.sq_PlaySound("CCRASH_CRASH"); + + + local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(passiveskill75Lv > 0){ + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 13, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 14); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate.tofloat() / 100.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,50,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,1,totalDamage,0,0,0,0,0,0,0); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHFINISH); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local weaponSubType = obj.getWeaponSubType(); + local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 9); + if(weaponSubType == 2) bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 7); + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHFINISH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("SM_CHARGE_CRASH_DOWN"); + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/chargecrash/down-slash.ani"; + sq_AddDrawOnlyAniFromParent(obj, aniPath, 125, -1, 0); + break; + } +} + +function onEndCurrentAni_ChargeCrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(obj.getVar("chargeCrash_bool").getBool(0)){ + obj.getVar("chargeCrash_bool").setBool(1, true); + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/chargecrash/charge.ani"; + local pooledObj = createOnlyDrawObject_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -10),sq_GetYPos(obj) + 1,165,ENUM_DRAWLAYER_NORMAL); + local speedRate = 72000 / sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 3); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("chargeCrash_effect").clear_obj_vector(); + obj.getVar("chargeCrash_effect").push_obj_vector(pooledObj); + break; + } + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_ChargeCrash(obj) +{ + if(!obj) return; +} + +function onProc_ChargeCrash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(obj.getVar("chargeCrash_bool").getBool(0) && sq_GetCurrentFrameIndex(obj) >= 4){ + if(obj.isDownSkillLastKey()){ + local stateTime = obj.sq_GetStateTimer(); + local currentAni = obj.getCurrentAnimation(); + if(stateTime >= currentAni.getDelaySum(false) + sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 3)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_AUTO, true); + return; + } + } + else{ + obj.stopSound(3333); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onKeyFrameFlag_ChargeCrash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 65534: + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 2){ + local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 10); + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,125,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_CHARGECRASH,1,totalDamage,0,0,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_ChargeCrash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local v = sq_GetAccel(0, obj.getVar("chargeCrash_move").getInt(1), timeEventCount, 30, true); + local dstX = sq_GetDistancePos(obj.getVar("chargeCrash_move").getInt(0), obj.getDirection(), v);//根据方向运算当前数值 + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//设置当前x坐标 + else obj.stopTimeEvent(1); + break; + } +} + +function onEndState_ChargeCrash(obj, new_state) +{ + if(!obj) return; +} + + +//流心 +function checkExecutableSkill_FlowMind(obj) +{ + if (!obj) return false; + if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMIND); + if (isUse){ + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMIND, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMIND), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMIND, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlowMind(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlowMind(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDSTAY); break; + } +} + +function onEndCurrentAni_FlowMind(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +FLOWMINDPOWERUP_APDPATH <- "character/swordman/1weaponmaster_bykk/ap_flowmindpowerup.nut" + +function onProc_FlowMind(obj) +{ + if(!obj) return; + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + return; + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isInCoolTime()){ + sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true); + if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP); + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDPOWERUP, skillLevel, -1); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindpowerup/charge_dodge.ani"), 0, -50); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindpowerup/flash_dodge.ani"), 0, -50); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) CNSquirrelAppendage.sq_RemoveAppendage(obj, FLOWMINDPOWERUP_APDPATH); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, FLOWMINDPOWERUP_APDPATH, true); + // local buffTime = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1); + // if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_FLOWMINDPOWERUP, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + obj.sq_PlaySound("SM_GUE_CHARGE"); + // obj.setTimeEvent(1, sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0), 1, false); + return; + } + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE) != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDONE, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDONE) != -1){//sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO) != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) || + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_HUNDREDSWORD).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_SMBYKK_HUNDREDSWORD, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HUNDREDSWORD) != -1){ + obj.startSkillCoolTime(SKILL_SMBYKK_HUNDREDSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD), -1); + obj.sq_IntVectClear(); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(47, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + + if(!sq_GetSkill(obj, SKILL_SMBYKK_METEORSWORD).isInCoolTime()){ + obj.setSkillCommandEnable(SKILL_SMBYKK_METEORSWORD, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_METEORSWORD) != -1){ + obj.startSkillCoolTime(SKILL_SMBYKK_METEORSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_METEORSWORD), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + +} + +function onKeyFrameFlag_FlowMind(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FlowMind(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_FlowMind(obj, new_state) +{ + if(!obj) return; +} + +function proc_appendage_flowmindpowerup(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false); return;} +} + +function onStart_appendage_flowmindpowerup(appendage) +{ + if(!appendage) return; + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP); + local value1 = sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 3, skillLevel); + + local change_appendage = appendage.sq_getChangeStatus("flowmindpowerup"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("flowmindpowerup",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (value1.tofloat() * 0.1)); + } +} + +//流心:刺 +function checkExecutableSkill_FlowMindOne(obj) +{ + if (!obj) return false; + // if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDONE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) <= 0) obj.sq_IntVectPush(0); + else obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlowMindOne(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true; + else return false; +} + +function onSetState_FlowMindOne(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONE); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONEADD); break; + case 10: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONEJUMPATTACK); break; + } + local speed = 1.0; + if(subState == 10) speed = 1.1; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + switch(subState){ + case 0: + obj.getVar("flowmindone_bool").setBool(0, false); + obj.getVar("flowmindone_bool").setBool(1, false); + obj.sq_PlaySound("R_SM_FLOWMIND_ONE"); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindone/dash_dodge.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_dodge1.ani", 0, -3, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_dodge2.ani", 0, -2, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_normal.ani", 0, -1, 0); + case 10: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("FlowMindOne"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, 1.0 + flowmindExLv.tofloat() * 0.25); + local weaponSubType = obj.getWeaponSubType(); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2); + switch(weaponSubType){ + case 1: + case 5: + hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 3) * 2; + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 4) / 100; + break; + case 2: + totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 9, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE))) / 100; + break; + } + // print("hitMax = "+hitMax); + local currentAni = obj.getCurrentAnimation(); + if(subState == 10){ + local speedRate = 100.0 / currentAni.getDelaySum(0, 0).tofloat(); + local speed = 500.0 * speedRate; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed); + totalDamage = totalDamage * hitMax; + hitMax = 1; + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/fallstate_one_leap.ani", 0, 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindone/fallstate_one_start.ani"), 0, 0); + } + else{ + local delay = currentAni.getDelaySum(0, 2); + obj.setTimeEvent(2, delay, 1, false); + obj.sq_SetStaticMoveInfo(0, 120, 0, false, 100, true); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + } + // print("totalDamage1 = "+totalDamage); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + // print("totalDamage2 = "+totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDONE)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("R_SM_FLOWMIND_ONE"); + obj.getVar("blademastery_canExp").setBool(0, true); + break; + case 1: + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 6); + bonusRate = (bonusRate.tofloat() / 100.0) * (100.0 + 25.0 * flowmindExLv) / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDONEADD)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage * hitMax); + break; + } + + local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD); + if(passiveskill90Lv > 0){ + local weaponSubType = obj.getWeaponSubType(); + local currentAni = obj.getCurrentAnimation(); + if(weaponSubType == 5 || weaponSubType == 1) return; + switch(subState){ + case 0: + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1, passiveskill90Lv); + switch(weaponSubType){ + case 2: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 7, passiveskill90Lv); break; + case 3: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 9, passiveskill90Lv); break; + } + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + case 1: + local speedRate = 7000 / currentAni.getDelaySum(0, 0); + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1, passiveskill90Lv); + switch(weaponSubType){ + case 3: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 10, passiveskill90Lv); break; + } + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + if(weaponSubType == 3){ + bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 11, passiveskill90Lv); + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 8); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,75,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,4,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); + } + break; + case 10: + local speedRate = 10000 / currentAni.getDelaySum(0, 0); + switch(weaponSubType){ + case 0: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 3, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,sq_GetZPos(obj) / 3,0,-sq_GetZPos(obj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); + break; + case 3: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 12, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + } + break; + } + } + + local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(passiveskill75Lv > 0){ + switch(subState){ + case 0: + case 10: + local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv); + obj.sq_SetSuperArmorUntilTime(obj, superArmorTime); + break; + } + } +} + +function onEndCurrentAni_FlowMindOne(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local stateSet = obj.getVar("flowmindoneSet").getInt(0); + if(stateSet > 0){ + obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(29, STATE_PRIORITY_AUTO, true); + return; + } + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_FlowMindOne(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getVar("flowmindone_bool").getBool(0)){ + // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + // if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)) obj.getVar("flowmindone_bool").setBool(0, true); + // else if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("flowmindone_bool").setBool(1, true); + if(obj.getWeaponSubType() == 0 || obj.getWeaponSubType() == 3){ + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.getVar("flowmindone_bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true); + return; + } + } + else if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE); + if(b_useskill != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ + //sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO); + if(b_useskill != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) || + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + if(sq_IsKeyDown(OPTION_HOTKEY_ATTACK, ENUM_SUBKEY_TYPE_ALL)) { + //obj.getVar("flowmindone_bool").setBool(0, false); + //obj.getVar("flowmindoneSet").setInt(0, 1); + obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(29, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + break; + case 1: + if(obj.getVar("flowmindone_bool").getBool(0)){ + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ + //sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE); + if(b_useskill != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || + obj.getVar("flowmindone_bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ + //sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO); + if(b_useskill != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) || + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(29, STATE_PRIORITY_AUTO, true); + return; + } + } + break; + case 10: + if(sq_GetZPos(obj) <= 0){ + obj.sq_StopMove(); + obj.sq_ZStop(); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/fallstate_one_end.ani", 0, 0, 0); + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD) > 0) + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95longswordonefallend_fxbodyl.ani", 0, 1, 0); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } + if(subState < 10 && obj.getVar("flowmindone_bool").getBool(2) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ + obj.getVar("flowmindone_bool").setBool(2, true); + obj.sq_StopMove(); + } + } +} + +function onKeyFrameFlag_FlowMindOne(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1005: + obj.getVar("flowmindone_bool").setBool(0, true); + obj.getVar("flowmindoneSet").setInt(0, 0); + break; + + + + case 2008: + obj.getVar("flowmindone_bool").setBool(0, true); + break; + } + return true; +} + +function onTimeEvent_FlowMindOne(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local vx = sq_GetAccel(0, obj.getVar("flowmindone_move").getInt(1), timeEventCount, 10, false); + local vz = sq_GetAccel(obj.getVar("flowmindone_move").getInt(1), 0, timeEventCount, 10, false); + local dstX = sq_GetDistancePos(obj.getVar("flowmindone_move").getInt(0), obj.getDirection(), vx); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 7); + local weaponSubType = obj.getWeaponSubType(); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2); + switch(weaponSubType){ + case 1: + case 5: + hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 3) * 2; + break; + } + obj.setTimeEvent(0, delay / hitMax, hitMax - 1, false); + break; + } +} + +function onEndState_FlowMindOne(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_FLOWMINDONE){ + obj.getVar("flowmindone_bool").setBool(2, false); + } +} + +function onAttack_FlowMindOne(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani"; + local direction = sq_GetDirection(obj); + local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox); + createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); + } +} + + +//流心:跃 +function checkExecutableSkill_FlowMindTwo(obj) +{ + if (!obj) return false; + // if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDTWO); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlowMindTwo(obj) +{ + if (!obj) return false; + if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isSealFunction()) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true; + else return false; +} + +function onSetState_FlowMindTwo(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOJUMP); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOLANDING); break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOSIT); break; + case 3: + if(obj.getWeaponSubType() <= 1) obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOATTACK2); + else obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOATTACK1); + break; + case 10: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOJUMPWAIT); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + switch(subState){ + case 0: + obj.sq_ZStop(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 100.0 / currentAni.getDelaySum(0, 0).tofloat(); + // print("speedRate = "+speedRate); + if(speedRate < 1.0){ + currentAni.setSpeedRate(100.0); + speedRate = 1.0; + } + else if(speedRate >= 1.3){ + currentAni.setSpeedRate(130.0); + speedRate = 1.3; + } + + + + + obj.getVar("flowmindtwo_set").setFloat(0, speedRate); + local speed = 450 * speedRate; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + local delay = (10.0 / speedRate).tointeger(); + obj.setTimeEvent(1, delay, 30, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("FlowMindTwo"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + break; + case 1: + case 3: + if(subState == 3) print("test"); + obj.sq_ZStop(); + local currentAni = obj.getCurrentAnimation(); + obj.getVar("flowmindTwo_Move").setInt(0, sq_GetZPos(obj)); + local speedRate = obj.getVar("flowmindtwo_set").getFloat(0); + if(speedRate < 1.0){ + currentAni.setSpeedRate(100.0); + speedRate = 1.0; + } + else if(speedRate >= 1.3){ + currentAni.setSpeedRate(130.0); + speedRate = 1.3; + } + + + + + else currentAni.setSpeedRate(speedRate * 100.0); + // if(subState == 3) print(currentAni.getDelaySum(0, 0)); + local speed = 450 * speedRate; + if(subState == 3) speed = 200 * speedRate; + if(obj.getVar("flowmindtwo_bool").getBool(3)) speed = speed * 1.5; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + local delay = (10.0 / speedRate).tointeger(); + if(subState == 3){ + delay = (16.0 / speedRate).tointeger(); + if(obj.getWeaponSubType() <= 1) delay = (18.667 / speedRate).tointeger(); + } + obj.setTimeEvent(2, delay, 30, true); + if(subState == 3){ + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 0, 1.0 + 0.25 * flowmindExLv); + if(obj.getWeaponSubType() <= 1){ + totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 9) / 100; + local currentAni = obj.getCurrentAnimation(); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 7); + obj.setTimeEvent(0, currentAni.getDelaySum(0, 2) / hitMax, hitMax - 1, false); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + if(obj.getVar("flowmindtwo_bool").getBool(3)) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 14)) / 100; + local atkIndex = [ATK_SMBYKK_FLOWMINDTWOATTACK1,ATK_SMBYKK_FLOWMINDTWOATTACK1,ATK_SMBYKK_FLOWMINDTWOATTACK2,ATK_SMBYKK_FLOWMINDTWOATTACK3,0,ATK_SMBYKK_FLOWMINDTWOATTACK1]; + local weaponSubType = obj.getWeaponSubType(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[weaponSubType])); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("flowmindtwo_bool").setBool(4, true); + } + obj.sq_PlaySound("R_SM_FLOWMIND_TWO"); + obj.getVar("blademastery_canExp").setBool(0, true); + break; + case 10: + obj.getVar("flowmindtwo_bool").setBool(3, true); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindtwo/fallstate_two_leap.ani", 0, 0, -25); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindtwo/fallstate_two_air.ani", 0, 1, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("FlowMindTwo"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + obj.sq_PlaySound("R_SM_FLOWMIND_TWO"); + break; + } + + local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD); + if(passiveskill90Lv > 0){ + local weaponSubType = obj.getWeaponSubType(); + switch(subState){ + case 3: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + switch(weaponSubType){ + case 0: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 4, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + case 1: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 5, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 3); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); + break; + case 2: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 8, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + case 5: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 14, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + } + break; + } + } + + local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(passiveskill75Lv > 0){ + switch(subState){ + case 0: + case 10: + local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv); + obj.sq_SetSuperArmorUntilTime(obj, superArmorTime); + break; + } + } +} + +function onEndCurrentAni_FlowMindTwo(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(subState == 1) obj.getVar("flowmindtwo_bool").setBool(2, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); + break; + case 2: + if(obj.getVar("flowmindtwo_bool").getBool(5)){ + obj.getVar("flowmindtwo_bool").setBool(5, false); + sq_setCurrentAxisPos(obj, 2, 0); + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true); + return; + } + } + if(obj.getVar("flowmindtwo_bool").getBool(2)){ + // obj.endSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMIND, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.getVar("flowmindtwo_bool").setBool(2, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlowMindTwo(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO) != -1){ + obj.removeAllTimeEvent(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); + return; + } + break; + } + + if(obj.getVar("flowmindtwo_bool").getBool(1)){ + // if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + // obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDONE, true); + // if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDONE) != -1){ + // obj.getVar("flowmindtwo_bool").setBool(5, true); + // } + // } + if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ + // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE) != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || + obj.getVar("flowmindtwo_bool").setBool(1, false); + obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } +} + +function onProc_FlowMindTwo(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 3: + local speed = 90.0 * obj.getVar("flowmindtwo_set").getFloat(0); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + sq_SetVelocity(obj, 1, speed); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + sq_SetVelocity(obj, 1, -speed); + } + else sq_SetVelocity(obj, 1, 0.0); + break; + } +} + +function onKeyFrameFlag_FlowMindTwo(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1002: + obj.getVar("flowmindtwo_bool").setBool(1, true); + break; + } + return true; +} + +function onTimeEvent_FlowMindTwo(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: + local v = sq_GetAccel(0, 75, timeEventCount, 25, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 2: + // print("frameIndex = "+sq_GetCurrentFrameIndex(obj)); + local v = sq_GetAccel(obj.getVar("flowmindTwo_Move").getInt(0), 0, timeEventCount, 26, false); + sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onEndState_FlowMindTwo(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_FLOWMINDTWO){ + obj.getVar("flowmindtwo_bool").setBool(3, false); + } +} + +function onAttack_FlowMindTwo(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(obj.getWeaponSubType() == 2 && damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getVar("flowmindtwo_bool").getBool(4)){ + obj.getVar("flowmindtwo_bool").setBool(4, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 3, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 2, 1.0) + 100; + createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_FLOWMINDTWO,1,totalDamage,sizeRate,0,0,0,0,0,0); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani"; + local direction = sq_GetDirection(obj); + local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox); + createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); + } +} + +//流心:升 +function checkExecutableSkill_FlowMindThree(obj) +{ + if (!obj) return false; + // if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDTHREE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlowMindThree(obj) +{ + if (!obj) return false; + if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isSealFunction()) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true; + else return false; +} + +function onSetState_FlowMindThree(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEREADY); break; + case 1: + local weaponSubType = obj.getWeaponSubType(); + local hitMax = 1, bonusRate = 1.0; + if(weaponSubType == 5){ + hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); bonusRate = 0.8; + obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACKLIGHTSWORD); + } + else if(weaponSubType == 1){ + hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); bonusRate = 0.8; + obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACKBLADE); + } + else obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACK); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + bonusRate = bonusRate * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + obj.getVar("flowmindThreeBonusRate").setInt(0, totalDamage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDTHREEATTACK)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("blademastery_canExp").setBool(0, true); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("FlowMindThree"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + break; + case 1: + obj.sq_SetStaticMoveInfo(0, 50, 150, false, 100, true); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);//开始移动 + local currentAni = obj.getCurrentAnimation(); + local speedRate = 10000.0 / currentAni.getDelaySum(0, 0); + if(speedRate > 1.3) speedRate = 1.3; + if(obj.getWeaponSubType() == 3) speedRate = speedRate * 0.7; + sq_SetVelocity(obj, 2, 1000.0 * speedRate); + if(obj.getWeaponSubType() == 5 || obj.getWeaponSubType() == 1){ + local upTime = (200.0 / speedRate).tointeger(); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); + obj.setTimeEvent(0, upTime / hitMax, hitMax - 1, false); + } + obj.sq_PlaySound("R_SM_FLOWMIND_THREE"); + break; + } + + local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD); + if(passiveskill90Lv > 0){ + local weaponSubType = obj.getWeaponSubType(); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 1000000 / currentAni.getDelaySum(0, 0); + switch(weaponSubType){ + case 1: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 6, passiveskill90Lv); + bonusRate = bonusRate.tofloat() * 0.8 / 100.0; + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 5); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); + break; + case 3: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 13, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + case 5: + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 15, passiveskill90Lv); + local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); + if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate / 100.0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); + break; + } + break; + } + } + + + local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(passiveskill75Lv > 0){ + switch(subState){ + case 0: + local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv); + obj.sq_SetSuperArmorUntilTime(obj, superArmorTime); + break; + } + } +} + +function onEndCurrentAni_FlowMindThree(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(obj.getVar("flowmindthree_bool").getBool(0)){ + obj.getVar("flowmindthree_bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true); + break; + } + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_FlowMindThree(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local height = 190; + if(obj.getWeaponSubType() == 3) height = 120; + else if(obj.getWeaponSubType() == 2) height = 150; + if((sq_GetZPos(obj) >= height || obj.sq_GetStateTimer() > 1000) && sq_GetCurrentFrameIndex(obj) == 0){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(1); + } + break; + } +} + +function onKeyFrameFlag_FlowMindThree(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FlowMindThree(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + } +} + +function onEndState_FlowMindThree(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_FLOWMINDTHREE){ + obj.getVar("flowmindthree_bool").setBool(0, false); + } +} + +function onAttack_FlowMindThree(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani"; + local direction = sq_GetDirection(obj); + local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox); + createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); + } + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 1 || weaponSubType == 5) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(damager.getState() == STATE_DOWN){ + local totalDamage = obj.getVar("flowmindThreeBonusRate").getInt(0) * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 5) / 100; + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_FLOWMINDTHREE,1,totalDamage,group,uniqueId,0,0,0,0,0); + } + } +} + + +//流心:狂 +function checkExecutableSkill_FlowMindPowerUp(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(0); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlowMindPowerUp(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlowMindPowerUp(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(120); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_FlowMindPowerUp(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlowMindPowerUp(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FlowMindPowerUp(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FlowMindPowerUp(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FlowMindPowerUp(obj, new_state) +{ + if(!obj) return; +} + + +//拔刀斩 +function checkExecutableSkill_SMMomentarySlash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_MOMENTARYSLASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SMMomentarySlash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SMMomentarySlash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_READY); + local currentAni = obj.getCurrentAnimation(); + local weaponSubType = obj.getWeaponSubType(); + local delay = 300; + switch(weaponSubType){ + case 0: delay = 80; break; + case 1: delay = 120; break; + case 2: delay = 200; break; + case 5: delay = 80; break; + } + sq_SetFrameDelayTime(currentAni, 0, delay); + if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_MOMENTARYSLASH); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/momentaryslash/charge2.ani"), -30, 0); + } + break; + case 1: + // if(obj.getWeaponSubType() == 0) obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_SLASH); + // else + obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH); + break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH); break; + } + if(subState == 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + else{ + local speed = 1.0; + switch(obj.getWeaponSubType()){ + case 1: speed = 1.1; break; + case 5: speed = 1.2; break; + } + if(subState == 2) speed = speed * 1.5; + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + } + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + switch(subState){ + case 0: + local delay = currentAni.getDelaySum(0, 0); + obj.getVar("MomentarySlashSet").setInt(1, delay); + obj.sq_PlaySound("SM_BAL_READY"); + obj.getVar("blademastery_canExp").setBool(0, true); + break; + case 1: + local weaponSubType = obj.getWeaponSubType(); + local speedRate = 50000 / currentAni.getDelaySum(0, 0); + // if(weaponSubType == 0) speedRate = 2500 / currentAni.getDelaySum(0, 0); + print("speedRate = "+speedRate); + if(speedRate > 200){ + currentAni.setSpeedRate(200.0); + speedRate = 200; + } + obj.getVar("MomentarySlashSet").setInt(0, speedRate); + obj.getVar("MomentarySlash_Bool").setBool(0, false); + if(weaponSubType == 1 || weaponSubType == 5){ + obj.getVar("MomentarySlash_Bool").setBool(0, true); + } + case 2: + currentAni.setCurrentFrameWithChildLayer(1); + obj.sq_PlaySound("SM_BAL_SHOT"); + local speedRate = obj.getVar("MomentarySlashSet").getInt(0).tofloat() * 2.5; + currentAni.setSpeedRate(speedRate); + break; + } +} + +function onEndCurrentAni_SMMomentarySlash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3) break; + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SMMomentarySlash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ + local maxTime = sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 8); + local stateTime = obj.sq_GetStateTimer(); + if(obj.isDownSkillLastKey()){ + if(stateTime >= maxTime){ + obj.getVar("MomentarySlash_Bool").setBool(1, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); + return; + } + } + else{ + if(stateTime >= obj.getVar("MomentarySlashSet").getInt(1)){ + obj.getVar("MomentarySlash_Bool").setBool(1, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); + return; + } + } + } + break; + case 1: + if(sq_GetCurrentFrameIndex(obj) >= 5){ + if(obj.getVar("MomentarySlash_Bool").getBool(0)){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + obj.setSkillCommandEnable(SKILL_SMBYKK_MOMENTARYSLASH, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_MOMENTARYSLASH); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ + obj.getVar("MomentarySlash_Bool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); + return; + } + } + } + break; + } +} + +function onKeyFrameFlag_SMMomentarySlash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1002: + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0); + local speedRate = obj.getVar("MomentarySlashSet").getInt(0); + local baseAniPath = "character/swordman/effect/animation/1_swordman_bykk/momentaryslash/"; + local aniPath_back = ["momentaryslash_blue_ldodge_under.ani", "momentaryslash_none_ldodge_under.ani"]; + local aniPath_front = ["momentaryslash_blue_ldodge_upper.ani", "momentaryslash_none_ldodge_upper.ani"]; + local subState = obj.getSkillSubState(); + local weaponSubType = obj.getWeaponSubType(); + if(subState == 2){ + if(weaponSubType == 1) {aniPath_back[0] = "momentaryslash_red_ldodge_under.ani"; aniPath_front[0] = "momentaryslash_red_ldodge_upper.ani";} + else if(weaponSubType == 5) {aniPath_back[0] = "momentaryslash_white_ldodge_under.ani"; aniPath_front[0] = "momentaryslash_white_ldodge_upper.ani";} + } + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + for(local i = 0; i < aniPath_back.len(); i++){ + local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,baseAniPath + aniPath_back[i],true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + for(local i = 0; i < aniPath_front.len(); i++){ + local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,baseAniPath + aniPath_front[i],true,direction,xPos,yPos + 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASH, -1, 0, 1.0); + local sub = 0; + if(subState == 2){ + if(weaponSubType == 1) totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 1) / 100; + else if(weaponSubType == 5) totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 2) / 100; + sub = 1; + } + if(obj.getVar("MomentarySlash_Bool").getBool(1)) totalDamage = totalDamage * (100 * 0 + sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 7)) / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,1,totalDamage,sizeRate,speedRate,weaponSubType,sub,0,0,0); + break; + case 65534: + if(obj.getWeaponSubType() != 0) break; + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) < 7) break; + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0) * 120 / 100; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASH, -1, 0, sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 3).tofloat() / 100.0); + print("totalDamage = "+totalDamage); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,60,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,2,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_SMMomentarySlash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SMMomentarySlash(obj, new_state) +{ + if(!obj) return; +} + + +//猛龙断空斩 +function checkExecutableSkill_RapidMoveSlash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_RAPIDMOVESLASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_RapidMoveSlash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_RapidMoveSlash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHREADY1); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHREADY2); break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHMOVE1); break; + case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHMOVE2); break; + } + if(subState > 1) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(obj.getWeaponSubType() == 5){ + local subStateName = ["lightready1-","lightready2-","lightmove1-","lightmove2-"]; + for(local i = 0; i < 6; i++){ + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/" + subStateName[subState] + i.tostring() + ".ani"), 0, 0); + } + } + switch(subState){ + case 0: + // obj.getVar("rapidMoveSlashSet").setInt(1, 0); + // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + // print("RapidMoveSlash"); + // obj.getVar("handlingsword_canShoot").setBool(0, true); + // } + // local apdPath = "appendage/character/ap_common_suck.nut"; + // local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + // local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 + // if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 + // sq_SetParameterOcularSpectrum(spectrumAppendage, 500, 30, true, sq_RGBA(255, 75, 255, 205), sq_RGBA(255, 75, 255, 0), 2, 2, 2);//設置效果 + break; + case 1: + obj.getVar("rapidMoveSlashBool").setBool(2, false); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("RapidMoveSlash"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + speedRate = speedRate.tofloat() * 2.0; + currentAni.setSpeedRate(speedRate); + break; + case 2: + obj.getVar("rapidMoveSlashSet").setInt(1, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("RapidMoveSlash"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + local apdPath = "appendage/character/ap_common_suck.nut"; + local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 + if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 + sq_SetParameterOcularSpectrum(spectrumAppendage, 500, 30, true, sq_RGBA(255, 75, 255, 205), sq_RGBA(255, 75, 255, 0), 2, 2, 2);//設置效果 + case 3: + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 7); + local speedRate = 10000 / currentAni.getDelaySum(0, 0); + // print("speedRate = "+speedRate); + local newSpeedRate = speedRate; + if(speedRate < 100) newSpeedRate = 100; + else if(speedRate > 150) newSpeedRate = 150; + if(newSpeedRate != speedRate) currentAni.setSpeedRate(newSpeedRate.tofloat()); + obj.getVar("rapidMoveSlashSet").setInt(0, newSpeedRate); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + local aniPath = [["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheadb.ani",0,1,-75,125,110],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheadc.ani",0,1,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/rmatka_eff_10.ani",-150,1,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/dasha.ani",0,0,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/smoke_eff_00_new.ani",-175,1,-50,120, 120]]; + for(local i = 0; i < aniPath.len(); i++){ + if(i == 0 && subState == 3) aniPath[i][0] = "character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheada.ani"; + local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath[i][0],true,direction,sq_GetDistancePos(xPos, direction, aniPath[i][1]),yPos + aniPath[i][2],aniPath[i][3],ENUM_DRAWLAYER_NORMAL,aniPath[i][4],aniPath[i][5]); + if(i < aniPath.len() - 1) sq_moveWithParent(obj, pooledObj); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(newSpeedRate.tofloat()); + } + local speed = 1560.0 * newSpeedRate / 100.0; + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_ClearAttackBox(currentAni); + local attackBoxSet = [-47,-23,-10,300,46,110]; + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + for(local i = 0; i < attackBoxSet.len(); i++){ + attackBoxSet[i] = (attackBoxSet[i] * sizeRate).tointeger(); + } + } + sq_AddAttackBox(currentAni,attackBoxSet[0], attackBoxSet[1], attackBoxSet[2], attackBoxSet[3], attackBoxSet[4], attackBoxSet[5]); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_RAPIDMOVESLASH, -1, subState - 2, 1.0); + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 9){ + local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 22, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY)); + totalDamage = totalDamage * (1000 + addRate) / 1000; + } + if(subState == 2) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_RAPIDMOVESLASH1)); + else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_RAPIDMOVESLASH2)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subState == 2){ + if(obj.getVar("rapidMoveSlashBool").getBool(1)) obj.sq_PlaySound("R_SM_MENGRYONG"); + else obj.sq_PlaySound("SM_MENGRYONG_START"); + } + else obj.sq_PlaySound("SM_MENGRYONG_FIN"); + obj.sq_PlaySound("MENGRYOUNG_ATK"); + obj.getVar("rapidMoveSlashBool").setBool(0, false); + obj.getVar("rapidMoveSlashBool").setBool(1, false); + obj.setTimeEvent(1, (30000 / newSpeedRate).tointeger(), -1, false); + + local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(passiveskill75Lv > 0){ + local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 14, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 17); + totalDamage = totalDamage * bonusRate / 100; + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 19); + local sub = 0, sizeRate = 100; + if(sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 6) > 0){sub = 1; sizeRate = 180; hitMax = hitMax + 6;} + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,2,totalDamage,hitMax,sub,sizeRate,0,0,0,0); + } + + if(weaponSubType == 5 && sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 9){ + local attackInfo = sq_GetCurrentAttackInfo(obj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY); + local time = sq_GetLevelData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 6, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 1000, level, time); + } + break; + } +} + +function onEndCurrentAni_RapidMoveSlash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + if(obj.getVar("rapidMoveSlashBool").getBool(1)){ + obj.sq_IntVectClear(); + if(obj.getVar("rapidMoveSlashSet").getInt(1) + 1 >= sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 0)) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true); + break; + } + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_RapidMoveSlash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(obj.getVar("rapidMoveSlashBool").getBool(2) == false){ + local direction = sq_GetDirection(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT){ + obj.getVar("rapidMoveSlashBool").setBool(2, true); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); + } + } + break; + case 2: + if(obj.getVar("rapidMoveSlashBool").getBool(1) == false){ + obj.setSkillCommandEnable(SKILL_SMBYKK_RAPIDMOVESLASH, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_RAPIDMOVESLASH) != -1){ + obj.getVar("rapidMoveSlashBool").setBool(1, true); + obj.getVar("rapidMoveSlashSet").setInt(1, obj.getVar("rapidMoveSlashSet").getInt(1) + 1); + } + } + case 3: + if(obj.getVar("rapidMoveSlashBool").getBool(0) == false){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("rapidMoveSlashBool").setBool(0, true); + local speed = 200.0 * obj.getVar("rapidMoveSlashSet").getInt(0) / 100.0; + sq_SetVelocity(obj, 1, speed); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("rapidMoveSlashBool").setBool(0, true); + local speed = 200.0 * obj.getVar("rapidMoveSlashSet").getInt(0) / 100.0; + sq_SetVelocity(obj, 1, -speed); + } + } + break; + } +} + +function onKeyFrameFlag_RapidMoveSlash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: obj.resetHitObjectList(); break; + } + return true; +} + +function onTimeEvent_RapidMoveSlash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local aniPath = "character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/smoke_eff_01.ani"; + local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, -100), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,120,120); + break; + } +} + +function onEndState_RapidMoveSlash(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_RAPIDMOVESLASH){ + if(!sq_GetSkill(obj, SKILL_SMBYKK_RAPIDMOVESLASH).isInCoolTime()) obj.startSkillCoolTime(SKILL_SMBYKK_RAPIDMOVESLASH, sq_GetSkillLevel(obj, SKILL_SMBYKK_RAPIDMOVESLASH), -1); + obj.getVar("rapidMoveSlashBool").setBool(0, false); + obj.getVar("rapidMoveSlashBool").setBool(1, false); + CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/character/ap_common_suck.nut"); + } +} + + +//幻影剑舞 +function checkExecutableSkill_IllusionSlash(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_ILLUSIONSLASH); + if (isUse){ + obj.getVar("IllusionSlashBool").setBool(0, true); + obj.getVar("IllusionSlashBool").setBool(1, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_IllusionSlash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_IllusionSlash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH1); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH2); break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH3); break; + case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH4); break; + case 4: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASHFINAL); break; + } + local weaponSubType = obj.getWeaponSubType(); + local speed = 1.2; + switch(weaponSubType){ + case 0: speed = 1.5; + case 1: speed = 1.65; + case 2: speed = 1.35; + case 5: speed = 1.65; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); + switch(subState){ + case 0: + if(obj.getVar("IllusionSlashBool").getBool(0)){ + obj.getVar("IllusionSlashBool").setBool(0, false); + obj.getVar("IllusionSlash_WeaponSubType").setInt(0, weaponSubType); + obj.getVar("IllusionSlash_hitCount").setInt(0, 0); + obj.getVar("IllusionSlash_illCount").setInt(0, 0); + obj.sq_PlaySound("SM_HOANYOUNG_START"); + obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 1); + switch(weaponSubType){ + case 1: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY) >= 7) obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 25); break; + case 5: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 7) obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 27); break; + } + obj.startRapidInput(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + print("IllusionSlash"); + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + obj.getVar("blademastery_canExp").setBool(0, true); + } + case 1: + case 2: + case 3: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 10000 / currentAni.getDelaySum(0, 0); + obj.getVar("IllusionSlashSet").setInt(0, speedRate); + print("speedRate = "+speedRate); + obj.sq_PlaySound("R_SM_HOANYOUNG"); + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/illusionslash/upper.ani", 0, 0, 0); + obj.sq_PlaySound("SM_HOANYOUNG_FIN"); + break; + } +} + +function onEndCurrentAni_IllusionSlash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + // print(obj.getVar("IllusionSlash_hitCount").getInt(0)); + // print(obj.getVar("IllusionSlash_hitMaxSet").getInt(0)); + local speedRate = obj.getVar("IllusionSlashSet").getInt(0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,0,subState,speedRate,0,0,0,0,0,0); + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType != obj.getVar("IllusionSlash_WeaponSubType").getInt(0)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); + obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_AUTO, true); + return; + } + obj.sq_IntVectClear(); + if(obj.getVar("IllusionSlash_hitCount").getInt(0) + 1 >= sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, obj.getVar("IllusionSlash_hitMaxSet").getInt(0))) obj.sq_IntVectPush(4); + else{ + obj.getVar("IllusionSlash_hitCount").setInt(0, obj.getVar("IllusionSlash_hitCount").getInt(0) + 1) + if(subState < 3) obj.sq_IntVectPush(subState + 1); + else obj.sq_IntVectPush(0); + } + obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_AUTO, true); + break; + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_IllusionSlash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + break; + } +} + +function onKeyFrameFlag_IllusionSlash(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1000: + if(obj.getRapidInputFrequency() > 1){ + local currentAni = obj.getCurrentAnimation(); + local speed = obj.getVar("IllusionSlashSet").getInt(0).tofloat() * 2.0; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 1 || weaponSubType == 5) speed = speed * 1.2; + else if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) > 0) speed = speed * 1.5; + currentAni.setSpeedRate(speed); + if(obj.getVar("IllusionSlashBool").getBool(1)){ + obj.getVar("IllusionSlashBool").setBool(1, false); + obj.getVar("IllusionSlash_hitMaxSet").setInt(0, obj.getVar("IllusionSlash_hitMaxSet").getInt(0) + 1); + } + } + break; + case 1001: + case 1002: + case 1003: + case 1004: + local bonusRate = 1.0; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 1 || weaponSubType == 5) bonusRate = 0.75; + else if(weaponSubType == 0) bonusRate = 0.9; + else if(weaponSubType == 3) bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 33).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ILLUSIONSLASH, -1, 0, bonusRate); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 30); + local weaponSubType = obj.getWeaponSubType(); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,1,totalDamage,sizeRate,flagIndex,weaponSubType,0,0,0,0); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(skillLevel > 0 && flagIndex == 1001){ + local illCount = obj.getVar("IllusionSlash_illCount").getInt(0); + obj.getVar("IllusionSlash_illCount").setInt(0, obj.getVar("IllusionSlash_illCount").getInt(0) + 1); + totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 20) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 15, skillLevel)) / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,10,totalDamage,sizeRate,illCount,weaponSubType,0,0,0,0); + } + + obj.sq_PlaySound("HOANYOUNG_WAVE"); + break; + case 32767: + local bounsSet = 1, bonusGet = obj.getVar("IllusionSlash_hitMaxSet").getInt(0), weaponSubType = obj.getWeaponSubType(); + if(bonusGet != 1 && bonusGet != 25 && bonusGet != 27){ + bounsSet = 2; + if(weaponSubType == 0) bounsSet = 13; + } + else if(weaponSubType == 2) bounsSet = 3; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ILLUSIONSLASH, -1, bounsSet, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 30); + local speedRate = obj.getVar("IllusionSlashSet").getInt(0); + // print("totalDamage = "+totalDamage); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,weaponSubType==2?125:75,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,2,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(skillLevel > 0){ + if(weaponSubType != 2)totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 21) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 16, skillLevel)) / 100; + else totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 31) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 38, skillLevel)) / 100; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,20,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0); + } + break; + case 65534: + if(obj.getWeaponSubType() == 2) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/illusionslash/smash.ani", 0, 0, 0); + break; + } + return true; +} + +function onTimeEvent_IllusionSlash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_IllusionSlash(obj, new_state) +{ + if(!obj) return; +} + + +//极·鬼剑士(暴风式)准备阶段 +function onAfterSetState_HundredSwordReady(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("HundredSwordSet").setInt(0, speedRate); + obj.startRapidInput(); + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD) >= 3) sq_SendMessage(obj, 0, 1, 0); + local isHold = obj.sq_GetVectorData(datas, 1); + if(isHold > 0) obj.getVar("HundredSwordReady").setBool(0, true); + else obj.getVar("HundredSwordReady").setBool(0, false); + obj.getVar("HundredSwordSet").setInt(2, 0); +} + +function onProc_HundredSwordReady(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); + // print(sq_GetCurrentFrameIndex(obj)); +} + +function onKeyFrameFlag_HundredSwordReady(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1001: + if(obj.getVar("HundredSwordReady").getBool(0)) break; + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(4, 14); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD); + local addDamageRate = sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 6, skillLevel); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,150,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HUNDREDSWORD,1,delay,addDamageRate,0,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_HundredSwordReady(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_HundredSwordReady(obj, new_state) +{ + if(!obj) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD); + if(skillLevel >= 6){ + local criticalRate = sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 3, skillLevel); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, criticalRate.tofloat(), 0); + if (ap){ + ap.getAppendageInfo().setValidTime(10000); + ap.sq_Append(obj, obj); + } + } +} + +function proc_appendage_hundredsword_hold(appendage) +{ + if(!appendage) return; + local sourceObj = appendage.getSource(); + local state = sourceObj.getState(); + if(!sourceObj || state == STATE_DIE){ + appendage.setValid(false); + return; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(sourceObj); + if(sqrChr.getVar("HundredSwordSet").getInt(2) == 1){ + appendage.setValid(false); + return; + } + local useTime = appendage.getTimer().Get(); + if(useTime >= 10000){ + appendage.setValid(false); + return; + } +} + +function getImmuneTypeDamageRate_appendage_hundredsword_hold(appendage, damageRate, attacker) +{ + if(!appendage) return; + if(appendage.getVar().getBool(0)){ + if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(attacker); + local passiveIndex = colObj.getCollisionObjectIndex(); + if(passiveIndex == 20051){ + local newdamageRate = damageRate * (100 + appendage.getVar("custom").getInt(0)) / 100; + return newdamageRate; + } + else return damageRate; + } + else return damageRate; + } + else return damageRate; +} + + +//极·鬼剑士(暴风式)攻击阶段 +function onAfterSetState_HundredSwordHit(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("HundredSwordSet").getInt(0); + if(obj.getRapidInputFrequency() > 2) speedRate = speedRate * 2; + local speedSet = sq_GetIntData(obj, SKILL_SMBYKK_HUNDREDSWORD, 12); + if(speedSet > 0) speedRate = speedRate / 2 * 3; + local hitCount = obj.getVar("HundredSwordSet").getInt(1); + speedRate = speedRate * (100 + 2 * hitCount) / 100; + obj.getVar("HundredSwordSet").setInt(1, obj.getVar("HundredSwordSet").getInt(1) + 1); + currentAni.setSpeedRate(speedRate.tofloat()); +} + +function onProc_HundredSwordHit(obj) +{ + if(!obj) return; + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); +} + +//极·鬼剑士(暴风式)结束阶段 +function onAfterSetState_HundredSwordEnd(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("HundredSwordSet").getInt(0); + currentAni.setSpeedRate(speedRate.tofloat()); + local bonusRate = 1.0; + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD); + if(skillLevel >= 9) bonusRate = 1.0 + sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 6, skillLevel).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HUNDREDSWORD, -1, 2, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_HUNDREDSWORDFINISH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); +} + +function onProc_HundredSwordEnd(obj) +{ + if(!obj) return; +} + +function onEndState_HundredSwordEnd(obj, new_state) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD) >= 3) sq_SendMessage(obj, 0, 0, 0); + obj.getVar("HundredSwordSet").setInt(1, 0); + obj.getVar("HundredSwordSet").setInt(2, 1); +} + +function onAttack_PassiveObject_hundredsword_bykk(passiveobj, damager, bounding_box, is_stuck) +{ + local id = passiveobj.getPassiveObjectIndex(); + if(id == 20051){ + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local xPos = sq_GetXPos(passiveobj), yPos = sq_GetYPos(passiveobj); + local xTPos = sq_GetXPos(damager), yTPos = sq_GetYPos(damager); + local disX = sq_Abs(xTPos - xPos), disY = sq_Abs(yTPos - yPos); + if(disX > 5){ + local moveX = disX / 10 + 1; + if(xPos > xTPos) sq_setCurrentAxisPos(damager, 0, xTPos + moveX); + else sq_setCurrentAxisPos(damager, 0, xTPos - moveX); + } + if(disY > 2){ + local moveY = disY / 10 + 1; + if(yPos > yTPos) sq_setCurrentAxisPos(damager, 1, yTPos + moveY); + else sq_setCurrentAxisPos(damager, 1, yTPos - moveY); + } + } + } +} + + +//极·神剑术(流星落) +function checkExecutableSkill_MeteorSword(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_METEORSWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_MeteorSword(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_MeteorSword(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDSTART); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDUP); break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDDROP); break; + case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDEXPLOSION); break; + case 10: + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_METEORSWORD); + obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_READY); + obj.sq_PlaySound("SM_GUE_SWORD", 3333); + obj.getVar("MeteorSwordCharge").setBool(0, false); + break; + case 11: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_WEAPONCOMBOSHORT3); + obj.stopSound(3333); + obj.sq_PlaySound("SM_THRUST"); + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_upeffect.ani",true,direction,sq_GetDistancePos(xPos,direction, 25),yPos,0,ENUM_DRAWLAYER_NORMAL,300,75); + createOnlyDrawObjectEX_Swordman_bykk(obj,"passiveobject/0_swordman_bykk/1weaponmaster/animation/meteorsword/up_meteorsword_shock1.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM,100,100); + sq_SetMyShake(obj, 5, 120); + local isTrue = 0; + if(obj.getVar("MeteorSwordCharge").getBool(0)) isTrue = 1; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,200,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,3,1,isTrue,0,0,0,0,0,0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 0: + //obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_METEORSWORD); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 17500 / currentAni.getDelaySum(false); + // if(speedRate > 160) speedRate = 160; + currentAni.setSpeedRate(speedRate.tofloat()); + obj.getVar("blademastery_canExp").setBool(0, true); + break; + case 1: + // obj.setTimeEvent(1, 3000, 1, false); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(false) / 4, 3, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_METEORSWORD, 4); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,2,totalDamage,sizeRate,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_start_dust.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_upeffect.ani", 0, 0, 0); + sq_SetMyShake(obj, 8, 120); + sq_SendMessage(obj, 0, 1, 0); + break; + case 2: + sq_setCurrentAxisPos(obj, 0, obj.getVar("meteorSwordSet").getInt(1)); + sq_setCurrentAxisPos(obj, 1, obj.getVar("meteorSwordSet").getInt(2)); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(3, currentAni.getDelaySum(false) / 10, 8, true); + break; + case 3: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 6, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_METEORSWORDEXPLOSION)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + if(speedRate > 160){ + currentAni.setSpeedRate(160.0); + } + else if(speedRate < 120){ + currentAni.setSpeedRate(120.0); + } + sq_SetMyShake(obj, 15, 300); + sq_SendMessage(obj, 0, 0, 0); + break; + } +} + +function onEndCurrentAni_MeteorSword(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + break; + case 1: + local offsetX = 150; + if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offsetX)), sq_GetYPos(obj)) offsetX = 0; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,offsetX,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,1,0,0,0,0,0,0,0,0); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + break; + case 3: + case 11: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_MeteorSword(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 10: + if(obj.isDownSkillLastKey()){ + if(obj.sq_GetStateTimer() >= 1000){ + obj.getVar("MeteorSwordCharge").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(11); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_MeteorSword(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_MeteorSword(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + break; + case 2: + local vz = sq_GetAccel(0, 500, timeEventCount, 3, true); + sq_setCurrentAxisPos(obj, 2, vz); + break; + case 3: + local vz = sq_GetAccel(500, 0, timeEventCount, 6, false); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 8){ + obj.stopTimeEvent(3); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onEndState_MeteorSword(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_METEORSWORD){ + sq_SimpleMoveToNearMovablePos(obj,200); + } +} + +function getScrollBasisPos_MeteorSword(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + if(subState != 1) return false; + if(obj.sq_GetStateTimer() <= 500) return false; + if(obj.isMyControlObject()){ + local offsetX = obj.getVar("meteorSwordSet").getInt(1); + local offsetY = obj.getVar("meteorSwordSet").getInt(2); + if(offsetX == sq_GetXPos(obj)) return false; + obj.sq_SetCameraScrollPosition(offsetX, offsetY, 0); + return true; + } + return false; +} + + +//破空拔刀斩 +function checkExecutableSkill_MomentarySlashEx(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_MOMENTARYSLASHEX); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_MomentarySlashEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_MomentarySlashEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASHEX_READY); + obj.sq_PlaySound("R_SM_MOMENTARY_SLASHEX_READY"); + obj.getVar("blademastery_canExp").setBool(0, true); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_MOMENTARYSLASHEX); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASHEX_SLASH); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 9, 250); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_MomentarySlashEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + //obj.sq_IntVectClear(); + //obj.sq_IntVectPush(1); + //obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_MomentarySlashEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(obj.isDownSkillLastKey()){ + if(obj.sq_GetStateTimer() >= 1500){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true); + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true); + } + break; + } + if(obj.getVar("MomentarySlashExBool").getBool(0)){ + obj.setSkillCommandEnable(SKILL_SMBYKK_MOMENTARYSLASH, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_MOMENTARYSLASH) != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onKeyFrameFlag_MomentarySlashEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1001: + obj.sq_PlaySound("R_DRAWING_SWORD"); + obj.sq_PlaySound("R_SM_MOMENTARY_SLASHEX_SHOT"); + break; + case 1004: + //`CreateWave` 0 0 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASHEX, -1, 1, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASHEX, 2); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASHEX); + local moveX = sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASHEX, 3, skillLevel); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,60,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASHEX,1,totalDamage,sizeRate,moveX,0,0,0,0,0); + break; + case 1005: + //`EnableMometarySlash` 0 0 0 + //`EndSlash` 0 0 0 + // if(sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0) > 3){ + // obj.getVar("MomentarySlashExBool").setBool(0, true); + // obj.sq_IntVectClear(); + // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + // } + break; + } + return true; +} + +function onTimeEvent_MomentarySlashEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_MomentarySlashEx(obj, new_state) +{ + if(!obj) return; +} + + +//极·神剑术(破空斩) +function checkExecutableSkill_SwordOfMind(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_SWORDOFMIND); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SwordOfMind(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SwordOfMind(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 0) obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGEATTRACT); + else obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGE); + obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_SWORDOFMIND); + obj.getVar("SwordOfMindObj").clear_obj_vector(); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,1,0,0,0,0,0,0,0,0); + local chargeTime = 200000; + if(weaponSubType == 3) chargeTime = sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 7); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,2,chargeTime,0,0,0,0,0,0,0); + if(weaponSubType == 0){ + local appendage = sq_AttractToMe(obj, sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 11), 150, 200); + obj.getVar("SwordOfMind").setAppendage(0,appendage); + } + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + obj.getVar("handlingsword_canShoot").setBool(0, true); + } + // obj.getVar("SwordOfMindCount").setInt(1, sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 1)); + obj.getVar("blademastery_canExp").setBool(0, true); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGEATTACK); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_SWORDOFMINDATTACK)); + local size = obj.getVar("SwordOfMindObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local effectObj = obj.getVar("SwordOfMindObj").get_obj_vector(i); + if(effectObj) effectObj.setValid(false); + } + } + if(obj.getWeaponSubType() == 0){ + local appendage = obj.getVar("SwordOfMind").getAppendage(0); + if(appendage) appendage.setValid(false); + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_SwordOfMind(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SwordOfMind(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(!obj.isDownSkillLastKey()){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_AUTO, true); + } + else{ + local stateTime = obj.sq_GetStateTimer(); + if(obj.getWeaponSubType() == 3 && stateTime >= sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 7)) obj.getVar("SwordOfMindCharge").setBool(0, true); + if(stateTime >= 3000){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onKeyFrameFlag_SwordOfMind(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_SwordOfMind(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SwordOfMind(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SMBYKK_SWORDOFMIND){ + obj.getVar("SwordOfMindCharge").setBool(0, false); + obj.getVar("SwordOfMindCount").setInt(1, 0); + } +} + +function onAttack_SwordOfMind(obj, damager, boundingBox, isStuck) +{ + if(isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){// && obj.getVar("SwordOfMindCount").getInt(1) > 0 + // obj.getVar("SwordOfMindCount").setInt(1, obj.getVar("SwordOfMindCount").getInt(1) - 1); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SWORDOFMIND, -1, 0, 1.0); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SWORDOFMIND, -1, 4, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 0); + local weaponSubType = obj.getWeaponSubType(); + if(obj.getVar("SwordOfMindCharge").getBool(0)) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 14)) / 100; + local stateoflimitSet = 0; + local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + if(passiveskill75Lv > 0){ + stateoflimitSet = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 17, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 26); + } + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetZPos(damager) + sq_GetObjectHeight(damager) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,3,totalDamage,totalDamageExp,hitMax,weaponSubType,group,uniqueId,stateoflimitSet,0); + } +} + diff --git a/user/116.205.165.25/7_swordman_3.c b/user/116.205.165.25/7_swordman_3.c new file mode 100644 index 0000000..432ccfe --- /dev/null +++ b/user/116.205.165.25/7_swordman_3.c @@ -0,0 +1,1255 @@ + + +//极·神剑术(瞬斩) +function checkExecutableSkill_FlashCut(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLASHCUT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLASHCUT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlashCut(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlashCut(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLASHCUTREADY_BODY); break; + case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLASHCUTATK_BODY); break; + case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLASHCUTEND_BODY); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + switch(subState){ + case 0: + obj.getVar("flashCutTar").clear_obj_vector(); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 7500 / currentAni.getDelaySum(0, 0); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flashcut/flashcutsmoke_eff_00.ani", 0, -1, 0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("FlashCutSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(0, delay / 20, 20, true); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_FLASHCUT, 2); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_FLASHCUT,2,totalDamage,sizeRate,speedRate,0,0,0,0,0); + break; + case 2: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + currentAni.setSpeedRate(speedRate.tofloat() * 1.5); + break; + } +} + +function onEndCurrentAni_FlashCut(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_SMBYKK_FLASHCUT, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlashCut(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FlashCut(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1002://`darkchange` + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(2, 7) + local flashScreenObj = sq_flashScreen(obj,delay,9999999,0,205,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("FlashCutObj").clear_obj_vector(); + obj.getVar("FlashCutObj").push_obj_vector(flashScreenObj); + break; + case 1003: sq_SetMyShake(obj, 6, 50); break; + case 2000: sq_SetMyShake(obj, 7, 90); break; + case 2001: + obj.sq_PlaySound("SM_FLASHCUT"); + obj.sq_PlaySound("FLASHCUT"); + //`createBackground` + local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 200), yPos = sq_GetYPos(obj); + createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/flashcut/flashcutbg_02.ani",true,direction,xPos,yPos - 1,75,ENUM_DRAWLAYER_NORMAL,120,200); + createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/flashcut/flashcutbg_01.ani",true,direction,xPos,yPos + 1,75,ENUM_DRAWLAYER_NORMAL,200,175); + break; + case 3000: sq_SetMyShake(obj, 10, 200); break; + case 3010://`delayAttack` + local flashScreenObj = obj.getVar("FlashCutObj").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen){ + pflashScreen.fadeOut(); + sq_flashScreen(obj,0,0,200,150,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + local size = obj.getVar("flashCutTar").get_obj_vector_size(); + if(size > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 1, 1.0); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 2, 1.0); + local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 3, 0.9) + 100; + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("flashCutTar").get_obj_vector(i); + if(targetObj){ + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + createSkillPassive_Swordman_bykk(obj,targetObj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_FLASHCUT,1,totalDamage,totalDamageExp,hitMax,group,uniqueId,0,0,0); + } + } + } + break; + } + return true; +} + +function onTimeEvent_FlashCut(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 0: + local v = sq_GetUniformVelocity(0, 375, timeEventCount, 13); + local dstX = sq_GetDistancePos(obj.getVar("FlashCutSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(0); + break; + } +} + +function onEndState_FlashCut(obj, new_state) +{ + if(!obj) return; +} + + +//万剑归宗 +function checkExecutableSkill_HandlingSword(obj) +{ + if (!obj) return false; + // print("test1"); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)) return false; + // print("test2"); + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_HANDLINGSWORD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_HANDLINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_HandlingSword(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_HandlingSword(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_HANDLINGSWORD_SRART_BODY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_HandlingSword(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_HandlingSword(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_HandlingSword(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ + CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF); + + local size = obj.getVar("handlingsword_mainAtkObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local attackObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(i); + if(attackObj) attackObj.setValid(false); + } + } + } + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_SMBYKK_HANDLINGSWORD, false, APDPATH_SM_HANDLINGSWORD_BUFF, true); + break; + } + return true; +} + +function onTimeEvent_HandlingSword(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_HandlingSword(obj, new_state) +{ + if(!obj) return; +} + +function onStart_appendage_handlingsword_buff(appendage) +{ + appendage.getVar().setBool(0, false); + appendage.getVar().setBool(1, false); + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HANDLINGSWORD); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_HANDLINGSWORD, skillLevel); + local buffTime = sq_GetLevelData(obj, SKILL_SMBYKK_HANDLINGSWORD, 0, skillLevel); + if(buffTime != 0) appendage.sq_SetValidTime(buffTime); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HANDLINGSWORD, -1, 4, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,1,totalDamage,0,0,0,0,0,0,0); +} + +function proc_appendage_handlingsword_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + if(appendage.getTimer().Get() <= 5000) return; + + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(sq_GetSkill(obj, SKILL_SMBYKK_HANDLINGSWORD).isInCoolTime()) return; + if(appendage.getVar().getBool(0) && appendage.isValid() && appendage.getVar().getBool(1) == false){ + appendage.getVar().setBool(0, false); + appendage.getVar().setBool(1, true); + return; + } +} + +function proc_appendage_handlingsword_hold(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local sourceObj = appendage.getSource(); + if(!sourceObj && appendage.getVar().getBool(0) == false){ + appendage.getVar().setBool(0, true); + appendage.sq_SetValidTime(1000); + return; + } +} + +function onEnd_appendage_handlingsword_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(obj && obj.getState() != STATE_DIE){ + local size = obj.getVar("handlingsword_mainAtkObj").get_obj_vector_size(); + if(size > 0){ + local canShootCount = 0; + for(local i = 0; i < size; i++){ + local attackObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(i); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.setTimeEvent(255, 1000, 1, true); + } + } + } + + if(appendage.getVar().getBool(0) == false && appendage.getVar().getBool(1) == false) createEndHandlingSword_bykk(obj); + } +} + +function shootHandlingSword_bykk(obj, group, uniqueId) +{ + local state = obj.getState(); + local shootCount = 0; + switch(state){ + case STATE_ATTACK: + case STATE_DASH_ATTACK: + case STATE_JUMP_ATTACK: + case 22: + case STATE_SMBYKK_RAPIDMOVESLASH: + case STATE_SMBYKK_WEAPONCOMBO: + shootCount = 1; + break; + case STATE_SMBYKK_FLOWMINDONE: + case STATE_SMBYKK_FLOWMINDTWO: + case STATE_SMBYKK_FLOWMINDTHREE: + shootCount = 2; + break; + case STATE_SMBYKK_ILLUSIONSLASH: + case STATE_SMBYKK_SWORDOFMIND: + shootCount = 4; + break; + case STATE_SMBYKK_CHARGEBURST: + shootCount = 5; + break; + } + if(shootCount > 0){ + obj.getVar("handlingsword_canShoot").setBool(0, false); + local mainAtkObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(0); + if(mainAtkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); + local swordCount = colObj.getVar("custom").getInt(1); + if(swordCount > 0){ + if(swordCount < shootCount) shootCount = swordCount; + colObj.getVar("custom").setInt(2, group); + colObj.getVar("custom").setInt(3, uniqueId); + if(!colObj.isExistTimeEvent(20)) colObj.setTimeEvent(20, 120, shootCount, false); + } + } + } +} + +function createEndHandlingSword_bykk(obj) +{ + obj.getVar("setTar_boss").clear_obj_vector(); + obj.getVar("setTar_named").clear_obj_vector(); + obj.getVar("setTar_normal").clear_obj_vector(); + obj.getVar("setTar").clear_obj_vector(); + obj.getVar("setTar_Shoot").clear_obj_vector(); + local rangeX = 1000, rangeY = 1000; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(sq_IsBoss(activeObj)){ + obj.getVar("setTar_boss").push_obj_vector(activeObj); + continue; + } + else if(sq_IsNamed(activeObj)){ + obj.getVar("setTar_named").push_obj_vector(activeObj); + continue; + } + else{ + obj.getVar("setTar_normal").push_obj_vector(activeObj); + continue; + } + } + } + local bossSize = obj.getVar("setTar_boss").get_obj_vector_size(); + local namedSize = obj.getVar("setTar_named").get_obj_vector_size(); + local normalSize = obj.getVar("setTar_normal").get_obj_vector_size(); + if(bossSize > 0){ + for(local i = 0; i < bossSize; i++){ + local targetObj = obj.getVar("setTar_boss").get_obj_vector(i); + if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); + } + } + if(namedSize > 0){ + for(local i = 0; i < namedSize; i++){ + local targetObj = obj.getVar("setTar_named").get_obj_vector(i); + if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); + } + } + if(normalSize > 0){ + for(local i = 0; i < normalSize; i++){ + local targetObj = obj.getVar("setTar_normal").get_obj_vector(i); + if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); + } + } + local sizeTar = obj.getVar("setTar").get_obj_vector_size(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HANDLINGSWORD, -1, 5, 1.0); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HANDLINGSWORD, -1, 6, 1.0); + if(sizeTar > 0){ + local targetObj = obj.getVar("setTar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + createSkillPassive_Swordman_bykk(obj,targetObj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,4,totalDamage,totalDamageExp,14,group,uniqueId,0,0,0); + } + } + else{ + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,225,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,4,totalDamage,totalDamageExp,14,-1,-1,0,0,0); + } +} + + +//极·神剑术(无形斩) +function checkExecutableSkill_InvisibleSwordCut(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_INVISIBLESWORDCUT); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_INVISIBLESWORDCUT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_InvisibleSwordCut(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_InvisibleSwordCut(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_SMBYKK_INVISIBLESWORDCUT_BODY); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + speedRate = speedRate.tofloat() * 1.2; + currentAni.setSpeedRate(speedRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_INVISIBLESWORDCUT, -1, 0, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_INVISIBLESWORDCUT)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/invisibleswordcut/startfront_18.ani"), 0, 0); + break; + } +} + +function onEndCurrentAni_InvisibleSwordCut(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_InvisibleSwordCut(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_InvisibleSwordCut(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1006: + obj.sq_PlaySound("INVISIBLE_SWORDCUT"); + obj.sq_PlaySound("R_SM_INVISIBLE_SWORDCUT"); + break; + case 1007: + sq_flashScreen(obj,0,20,260,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 10, 180); + break; + case 1008: + //`CreateInvisibleSword` + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_INVISIBLESWORDCUT, -1, 1, 1.0); + local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_INVISIBLESWORDCUT, -1, 2, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_INVISIBLESWORDCUT, 0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_INVISIBLESWORDCUT,1,totalDamage,totalDamageExp,hitMax,speedRate,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_InvisibleSwordCut(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_InvisibleSwordCut(obj, new_state) +{ + if(!obj) return; +} + + + + + + +function onAttack_SwordMaster_byKK(obj, damager, boundingBox, isStuck) +{ + // + if(isStuck) return; + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getVar("handlingsword_canShoot").getBool(0)){ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + shootHandlingSword_bykk(obj, group, uniqueId); + } +} + +function setState_weaponMaster_bykk(obj, state, datas, isResetTimer) +{ + switch(state){ + case 19: + if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 5){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SHORTSWORDMASTERY, -1, 4, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY); + local proc = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 5, skillLevel); + local time = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 7, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SHORTSWORDMASTERY,1,totalDamage,proc,time,level,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/guardwavedust.ani", 75, 0, 0); + } + else if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 5){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HEAVYSWORDMASTERY, -1, 3, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY); + local proc = sq_GetLevelData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 4, skillLevel); + local time = sq_GetLevelData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6, skillLevel); + local level = sq_GetSkillLevel(obj, 174) + 5; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SHORTSWORDMASTERY,1,totalDamage,proc,time,level,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/guardwavedust.ani", 75, 0, 0); + } + break; + } +} + + +///////刺伤 +function proc_appendage_puncture_bykk(appendage) +{ + local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); + local sourceObj = appendage.getSource(); + if(!parentObj || parentObj.getState() == STATE_DIE || !sourceObj || sourceObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + local obj = sq_GetCNRDObjectToSQRCharacter(sourceObj); + + if(appendage.getVar("bool").getBool(0)){ + local timer = appendage.getVar().get_ct_vector(0); + if(!timer){ + appendage.getVar().clear_ct_vector(); + appendage.getVar().push_ct_vector(); + timer = appendage.getVar().get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + local currentT = timer.Get(); + if(currentT >= appendage.getVar("custom").getInt(2)){ + local totalDamageMin = appendage.getVar("custom").getInt(0); + local totalDamageMax = appendage.getVar("custom").getInt(1); + local count = appendage.getVar("punctureCount").getInt(0); + if(count > 17) count = 17; + local totalDamage = totalDamageMin; + if(count > 3) totalDamage = totalDamage + ((totalDamageMax - totalDamageMin).tofloat() * (count.tofloat() / 17.0)).tointeger(); + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + local sizeRate = 100 + (100.0 * (count.tofloat() / 17.0)).tointeger(); + createSkillPassive_Swordman_bykk(obj,parentObj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetHeightObject(parentObj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_BLADEMASTERY,2,totalDamage,group,uniqueId,sizeRate,0,0,0,0); + appendage.getVar("punctureCount").setInt(0, 0); + appendage.getVar("bool").setBool(0, false); + appendage.getVar().clear_ct_vector(); + return; + } + } + + local t = appendage.getVar("setCoolTime").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t && t.isOnEvent(currentT) && appendage.getVar("punctureCount").getInt(0) >= 3){ + local totalDamageMin = appendage.getVar("custom").getInt(0); + local totalDamageMax = appendage.getVar("custom").getInt(1); + local count = appendage.getVar("punctureCount").getInt(0); + local totalDamage = totalDamageMin; + if(count > 3)totalDamage = totalDamage + ((totalDamageMax - totalDamageMin).tofloat() * (count.tofloat() / 17.0)).tointeger(); + totalDamage = totalDamage * appendage.getVar("custom").getInt(3) / 100; + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_BLADEMASTERY,1,totalDamage,group,uniqueId,0,0,0,0,0); + } + +} + +function onStart_appendage_puncture_bykk(appendage) +{ + if(!appendage) return; +} + +function onEnd_appendage_puncture_bykk(appendage) +{ + if(!appendage) return; +} + +function onStart_appendage_smblademastery(appendage) +{ + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!obj || obj.getState() == STATE_DIE) return; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == 1) appendage.getVar("bool").setBool(0, true); + else appendage.getVar("bool").setBool(0, false); +} + +function onAttackParent_appendage_smblademastery(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(appendage.getVar("bool").getBool(0) == false) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(damager.getState() == STATE_DIE) return; + if(realAttacker.isObjectType(OBJECTTYPE_CHARACTER)){ + local obj = sq_GetCNRDObjectToSQRCharacter(realAttacker); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY); + local proc = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 14, skillLevel) + 100; + local time = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 18, skillLevel) + 5; + local number = 1, isExplosion = 0, state = obj.getState(); + switch(state){ + case STATE_SMBYKK_CHARGEBURST: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGEBURST); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 8, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 9, skill_level); + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + case STATE_SMBYKK_CHARGECRASH: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGECRASH); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGECRASH, 2, skill_level) / 10; + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGECRASH, 3, skill_level); + break; + case STATE_SMBYKK_FLOWMINDONE: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 3, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 4, skill_level); + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + case STATE_SMBYKK_FLOWMINDTWO: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTWO, 8, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTWO, 9, skill_level); + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + case STATE_SMBYKK_FLOWMINDTHREE: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 1, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 2, skill_level); + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + case STATE_SMBYKK_FLOWMINDTHREE: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 1, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 2, skill_level); + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + } + puncture_bykk(obj, damager, boundingBox, isStuck, proc, number, time, isExplosion); + } + else if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(colObj.getCollisionObjectIndex() != PASSIVEOBJ_BYKK_SWORDMAN) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY); + local proc = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 14, skillLevel) + 100; + local time = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 18, skillLevel) + 5; + local number = 1, isExplosion = 0; + local skillIndex = colObj.getVar("skillIndex").getInt(0), subtype = colObj.getVar("subtype").getInt(0); + switch(skillIndex){ + case SKILL_SMBYKK_METEORSWORD: + switch(subtype){ + case 4: + case 6: + case 7: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_METEORSWORD); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_METEORSWORD, 7, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_METEORSWORD, 8, skill_level); + break; + case 15: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 27, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 28, skill_level); + break; + } + break; + case SKILL_SMBYKK_ILLUSIONSLASH: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_ILLUSIONSLASH); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 4, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 5, skill_level); + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + case SKILL_SMBYKK_MOMENTARYSLASH: + local sub = colObj.getVar("custom").getInt(4); + switch(sub){ + case 0: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASH); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 1, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 2, skill_level); + break; + case 1: + local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASH); + proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 4, skill_level); + number = number + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 5, skill_level); + break; + } + if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ + obj.getVar("blademastery_canExp").setBool(0, false); + isExplosion = 1; + } + break; + case SKILL_SMBYKK_BLADEMASTERY: + case SKILL_SMBYKK_MYSTICEQUIP: + return; + break; + } + puncture_bykk(obj, damager, boundingBox, isStuck, proc, number, time, isExplosion); + } +} + +function puncture_bykk(obj, damager, boundingBox, isStuck, proc, number, time, isExplosion) +{ + if(!obj) return;//APDPATH_SM_PUNCTURE + if(sq_getRandom(1, 100) < 100 - proc) return; + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, APDPATH_SM_PUNCTURE); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SM_PUNCTURE, true); + local totalDamageMin = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLADEMASTERY, -1, 15, 1.0); + local totalDamageMax = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLADEMASTERY, -1, 16, 1.0); + local hitRate = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 17, sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY)); + local hitTime = sq_GetIntData(obj, SKILL_SMBYKK_BLADEMASTERY, 14); + addAppendage.getVar("punctureCount").setInt(0, number); + addAppendage.getVar("custom").setInt(0, totalDamageMin); + addAppendage.getVar("custom").setInt(1, totalDamageMax); + addAppendage.getVar("custom").setInt(2, time); + addAppendage.getVar("custom").setInt(3, hitRate); + addAppendage.getVar("setCoolTime").clear_timer_vector(); + addAppendage.getVar("setCoolTime").push_timer_vector(); + local t = addAppendage.getVar("setCoolTime").get_timer_vector(0); + t.setParameter(hitTime, -1); + t.resetInstant(0); + print("setAppendage"); + } + else{ + addAppendage.getVar("punctureCount").setInt(0, addAppendage.getVar("punctureCount").getInt(0) + number); + local count = addAppendage.getVar("punctureCount").getInt(0); + print("count = "+count); + if(addAppendage.getVar("bool").getBool(0) == false && count >= 3){ + addAppendage.getVar("bool").setBool(0, true); + } + if(count >= 17 || isExplosion == 1){ + local totalDamageMin = addAppendage.getVar("custom").getInt(0); + local totalDamageMax = addAppendage.getVar("custom").getInt(1); + local count = addAppendage.getVar("punctureCount").getInt(0); + if(count > 17) count = 17; + local totalDamage = totalDamageMin; + if(count > 3) totalDamage = totalDamage + ((totalDamageMax - totalDamageMin).tofloat() * (count.tofloat() / 17.0)).tointeger(); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local sizeRate = 100 + (100.0 * (count.tofloat() / 17.0)).tointeger(); + createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_BLADEMASTERY,2,totalDamage,group,uniqueId,sizeRate,0,0,0,0); + addAppendage.getVar("punctureCount").setInt(0, 0); + addAppendage.getVar("bool").setBool(0, false); + addAppendage.getVar().clear_ct_vector(); + } + } +} + + +///////////////被动 +function onStart_appendage_smequiplightsword(appendage) +{ + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!obj || obj.getState() == STATE_DIE) return; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType != 5) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD); + if(sq_GetSkill(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD) && skillLevel > 0){ + local coolTime = sq_GetLevelData(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD, 0, skillLevel); + local attackSpeed = sq_GetLevelData(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD, 1, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("smequiplightsword"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("smequiplightsword",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (coolTime * -1).tofloat()); + } + } +} + +function onStart_appendage_smmysticequip(appendage) +{ + if(sq_GetCurrentModuleType() != 3) return; + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!obj || obj.getState() == STATE_DIE) return; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == -1) return; + if(weaponSubType == obj.getVar("weaponSubTypeSave").getInt(0)){ + obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); + return; + } + obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); + local apdPath = "character/swordman/1weaponmaster_bykk/ap_smmysticequip_buff.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + AddAppendage.getVar("custom").setInt(0, 1); + + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MYSTICEQUIP, -1, 1, 1.0); + local sub = 0; + if(sq_GetZPos(obj) > 0) sub = 1; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MYSTICEQUIP,1,totalDamage,sub,0,0,0,0,0,0); + +} + +function onStart_appendage_smfastequip(appendage) +{ + if(sq_GetCurrentModuleType() != 3) return; + local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); + if(!obj || obj.getState() == STATE_DIE) return; + local weaponSubType = obj.getWeaponSubType(); + if(weaponSubType == -1) return; + if(weaponSubType == obj.getVar("weaponSubTypeSave").getInt(0)){ + obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); + return; + } + obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); + local apdPath = "character/swordman/1weaponmaster_bykk/ap_smmysticequip_buff.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); + AddAppendage.getVar("custom").setInt(0, 0); + local buffTime = sq_GetIntData(obj, SKILL_SMBYKK_FASTEQUIP, 2); + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_MYSTICEQUIP) > 0){ + buffTime = sq_GetIntData(obj, SKILL_SMBYKK_MYSTICEQUIP, 2); + AddAppendage.getVar("custom").setInt(0, 1); + } + + if(buffTime != 0) AddAppendage.sq_SetValidTime(buffTime); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FASTEQUIP); + + + local moveSpeed = 0; + local attackSpeed = 0; + local criticalRate = sq_GetLevelData(obj, SKILL_SMBYKK_FASTEQUIP, 3, skillLevel); + local addAttack = sq_GetLevelData(obj, SKILL_SMBYKK_FASTEQUIP, 4, skillLevel); + if(AddAppendage.getVar("custom").getInt(0) > 0){ + moveSpeed = sq_GetLevelData(obj, SKILL_SMBYKK_MYSTICEQUIP, 3, skillLevel); + attackSpeed = sq_GetLevelData(obj, SKILL_SMBYKK_MYSTICEQUIP, 2, skillLevel); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_MYSTICEQUIP, skillLevel); + } + else{ + skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FASTEQUIP); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_FASTEQUIP, skillLevel); + } + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + + + print("moveSpeed = "+moveSpeed); + print("attackSpeed = "+attackSpeed); + print("criticalRate = "+criticalRate); + print("addAttack = "+addAttack); + + local change_appendage = AddAppendage.sq_getChangeStatus("smfastequip"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("smfastequip",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE , false, criticalRate.tofloat() * 0.1); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, addAttack.tofloat() * 0.1); + if(moveSpeed > 0){ + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); + } + } + + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_MYSTICEQUIP) > 0){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MYSTICEQUIP, -1, 1, 1.0); + local sub = 0; + if(sq_GetZPos(obj) > 0) sub = 1; + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MYSTICEQUIP,1,totalDamage,sub,0,0,0,0,0,0); + } + +} + +function onStart_appendage_smmysticequip_buff(appendage) +{ + // +} + +function ProcPassiveSkill_WeaponMaster_Swordman(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_SMBYKK_BLADEMASTERY: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smblademastery.nut", true); + } + break; + case SKILL_SMBYKK_EQUIPLIGHTSWORD: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smequiplightsword.nut", true); + } + break; + // case SKILL_SMBYKK_MYSTICEQUIP: + // if(skill_level > 0){ + // local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smmysticequip.nut", true); + // } + // break; + case SKILL_SMBYKK_FASTEQUIP: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smfastequip.nut", true); + } + break; + } +} + +function setWeaponMasterBuff_bykk(obj) +{ + local apdPath = "character/swordman/1weaponmaster_bykk/ap_smoverdrive.nut"; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); + local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_OVERDRIVE); + local bufftmime = sq_GetLevelData(obj, SKILL_SMBYKK_OVERDRIVE, 0, skillLevel); + if(bufftmime > 0) appendage.sq_SetValidTime(bufftmime); + appendage.setEnableIsBuff(true); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_OVERDRIVE, skillLevel); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); + // appendage.setBuffIconImage(7); + + setSkillBonusBate_Swordman_1WeaponMaster_bykk(obj); +} + +function onStartDungeon_Swordman_1Swordmaster(obj) +{ + local weaponSubType = obj.getWeaponSubType(); + obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); + setSkillBonusBate_Swordman_1WeaponMaster_bykk(obj); +} + +function onStartMap_1Swordmaster_bykk(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF); + if(addAppendage && addAppendage.isValid() && addAppendage.getVar().getBool(0) == false){ + local mainAtkObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(0); + if(mainAtkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); + local swordCount = colObj.getVar("custom").getInt(1); + if(swordCount < 5) colObj.getVar("custom").setInt(1, 5); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } +} + +function procAppend_Swordman_1WeaponMaster(obj) +{ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF); + if(addAppendage && addAppendage.isValid() && addAppendage.getVar().getBool(0) == false){ + obj.setSkillCommandEnable(SKILL_SMBYKK_HANDLINGSWORD, true); + if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HANDLINGSWORD) != -1){ + if(!sq_GetSkill(obj, SKILL_SMBYKK_HANDLINGSWORD).isInCoolTime()){ + if(addAppendage.getVar().getBool(1)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_SMBYKK_HANDLINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + obj.startSkillCoolTime(SKILL_SMBYKK_HANDLINGSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HANDLINGSWORD), -1); + } + addAppendage.getVar().setBool(0, true); + createEndHandlingSword_bykk(obj); + } + } +} + +function setSkillBonusBate_Swordman_1WeaponMaster_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/swordman/1weaponmaster_bykk/ap_smoverdrive.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_OVERDRIVE, 4, sq_GetSkillLevel(obj, SKILL_SMBYKK_OVERDRIVE))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, 91) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, 91, 1, sq_GetSkillLevel(obj, 91))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_FARTHERHIT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FARTHERHIT, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FARTHERHIT))) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD))) / 1000; + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + + + +//剑魂结束 + + + + + +SKILL_BYKK_FORCEOFTHUNDERER <- 251 + +function setforceholdAppendage_bykk(passiveobj, damager, bounding_box, is_stuck) +{ + if(!passiveobj) return; + local ID = passiveobj.getPassiveObjectIndex(); + print("ID = "+ID); + switch(ID){ + case 20101: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(passiveobj.getTopCharacter()); + if(sqrChr){ + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FORCEOFTHUNDERER); + if(skillLevel > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/ap_common_hold.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, passiveobj, -1, false, "appendage/character/ap_common_hold.nut", true); + sq_HoldAndDelayDie(damager, passiveobj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + case 20108: + case 24357: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(passiveobj.getTopCharacter()); + if(sqrChr){ + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FORCEOFTHUNDERER); + if(skillLevel > 0){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/ap_common_hold2.nut")){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, passiveobj, -1, false, "appendage/character/ap_common_hold2.nut", true); + sq_HoldAndDelayDie(damager, passiveobj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + } + } + break; + case 20132: + case 21192: + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/ap_common_hold2.nut")){ + CNSquirrelAppendage.sq_RemoveAppendage(damager, "appendage/character/ap_common_hold2.nut"); + } + break; + } +} + +function proc_appendage_common_hold(appendage) +{ + if(!appendage) return; + local sourceObj = appendage.getSource(); + if(!sourceObj){ + appendage.setValid(false); + return; + } +} + +function proc_appendage_common_hold2(appendage) +{ + if(!appendage) return; +} + + + + +//////剑影 + +//无式·极影剑 +function checkExecutableSkill_UnlimitedSpeedSlashBvs(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(231); + if (isUse){ + obj.sq_IntVectClear(); + local state = obj.getState(); + switch(state){ + case 0: + case 14: + obj.sq_IntVectPush(0);//共鸣系列 + break; + case STATE_SPIRITMOVE: + obj.sq_IntVectPush(1);//剑术系列 + break; + default: + obj.sq_IntVectPush(2);//幻鬼系列 + break; + } + obj.sq_AddSetStatePacket(231, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_UnlimitedSpeedSlashBvs(obj) +{ + if (!obj) return false; + return false; +} + +function onSetState_UnlimitedSpeedSlashBvs(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0://共鸣系列 + obj.sq_SetCurrentAnimation(345); + obj.sq_PlaySound("R_SM_UNLIMITEDSPEEDSLASH_BS"); + break; + case 1://剑术系列 + obj.sq_SetCurrentAnimation(346); + obj.sq_PlaySound("R_SM_UNLIMITEDSPEEDSLASH_BS"); + break; + case 2://幻鬼系列 + obj.sq_SetCurrentAnimation(344); + obj.sq_PlaySound("R_SM_UNLIMITEDSPEEDSLASH_BS"); + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 4, 1.0); + local totalDamageFinish = obj.sq_GetBonusRateWithPassive(231, -1, 5, 1.0); + local VSObject = getVSObject(obj); + if(VSObject){ + createSkillPassive_Swordman_bykk(obj,VSObject,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,4,totalDamage,totalDamageFinish,0,0,0,0,0,0); + local colObj = sq_GetCNRDObjectToCollisionObject(VSObject); + if(colObj.getVar("set").getInt(0) > 0) colObj.setTimeEvent(10, 1000, 1, true); + else sq_SendDestroyPacketPassiveObject(VSObject); + } + else createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),5,231,4,totalDamage,totalDamageFinish,0,0,0,0,0,0); + break; + case 3: + obj.sq_SetCurrentAnimation(347); + break; + } +} + +function onEndCurrentAni_UnlimitedSpeedSlashBvs(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(231, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onKeyFrameFlag_UnlimitedSpeedSlashBvs(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 106://`slash1` 58 0 16 + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,1,0,0,0,0,0,0); + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 1, 1.0); + local VSObject = getVSObject(obj); + if(VSObject){ + createSkillPassive_Swordman_bykk(obj,VSObject,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,2,totalDamage,1,0,0,0,0,0,0); + local colObj = sq_GetCNRDObjectToCollisionObject(VSObject); + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(0, sq_GetXPos(colObj) - sq_GetXPos(obj)); + else obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(0, sq_GetXPos(obj) - sq_GetXPos(colObj)); + obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(1, sq_GetYPos(colObj) - sq_GetYPos(obj)); + if(colObj.getVar("set").getInt(0) > 0) colObj.setTimeEvent(10, 1000, 1, true); + else sq_SendDestroyPacketPassiveObject(VSObject); + } + else{ + obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(0, 0); + obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(1, -1); + createSkillPassive_Swordman_bykk(obj,VSObject,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),5,231,2,totalDamage,1,0,0,0,0,0,0); + } + break; + case 110://`slash2` 64 0 49 + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,2,0,0,0,0,0,0); + break; + case 114://`slash3` 100 0 24 + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,3,0,0,0,0,0,0); + break; + case 118://`slash4` 66 0 88 + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,4,0,0,0,0,0,0); + break; + case 121://`slash5` 62 0 13 + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,5,0,0,0,0,0,0); + break; + case 201://`start move` + local speed = 2000.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + break; + case 202: + sq_SetMyShake(obj, 10, 80); + break; + case 203: + sq_flashScreen(obj,0,0,360,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 204: + sq_SetVelocity(obj, 0, 0.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 2, 1.0) + obj.sq_GetBonusRateWithPassive(231, -1, 3, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 191)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 304: + break; + case 306: + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 2, 1.0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 191)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_flashScreen(obj,0,0,360,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 12, 240); + sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/ultimatespeedslashbvs/ultimatespeedslashfinishbs_29.ani", 280, 0, 55); + local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 3, 1.0); + createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,obj.getVar("UnlimitedSpeedSlashBvsSet").getInt(0),obj.getVar("UnlimitedSpeedSlashBvsSet").getInt(1),0,sq_GetDirection(obj),5,231,3,totalDamage,0,0,0,0,0,0,0); + break; + } + return true; +} + +function onEndState_UnlimitedSpeedSlashBvs(obj, new_state) +{ + if(!obj) return; +} + diff --git a/user/116.205.165.25/8_thief_1.c b/user/116.205.165.25/8_thief_1.c new file mode 100644 index 0000000..9fa98ed --- /dev/null +++ b/user/116.205.165.25/8_thief_1.c @@ -0,0 +1,3677 @@ + +function onChangeSkillEffect_Thief_Necromancer(obj, skillIndex, reciveData) +{ + if(!obj) return; + switch(skillIndex){ + case SKILL_BYKK_SUMMONNICOLAS: + local subtype = reciveData.readDword(); + switch(subtype){ + case 1: + local id = reciveData.readDword(); + local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword())); + switch(id){ + case MONSTER_ID_NICOLAS: + setMonsterAppendage_Necromancer_byKK(obj, monster_obj, APDPATH_NICOLAS, "NicolasObj", SKILL_BYKK_SUMMONNICOLAS); + break; + case MONSTER_ID_ZOMBIE: + setMonsterAppendage_Necromancer_byKK(obj, monster_obj, APDPATH_ZOMBIE, "ZombieObj", SKILL_BYKK_NICOLASSUMMONZOMBIE); + break; + } + break; + } + break; + } +} + +function setMonsterAppendage_Necromancer_byKK(obj, monster_obj, appendagepath, monstername, skill_index) +{ + if(!obj) return; + if(!monster_obj) return; + if(appendagepath == null || monstername == null || skill_index == null) return; + appendagepath = appendagepath.tostring(); + monstername = monstername.tostring(); + local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj); + if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true); + AddAppendage.getVar("sqrChr").clear_obj_vector(); + AddAppendage.getVar("sqrChr").push_obj_vector(obj); + local monsternum = obj.getVar(monstername).get_obj_vector_size(); + if(monsternum > 0){ + obj.getVar(monstername).push_obj_vector(monster_obj); + } + else{ + obj.getVar(monstername).clear_obj_vector(); + obj.getVar(monstername).push_obj_vector(monster_obj); + } + setMonsterInfo_Thief_Necromancer(obj, monster_obj, skill_index, AddAppendage); + } +} + +function setMonsterInfo_Thief_Necromancer(obj, monster_obj, skill_index, appendage) +{ + if(!obj) return; + + monster_obj.setMapFollowParent(obj); + monster_obj.setMapFollowType(1); + + local monster_id = monster_obj.getCollisionObjectIndex(); + switch(monster_id){ + case MONSTER_ID_NICOLAS: + local coolt_01 = 1000, coolt_02 = 2000, coolt_03 = 3000, coolt_04 = 4000; + local coolTime = [coolt_01, coolt_02, coolt_03, coolt_04]; + local skillIndex = ["skill_1", "skill_2", "skill_3", "skill_4"]; + for(local i = 0; i < skillIndex.len(); i++){ + appendage.getVar(skillIndex[i]).clear_timer_vector(); + appendage.getVar(skillIndex[i]).push_timer_vector(); + local t = appendage.getVar(skillIndex[i]).get_timer_vector(0); + t.setParameter(coolTime[i], -1); + t.resetInstant(0); + } + local sub = 0; + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) sub = 10; + appendage.getVar("custom").setInt(0, sub); + monsterattack_Thief_Necromancer_ksk(monster_obj,0); + break; + case MONSTER_ID_ZOMBIE: + appendage.getVar("skill_1").clear_timer_vector(); + appendage.getVar("skill_1").push_timer_vector(); + local t = appendage.getVar("skill_1").get_timer_vector(0); + t.setParameter(1000, -1); + t.resetInstant(0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE); + local hitMax = sq_GetLevelData(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE, 4, skillLevel); + appendage.getVar("custom").setInt(1, hitMax); + appendage.getVar("custom").setInt(0, 0); + break; + } +} + +function procAppend_Thief_Necromancer(obj) +{ + local size = obj.getVar("NicolasObj").get_obj_vector_size(); + if(size < 1){ + obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBEHAVIOR, false); + obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBLACKARACHNIA, false); + obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBLACKAREA, false); + obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBLACKWAVE, false); + if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) < 1) obj.setSkillCommandEnable(SKILL_BYKK_NICOLASSUMMONZOMBIE, false); + } + size = obj.getVar("ballacreObj").get_obj_vector_size(); + if(size < 1){ + obj.setSkillCommandEnable(SKILL_BYKK_BALLACREADVENT, false); + obj.setSkillCommandEnable(SKILL_BYKK_BALLACRESTRONGATTACK, false); + obj.setSkillCommandEnable(SKILL_BYKK_MADNESSBALLACRE, false); + obj.setSkillCommandEnable(SKILL_BYKK_GRABCOLLAR, false); + obj.setSkillCommandEnable(SKILL_BYKK_AMBITIONOFBALLACRE, false); + obj.setSkillCommandEnable(SKILL_BYKK_GUILLOTINE, false); + obj.setSkillCommandEnable(SKILL_BYKK_PHANTOMSTROM, false); + obj.setSkillCommandEnable(SKILL_BYKK_EXECUTIONERSLASH, false); + if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) > 0) setBallacreSkillEffet_bykk(obj); + } + else{ + obj.setSkillCommandEnable(SKILL_BYKK_APPORTBALLACRE, false); + } +} + +function setCommandEnable_Thief_Necromancer(obj, skillIndex) +{ + local currentMp = obj.getMp(); + local skill = sq_GetSkill(obj, skillIndex); + local consumeMp = skill.getSpendMp(obj, -1); + if(!skill.isInCoolTime() && currentMp > consumeMp){ + obj.setSkillCommandEnable(skillIndex, true); + return true; + } +} + +function startSkillCoolTime_Thief_Necromancer_bykk(obj, skillIndex, skillLevel, currentCoolTime) +{ + if(sq_GetSkillLevel(obj, SKILL_BYKK_WANDMASTERY) > 0){ + local weaponType = obj.getWeaponSubType(); + if(weaponType == 3){ + if(skillIndex != SKILL_BYKK_PHANTOMSTROM && skillIndex != SKILL_BYKK_BALLACREADVENT){ + local newSkillCoolTime = currentCoolTime * 90 / 100; + print("currentCoolTime : "+currentCoolTime); + print("newSkillCoolTime : "+newSkillCoolTime); + return newSkillCoolTime; + } + } + } + return currentCoolTime; +} + +function ProcPassiveSkill_NecroMancer_bykk(obj, skill_index, skill_level) +{ + switch(skill_index){ + case SKILL_BYKK_FEAROFBALLACRE: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_FEAROFBALLACRE, true); + } + break; + case SKILL_BYKK_WANDMASTERY: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_WANDMASTERY, true); + } + break; + } +} + +function onStart_appendage_fearofballacre_tochr(appendage) +{ + if(!appendage) return; + appendage.getVar("coolTime").clear_timer_vector(); + appendage.getVar("coolTime").push_timer_vector(); + local t = appendage.getVar("coolTime").get_timer_vector(0); + t.setParameter(1000, -1); + t.resetInstant(0); + t.setEventOnStart(true); + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FEAROFBALLACRE); + local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 4, skillLevel); + local criticaldamageRate = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 5, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 3, skillLevel); + local range = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 6, skillLevel); + appendage.getVar("custom").setInt(0, lifeTime); + appendage.getVar("custom").setInt(1, range); + local change_appendage = appendage.sq_getChangeStatus("fearofballacre"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("fearofballacre",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat()); + } +} + +function proc_appendage_fearofballacre_tochr(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } + + local t = appendage.getVar("coolTime").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + if(t && t.isOnEvent(currentT)){ + local lifeTime = appendage.getVar("custom").getInt(0); + local range = appendage.getVar("custom").getInt(1); + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, APDPATH_FEAROFBALLACRE_TOENEMY)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, APDPATH_FEAROFBALLACRE_TOENEMY, true); + AddAppendage.sq_SetValidTime(lifeTime); + } + } + } + } +} + +function proc_appendage_fearofballacre_toenemy(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function drawAppend_appendage_fearofballacre_toenemy(appendage, isOver, x, y, isFlip) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE) { + appendage.setValid(false); + return; + } + local var = appendage.getVar(); + local Ani = var.GetAnimationMap("fearofballacre_debuff", "character/thief/effect/animation/2_necromancer_bykk/fearofballacre/debuff.ani"); + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, x, y - sq_GetHeightObject(parentObj), isFlip); +} + +function onStart_appendage_wandmastery(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local weaponType = obj.getWeaponSubType(); + if(weaponType == -1) return; + if(weaponType == 3){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WANDMASTERY); + local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_WANDMASTERY, 0, skillLevel); + local change_appendage = appendage.sq_getChangeStatus("wandmastery"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("wandmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); + } + } +} + +//暗魂波 +function checkExecutableSkill_DarkSoul(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKSOUL); + if (isUse){ + obj.getVar("DarkSoul_Bool").setBool(0, true); + obj.sq_IntVectClear(); + if(obj.getVar("ballacreObj").get_obj_vector_size() > 0){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) < 1){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_DARKSOUL); + obj.sq_IntVectPush(2); + } + else obj.sq_IntVectPush(1); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DARKSOUL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DarkSoul(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DarkSoul(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOUL); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOULNONCHARGELAUNCH); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOULCHARGECAST); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOULCHARGELAUNCH); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_DarkSoul(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DarkSoul(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 2: + local bDownKey = obj.isDownSkillLastKey(); + if(bDownKey){ + if(obj.getVar("DarkSoul_Bool").getBool(0)){ + local stateTime = obj.sq_GetStateTimer(); + if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_DARKSOUL, 4)){ + obj.getVar("DarkSoul_Bool").setBool(0, false); + } + } + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(STATE_BYKK_DARKSOUL, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_DarkSoul(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local bonusRate = 0; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_UNHOLYAURA); + if(skillLevel > 0) bonusRate = sq_GetLevelData(obj, SKILL_BYKK_UNHOLYAURA, 5, skillLevel).tofloat() / sq_GetLevelData(obj, SKILL_BYKK_UNHOLYAURA, 2, skillLevel).tofloat(); + local totalDamage = 0; + local increaseRate = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 5, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_DARKSOUL, 1); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_DARKSOUL, 0); + local offsetY = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 4, 1.0) + 100; + local subState = obj.getSkillSubState(); + switch(subState){ + case 3: + if(obj.getVar("DarkSoul_Bool").getBool(0) == false){ + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 0, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100; + local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 3, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,60,0,68,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,2,totalDamage,totalDamage_exp,hitMax,offsetY,hitTime,0,0,0); + break; + } + case 0: + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 0, bonusRate) + 100; + local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 3, bonusRate) + 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,60,0,68,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,1,totalDamage,totalDamage_exp,hitMax,offsetY,hitTime,0,0,0); + break; + case 1: + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 7, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100; + local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 3, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,60,0,68,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,3,totalDamage,totalDamage_exp,hitMax,offsetY,hitTime,0,0,0); + break; + } + break; + } + return true; +} + +function onTimeEvent_DarkSoul(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DarkSoul(obj, new_state) +{ + if(!obj) return; +} + +//降临:尼古拉斯 +function checkExecutableSkill_SummonNicolas(obj) +{ + if (!obj) return false; + local number = obj.getVar("NicolasObj").get_obj_vector_size(); + if(number > 0 && obj.getVar("summonnicolas_bool").getBool(0)){ + obj.getVar("summonnicolas_bool").setBool(0, false); + for(local i = 0; i < number; i++){ + local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(i); + if(nicolasObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_AddSetStatePacketActiveObject(activeObj,12,sq_GetGlobalIntVector(), STATE_PRIORITY_USER); + } + } + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONNICOLAS); + if (isUse){ + obj.getVar("summonnicolas_bool").setBool(0, true); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_SUMMONNICOLAS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SummonNicolas(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SummonNicolas(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_SUMMONNICOLAS); + break; + } +} + +function onEndCurrentAni_SummonNicolas(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SummonNicolas(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SummonNicolas(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local level = sq_GetSkillLevel(obj, 174); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLAS); + local summonTime = sq_GetLevelData(obj, SKILL_BYKK_SUMMONNICOLAS, 10, skillLevel); + summonmonster_necromancer_bykk(obj,obj,50,0,0,0,MONSTER_ID_NICOLAS,summonTime,level,0); + print(120); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_NICOLAS_TOCHR)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_NICOLAS_TOCHR); + print(121); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_NICOLAS_TOCHR, true); + print(122); + break; + } + return true; +} + +function onTimeEvent_SummonNicolas(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SummonNicolas(obj, new_state) +{ + if(!obj) return; +} + +function onSourceKeyFrameFlag_appendage_nicolas(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + switch(flagIndex){ + case 100: + local currentAni = parentObj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 30000 / delay; + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,10,speedRate,0,0,0,0,0,0,0); + break; + case 102: //蜘蛛团 + local bonusRate = 100; + if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(1); + bonusRate = bonusRate.tofloat() / 100.0; + // print("bonusRate_blackspi = "+bonusRate); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 7, bonusRate) + 100; + local hitTime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 3, 1.0) + 100; + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,5,0,50,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,1,totalDamage,hitTime,0,0,0,0,0,0); + break; + case 201: //召唤僵尸 + local level = sq_GetSkillLevel(sqrChr, 174); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE); + local summonTime = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 9, skillLevel); + local summonMax = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 11, skillLevel); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,58,0,116,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,1,level,summonTime,summonMax,0,0,0,0,0); + break; + case 301: //吸魂暗劲波 + if(sqrChr.isDownSkillLastKey()){ + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 100); + sq_setCurrentAxisPos(parentObj, 0, offsetX); + sq_setCurrentAxisPos(parentObj, 1, sq_GetYPos(sqrChr)); + sq_SetCurrentDirection(parentObj, sq_GetDirection(sqrChr)); + } + local currentAni = parentObj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 3, 200); + sqrChr.getVar("blackwave_tar").clear_obj_vector(); + parentObj.getVar("blackwave_bool").setBool(0, true); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, -1, 1, 1.0) + 100; + local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, 0); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKWAVE,1,totalDamage,hitTime,0,0,0,0,0,0); + break; + case 304: //吸魂暗劲波 + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/bodysmokenormal.ani"; + local pooledObj = createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj),ENUM_DRAWLAYER_NORMAL); + parentObj.getVar("effect").clear_obj_vector(); + parentObj.getVar("effect").push_obj_vector(pooledObj); + local aniPath2 = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/linestartnormal.ani"; + local angle = [135,110,60,45,0,-40,-80,-120,-150,-175]; + local xPos = sq_GetDistancePos(sq_GetXPos(parentObj), parentObj.getDirection(), 10), yPos = sq_GetYPos(parentObj), zPos = sq_GetZPos(parentObj) + 100; + for(local i = 0; i < angle.len(); i++){ + local pooledObj = createOnlyDrawObject_Theif_bykk(parentObj, aniPath2, true, parentObj.getDirection(), xPos, yPos - 1, zPos, ENUM_DRAWLAYER_NORMAL); + sq_SetCustomRotate(pooledObj, sq_ToRadian(angle[i].tofloat())); + } + break; + case 310: //吸魂暗劲波 + local effect_obj = parentObj.getVar("effect").get_obj_vector(0); + if(effect_obj) effect_obj.setValid(false); + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/blastbeforebody.ani"; + local aniPath2 = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/blastbeforeeffect.ani"; + createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj),ENUM_DRAWLAYER_NORMAL); + createOnlyDrawObject_Theif_bykk(parentObj,aniPath2,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj) - 1,sq_GetZPos(parentObj) - 1,ENUM_DRAWLAYER_NORMAL); + break; + case 311: //吸魂暗劲波 + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/blastbeforeeyedodge.ani"; + createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj),ENUM_DRAWLAYER_NORMAL); + + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, -1, 3, 1.0) + 100; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, 4) / 10; + local size = sqrChr.getVar("blackwave_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("blackwave_tar").get_obj_vector(i); + if(targetObj){ + createSkillPassive_Theif_bykk(sqrChr,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,sq_GetHeightObject(targetObj) / 2,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,sizeRate,0,0,0,0,0,0); + } + } + } + break; + case 322: //吸魂暗劲波 + if(parentObj.getVar("blackwave_bool").getBool(0)){ + parentObj.getVar("blackwave_bool").setBool(0, false); + local size = sqrChr.getVar("blackwave_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("blackwave_tar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE); + } + } + } + } + break; + case 404: //艾克洛索 + local targetObj = parentObj.getVar("targetObj").get_obj_vector(0); + if(targetObj){ + local bonusRate = 100; + if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(2); + bonusRate = bonusRate.tofloat() / 100.0; + // print("bonusRate_ara = "+bonusRate); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 8, bonusRate) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 9, bonusRate) + 100; + createSkillPassive_Theif_bykk(sqrChr,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,400,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,2,totalDamage,totalDamage2,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/common/animation/magictargetwarningterrible.ani", 0, 0, -sq_GetZPos(targetObj)); + } + break; + case 503: //暗影蛛丝阵 + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_NICOLASBLACKAREA); + local lifeTime = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 4, skillLevel); + local totalDamage = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 5, skillLevel); + local darkTol = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 0, skillLevel); + local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 0); + local sizeRate = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 2, skillLevel) / 2; + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, darkTol.tofloat() , 0); + if (ap){ + ap.getAppendageInfo().setValidTime(lifeTime); + ap.sq_Append(parentObj, sqrChr); + } + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(parentObj),parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKAREA,1,totalDamage,lifeTime,hitTime,sizeRate,group,uniqueId,0,0); + break; + case 701: //tp黑蜘蛛 + local bonusRate = 100; + if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(1); + bonusRate = bonusRate.tofloat() / 100.0; + // print("bonusRate_blackspi_tp = "+bonusRate); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 11, bonusRate) + 100; + local hitTime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 3, 1.0) + 100; + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,60,-1,10,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,3,totalDamage,hitTime,0,0,0,0,0,0); + break; + case 802: //tp艾克尼亚的灵体 + local targetObj = parentObj.getVar("targetObj").get_obj_vector(0); + if(targetObj){ + local bonusRate = 100; + if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(1); + bonusRate = bonusRate.tofloat() / 100.0; + // print("bonusRate_ara_tp = "+bonusRate); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 14, bonusRate) + 100; + createSkillPassive_Theif_bykk(sqrChr,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(targetObj),parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,5,totalDamage,0,0,0,0,0,0,0); + } + break; + case 901: //暗黑蛛丝引 + if(sqrChr.isDownSkillLastKey()){ + sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0); + } + break; + case 902: //暗黑蛛丝引 + if(sqrChr.isDownSkillLastKey()){ + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 100); + sq_setCurrentAxisPos(parentObj, 0, offsetX); + sq_setCurrentAxisPos(parentObj, 1, sq_GetYPos(sqrChr)); + sq_SetCurrentDirection(parentObj, sq_GetDirection(sqrChr)); + sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0); + } + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/start_blackground.ani"; + createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case 903: //暗黑蛛丝引 + sq_SetMyShake(parentObj, 10, 500); + monsterattack_Thief_Necromancer_ksk(parentObj,13); + break; + case 1004: //近身攻击 + local currentAni = parentObj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 6000 / delay; + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBEHAVIOR, -1, 11, 1.0) + 100; + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,6,speedRate,totalDamage,0,0,0,0,0,0); + case 1101: //吸魂暗劲波护石 + case 1200: + if(sqrChr.isDownSkillLastKey()){ + sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0); + } + break; + case 1201: //暗黑蛛丝引 + if(sqrChr.isDownSkillLastKey()){ + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 50); + sq_setCurrentAxisPos(parentObj, 0, offsetX); + sq_setCurrentAxisPos(parentObj, 1, sq_GetYPos(sqrChr)); + sq_SetCurrentDirection(parentObj, sq_GetDirection(sqrChr)); + sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0); + } + break; + case 1203://`create Dead Nicolas sister` 142 0 0 + local currentAni = parentObj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(3, 7); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 0, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 2, 5.0) + 100; + local holdTime = 3000 + delay; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 5); + local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 4); + sqrChr.getVar("blacjarachnia_tar").clear_obj_vector(); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,142,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,4,totalDamage,sizeRate,totalDamage2,holdTime,hitTime,0,0,0); + print("test"); + break; + case 1301: + sq_flashScreen(parentObj,200,200,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local currentAni = parentObj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(6, 15); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 0, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 2, 1.0) + 100; + local holdTime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 3, 1.0) + 100 + delay; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 5); + local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 4); + sqrChr.getVar("blacjarachnia_tar").clear_obj_vector(); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,1,totalDamage,sizeRate,totalDamage2,holdTime,hitTime,0,0,0); + break; + case 1306: + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/attack_blackground.ani"; + createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),0,ENUM_DRAWLAYER_BOTTOM); + local size = sqrChr.getVar("blacjarachnia_tar").get_obj_vector_size(); + local currentAni = parentObj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(6, 10); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("blacjarachnia_tar").get_obj_vector(i); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE); + if(addAppendage && !sq_IsFixture(activeObj)) sq_MoveToAppendageForce(targetObj, sqrChr, parentObj, 100, 0, targetObj.getZPos(), delay, true, addAppendage); + } + } + } + break; + case 1307: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 1, 1.0) + 100; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 5); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,2,totalDamage,sizeRate,0,0,0,0,0,0); + break; + } + return true; +} + +function proc_appendage_nicolas_tochr(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function proc_appendage_nicolas(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + local sub = appendage.getVar("custom").getInt(0); + if(sub == 3 || sub == 13) return; + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local t_02 = appendage.getVar("skill_2").get_timer_vector(0); + local t_03 = appendage.getVar("skill_3").get_timer_vector(0); + local t_04 = appendage.getVar("skill_4").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + switch(state){ + case STATE_STAND: + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + if(parentObj.getVar("blackwave_bool").getBool(0)){ + parentObj.getVar("blackwave_bool").setBool(0, false); + local size = sqrChr.getVar("blackwave_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("blackwave_tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE); + } + } + } + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + local skillt, attackIndex, distanceX, distanceXmin, distanceY; + switch(sub){ + case 1: + case 11: + skillt = [t_02,t_01,t_04]; + attackIndex = [1,10,4]; + if(sub == 11) attackIndex = [7,10,8]; + distanceX = [160,160,500]; + distanceXmin = [0,0,0]; + distanceY = [16,38,200]; + break; + case 0: + case 10: + case 2: + case 12: + skillt = [t_03,t_02]; + attackIndex = [4,1]; + if(sub == 10 || sub == 12) attackIndex = [8,7]; + distanceX = [500,500]; + distanceXmin = [0,0]; + distanceY = [200,16]; + break; + } + for(local i = 0;i < skillt.len(); i++){ + if(skillt[i] && skillt[i].isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ + monsterattack_Thief_Necromancer_ksk(parentObj,attackIndex[i]); + return; + } + } + } + } + } + else{ + targetObj = sq_FindTarget( parentObj, -1000, 1000, 800, 350); + if(targetObj){ + sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + break; + } +} + +function onStart_appendage_nicolas(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_nicolas(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_AddSetStatePacketActiveObject(activeObj, 12, sq_GetGlobalIntVector(), STATE_PRIORITY_USER); +} + +//服从 +function checkExecutableSkill_NicolasBehavior(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBEHAVIOR); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_NicolasBehavior(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_NicolasBehavior(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_NICOLASBEHAVIOR_CASTING_BODY); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_BYKK_NICOLASBEHAVIOR_LOOP_BODY); + local sub = obj.getVar("NicolasBehavior_Sub").getInt(0); + local aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard.ani"]; + obj.getVar("effect").clear_obj_vector(); + switch(sub){ + case 1://近战 + case 11://近战 + aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee_sub.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard.ani"]; + break; + case 2://远程 + case 12://远程 + aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range_sub.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard.ani"]; + break; + case 3://守护 + case 13://守护 + local aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard_sub.ani"]; + break; + } + local offsetX = [-35, 35, 0], offsetZ = [130, 130, 165]; + for(local i = 0; i < aniPath.len(); i++){ + local pooledObj = createOnlyDrawObject_Theif_bykk(obj,aniPath[i],false,ENUM_DIRECTION_RIGHT,sq_GetDistancePos(sq_GetXPos(obj), ENUM_DIRECTION_RIGHT, offsetX[i]),sq_GetYPos(obj),sq_GetZPos(obj) + offsetZ[i],ENUM_DRAWLAYER_NORMAL); + obj.getVar("effect").push_obj_vector(pooledObj); + } + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_BYKK_NICOLASBEHAVIOR_END_BODY); + obj.sq_PlaySound("TF_NICOLAS_OBEY"); + local size = obj.getVar("effect").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("effect").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_NICOLAS_TOCHR); + if(addAppendage){//92近战 93远程 94守护 + local sub = obj.getVar("NicolasBehavior_Sub").getInt(0); + if(sub > 0){ + if(sub > 10) addAppendage.setBuffIconImage(sub + 81); + else addAppendage.setBuffIconImage(sub + 91); + } + local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0); + if(nicolasObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj); + local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_NICOLAS); + addAppendage2.getVar("custom").setInt(0, sub); + switch(sub){ + case 1: + case 11: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASBEHAVIOR); + local phyDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 4, skillLevel); + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 5, skillLevel); + local change_appendage2 = addAppendage2.sq_getChangeStatus("nicolas"); + if(!change_appendage2) change_appendage2 = addAppendage2.sq_AddChangeStatus("nicolas",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage2){ + change_appendage2.clearParameter(); + change_appendage2.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, true, (phyDefense).tofloat()); + change_appendage2.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, true, (mglDefense).tofloat()); + } + local change_appendage = addAppendage.sq_getChangeStatus("nicolas_tochr"); + if(change_appendage) change_appendage.clearParameter(); + break; + case 2: + case 12: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASBEHAVIOR); + local spiBonusRate = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 6, skillLevel); + local araBonusRate = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 7, skillLevel); + addAppendage2.getVar("custom").setInt(1, spiBonusRate); + addAppendage2.getVar("custom").setInt(2, araBonusRate); + + local change_appendage = addAppendage.sq_getChangeStatus("nicolas_tochr"); + if(change_appendage) change_appendage.clearParameter(); + break; + case 3: + case 13: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASBEHAVIOR); + local phyDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 8, skillLevel); + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 9, skillLevel); + local change_appendage = addAppendage.sq_getChangeStatus("nicolas_tochr"); + if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("nicolas_tochr",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phyDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mglDefense).tofloat()); + } + break; + } + } + } + break; + } +} + +function onEndCurrentAni_NicolasBehavior(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_NicolasBehavior(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){//远程 + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) obj.getVar("NicolasBehavior_Sub").setInt(0, 12); + else obj.getVar("NicolasBehavior_Sub").setInt(0, 2); + local nicolasBehaviorObj = obj.getVar("NicolasBehavior_obj").get_obj_vector(0); + if(nicolasBehaviorObj) nicolasBehaviorObj.setValid(false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){//守护 + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) obj.getVar("NicolasBehavior_Sub").setInt(0, 13); + else obj.getVar("NicolasBehavior_Sub").setInt(0, 3); + sq_SendCreatePassiveObjectPacket(obj, 1008611, 0, 0, 0, 0, obj.getDirection()); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){//近战 + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) obj.getVar("NicolasBehavior_Sub").setInt(0, 11); + else obj.getVar("NicolasBehavior_Sub").setInt(0, 1); + local nicolasBehaviorObj = obj.getVar("NicolasBehavior_obj").get_obj_vector(0); + if(nicolasBehaviorObj) nicolasBehaviorObj.setValid(false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true); + } + local stateTime = obj.sq_GetStateTimer(); + if(stateTime >= 2000){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_NicolasBehavior(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_NicolasBehavior(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_NicolasBehavior(obj, new_state) +{ + if(!obj) return; + if(new_state != SKILL_BYKK_NICOLASBEHAVIOR){ + local size = obj.getVar("effect").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local pooledObj = obj.getVar("effect").get_obj_vector(i); + if(pooledObj) pooledObj.setValid(false); + } + } + } +} + +function onCreateObject_NicolasBehavior(obj, createObject) +{ + if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ + local colObj = sq_GetCNRDObjectToCollisionObject(createObject); + local id = colObj.getCollisionObjectIndex(); + if(id == 1008611){ + sq_moveWithParent(obj, colObj); + obj.getVar("NicolasBehavior_obj").clear_obj_vector(); + obj.getVar("NicolasBehavior_obj").push_obj_vector(colObj); + print("test"); + } + } +} + +//驱使僵尸 +function checkExecutableSkill_NicolasSummonZombie(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASSUMMONZOMBIE); + if (isUse){ + if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASSUMMONZOMBIE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + local size = obj.getVar("NicolasObj").get_obj_vector_size(); + if(size > 0){ + local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0); + if(nicolasObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj); + monsterattack_Thief_Necromancer_ksk(activeObj,2); + } + } + local state = obj.getState(); + switch(state){ + case STATE_STAND: + case STATE_DASH: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + } + return true; + } + return false; +} + +function checkCommandEnable_NicolasSummonZombie(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_NicolasSummonZombie(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_SUMMONZOMBIE_ACHERON); + break; + } +} + +function onEndCurrentAni_NicolasSummonZombie(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_NicolasSummonZombie(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_NicolasSummonZombie(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local level = sq_GetSkillLevel(obj, 174); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE); + local summonTime = sq_GetLevelData(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE, 9, skillLevel); + local summonMax = sq_GetLevelData(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE, 11, skillLevel); + for(local i = 0; i < summonMax; i++){ + summonmonster_necromancer_bykk(obj,obj,150+sq_getRandom(-15,15),sq_getRandom(-15,15),0,0,MONSTER_ID_ZOMBIE,summonTime,level,0); + } + break; + } + return true; +} + +function onTimeEvent_NicolasSummonZombie(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_NicolasSummonZombie(obj, new_state) +{ + if(!obj) return; +} + +function onSourceKeyFrameFlag_appendage_zombie(appendage,flagIndex) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj){ + appendage.setValid(false); + return true; + } + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if(!sqrChr) return true; + switch(flagIndex){ + case 101: + //撕咬 + parentObj.getVar("tar").clear_obj_vector(); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 2, 1.0) + 100; + if(appendage.getVar("custom").getInt(0) == appendage.getVar("custom").getInt(1) - 1) totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 3, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE); + local level = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 7, skillLevel); + local time = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 6, skillLevel); + local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 5, skillLevel); + local group = sq_GetGroup(parentObj); + local uniqueId = sq_GetUniqueId(parentObj); + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,2,totalDamage,level,time,prob,group,uniqueId,0,0); + break; + case 103: + if(parentObj.getVar("tar").get_obj_vector_size() > 0) monsterattack_Thief_Necromancer_ksk(parentObj, 1); + break; + case 202: monsterattack_Thief_Necromancer_ksk(parentObj, 2); break; + case 303: + if(appendage.getVar("custom").getInt(0) == appendage.getVar("custom").getInt(1) - 1){ + //爆炸 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 12, 1.0) + 100; + local sizeRate = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 14, 1.0) + 100; + createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,sq_GetHeightObject(parentObj) / 2,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,sizeRate,0,0,0,0,0,0); + parentObj.setValid(false); + } + else appendage.getVar("custom").setInt(0, appendage.getVar("custom").getInt(0) + 1); + local size = parentObj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = parentObj.getVar("tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_ZOMBIE_HOLD); + } + } + break; + } + return true; +} + +function proc_appendage_zombie(appendage) +{ + if (!appendage) return; + local parentObj = appendage.getParent(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); + if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){ + appendage.setValid(false); + return; + } + + if(!sq_IsMyControlObject(sqrChr)) return; + + local t_01 = appendage.getVar("skill_1").get_timer_vector(0); + local currentT = appendage.getTimer().Get(); + + local state = parentObj.getState(); + switch(state){ + case STATE_STAND: + local timer = appendage.getVar("atktime").get_ct_vector(0); + local currentTT = timer.Get(); + if(currentTT < ATK_TIME) return; + timer.Reset(); + timer.Start(10000,0); + + local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); + if(targetObj){ + parentObj.getVar("targetObj").clear_obj_vector(); + parentObj.getVar("targetObj").push_obj_vector(targetObj); + if(t_01 && t_01.isOnEvent(currentT)){ + if(sq_IsMyControlObject(parentObj)){ + if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= 90 && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= 0 && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= 18){ + monsterattack_Thief_Necromancer_ksk(parentObj, 0); + return; + } + } + } + } + else{ + targetObj = sq_FindTarget( parentObj, -1000, 1000, 800, 350); + if(targetObj){ + sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); + } + } + break; + case STATE_ATTACK: + local attackIndex = parentObj.getAttackIndex(); + break; + } +} + +function onStart_appendage_zombie(appendage) +{ + if (!appendage) return; + + appendage.getVar("atktime").clear_ct_vector(); + appendage.getVar("atktime").push_ct_vector(); + local timer = appendage.getVar("atktime").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function onEnd_appendage_zombie(appendage) +{ + if (!appendage) return; + + local parentObj = appendage.getParent(); + if(!parentObj) return; + local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_AddSetStatePacketActiveObject(activeObj, 12, sq_GetGlobalIntVector(), STATE_PRIORITY_USER); +} + +//暗影蛛丝阵 +function checkExecutableSkill_NicolasBlackArea(obj) +{ + if (!obj) return false; + local size = obj.getVar("NicolasObj").get_obj_vector_size(); + if(size < 1) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBLACKAREA); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_NICOLASBLACKAREA); + local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0); + if(nicolasObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj); + monsterattack_Thief_Necromancer_ksk(activeObj,5); + } + local state = obj.getState(); + switch(state){ + case STATE_STAND: + case STATE_DASH: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + return true; + } + return false; +} + +function checkCommandEnable_NicolasBlackArea(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_NicolasBlackArea(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(109); + break; + case 1: + obj.sq_SetCurrentAnimation(110); + break; + } +} + +function onEndCurrentAni_NicolasBlackArea(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_NicolasBlackArea(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_NicolasBlackArea(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_NicolasBlackArea(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_NicolasBlackArea(obj, new_state) +{ + if(!obj) return; +} + +//死亡之爪 +function checkExecutableSkill_DarkNail(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKNAIL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DARKNAIL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DarkNail(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DarkNail(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_DARKNAIL); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKNAIL, -1, 3, 1.0) + 100; + local sizeRate = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKNAIL, -1, 2, 1.0) + 100; + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_DARKNAIL,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); +} + +function onEndCurrentAni_DarkNail(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DarkNail(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DarkNail(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_DarkNail(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DarkNail(obj, new_state) +{ + if(!obj) return; +} + +//暗黑仪式 +function checkExecutableSkill_DarkRitual(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKRITUAL); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DARKRITUAL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DarkRitual(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DarkRitual(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_DARKRITUAL); + local currentAni = obj.getCurrentAnimation(); + sq_SetFrameDelayTime(currentAni, 0, 80); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_DarkRitual(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DarkRitual(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DarkRitual(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DARKRITUAL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_DARKRITUAL); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_DARKRITUAL, true); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DARKRITUAL); + local buffTime = sq_GetLevelData(obj, SKILL_BYKK_DARKRITUAL, 1, skillLevel); + if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); + AddAppendage.setEnableIsBuff(true); + AddAppendage.setBuffIconImage(112); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_DARKRITUAL, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + setSkillBonusRate_NecroMancer_bykk(obj); + break; + } + return true; +} + +function onTimeEvent_DarkRitual(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DarkRitual(obj, new_state) +{ + if(!obj) return; +} + +function proc_appendage_darkritual_tochr(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +function onEnd_appendage_darkritual_tochr(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(obj && obj.getState() != STATE_DIE){ + setSkillBonusRate_NecroMancer_bykk(obj); + } +} + +function setSkillBonusRate_NecroMancer_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DARKRITUAL)) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_DARKRITUAL, 0, sq_GetSkillLevel(obj, SKILL_BYKK_DARKRITUAL))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_GRIMGRIMOIRE, 13, sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_KEYOFACERON, 0, sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON))) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_RINGOFDARKNESS) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_RINGOFDARKNESS, 0, sq_GetSkillLevel(obj, SKILL_BYKK_RINGOFDARKNESS))) / 1000; + print("bonusRate4 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SACRIFICIALPACT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT))) / 1000; + print("bonusRate5 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_BYKK_UNHOLYAURA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_UNHOLYAURA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_UNHOLYAURA))) / 1000; + print("bonusRate6 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + //sq_SetSkillAttackBonus(obj, bonusRate); +} + +function onStartDungeon_NecroMancer_bykk(obj) +{ + setSkillBonusRate_NecroMancer_bykk(obj); +} + +//百鬼夜行 +function checkExecutableSkill_DarkLure(obj) +{ + if (!obj) return false; + local size = obj.getVar("darklure_obj").get_obj_vector_size(); + if(size > 0 && sq_GetSkill(obj, SKILL_BYKK_DARKLURE).isInCoolTime()){ + local attackObj = obj.getVar("darklure_obj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.removeAllTimeEvent(); + if(sq_GetZPos(colObj) > 0) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + local state = obj.getState(); + if(state == 0 || state == 14){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, false); + } + return true; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKLURE); + if (isUse){ + obj.getVar("darklure_obj").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_DARKLURE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DarkLure(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DarkLure(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(0); + obj.setCurrentAnimation(Ani); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(0); + obj.setCurrentAnimation(Ani); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_DarkLure(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_DARKLURE, STATE_PRIORITY_AUTO, true); + break; + case 1: + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKLURE, -1, 0, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DARKLURE); + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_DARKLURE, 0); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_DARKLURE, 2); + local increaseRate = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 2, skillLevel); + local increaseRate_cur = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 3, skillLevel); + local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 7, skillLevel); + local autoTime = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 5, skillLevel) * 10; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,75,0,50,obj.getDirection(),2,SKILL_BYKK_DARKLURE,1,totalDamage,lifeTime,hitTime,increaseRate,increaseRate_cur,sizeRate,autoTime,0); + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DarkLure(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DarkLure(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_DarkLure(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DarkLure(obj, new_state) +{ + if(!obj) return; +} + +//死灵之怨 +function checkExecutableSkill_BlameOfDead(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLAMEOFDEAD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLAMEOFDEAD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BlameOfDead(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BlameOfDead(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_BLAMEOFDEAD); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_BlameOfDead(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BlameOfDead(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BlameOfDead(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLAMEOFDEAD, -1, 0, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLAMEOFDEAD); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEAD, 6, skillLevel); + local hitMax = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEAD, 1); + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEAD, 0) + 30; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEAD,1,totalDamage,lifeTime,hitMax,sizeRate,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_BlameOfDead(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BlameOfDead(obj, new_state) +{ + if(!obj) return; +} + +//降临:暴君巴拉克 +function checkExecutableSkill_ApportBallacre(obj) +{ + if (!obj) return false; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.setTimeEvent(1, 1000, 1, true); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BALLACRE_TOCHR); + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_APPORTBALLACRE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_ApportBallacre(obj) +{ + if (!obj) return false; + if(obj.getVar("ballacreObj").get_obj_vector_size() > 0) return false; + return true; +} + +function onSetState_ApportBallacre(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRECAST); + break; + case 1: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_PIERCE); break; + case 2: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_SWINGRL); break; + case 3: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_PIERCE); break; + case 4: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_SWING_DOWN); break; + case 5: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_DASH_UPPER); break; + } + if(subState > 0){ + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 100.0; + switch(subState){ + case 1: speedRate = 10000.0 / delay.tofloat(); break; + case 2: speedRate = 12000.0 / delay.tofloat(); break; + case 3: speedRate = 10000.0 / delay.tofloat(); break; + case 4: speedRate = 20000.0 / delay.tofloat(); break; + case 5: speedRate = 20000.0 / delay.tofloat(); break; + } + local attackState = [22,23,24,25,27]; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + colObj.addSetStatePacket(attackState[subState - 1], null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } +} + +function onEndCurrentAni_ApportBallacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProc_ApportBallacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 4: + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() >= 26) break; + } + case 1: + case 2: + case 3: + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(200); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); + } + local startFrame = [5, 5, 8, 5]; + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex >= startFrame[subState - 1]){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + if(subState == 4) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_AUTO, true); + } + } + break; + } +} + +function onKeyFrameFlag_ApportBallacre(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + setBallacreSkillEffet_bykk(obj); + break; + } + return true; +} + +function onTimeEvent_ApportBallacre(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_ApportBallacre(obj, new_state) +{ + if(!obj) return; +} + +function setBallacreSkillEffet_bykk(obj) +{ + local size = obj.getVar("ballacreObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("ballacreObj").get_obj_vector(i); + if(aObj) aObj.setValid(false); + } + } + obj.getVar("ballacreObj").clear_obj_vector(); + obj.sq_PlaySound("R_TF_APPORT_BALLACRE"); + obj.sq_PlaySound("BAL_SUMMON"); + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_APPORTBALLACRE); + local phyDefense = sq_GetLevelData(obj, SKILL_BYKK_APPORTBALLACRE, 3, skillLevel); + local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_APPORTBALLACRE, 4, skillLevel); + local darkTol = sq_GetIntData(obj, SKILL_BYKK_APPORTBALLACRE, 2); + local lightTol = sq_GetIntData(obj, SKILL_BYKK_APPORTBALLACRE, 3); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BALLACRE_TOCHR); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_BALLACRE_TOCHR, true); + AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_APPORTBALLACRE, skillLevel); + CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); + + local change_appendage = AddAppendage.sq_getChangeStatus("apportballacre"); + if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("apportballacre", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, true, (phyDefense * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE , true, (mglDefense * 0.1).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, (darkTol).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, (lightTol * -1).tofloat()); + } + + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,-25,-1,0,obj.getDirection(),2,SKILL_BYKK_APPORTBALLACRE,1,0,0,0,0,0,0,0,0); +} + + +function getAttackAni_Thief_necromancer(obj, index) +{ + local animation = obj.sq_GetAttackAni(index); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() >= 25) return animation; + } + switch(index){ + case 0: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_PIERCE); break; + case 1: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_SWINGRL); break; + case 2: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_HAND_PIERCE); break; + case 3: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_SWING_DOWN); break; + } + } + return animation; +} + +function getDashAttackAni_Thief_necromancer(obj) +{ + local animation = obj.sq_GetDashAttackAni(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR) && !sq_GetSkill(obj, SKILL_BYKK_GRABCOLLAR).isInCoolTime()){ + animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_DASH_UPPER); + } + return animation; +} + +function getJumpAttackAni_Thief_necromancer(obj) +{ + local animation = obj.sq_GetJumpAttackAni(); + return animation; +} + +function getRestAni_Thief_necromancer(obj) +{ + local animation = obj.sq_GetRestAni(); + return animation; +} + +function onSetState_attack_thief_necromancer(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + obj.getVar("ballacre_move").setInt(0, sq_GetXPos(obj)); + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + local state = colObj.getState(); + if(state >= 26) return; + } + local attackIndex = obj.sq_GetVectorData(datas, 0); + obj.sq_IntVectClear(); + switch(attackIndex){ + case 0: obj.sq_IntVectPush(1); break; + case 1: obj.sq_IntVectPush(2); break; + case 2: obj.sq_IntVectPush(3); break; + case 3: obj.sq_IntVectPush(4); break; + } + obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true); + } +} + +function onAfterSetState_attack_thief_necromancer(obj, state, datas, isResetTimer) +{ + if(!obj) return; + // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + // local attackIndex = obj.sq_GetVectorData(datas, 0); + // if(attackIndex == 0){ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(1); + // obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true); + // } + // // if(attackIndex > 3){ + // // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); + // // return; + // // } + // // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + // // local currentAni = obj.getCurrentAnimation(); + // // local delay = currentAni.getDelaySum(0, 0); + // // local speedRate = 100.0; + // // switch(attackIndex){ + // // case 0: speedRate = 10000.0 / delay.tofloat(); break; + // // case 1: speedRate = 12000.0 / delay.tofloat(); break; + // // case 2: speedRate = 10000.0 / delay.tofloat(); break; + // // case 3: speedRate = 20000.0 / delay.tofloat(); break; + // // } + // // print("attackIndex = "+attackIndex+",speedRate = "+speedRate); + // // local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + // // obj.getVar("ballacre_move").setInt(0, sq_GetXPos(obj)); + // // if(ballacreObj){ + // // local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + // // if(colObj.getState() >= 25) return; + // // colObj.getVar("setSpeedRate").setFloat(0, speedRate); + // // switch(attackIndex){ + // // case 0: colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break; + // // case 1: colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break; + // // case 2: colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break; + // // case 3: colObj.addSetStatePacket(25, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break; + // // } + // // } + // } +} + +function onKeyFrameFlag_attack_thief_necromancer(obj, flagIndex) +{} + +function onProc_attack_thief_necromancer(obj) +{ + if(!obj) return; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + sq_setCurrentAxisPos(obj, 0, obj.getVar("ballacre_move").getInt(0)); + } +} + +function onSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + if(!sq_GetSkill(obj, SKILL_BYKK_GRABCOLLAR).isInCoolTime()){ + obj.startSkillCoolTime(SKILL_BYKK_GRABCOLLAR, sq_GetSkillLevel(obj, SKILL_BYKK_GRABCOLLAR), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onAfterSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer) +{ + if(!obj) return; + // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.5, 0.5); + // local currentAni = obj.getCurrentAnimation(); + // local delay = currentAni.getDelaySum(0, 0); + // local speedRate = 10000.0 / delay.tofloat(); + // print("delay = "+currentAni.getDelaySum(false)); + // obj.getVar("ballacre_speedRate").setFloat(4, speedRate); + // } +} + +function onProcCon_dashattack_thief_necromancer(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_dashattack_thief_necromancer(obj, flagIndex) +{} + +function onSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){ + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() != 26) colObj.addSetStatePacket(26, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } +} + +function onAfterSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer) +{} + +function onKeyFrameFlag_jumpattack_thief_necromancer(obj, flagIndex) +{} + + +//吸魂暗劲波 +function checkExecutableSkill_NicolasBlackWave(obj) +{ + if (!obj) return false; + local size = obj.getVar("NicolasObj").get_obj_vector_size(); + if(size < 1) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBLACKWAVE); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_NICOLASBLACKWAVE); + local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0); + if(nicolasObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj); + monsterattack_Thief_Necromancer_ksk(activeObj,3); + } + local state = obj.getState(); + switch(state){ + case STATE_STAND: + case STATE_DASH: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + return true; + } + return false; +} + +function checkCommandEnable_NicolasBlackWave(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_NicolasBlackWave(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(109); + break; + case 1: + obj.sq_SetCurrentAnimation(110); + break; + } +} + +function onEndCurrentAni_NicolasBlackWave(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_NicolasBlackWave(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_NicolasBlackWave(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_NicolasBlackWave(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_NicolasBlackWave(obj, new_state) +{ + if(!obj) return; +} + +//巴拉克的野心 +function checkExecutableSkill_AmbitionOfBallacre(obj) +{ + if (!obj) return false; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() > 25){ + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + } + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AMBITIONOFBALLACRE); + if (isUse){ + obj.getVar("ambitionObj").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_AmbitionOfBallacre(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_AmbitionOfBallacre(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_APPEAR); break; + case 1: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_GRAB); break; + case 2: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_APPEAR); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 8000.0 / delay.tofloat(); + switch(subState){ + case 0: + local delayTime = currentAni.getDelaySum(0, 6) + sq_GetIntData(obj, SKILL_BYKK_AMBITIONOFBALLACRE, 1); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT) > 0) delayTime = currentAni.getDelaySum(0, 6) + 200; + local delay = (delayTime.tofloat() / speedRate * 100.0).tointeger(); + obj.setTimeEvent(1, delay, 1, false); + break; + case 1: + local ambitionObj = obj.getVar("ambitionObj").get_obj_vector(0); + if(ambitionObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ambitionObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + break; + case 2: + local delay = (740.0 / speedRate * 100.0).tointeger(); + obj.setTimeEvent(2, delay, 1, false); + break; + } + local attackState = [31, 32, 33]; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + colObj.addSetStatePacket(attackState[subState], null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } +} + +function onEndCurrentAni_AmbitionOfBallacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_AmbitionOfBallacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(sq_GetCurrentFrameIndex(obj) == 7 && obj.isExistTimeEvent(1)){ + obj.setSkillCommandEnable(SKILL_BYKK_AMBITIONOFBALLACRE, true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AMBITIONOFBALLACRE); + if(b_useskill != -1){ + obj.stopTimeEvent(1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_AUTO, true); + break; + } + } + break; + } +} + +function onKeyFrameFlag_AmbitionOfBallacre(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_AmbitionOfBallacre(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_AmbitionOfBallacre(obj, new_state) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + if(new_state != STATE_BYKK_AMBITIONOFBALLACRE){ + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + break; + } +} + +//暗击拳 +function checkExecutableSkill_Grabcollar(obj) +{ + if (!obj) return false; + // local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT); + // if (isUse){ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + // return true; + // } + return false; +} + +function checkCommandEnable_Grabcollar(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Grabcollar(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(109); + break; + case 1: + obj.sq_SetCurrentAnimation(110); + break; + } +} + +function onEndCurrentAni_Grabcollar(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Grabcollar(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Grabcollar(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Grabcollar(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Grabcollar(obj, new_state) +{ + if(!obj) return; +} + +//杀戮乱舞 +function checkExecutableSkill_Madnessballacre(obj) +{ + if (!obj) return false; + // local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT); + // if (isUse){ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + // return true; + // } + return false; +} + +function checkCommandEnable_Madnessballacre(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Madnessballacre(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(109); + break; + case 1: + obj.sq_SetCurrentAnimation(110); + break; + } +} + +function onEndCurrentAni_Madnessballacre(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Madnessballacre(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Madnessballacre(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Madnessballacre(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Madnessballacre(obj, new_state) +{ + if(!obj) return; +} + +//巴拉克强击 +function checkExecutableSkill_Ballacrestrongattack(obj) +{ + if (!obj) return false; + // local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT); + // if (isUse){ + // obj.sq_IntVectClear(); + // obj.sq_IntVectPush(0); + // obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); + // return true; + // } + return false; +} + +function checkCommandEnable_Ballacrestrongattack(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Ballacrestrongattack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(109); + break; + case 1: + obj.sq_SetCurrentAnimation(110); + break; + } +} + +function onEndCurrentAni_Ballacrestrongattack(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Ballacrestrongattack(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Ballacrestrongattack(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Ballacrestrongattack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Ballacrestrongattack(obj, new_state) +{ + if(!obj) return; +} + +//降临:僵尸莱迪亚 +function checkExecutableSkill_Livingdead(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIVINGDEAD); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LIVINGDEAD); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_LIVINGDEAD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Livingdead(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Livingdead(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_LIVINGDEAD); + break; + } +} + +function onEndCurrentAni_Livingdead(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Livingdead(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Livingdead(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + if(false){//CP武器效果 + createLivingDeadExplosion(obj); + break; + } + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_LIVINGDEAD, -1, 0, 1.0) + 100; + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 2); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 0); + local sizeRate = 100; + local addSizeRate = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 8); + local increaseRate = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 13); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,1,totalDamage,lifeTime,hitTime,sizeRate,increaseRate,addSizeRate,0,0); + break; + } + return true; +} + +function onTimeEvent_Livingdead(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Livingdead(obj, new_state) +{ + if(!obj) return; +} + +function createLivingDeadExplosion(obj) +{ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 10200 / currentAni.getDelaySum(0, 0); + local bonusRate = (100 + sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 13)).tofloat() / 100.0; + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_LIVINGDEAD, -1, 0, bonusRate) + 100; + local lifeTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 2); + local hitTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 0); + local hitCount = lifeTime / hitTime; + totalDamage = totalDamage * hitCount * 45 / 100; + local sizeRate = 100 + sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 8); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,3,totalDamage,sizeRate,speedRate,0,0,0,0,0); +} + +//巴拉克的愤怒 +function checkExecutableSkill_Guillotine(obj) +{ + if (!obj) return false; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() > 25){ + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + } + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GUILLOTINE); + if (isUse){ + obj.sq_IntVectClear(); + if(false){ + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(1); + } + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_GUILLOTINE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Guillotine(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Guillotine(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_GUILLOTINE_START); break; + case 1: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_GUILLOTINE_CHARGE); break; + case 2: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_GUILLOTINE_FINISH); break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 8000.0 / delay.tofloat(); + local attackState = [34, 35, 36]; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + if(subState == 2 && obj.sq_GetVectorData(datas, 1) > 0) colObj.getVar("guillotine_bool").setBool(0, true); + else colObj.getVar("guillotine_bool").setBool(0, false); + colObj.addSetStatePacket(attackState[subState], null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } +} + +function onEndCurrentAni_Guillotine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + if(subState == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT) > 0) obj.sq_IntVectPush(2); + else obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_GUILLOTINE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Guillotine(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + obj.setSkillCommandEnable(SKILL_BYKK_GUILLOTINE,true); + local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_GUILLOTINE); + if(b_useskill != -1){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_BYKK_GUILLOTINE, STATE_PRIORITY_AUTO, true); + } + break; + } +} + +function onKeyFrameFlag_Guillotine(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Guillotine(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Guillotine(obj, new_state) +{ + if(!obj) return; +} + +//千魂杀 +function checkExecutableSkill_Phantomstrom(obj) +{ + if (!obj) return false; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() > 25){ + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + } + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PHANTOMSTROM); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_PHANTOMSTROM, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Phantomstrom(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Phantomstrom(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_PHANTOM_STROM); + obj.sq_PlaySound("R_TF_ADESPHANTOM_03_A"); + obj.sq_PlaySound("BALAC_FANTOM"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 8000.0 / delay.tofloat(); + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + colObj.addSetStatePacket(37, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } +} + +function onEndCurrentAni_Phantomstrom(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PHANTOMSTROM); + if(skillLevel >= 6){ + local addLevel = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 4, skillLevel); + local addSkillLevelTime = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 5, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLAS) > 0) obj.addSkillLevelAppendage(SKILL_BYKK_SUMMONNICOLAS, addLevel, addSkillLevelTime); + } + if(skillLevel >= 9){ + local addLevel = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 6, skillLevel); + local addSkillLevelTime = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 7, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_BYKK_APPORTBALLACRE) > 0) obj.addSkillLevelAppendage(SKILL_BYKK_APPORTBALLACRE, addLevel, addSkillLevelTime); + } + + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Phantomstrom(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Phantomstrom(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Phantomstrom(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Phantomstrom(obj, new_state) +{ + if(!obj) return; +} + +//死灵之缚 +function checkExecutableSkill_BlameOfDeadEx(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLAMEOFDEADEX); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BLAMEOFDEADEX, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BlameOfDeadEx(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BlameOfDeadEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_BLAMEOFDEADEX); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_BlameOfDeadEx(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BlameOfDeadEx(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BlameOfDeadEx(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + break; + case 2: + if(false){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLAMEOFDEADEX); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 5, skillLevel); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 4, skillLevel); + local hitMax = lifeTime / hitTime; + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLAMEOFDEADEX, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEADEX, 1); + local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE); + if(skillLevel2 > 0) sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_GRIMGRIMOIRE, 11, skillLevel2)) / 100; + local multiHit = (totalDamage * hitMax) * 18 / 100; + local expHit = (totalDamage * hitMax) * 35 / 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,2,multiHit,expHit,hitTime,sizeRate,0,0,0,0); + } + else{ + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLAMEOFDEADEX, -1, 0, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLAMEOFDEADEX); + local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 5, skillLevel); + local hitTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 4, skillLevel); + local prob = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 1, skillLevel) / 10; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEADEX, 1); + local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE); + if(skillLevel2 > 0) sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_GRIMGRIMOIRE, 11, skillLevel2)) / 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,1,totalDamage,lifeTime,hitTime,prob,sizeRate,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_BlameOfDeadEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BlameOfDeadEx(obj, new_state) +{ + if(!obj) return; +} + +//怨噬之沼 +function checkExecutableSkill_Hatefulghost(obj) +{ + if (!obj) return false; + local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + if(!colObj.isExistTimeEvent(12)){ + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + } + return false; + } + local objPhase = colObj.getVar("phaseSet").getInt(0); + switch(objPhase){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sq_getRandom(2,3)); + obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(sq_getRandom(4,5)); + obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + break; + } + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HATEFULGHOST); + if (isUse){ + obj.getVar("hatefulGhostObj").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Hatefulghost(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Hatefulghost(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTSTAY); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK1_BODY); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack1front_00.ani"), 0, 0); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK2A_BODY); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack2afront_00.ani"), 0, 0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK2B_BODY); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack2afront_00.ani"), 0, 0); + break; + case 4: + obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK3A_BODY); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack2bfront_00.ani"), 0, 0); + break; + case 5: + obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK3B_BODY); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack3front_00.ani"), 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_Hatefulghost(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 3: + case 4: + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Hatefulghost(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Hatefulghost(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 105: + //[OFFSET] `create attack Front Effect` 0 0 0 + //[OFFSET] `create attack Bottom Effect` 0 0 0 + //[OFFSET] `create Hand Effect` 0 0 0 + //[OFFSET] `create Hand bottom Effect` 2000 0 0 + local totalDamage_1st = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 0, 1.0) + 100; + local totalDamage_2nd = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 1, 1.0) + 100; + local totalDamage_3th1 = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 2, 1.0) + 100; + local totalDamage_3th2 = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 3, 1.0) + 100; + local lifeTime = 20000; + local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HATEFULGHOST, 1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,150,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,1,totalDamage_1st,totalDamage_2nd,totalDamage_3th1,totalDamage_3th2,lifeTime,sizeRate,0,0); + break; + case 106: sq_SetMyShake(obj, 3, 300); break; + case 200: + //[OFFSET] `create attack Front Effect` 0 0 0 + local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.getVar("setState").setInt(0, 24); + colObj.stopTimeEvent(12); + colObj.getVar("move").setInt(0, sq_GetXPos(colObj)); + colObj.getVar("move").setInt(1, sq_GetYPos(colObj)); + colObj.setTimeEvent(13, 1, 50, true); + } + break; + case 204: sq_SetMyShake(obj, 3, 300); break; + case 211: + //[OFFSET] `create attack Front Effect` 0 0 0 + local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.getVar("setState").setInt(0, 25); + colObj.stopTimeEvent(12); + colObj.getVar("move").setInt(0, sq_GetXPos(colObj)); + colObj.getVar("move").setInt(1, sq_GetYPos(colObj)); + colObj.setTimeEvent(13, 1, 50, true); + } + break; + case 217: sq_SetMyShake(obj, 3, 300); break; + case 308: + case 313: + sq_SetMyShake(obj, 3, 300); + //[OFFSET] `create attack Front Effect` 0 0 0 + local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0); + if(attackObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.getVar("setState").setInt(0, 27); + colObj.stopTimeEvent(12); + colObj.getVar("move").setInt(0, sq_GetXPos(colObj)); + colObj.getVar("move").setInt(1, sq_GetYPos(colObj)); + colObj.setTimeEvent(13, 1, 50, true); + } + break; + } + return true; +} + +function onTimeEvent_Hatefulghost(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Hatefulghost(obj, new_state) +{ + if(!obj) return; +} + +//暗黑蛛丝引 +function checkExecutableSkill_Nicolasblackarachnia(obj) +{ + if (!obj) return false; + local size = obj.getVar("NicolasObj").get_obj_vector_size(); + if(size < 1) return false; + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBLACKARACHNIA); + if (isUse){ + obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_NICOLASBLACKARACHNIA); + local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0); + if(nicolasObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj); + local attackIndex = 9; + if(false) attackIndex = 12; + monsterattack_Thief_Necromancer_ksk(activeObj, attackIndex); + } + local state = obj.getState(); + switch(state){ + case STATE_STAND: + case STATE_DASH: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } + return true; + } +} + +function checkCommandEnable_Nicolasblackarachnia(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Nicolasblackarachnia(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(109); + break; + case 1: + obj.sq_SetCurrentAnimation(110); + break; + } +} + +function onEndCurrentAni_Nicolasblackarachnia(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Nicolasblackarachnia(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Nicolasblackarachnia(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Nicolasblackarachnia(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Nicolasblackarachnia(obj, new_state) +{ + if(!obj) return; +} + +//暴君极刑斩 +function checkExecutableSkill_Executionerslash(obj) +{ + if (!obj) return false; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() > 25){ + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + } + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EXECUTIONERSLASH); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_EXECUTIONERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Executionerslash(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Executionerslash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(1); + obj.setCurrentAnimation(Ani); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(1); + obj.setCurrentAnimation(Ani); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 8000.0 / delay.tofloat(); + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + if(false) colObj.getVar("isStone_executionerslash").setBool(0, true); + else colObj.getVar("isStone_executionerslash").setBool(0, true); + colObj.addSetStatePacket(38, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } +} + +function onEndCurrentAni_Executionerslash(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_EXECUTIONERSLASH, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Executionerslash(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Executionerslash(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Executionerslash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Executionerslash(obj, new_state) +{ + if(!obj) return; +} + +//亡者君临:巴拉克之戮 +function checkExecutableSkill_Ballacreadvent(obj) +{ + if (!obj) return false; + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + if(colObj.getState() > 25){ + local state = obj.getState(); + if(state == STATE_STAND || state == STATE_DASH){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + } + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BALLACREADVENT); + if (isUse){ + obj.getVar("Ballacreadvent_Effect").clear_obj_vector(); + obj.getVar("Ballacreadvent_Background").clear_obj_vector(); + obj.getVar("Ballacreadvent_Attract").clear_obj_vector(); + obj.getVar("Ballacreadvent_Tar").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_BALLACREADVENT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Ballacreadvent(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Ballacreadvent(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + local Ani = obj.sq_GetThrowChargeAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/ballacreadvent/casting/casting01_set01d01.ani"), 0, 0); + break; + case 1: + local Ani = obj.sq_GetThrowShootAni(2); + obj.setCurrentAnimation(Ani); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/ballacreadvent/casting/casting01_set02d01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/ballacreadvent/casting/casting01_set02n01.ani"), 0, 0); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 0); + local speedRate = 6000.0 / delay.tofloat(); + local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.getVar("setSpeedRate").setFloat(0, speedRate); + colObj.addSetStatePacket(39, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + local totalDamage_start = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BALLACREADVENT, -1, 0, 1.0) + 100; + local totalDamage_multihit = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BALLACREADVENT, -1, 1, 1.0) + 100; + local totalDamage_finish = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BALLACREADVENT, -1, 2, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_BYKK_BALLACREADVENT, 18); + speedRate = (speedRate * 100.0).tointeger(); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,-1,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,1,totalDamage_start,totalDamage_multihit,totalDamage_finish,hitMax,speedRate,0,0,0); + } + } + else if(subState == 1){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 1); + obj.setTimeEvent(1, delay, 1, false); + local aniPath = "character/thief/effect/animation/ballacreadvent/casting/casting02_groundn.ani"; + createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + } +} + +function onEndCurrentAni_Ballacreadvent(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_BYKK_BALLACREADVENT, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Ballacreadvent(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Ballacreadvent(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Ballacreadvent(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03n01.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03n02.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03d01.ani", 0, 1, 1); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03d02.ani", 0, 1, 1); + local aniPath = "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/flooreffect_d01.ani"; + local pooledObj = createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + obj.getVar("Ballacreadvent_Effect").push_obj_vector(pooledObj); + break; + } +} + +function onEndState_Ballacreadvent(obj, new_state) +{ + if(!obj) return; +} + +//亡者之茧 +function checkExecutableSkill_Coconofundead(obj) +{ + if (!obj) return false; + local attackObj = obj.getVar("coconofundeadObj").get_obj_vector(0); + if(attackObj && attackObj.getState() != 25){ + local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); + colObj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + local size = obj.getVar("coconofundeadObj_b").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local effect = obj.getVar("coconofundeadObj_b").get_obj_vector(i); + if(effect){ + local colObj = sq_GetCNRDObjectToCollisionObject(effect); + colObj.setTimeEvent(1, 1000, 1, true); + } + } + } + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_BYKK_COCONOFUNDEAD); + if (isUse){ + obj.getVar("coconofundeadObj").clear_obj_vector(); + obj.getVar("coconofundeadObj_b").clear_obj_vector(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_BYKK_COCONOFUNDEAD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Coconofundead(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Coconofundead(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_BYKK_COCOONOFUNDEADSTART_BODY); + obj.sq_PlaySound("R_TF_COCOON_UNDEAD"); + break; + } +} + +function onEndCurrentAni_Coconofundead(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Coconofundead(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Coconofundead(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 107: + local aniPath = "character/thief/effect/animation/2_necromancer_bykk/cocoonofundead/cocoonofundeadstartbottom_00.ani"; + createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case 108: + //[OFFSET] `start attraction` 170 0 0 + local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_COCONOFUNDEAD, -1, 0, 1.0) + 100; + local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_COCONOFUNDEAD, -1, 1, 1.0) + 100; + local lifeTime = 4500; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,170,0,0,obj.getDirection(),2,SKILL_BYKK_COCONOFUNDEAD,1,totalDamage,totalDamage_exp,lifeTime,0,0,0,0,0); + break; + case 112: + //[OFFSET] `create cocoon side object` 170 0 0 + break; + case 116: + //[OFFSET] `create cocoon Monster` 170 0 0 + break; + } + return true; +} + +function onTimeEvent_Coconofundead(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Coconofundead(obj, new_state) +{ + if(!obj) return; +} + + +function summonmonster_necromancer_bykk(obj,monsterobj,x,y,z,substate,monsterId,summontime,level,team) +{ + if(obj.getVar("Summonnum").size_vector() == 0){ + obj.getVar("Summonnum").clear_vector(); + obj.getVar("Summonnum").push_vector(0); + } + + sq_BinaryStartWrite(); + sq_BinaryWriteByte(substate); + sq_BinaryWriteDword(monsterId); + sq_BinaryWriteWord(team); + sq_BinaryWriteWord(level); + sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0)); + sq_BinaryWriteDword(0); + sq_BinaryWriteDword(summontime); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + sq_BinaryWriteWord(1); + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, monsterobj)){ + destX_01 = monsterobj.getXPos() - obj.getXPos(); + destY_01 = monsterobj.getYPos() - obj.getYPos(); + if(monsterobj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - monsterobj.getXPos(); + } + sq_SendCreatePassiveObjectPacket(obj, 48024, 0, destX_01 + x, destY_01 + y, z, monsterobj.getDirection()); + obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1); +} + +function monsterattack_Thief_Necromancer_ksk(monsterObj,attackIndex) +{ + if(!monsterObj) return; + local activeObj = sq_GetCNRDObjectToCollisionObject(monsterObj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_IntVectorPush(sq_GetGlobalIntVector(),attackIndex); + sq_AddSetStatePacketCollisionObject(activeObj, 8, sq_GetGlobalIntVector(), STATE_PRIORITY_USER, true); +} + +function createOnlyDrawObject_Theif_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) +{ + local ani = sq_CreateAnimation("",aniPath); + local pooledObj = sq_CreatePooledObject(ani,isTrue); + sq_SetCurrentDirection(pooledObj, direction); + pooledObj.setCurrentPos(x,y,z); + local currentAni = pooledObj.getCurrentAnimation(); + sizeRateX = sizeRateX.tofloat() / 100.0; + sizeRateY = sizeRateY.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); + pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + return pooledObj; +} + +function createSkillPassive_Theif_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) +{ + if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; + local destX_01 = 0; + local destY_01 = 0; + if(!isSameObject(obj, passiveObj)){ + destX_01 = passiveObj.getXPos() - obj.getXPos(); + destY_01 = passiveObj.getYPos() - obj.getYPos(); + if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); + } + sq_BinaryStartWrite(); + sq_BinaryWriteDword(job); + sq_BinaryWriteDword(skillIndex); + sq_BinaryWriteDword(subtype); + sq_BinaryWriteDword(pushv1); + sq_BinaryWriteDword(pushv2); + sq_BinaryWriteDword(pushv3); + sq_BinaryWriteDword(pushv4); + sq_BinaryWriteDword(pushv5); + sq_BinaryWriteDword(pushv6); + sq_BinaryWriteDword(pushv7); + sq_BinaryWriteDword(pushv8); + sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); +} + diff --git a/user/116.205.165.25/8_thief_2.c b/user/116.205.165.25/8_thief_2.c new file mode 100644 index 0000000..78cb37f --- /dev/null +++ b/user/116.205.165.25/8_thief_2.c @@ -0,0 +1,2596 @@ + + +//obj +function setCustomData_po_thief_bykk(obj, receiveData) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(!sqrChr) return; + local job = receiveData.readDword(); + local skillIndex = receiveData.readDword(); + local subtype = receiveData.readDword(); + + obj.getVar("job").setInt(0, job); + obj.getVar("skillIndex").setInt(0, skillIndex); + obj.getVar("subtype").setInt(0, subtype); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_SUMMONNICOLAS: + switch(subtype){ + case 1: + case 3: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/throw_object.ani", attackIndex = 35; + if(subtype == 3){aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/nicolasspider_tp_spider.ani"; attackIndex = 22;} + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(subtype == 1){ + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/throw_object2.ani"),true); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, hitTime, -1, true); + if(subtype == 1) obj.sq_SetMoveParticle("particle/dagger.ptl", 0.0, 0.0); + else obj.sq_SetMoveParticle("particle/tp_throw.ptl", 0.0, 0.0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage2); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/spikefalling.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/burrowend.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(10, 200, 1, false); + break; + case 4: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/spark.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetShake(obj, 1, 500); + break; + case 5: + local totalDamage = receiveData.readDword(); + obj.getVar("custom").setInt(10, totalDamage); + obj.setTimeEvent(11, 200, 1, false); + break; + case 6: + local totalDamage = receiveData.readDword(); + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/attack_obj_nicolas.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 10: + local speedRate = receiveData.readDword(); + // local aniPath = ["monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle.ani", "monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle2.ani"]; + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle2.ani"),true); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + } + break; + case SKILL_BYKK_NICOLASBLACKAREA: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blackarea/floornormalbottom.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local attackBox = [-200,-50,-20,400,100,350]; + local pAni = obj.getCurrentAnimation(); + if(sizeRate > 200){ + sizeRate = sizeRate.tofloat() / 200.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + for(local i = 0; i < attackBox.len(); i++){ + attackBox[i] = (attackBox[i].tofloat() * sizeRate).tointeger(); + } + } + sq_AddAttackBox(pAni, attackBox[0], attackBox[1], attackBox[2], attackBox[3], attackBox[4], attackBox[5]); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, hitTime, -1, false); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(10, 50, 10, false); + obj.setTimeEvent(11, 10, -1, false); + obj.getVar("custom").setInt(0, 0); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_NICOLASSUMMONZOMBIE: + switch(subtype){ + case 1: + local level = receiveData.readDword(); + local summonTime = receiveData.readDword(); + local summonMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, level); + obj.getVar("custom").setInt(1, summonTime); + obj.getVar("custom").setInt(2, summonMax); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local level = receiveData.readDword(); + local time = receiveData.readDword(); + local prob = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("targetObj").clear_obj_vector(); + obj.getVar("targetObj").push_obj_vector(targetObj); + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas_zombie/nzanimation/trybite_obj.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, prob, level, time); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, sizeRate); + local aniPath = "passiveobject/common/animation/darkexplosion.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(11, 200, 1, true); + obj.setTimeEvent(12, 50, 2, true); + obj.setTimeEvent(13, 15, 2, true); + obj.setTimeEvent(14, 100, 1, true); + break; + } + break; + case SKILL_BYKK_NICOLASBLACKWAVE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/casting2_obj.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, hitTime, -1, false); + break; + } + break; + case SKILL_BYKK_NICOLASBLACKARACHNIA: + switch(subtype){ + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage2); + obj.getVar("custom").setInt(1, holdTime); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, sub); + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/attack_nicolas_pahse1.ani"; + if(subtype == 2) aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/attack_nicolas_pahse2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + local totalDamage = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(1, holdTime); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(2, sub); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + sq_moveWithParent(targetObj, obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, APDPATH_NICOLAS_BLACKWAVE, true); + sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(10, hitTime, -1, false); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local holdTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage2); + obj.getVar("custom").setInt(1, holdTime); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, totalDamage); + obj.getVar("custom").setInt(4, sizeRate); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolasblackarachnia/talisman/black_last.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(subtype){ + case 1: + sqrChr.getVar("ballacreObj").push_obj_vector(obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_AMBITIONOFBALLACRE: + switch(subtype){ + case 1: + sqrChr.getVar("ambitionObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage2); + obj.getVar("custom").setInt(2, sizeRate); + obj.getVar("custom").setInt(3, speedRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ambitionofballacre/talisman/ambitionofballacre_talismangrab_talismangrab.ani_hand_grab_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + currentAni.setSpeedRate(speedRate.tofloat() / 100.0); + break; + } + break; + case SKILL_BYKK_GUILLOTINE: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guilllotine_sub_normal.ani"; + if(sub > 0) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guilllotine_sub_normal_big.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local attackIndex = 60; + if(sub > 0) attackIndex = 56; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + switch(sub){ + case 0: + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub_dust.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub_spark.ani"]; + local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObject_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos + 1,0,ENUM_DRAWLAYER_NORMAL); + } + break; + case 1: + sq_CreateParticle("passiveobject/character/thief/particle/guillotinesub.ptl", obj, 0, 1, 1, true, 30, 0, 1); + break; + } + break; + } + break; + case SKILL_BYKK_PHANTOMSTROM: + switch(subtype){ + case 1: + local totalDamage1 = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local totalDamage3 = receiveData.readDword(); + local stromTime = receiveData.readDword(); + local stromHitTime = receiveData.readDword(); + local strom2Time = receiveData.readDword(); + local strom2HitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage1); + obj.getVar("custom").setInt(1, totalDamage2); + obj.getVar("custom").setInt(2, totalDamage3); + obj.getVar("custom").setInt(3, stromTime); + obj.getVar("custom").setInt(4, stromHitTime); + obj.getVar("custom").setInt(5, strom2Time); + obj.getVar("custom").setInt(6, strom2HitTime); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage1); + obj.setTimeEvent(0, stromHitTime, -1, true); + obj.sq_PlaySound("ADESPHANTOM_STAR"); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local strom2Time = receiveData.readDword(); + local strom2HitTime = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage2); + obj.getVar("custom").setInt(2, strom2Time); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, strom2HitTime, -1, true); + obj.sq_PlaySound("ADESPHANTOM_ADD"); + obj.sq_PlaySound("ADESPHANTOM_SWISH"); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darkexplosionphantomstrom.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1000,sq_CreateAnimation("","character/thief/effect/animation/2_necromancer_bykk/phantomstrom/back_normal.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(12, 200, 2, true); + obj.setTimeEvent(13, 50, 4, true); + obj.setTimeEvent(14, 15, 4, true); + obj.setTimeEvent(15, 100, 2, true); + obj.sq_PlaySound("DARK_EXPLOSION"); + obj.sq_PlaySound("BALAC_FANTOM_EXP"); + break; + } + break; + case SKILL_BYKK_EXECUTIONERSLASH: + switch(subtype){ + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/executionerslash/newexecutionerslash_body_atk.ani"; + if(subtype == 2) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/talisman/executionerslash/executionerslashtalisman_body_atk.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + currentAni.setSpeedRate(speedRate.tofloat() / 100.0); + break; + } + break; + case SKILL_BYKK_BALLACREADVENT: + switch(subtype){ + case 1: + local totalDamage_start = receiveData.readDword(); + local totalDamage_multihit = receiveData.readDword(); + local totalDamage_finish = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_start); + obj.getVar("custom").setInt(1, totalDamage_multihit); + obj.getVar("custom").setInt(2, totalDamage_finish); + obj.getVar("custom").setInt(3, hitMax); + obj.getVar("custom").setInt(4, speedRate); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrecast02_set08n.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_start); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat() / 100.0); + break; + case 2: + sqrChr.getVar("Ballacreadvent_Attract").push_obj_vector(obj); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, speedRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, speedRate); + obj.getVar("custom").setInt(3, totalDamage2); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/bigballacre02_finger.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat() / 100.0); + local flashScreenObj = sq_flashScreen(obj,80,99990,0,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sqrChr.getVar("flashobj").clear_obj_vector(); + sqrChr.getVar("flashobj").push_obj_vector(flashScreenObj); + break; + case 4: + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/bigballacre01_hand.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat() / 100.0); + break; + case 5: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/lasteffect_set02d15.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + case 6: + sqrChr.getVar("Ballacreadvent_Background").push_obj_vector(obj); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, speedRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 7: + local delay = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrebeadfocus/beadfocusa_05.ani"; + if(sub > 0) local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrebeadfocus/beadfocusb_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, delay, 1, false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); + break; + } + break; + case SKILL_BYKK_DARKSOUL: + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local offsetY = receiveData.readDword(); + local hitTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, hitMax); + obj.getVar("custom").setInt(3, offsetY); + obj.getVar("custom").setInt(4, hitTime); + switch(subtype){ + case 1: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/darksoul.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); + obj.setTimeEvent(10, 100, -1, false); + break; + case 2: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/darksoulcharge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); + obj.setTimeEvent(10, 100, -1, false); + break; + case 3: + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tat").clear_obj_vector(); + obj.getVar("tat").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + obj.setTimeEvent(14, hitTime, hitMax - 1, false); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_BYKK_DARKNAIL: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darknail/dark_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case SKILL_BYKK_DARKLURE: + switch(subtype){ + case 1://totalDamage,lifeTime,hitTime,increaseRate,increaseRate_cur,sizeRate,autoTime + sqrChr.getVar("darklure_obj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local increaseRate = receiveData.readDword(); + local increaseRate_cur = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local autoTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, increaseRate); + obj.getVar("custom").setInt(4, increaseRate_cur); + obj.getVar("custom").setInt(5, sizeRate); + obj.getVar("custom").setInt(6, autoTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/darklurenormal/floor/ghost_floor.ani", attackIndex = 15; + if(sub == 1) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/darklurenormal/sky/ghost_sky.ani"; + if(sub == 2){aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/darklurecharge/floor/ghost_floor.ani"; attackIndex = 16;} + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(0, hitTime, -1, false); + obj.setTimeEvent(1, lifeTime, 1, false); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEAD: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, hitMax); + obj.getVar("custom").setInt(3, sizeRate); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_BLAMEOFDEAD); + local level = sq_GetSkillLevel(sqrChr, 174); + local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_BLAMEOFDEAD, 1, skillLevel); + local time = sq_GetLevelData(sqrChr, SKILL_BYKK_BLAMEOFDEAD, 3, skillLevel); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floornormal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, prob, level, time); + sizeRate = sizeRate.tofloat() / 100.0; + // print("sizeRate = "+sizeRate); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 2: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + obj.getVar("custom").setInt(0, hitMax); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.setTimeEvent(10, lifeTime / (hitMax + 2), hitMax, false); + //obj.setTimeEvent(1, lifeTime + 100, 1, false); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + break; + } + break; + case SKILL_BYKK_LIVINGDEAD: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local increaseRate = receiveData.readDword(); + local addSizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, sizeRate); + obj.getVar("custom").setInt(4, increaseRate); + obj.getVar("custom").setInt(5, addSizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2://totalDamage,lifeTime,hitTime,sizeRate,sub + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local isAttack = receiveData.readDword(); + obj.getVar("custom").setInt(0, lifeTime); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, sub); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/newdarkmatter2_01.ani", attackIndex = 28; + if(sub > 0){aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/newdarkmatter2_01.ani"; attackIndex = 29;} + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(isAttack > 0){ + local currentAni = obj.getCurrentAnimation(); + switch(sub){ + case 0: sq_AddAttackBox(currentAni, 0, -50, -50, 200, 100, 100); break; + case 1: sq_AddAttackBox(currentAni, 0, -50, -50, 300, 100, 100); break; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(0, hitTime, -1, false); + } + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(11, currentAni.getDelaySum(false) / 4, 2, false); + currentAni.setSpeedRate(250.0); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, speedRate); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/110lvepicweapona/boomeffect_15.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/110lvepicweapona/boombottom_exp.ani"; + createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.sq_PlaySound("R_LIVINGDEAD_OVEREAT"); + obj.sq_PlaySound("DARK_EXPLOSION"); + break; + case 5: + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/newdarkmatter2_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + obj.setTimeEvent(1, lifeTime, 1, false); + currentAni.setSpeedRate(250.0); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEADEX: + switch(subtype){ + case 1://totalDamage,lifeTime,hitTime,prob,sizeRate + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local prob = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, sizeRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local attackInfo = sq_GetCurrentAttackInfo(obj); + if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_HOLD, prob, sq_GetSkillLevel(sqrChr, 174), lifeTime + 2000); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamage2 = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage2); + local range = 500 * sizeRate / 100; + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/talisman/blameofdeadex_talisman_torment_start_effc05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, range, 100); + } + break; + case 3: + local lifeTime = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/headstart.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/smallbonehandn.ani"]; + local ani = sq_CreateAnimation("",aniPath[sub]); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, lifeTime, 1, false); + break; + } + break; + case SKILL_BYKK_HATEFULGHOST: + switch(subtype){ + case 1: + sqrChr.getVar("hatefulGhostObj").push_obj_vector(obj); + local totalDamage_1st = receiveData.readDword(); + local totalDamage_2nd = receiveData.readDword(); + local totalDamage_3th1 = receiveData.readDword(); + local totalDamage_3th2 = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isAuto = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_1st); + obj.getVar("custom").setInt(1, totalDamage_2nd); + obj.getVar("custom").setInt(2, totalDamage_3th1); + obj.getVar("custom").setInt(3, totalDamage_3th2); + obj.getVar("custom").setInt(4, lifeTime); + obj.getVar("custom").setInt(5, sizeRate); + obj.getVar("custom").setInt(6, isAuto); + obj.getVar("phaseSet").setInt(0, 0); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.setTimeEvent(10, lifeTime, 1, false); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/dummyattackbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sizeRate = sizeRate.tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + local targetObj = sqrChr.getVar("hatefulGhostObj").get_obj_vector(0); + sq_moveWithParent(targetObj, obj); + local sub = receiveData.readDword(); + if(sub == 0) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + else if(sub == 2) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_COCONOFUNDEAD: + switch(subtype){ + case 1: + sqrChr.getVar("coconofundeadObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + case 3: + sqrChr.getVar("coconofundeadObj_b").push_obj_vector(obj); + local lifeTime = receiveData.readDword(); + obj.setTimeEvent(1, lifeTime, 1, false); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + case 3: + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_MARKOFFLAME); + if(skillLevel > 0){ + local sklIndex = [SKILL_THBYKK_FLAMEBALL, + SKILL_THBYKK_BIGKUNAI, + SKILL_THBYKK_FLAMETORNADO, + SKILL_THBYKK_GASOLINEFIRE, + SKILL_THBYKK_ILUSIONSHURIKEN, + SKILL_THBYKK_SKYROADS, + SKILL_THBYKK_FLAMEFLOWER, + SKILL_THBYKK_DOOMFIELD + ]; + for(local i = 0; i < sklIndex.len(); i++){ + if(sklIndex[i] == skillIndex){ + // print("settest"); + local burnDamageRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); + local burnTime = sq_GetIntData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 0); + local decreaseBurnDamageRate = burnDamageRate; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)){ + burnDamageRate = burnDamageRate + sq_GetIntData(sqrChr, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; + } + obj.getVar("markofFlame").setBool(0, true); + obj.getVar("markofFlameSet").setInt(0, burnDamageRate); + obj.getVar("markofFlameSet").setInt(1, decreaseBurnDamageRate); + obj.getVar("markofFlameSet").setInt(2, burnTime); + // print("settest"); + } + } + if(skillIndex == SKILL_THBYKK_LEAVETRACE && subtype == SKILL_THBYKK_FLAMEFLOWER){ + local burnDamageRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); + local burnTime = sq_GetIntData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 0); + local decreaseBurnDamageRate = burnDamageRate; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)){ + burnDamageRate = burnDamageRate + sq_GetIntData(sqrChr, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; + } + obj.getVar("markofFlame").setBool(0, true); + obj.getVar("markofFlameSet").setInt(0, burnDamageRate); + obj.getVar("markofFlameSet").setInt(1, decreaseBurnDamageRate); + obj.getVar("markofFlameSet").setInt(2, burnTime); + // print("settest"); + } + } + switch(skillIndex){ + case SKILL_THBYKK_FLAMEBALL: + switch(subtype){ + case 1: + sqrChr.getVar("FlameBall").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, lifeTime); + obj.getVar("custom").setInt(4, sizeRate); + obj.getVar("custom").setInt(5, speedRate); + obj.getVar("custom").setInt(6, isBlue); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/end_flameball_end_dodge.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/end_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_THBYKK_BIGKUNAI: + switch(subtype){ + case 1: + case 2: + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local moveBool = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, lifeTime); + obj.getVar("custom").setInt(4, sizeRate); + obj.getVar("custom").setInt(8, isBlue); + obj.getVar("custom").setInt(9, moveBool); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3://totalDamage,sizeRate,subtype,isBlue + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local subState = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunai/groundatkfinish_e_bomal.ani"; + if(subState > 1) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunaijump/airatkfinish_e_bomal.ani"; + if(isBlue > 0){ + if(subState > 1) aniPath = "passiveobject/z_ninja/animation/bigkunai/swordofkusanagi/airatkfinish_e_bomal_blue.ani"; + else aniPath = "passiveobject/z_ninja/animation/bigkunai/swordofkusanagi/groundatkfinish_e_bomal_blue.ani"; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 6, 200); + break; + } + break; + case SKILL_THBYKK_FLAMETORNADO: + switch(subtype){ + case 1: + sqrChr.getVar("FlameTornadoObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local range = receiveData.readDword(); + local expSizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, hitTime); + obj.getVar("custom").setInt(3, lifeTime); + obj.getVar("custom").setInt(4, sizeRate); + obj.getVar("custom").setInt(5, range); + obj.getVar("custom").setInt(6, expSizeRate); + obj.getVar("custom").setInt(7, isBlue); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + // print("sizeRate = "+sizeRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/explosion/explosion_fire01.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/blueexplosion/blueexplosion_fire01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 78)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 6, 200); + break; + } + break; + case SKILL_THBYKK_GASOLINEFIRE: + switch(subtype){ + case 1: + local totalDamage_shockwave = receiveData.readDword(); + local totalDamage_ball = receiveData.readDword(); + local totalDamage_ballexp = receiveData.readDword(); + local totalDamage_disexp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sockwaveSizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local toadSizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_shockwave); + obj.getVar("custom").setInt(1, totalDamage_ball); + obj.getVar("custom").setInt(2, totalDamage_ballexp); + obj.getVar("custom").setInt(3, totalDamage_disexp); + obj.getVar("custom").setInt(4, sizeRate); + obj.getVar("custom").setInt(5, sockwaveSizeRate); + obj.getVar("custom").setInt(6, toadSizeRate); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_KURVEJADE); + if(skillLevel > 0){ + local addSpeedRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_KURVEJADE, 3, skillLevel); + addSpeedRate = addSpeedRate * 60 / 100; + obj.getVar("custom").setInt(7, addSpeedRate); + } + else obj.getVar("custom").setInt(7, 0); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(7, isBlue); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/toad/gasolinefireact_toad.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(toadSizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = toadSizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case 2: + local totalDamage_shockwave = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage_shockwave * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage_shockwave = totalDamage_shockwave * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sockwaveSizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/shockwave/gasolinefireshockwave_eff_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 93)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_shockwave); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(sockwaveSizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sockwaveSizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 3, 120); + break; + case 3: + local totalDamage_ball = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage_ball * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage_ball = totalDamage_ball * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local totalDamage_ballexp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_ballexp); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isBlue); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/ball/gasolinefirefireball_eff_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_ball); + obj.sq_SetMoveParticle("particle/kunoichi_bykk/gasolinefire.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,2,300); + break; + case 4: + local totalDamage_ballexp = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage_ballexp * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage_ballexp = totalDamage_ballexp * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword();// * 150 / 100 + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/lowlevelballexp/gasolinefirefinish_b_ground_a.ani"; + if(isBlue > 0){ + aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/lowlevelballexp/swordofkusanagi/gasolinefirefinish_b_blacksmoke.ani"; + createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/lowlevelballexp/swordofkusanagi/gasolinefirefinishbottom_b_ground_b.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate) + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 92)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_ballexp); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.sq_PlaySound("GASOLINEFIRE_BALL_EXP"); + sq_SetMyShake(obj, 12, 600); + break; + case 5: + local totalDamage_disexp = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage_disexp * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage_disexp = totalDamage_disexp * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/disappearexp/gasolinefireactfireb_blacksmoke.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 91)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_disexp); + sq_SetMyShake(obj, 3, 80); + break; + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local reboundCount = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, reboundCount); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/shoot_b_kunai.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/swordofkusanagi/shoot_b_kunai.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speed = 1000.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + break; + case 2: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/shootair_b_kunai.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/swordofkusanagi/shootair_b_kunai.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speed = 1000.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed); + break; + case 3: + case 4: + sqrChr.getVar("IlusionShuriken").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local reboundCount = receiveData.readDword(); + local createMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local isIllusion = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, reboundCount); + obj.getVar("custom").setInt(2, createMax); + obj.getVar("custom").setInt(3, 0); + obj.getVar("custom").setInt(4, speedRate); + obj.getVar("custom").setInt(5, isBlue); + local ani = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK); + local ani2 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK2); + local ani3 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK3); + if(isIllusion > 0){ + ani = sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken.ani"); + ani2 = sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken2.ani"); + ani3 = sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken3.ani"); + } + if(subtype == 4){ + ani = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK); + ani2 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK2); + ani3 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK3); + } + obj.getVar("saveAni").clear_ani_vector(); + obj.getVar("saveAni").push_ani_vector(ani); + obj.getVar("saveAni").push_ani_vector(ani2); + obj.getVar("saveAni").push_ani_vector(ani3); + if(subtype == 3) sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/groundatk/ilusion_groundatkstart_a_boom.ani", 0, 1, 0); + else sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/airatk/ilusion_airatkstart_boom.ani", 0, 1, 0); + obj.sq_PlaySound("GHOSTKUNAI_CAST"); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_THBYKK_MIGAWARI: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, speedRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariatka_eff_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 106)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 3, 120); + break; + case 2: + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_surikenhitbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 1, -30,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,21,totalDamage_exp,sizeRate,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_surikeneff.ani", 0, 1, 0); + // sq_SetMyShake(obj, 3, 120); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_explosion_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 105)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_flashScreen(obj,0,0,400,204,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 2, 200); + break; + case 21: + local totalDamage_exp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_exp); + obj.getVar("custom").setInt(1, sizeRate); + sqrChr.getVar("MigawariObj").push_obj_vector(obj); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_suriken.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawarifinish_eff_b.ani", -50, 1, 30); + // obj.setTimeEvent(1, 300, 1, false); + break; + } + break; + case SKILL_THBYKK_SKYROADS: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/smoke/skyroadsact_smoke_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 3, 80); + break; + case 2: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/airflame/back/skyroadsact_blacksmoke.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/airflame/front/skyroadsact_ball_a.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetMyShake(obj, 3, 80); + break; + case 3: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local xPos = receiveData.readDword(); + local zPos = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/beam/hand_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 109)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local baseX = sq_GetXPos(obj), baseZ = sq_GetZPos(obj); + local currentAni = obj.getCurrentAnimation(); + local sizeRate = baseZ.tofloat() / 420.0; + currentAni.setImageRateFromOriginal(sizeRate, 1.0); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, 1.0, 1.1); + local atan = sq_Atan2((225 * 1.2).tofloat(), zPos.tofloat()); + sq_SetCustomRotate(obj, -atan); + break; + case 4: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local isTalisman = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage * 8 / 100); + obj.getVar("custom").setInt(2, sizeRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/exp/skyroadsfinisheff_blacksmoke.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/exp/swordofkusanagi/blueskyroadsfinish_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 110)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/exp/swordofkusanagi/blueskyroadsfinishfloor_floor_a.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 6, 300); + if(isTalisman > 0){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 4); + obj.getVar("custom").setInt(3, currentAni.getDelaySum(false) - delay); + obj.setTimeEvent(1, delay, 1, false); + } + break; + case 5: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local time = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/firegound/skyroadsfinisheff_ground_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 111)); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + local speedRate = delay * 100 / (2500 + time); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + if(sizeRate > 100){ + local sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_THBYKK_FLAMEFLOWER: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameflower/flameflowerexp.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameflower/swordofkusanagi/bluelast_last.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 76)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + local sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 10, 300); + break; + } + break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallowatka_eff_a.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 76)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + sq_SetAttackBoundingBoxSizeRate(currentAni, 2.0, 2.0, 2.0); + sq_SetMyShake(obj, 3, 80); + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + obj.setTimeEvent(1, 200, 1, false); + } + break; + case 3: + local totalDamage_shuriken = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local createMax = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_shuriken); + obj.getVar("custom").setInt(1, totalDamage_exp); + obj.getVar("custom").setInt(2, createMax); + obj.getVar("custom").setInt(3, sub); + switch(sub){ + case 1: + case 3: + local ani = sq_GetCustomAni(sqrChr, ANI_THBYKK_FLYINGSWALLOWMOVING); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + break; + case 2: + case 4: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallowmovingtrace.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + break; + } + break; + case 4: + local totalDamage_exp = receiveData.readDword(); + local sub = receiveData.readDword(); + local num = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_exp); + obj.getVar("custom").setInt(1, sub); + obj.getVar("custom").setInt(2, num); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 5: + local totalDamage_shuriken = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_shuriken); + obj.setTimeEvent(3, 100, 1, false); + break; + case 6: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_boom2_normal_attack.ani"; + if(sub > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_boom2_jump_attack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, sub>0?81:80)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sub > 0 && sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_SetMyShake(obj, 5, 80); + break; + case 7: + local totalDamage_exp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local num = receiveData.readDword(); + local numMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_exp); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, num); + obj.getVar("custom").setInt(3, numMax); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 8: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_light_line.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local angle = -35.0; + switch(sub){ + case 2: angle = 35.0; break; + case 3: angle = -70.0; break; + case 4: angle = 60.0; break; + case 5: angle = 90.0; break; + } + sq_SetCustomRotate(obj, sq_ToRadian(angle)); + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(2.0, 1.0); + sq_SetAttackBoundingBoxSizeRate(currentAni, 1.0, 1.0, 1.0); + break; + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local speedRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/floor/doomfiledfloor_floor02.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/swordofkusanagi/floor/doomfiledfloor_floor02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + break; + case 2: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircleexpattackbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2, 50, 10, true); + break; + case 3: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local totalDamage_exp = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_exp); + obj.getVar("custom").setInt(1, speedRate); + obj.getVar("custom").setInt(2, sizeRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/startflame/doomfiledcreate_flame01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local speedRate = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/startexplosion/doomfiledexplosion_flameex02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 5: + sqrChr.getVar("DoomFieldObj").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local phaseSet = receiveData.readDword(); + local sub = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, phaseSet); + obj.getVar("custom").setInt(2, sizeRate); + obj.getVar("custom").setInt(3, isBlue); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircle0"+sub.tostring()+"_set01.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/swordofkusanagi/ninjacircle/ninjacircle0"+sub.tostring()+"_set01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case 6: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/lastexplosion/lastexplosion_normal09.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/swordofkusanagi/lastexplosion/lastexplosion_normal09.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_flashScreen(obj,0,120,10,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 200); + createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,8,totalDamage,sizeRate,0,0,0,0,0,0); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + } + break; + case 7: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircleattackbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 69)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + obj.setTimeEvent(2, 12, 6, true); + break; + case 8: + local totalDamage = receiveData.readDword(); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + local sizeRate = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircleexpattackbox.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 70)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(sizeRate > 100){ + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage_loop = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_loop); + obj.getVar("custom").setInt(2, hitMax); + obj.getVar("custom").setInt(3, sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, sizeRate); + sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + local totalDamage_loop = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_loop); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 4: + local totalDamage_loop = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_loop); + obj.getVar("custom").setInt(1, lifeTime); + obj.getVar("custom").setInt(2, sizeRate); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(subtype){ + case 1: + sqrChr.getVar("Amateras").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage_laser = receiveData.readDword(); + local laserMax = receiveData.readDword(); + local range = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_laser); + obj.getVar("custom").setInt(2, laserMax); + obj.getVar("custom").setInt(3, range); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local range = receiveData.readDword(); + local totalDamage_laser = receiveData.readDword(); + local laserMax = receiveData.readDword(); + obj.getVar("custom").setInt(1, totalDamage_laser); + obj.getVar("custom").setInt(2, laserMax); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_GetDistance(sq_GetXPos(obj), sq_GetYPos(obj), sq_GetXPos(object), sq_GetYPos(object), true) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 500){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); + } + } + local delay = 300; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_KURVEJADE); + if(skillLevel > 0){ + delay = delay * (100 - sq_GetLevelData(sqrChr, SKILL_THBYKK_KURVEJADE, 15, skillLevel) * 60 / 100) / 100; + } + obj.setTimeEvent(4, delay, 1, false); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.setTimeEvent(5, sub * 150, 1, false); + break; + case 4: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/laser/beam1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.getVar("custom").setInt(0, sq_GetXPos(obj)); + obj.getVar("custom").setInt(1, sq_GetYPos(obj)); + obj.getVar("custom").setInt(2, sq_GetZPos(obj)); + obj.getVar("custom").setInt(3, sq_GetHeightObject(targetObj) / 2); + obj.setTimeEvent(6, 8, 10, true); + } + break; + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: + switch(subtype){ + case 1: + sqrChr.getVar("FuumaShuriken").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local isIllusion = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/shurikensmalldummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 84)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.setTimeEvent(1, 50, -1, true); + if(isIllusion < 1) obj.setTimeEvent(0, 3000, 1, false); + else obj.setTimeEvent(0, 2000, 1, false); + break; + case 2: + local sub = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local isIllusion = receiveData.readDword(); + local time = (60 * hitMax - 100) / 2; + obj.getVar("custom").setInt(0, time); + obj.getVar("custom").setInt(1, sq_GetXPos(obj)); + obj.getVar("custom").setInt(2, sq_GetYPos(obj)); + obj.getVar("custom").setInt(5, isIllusion); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_smallsuriken_suriken.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speed = 350.0 * 2; + if(sub == 1) speed = speed * 1.25; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + switch(sub){ + case 0: sq_SetVelocity(obj, 1, -speed * 0.2); break; + case 2: sq_SetVelocity(obj, 1, speed * 0.2); break; + case 3: sq_SetVelocity(obj, 1, speed * 0.4); break; + } + obj.setTimeEvent(2, time, 1, false); + break; + case 3: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sizeRate_shuriken = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_exp); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isBlue); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/shurikenbigdummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 85)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMaxHitCounterPerObject(hitMax); + obj.setTimeEvent(1, 80, -1, true); + obj.setTimeEvent(5, 80 * (hitMax + 1), 1, false); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate_shuriken > 100){ + sizeRate = sizeRate_shuriken.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 4: + local hitMax = receiveData.readDword(); + local sizeRate_shuriken = receiveData.readDword(); + local isBlue = receiveData.readDword(); + // print(sizeRate_shuriken); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_big_suriken.ani"; + if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/talismansurikenloop_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/kunoichi_bykk/fuumashuriken01.ptl", 0.0, 0.0); + obj.setTimeEvent(0, 80 * (hitMax + 1), 1, false); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate_shuriken > 100){ + local sizeRate = sizeRate_shuriken.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 5: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local sub = receiveData.readDword(); + local isBlue = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikenexplosion_05.ani"; + if(sub == 1) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikenexplosion_jump_05.ani"; + if(isBlue > 0){ + aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikentalismanexplosion_05.ani"; + if(sub == 1) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikentalismanexplosion_jump_05.ani"; + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + case 6: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local isBlue = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, isBlue); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_big_jump_suriken.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speed = 600.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed); + break; + } + break; + case SKILL_THBYKK_JADEKAMAITACHI: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local addNumber = receiveData.readDword(); + local hitMax = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage_exp); + obj.getVar("custom").setInt(1, addNumber); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/tornado_03.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 98)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_SetMaxHitCounterPerObject(hitMax); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 15) / 20; + obj.setTimeEvent(1, delay, -1, false); + obj.setTimeEvent(2, currentAni.getDelaySum(0, 14), 1, false); + obj.setTimeEvent(3, currentAni.getDelaySum(0, 15), 1, false); + obj.sq_PlaySound("JADE_KAMAITACHI_SWIRL"); + break; + case 2: + local totalDamage = receiveData.readDword(); + local addNumber = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattack_finish_attackdummy.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("JADE_KAMAITACHI_FINISH"); + break; + case 3: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattack_31.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(4, currentAni.getDelaySum(0, 1), 1, false); + // obj.sq_PlaySound("JADE_KAMAITACHI_FIRELOOP_END"); + break; + } + break; + case SKILL_THBYKK_SWORDOFKUSANAGI: + switch(subtype){ + case 1: + sqrChr.getVar("SwordOfKusanagi").push_obj_vector(obj); + local totalDamage = receiveData.readDword(); + local totalDamage_loop = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_loop); + obj.getVar("custom").setInt(2, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkboom_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 113)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkboomfront_04.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkboomback_07.ani", 0, -1, 0); + break; + case 3:// + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/ff_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 4: + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, totalDamage_exp); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kuskyroads_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speed = 600.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 2, -speed); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + break; + case 5: + local totalDamage = receiveData.readDword(); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkfinish_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 115)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkfinish_01_background_01.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(4, currentAni.getDelaySum(0, 8), 1, false); + obj.setTimeEvent(5, currentAni.getDelaySum(0, 16), 1, false); + break; + } + break; + case SKILL_THBYKK_SHURIKENIMPROVE: + switch(subtype){ + case 1: + local attackIndex = receiveData.readDword(); + local aniPath = "equipment/character/thief/weapon/chakraweapon/chakraweaponc2/throwchakraweapon.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(100001,sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/throwchakraweapon/chakraweaponlineeff.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + obj.sq_SetMoveParticle("particle/kunoichi_bykk/chakraweapon.ptl", 0.0, 0.0); + break; + case 2: + local attackIndex = receiveData.readDword(); + local aniPath = "equipment/character/thief/weapon/chakraweapon/chakraweaponc2/throwchakraweapon.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(100001,sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/throwchakraweapon/chakraweaponlineeff.ani"),true); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + obj.sq_SetMoveParticle("particle/kunoichi_bykk/chakraweaponjump1.ptl", 0.0, 0.0); + sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); + break; + } + break; + case SKILL_THBYKK_FIREHIDE: + sqrChr.getVar("firehide").push_obj_vector(obj); + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_THBYKK_KURVEJADE: + obj.setMapFollowParent(sqrChr); + obj.setMapFollowType(1); + switch(subtype){ + case 1: + sqrChr.getVar("kurvejadeFireObj").push_obj_vector(obj); + obj.getVar("custom").setInt(0, 0); + obj.getVar("custom").setInt(1, 0); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: + sqrChr.getVar("kurvejadeDarkObj").push_obj_vector(obj); + obj.getVar("custom").setInt(0, 1); + obj.getVar("custom").setInt(1, 0); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 3: + sqrChr.getVar("kurvejadeLightObj").push_obj_vector(obj); + obj.getVar("custom").setInt(0, 2); + obj.getVar("custom").setInt(1, 0); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_THBYKK_LEAVETRACE: + local state = receiveData.readDword(); + local startFrameIndex = receiveData.readDword(); + local ninjutsuPhase = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local bonusRate = receiveData.readDword(); + local set_1 = receiveData.readDword(); + local set_2 = receiveData.readDword(); + obj.getVar("custom").setInt(0, state); + obj.getVar("custom").setInt(1, startFrameIndex); + obj.getVar("custom").setInt(2, ninjutsuPhase); + obj.getVar("custom").setInt(3, speedRate); + obj.getVar("custom").setInt(4, bonusRate); + obj.getVar("custom").setInt(5, set_1); + obj.getVar("custom").setInt(6, set_2); + switch(subtype){ + case SKILL_THBYKK_BIGKUNAI: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 0, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 1, bonusRate); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_BIGKUNAI); + local hitTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 2, skillLevel); + local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 3, skillLevel); + local sizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 4, skillLevel); + local addSizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 5, skillLevel); + sizeRate = sizeRate + addSizeRate * ninjutsuPhase; + local isBlue = 0, moveBool = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, totalDamage_exp); + obj.getVar("custom").setInt(9, hitTime); + obj.getVar("custom").setInt(10, lifeTime); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, isBlue); + obj.getVar("custom").setInt(13, moveBool); + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, bonusRate); + local reboundCount = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 4, 1.0) + 100; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, reboundCount); + obj.getVar("custom").setInt(9, isBlue); + break; + case SKILL_THBYKK_FLAMETORNADO: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 0, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 1, bonusRate); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_FLAMETORNADO); + local hitTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 3, skillLevel); + local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 2, skillLevel); + local sizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 6, skillLevel); + local addSizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 5, skillLevel); + local addExpSizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 7, skillLevel); + sizeRate = sizeRate + addSizeRate * ninjutsuPhase; + local range = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 2); + local addRangeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 9, skillLevel); + range = range * (100 + addRangeRate * ninjutsuPhase) / 100; + local expSizeRate = sizeRate + addExpSizeRate * ninjutsuPhase; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, totalDamage_exp); + obj.getVar("custom").setInt(9, hitTime); + obj.getVar("custom").setInt(10, lifeTime); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, range); + obj.getVar("custom").setInt(13, expSizeRate); + obj.getVar("custom").setInt(14, isBlue); + break; + case SKILL_THBYKK_SKYROADS: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 0, bonusRate); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 13); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, sizeRate); + obj.getVar("custom").setInt(9, isBlue); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, bonusRate); + obj.getVar("custom").setInt(10, totalDamage); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 2, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 3, bonusRate); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 13); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); + local xPos = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), 225); + local zPos = sq_GetZPos(obj); + local isTalisman = 0; + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, totalDamage_exp); + obj.getVar("custom").setInt(13, sizeRate); + obj.getVar("custom").setInt(14, xPos); + obj.getVar("custom").setInt(15, zPos); + obj.getVar("custom").setInt(16, isTalisman); + break; + case SKILL_THBYKK_GASOLINEFIRE: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage_shockwave = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, bonusRate); + local totalDamage_ball = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, bonusRate); + local totalDamage_ballexp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, bonusRate); + local totalDamage_disexp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, bonusRate); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_GASOLINEFIRE, 4); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_GASOLINEFIRE, 3 + ninjutsuPhase); + local sockwaveSizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_GASOLINEFIRE, 0); + local isTalisman = 0; + obj.getVar("custom").setInt(7, totalDamage_shockwave); + obj.getVar("custom").setInt(8, totalDamage_ball); + obj.getVar("custom").setInt(9, totalDamage_ballexp); + obj.getVar("custom").setInt(10, totalDamage_disexp); + obj.getVar("custom").setInt(11, sizeRate); + obj.getVar("custom").setInt(12, sockwaveSizeRate); + obj.getVar("custom").setInt(13, isTalisman); + break; + case SKILL_THBYKK_FLAMEFLOWER: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, bonusRate); + local totalDamage_loop = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 1, 1.0); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_FLAMEFLOWER); + local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMEFLOWER, 4, skillLevel) * 100 / speedRate; + local hitTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMEFLOWER, 2, skillLevel) * 100 / speedRate; + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, totalDamage_loop); + obj.getVar("custom").setInt(9, lifeTime); + obj.getVar("custom").setInt(10, hitTime); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 5, bonusRate); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMEFLOWER, 13) / 10; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(11, totalDamage_exp); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, isBlue); + break; + case SKILL_THBYKK_DOOMFIELD: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 0, bonusRate); + local sizeRate = 100; + if(sq_GetSkillLevel(sqrChr, SKILL_THBYKK_DOOMFIELD) >= 9) sizeRate = 120; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, sizeRate); + obj.getVar("custom").setInt(9, isBlue); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 4, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 1, bonusRate); + obj.getVar("custom").setInt(10, totalDamage); + obj.getVar("custom").setInt(11, totalDamage_exp); + local bonusRateGet = 1.0; + if(sq_GetSkillLevel(sqrChr, SKILL_THBYKK_DOOMFIELD) >= 6) bonusRateGet = 1.1; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 9, bonusRate * bonusRateGet); + obj.getVar("custom").setInt(12, totalDamage); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 2, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 3, bonusRate); + obj.getVar("custom").setInt(13, totalDamage); + obj.getVar("custom").setInt(14, totalDamage_exp); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_DOOMFIELD); + obj.getVar("custom").setInt(15, skillLevel); + break; + case SKILL_THBYKK_FUUMASHURIKEN: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 0, bonusRate); + local hitMax = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 13); + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, hitMax); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, bonusRate); + local hitMax = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 20); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 31); + if(ninjutsuPhase <= 3) sizeRate = sizeRate * sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 32) / 100; + else if(ninjutsuPhase > 3) sizeRate = sizeRate * sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 33) / 100; + local sizeRate_shuriken = 100; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("custom").setInt(9, totalDamage); + obj.getVar("custom").setInt(10, totalDamage_exp); + obj.getVar("custom").setInt(11, hitMax); + obj.getVar("custom").setInt(12, sizeRate); + obj.getVar("custom").setInt(13, sizeRate_shuriken); + obj.getVar("custom").setInt(14, isBlue); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, bonusRate); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 31); + local isTalisman = 0; + if(isTalisman > 1){ + sizeRate = sizeRate * 130 / 100; + } + obj.getVar("custom").setInt(15, totalDamage_exp); + obj.getVar("custom").setInt(16, sizeRate); + break; + case SKILL_THBYKK_YAMATAOROCHI: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage_loop = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, bonusRate); + local lifeTime = sq_GetIntData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 3) + local sizeRate = 100; + if(ninjutsuPhase > 0){ + switch(ninjutsuPhase){ + case 4: + case 5: + case 6: + lifeTime = lifeTime * (110) / 100; + break; + } + } + local isTalisman = 0; + if(isTalisman > 0) sizeRate = 120; + obj.getVar("custom").setInt(7, totalDamage_loop); + obj.getVar("custom").setInt(8, lifeTime); + obj.getVar("custom").setInt(9, sizeRate); + obj.getVar("custom").setInt(10, isTalisman); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 0, bonusRate); + local totalDamage_loop = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, bonusRate); + local hitMax = sq_GetIntData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 1); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 15); + obj.getVar("custom").setInt(11, totalDamage); + obj.getVar("custom").setInt(12, totalDamage_loop); + obj.getVar("custom").setInt(13, hitMax); + obj.getVar("custom").setInt(14, sizeRate); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 2, bonusRate); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_YAMATAOROCHI); + local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 3, skillLevel); + if(ninjutsuPhase > 0){ + switch(ninjutsuPhase){ + case 1: + case 2: + case 3: + local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); + lifeTime = lifeTime * (100 + addRate) / 100; + break; + case 4: + case 5: + case 6: + local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); + lifeTime = lifeTime * (100 + addRate) / 100; + break; + } + } + local sizeRate = 100; + local kurv_skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_KURVEJADE); + if(kurv_skillLevel > 0) sizeRate = sizeRate + sq_GetLevelData(sqrChr, SKILL_THBYKK_KURVEJADE, 7, kurv_skillLevel) * 60 / 100; + obj.getVar("custom").setInt(15, totalDamage); + obj.getVar("custom").setInt(16, lifeTime); + obj.getVar("custom").setInt(17, sizeRate); + break; + case SKILL_THBYKK_AMATERAS: + bonusRate = bonusRate.tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 0, bonusRate); + local totalDamage_laser = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 1, bonusRate); + local laserMax = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 2, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_AMATERAS); + if(ninjutsuPhase > 0){ + switch(ninjutsuPhase){ + case 1: + case 2: + case 3: + local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 6, skillLevel); + totalDamage = totalDamage * (100 + addRate) / 100; + totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; + break; + case 4: + case 5: + case 6: + local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 9, skillLevel); + totalDamage = totalDamage * (100 + addRate) / 100; + totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; + break; + } + } + local range = sq_GetIntData(sqrChr, SKILL_THBYKK_AMATERAS, 7); + obj.getVar("custom").setInt(7, totalDamage); + obj.getVar("custom").setInt(8, totalDamage_laser); + obj.getVar("custom").setInt(9, laserMax); + obj.getVar("custom").setInt(10, range); + break; + } + obj.addSetStatePacket(20 + state, null, STATE_PRIORITY_AUTO, false, ""); + break; + case SKILL_THBYKK_DEITIESREBIRTH: + switch(subtype){ + case 1: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, speedRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/avatardashstart_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + break; + case 2: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, speedRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/deitiesrebirthattacka_44.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + totalDamage = totalDamage * 6 / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 67)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + obj.sq_PlaySound("DEITIES_REBIRTH_FIRELOOP"); + break; + case 3: + local totalDamage = receiveData.readDword(); + local sizeRate = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(0, totalDamage); + obj.getVar("custom").setInt(1, sizeRate); + obj.getVar("custom").setInt(2, speedRate); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/deitiesrebirthattackb_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + totalDamage = totalDamage * 70 / 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat()); + sq_SetMyShake(obj, 20, 150); + createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/deitiesrebirthattackbbottom_00.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_THBYKK_FIREMARK: + switch(subtype){ + case 1: + local rangeNear = receiveData.readDword(); + local totalDamageNear = receiveData.readDword(); + local totalDamageExpNear = receiveData.readDword(); + local hitTimeNear = receiveData.readDword(); + local lifeTimeNear = receiveData.readDword(); + local rangeFar = receiveData.readDword(); + local totalDamageFar = receiveData.readDword(); + local totalDamageExpFar = receiveData.readDword(); + local hitTimeFar = receiveData.readDword(); + local lifeTimeFar = receiveData.readDword(); + obj.getVar("custom").setInt(0, rangeNear); + obj.getVar("custom").setInt(1, totalDamageNear); + obj.getVar("custom").setInt(2, totalDamageExpNear); + obj.getVar("custom").setInt(3, hitTimeNear); + obj.getVar("custom").setInt(4, lifeTimeNear); + obj.getVar("custom").setInt(5, rangeFar); + obj.getVar("custom").setInt(6, totalDamageFar); + obj.getVar("custom").setInt(7, totalDamageExpFar); + obj.getVar("custom").setInt(8, hitTimeFar); + obj.getVar("custom").setInt(9, lifeTimeFar); + local currentAni = obj.getCurrentAnimation(); + sq_AddAttackBox(currentAni, -rangeFar, -rangeFar / 2, -20, rangeFar * 2, rangeFar * 2, 320); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 130)); + sq_SetCurrentAttackeDamageAct(sq_GetCurrentAttackInfo(obj), 0); + sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); + obj.setTimeEvent(1, 100, 1, false); + break; + case 2: + case 3: + local totalDamage = receiveData.readDword(); + local totalDamage_exp = receiveData.readDword(); + local hitTime = receiveData.readDword(); + local lifeTime = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + obj.getVar("custom").setInt(1, totalDamage); + obj.getVar("custom").setInt(2, totalDamage_exp); + obj.getVar("custom").setInt(3, hitTime); + obj.getVar("custom").setInt(4, lifeTime); + obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case 255: + switch(subtype){ + case 1: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local time = receiveData.readDword(); + local damage = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("markofFlameObj").clear_obj_vector(); + activeObj.getVar("markofFlameObj").push_obj_vector(obj); + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(activeObj); + sq_moveWithParent(activeObj, obj); + obj.getVar("custom").setInt(0, group); + obj.getVar("custom").setInt(1, uniqueId); + local count = time / 500; + obj.getVar("custom").setInt(2, count); + obj.getVar("time").setInt(0, time); + obj.getVar("damage").setInt(0, damage); + obj.getVar("damage").setInt(1, damage); + if(damage > 0){ + obj.setTimeEvent(1, 500, count, false); + } + } + break; + case 2: + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local totalDamage = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + sq_moveWithParent(targetObj, obj); + local ani = sq_CreateAnimation("","common/commoneffect/animation/decreaseeffect/reactionburn_00.ani"); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 131)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(2, 250, 1, false); + } + break;// + } + break; + } + break; + case 4: + break; + } +} diff --git a/user/116.205.165.25/8_thief_3.c b/user/116.205.165.25/8_thief_3.c new file mode 100644 index 0000000..14f8ff1 --- /dev/null +++ b/user/116.205.165.25/8_thief_3.c @@ -0,0 +1,2563 @@ + +function setState_po_thief_bykk(obj, state, datas) +{ + if(!obj) return; + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + obj.getVar("state").setInt(0, state); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_NICOLASSUMMONZOMBIE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/zombiesummon/ball.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/zombiesummonball.ptl", 0.0, 0.0); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/zombiesummon/ballwork.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_NICOLASBLACKARACHNIA: + switch(subtype){ + case 3: + switch(state){ + case 20: + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/smallweb_normal.ani"; + if(obj.getVar("custom").getInt(2) > 0) aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/talisman_smallweb_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/smallwebloop_normal.ani"; + if(obj.getVar("custom").getInt(2) > 0) aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/talisman_smallwebloop_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(1); + obj.setTimeEvent(11, lifeTime, 1, false); + break; + } + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(subtype){ + case 1: + switch(state){ + case 20://出现 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/appear_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/appear_front_dodge.ani"),true); + currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/appear_front_normal.ani"),true); + currentAni.addLayerAnimation(-2,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/appear_back_dodge.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/appear_back_normal.ani"),true); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(10, delay, 1, false); + break; + case 21://静止 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/stay_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(!obj.isExistTimeEvent(11)) obj.setTimeEvent(11, 10, -1, true); + if(obj.isExistTimeEvent(14)) obj.stopTimeEvent(14); + sqrChr.getVar("ballacre_strongattack_bool").setBool(0, false); + break; + case 22://普攻第1击 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_pierce.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 5, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + if(obj.isExistTimeEvent(13)) obj.stopTimeEvent(13); + // obj.setTimeEvent(14, 10, -1, false); + sqrChr.getVar("ballacre_strongattack_bool").setBool(0, false); + obj.sq_PlaySound("R_BALAC_ATK"); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + // print("speedRate1 = "+speedRate); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local delay = 25.0 / speedRate * 100.0; + obj.setTimeEvent(15, delay.tointeger(), 5, true); + break; + case 23://普攻第2击 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_swing_rl.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 7, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sqrChr.getVar("ballacre_strongattack_bool").setBool(0, false); + obj.sq_PlaySound("R_BALAC_ATK"); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + // print("speedRate2 = "+speedRate); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local delay = 25.0 / speedRate * 100.0; + obj.setTimeEvent(16, delay.tointeger(), 5, true); + break; + case 24://普攻第3击 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_hand_pierce.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 10, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("BALAC_ATK_HAND"); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + // print("speedRate3 = "+speedRate); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(0, 1); + obj.setTimeEvent(12, delay, 1, false); + break; + case 25://普攻第4击 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_swing_down.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 8, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.isExistTimeEvent(14)) obj.stopTimeEvent(14); + if(obj.isExistTimeEvent(0)) obj.stopTimeEvent(0); + obj.sq_PlaySound("R_BALAC_ATK"); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + // print("speedRate4 = "+speedRate); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 26://跳打 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_jump_attack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 11, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.sq_PlaySound("BALAC_JUMPATK"); + break; + case 27://暗击拳 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_dash_upper.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 13, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + // print("speedRate5 = "+speedRate); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local delay = 10.0 / speedRate * 100.0; + obj.setTimeEvent(15, delay.tointeger(), 5, false); + obj.getVar("anjiquan_tar").clear_obj_vector(); + obj.sq_PlaySound("BALAC_DASHATK"); + break; + case 28://杀戮乱舞 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_swing_loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 12, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.stopTimeEvent(11); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + if(speedRate.tointeger() < 200) speedRate = 200.0; + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + local delay = 22.0 / speedRate * 100.0; + obj.setTimeEvent(13, delay.tointeger(), 100, true); + break; + case 29://巴拉克强击 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/strong_attack_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 17, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(obj.isExistTimeEvent(0)) obj.stopTimeEvent(0); + if(obj.isExistTimeEvent(13)) obj.stopTimeEvent(13); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + if(speedRate.tointeger() < 200) speedRate = 200.0; + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 30://杀戮乱舞护石形态 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/talisman/genosiderballacre_talisman_swing_lr_sword_spirit_dodge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + if(speedRate.tointeger() < 200) speedRate = 200.0; + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 31://野心出现 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_cast_hand_appear.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + local delay = 25.0 / speedRate * 100.0; + obj.setTimeEvent(17, delay.tointeger(), 3, true); + obj.sq_PlaySound("BALAC_AMBITION"); + break; + case 32://野心握拳 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_cast_hand_grab.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + obj.sq_PlaySound("BALAC_AMBITION_FIN"); + break; + case 33://野心护石 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ambitionofballacre/talisman/ambitionofballacre_talisman_cast_set05n01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + local delay = 25.0 / speedRate * 100.0; + obj.setTimeEvent(17, delay.tointeger(), 3, true); + obj.sq_PlaySound("BALAC_AMBITION_FIN"); + break; + case 34://愤怒开始 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_cast_guillotine_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 0, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + local delay = 25.0 / speedRate * 100.0; + obj.setTimeEvent(17, delay.tointeger(), 3, true); + obj.sq_PlaySound("BALAC_GUILLOTINE"); + break; + case 35://愤怒蓄力 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_cast_guillotine_charge.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + break; + case 36://愤怒结束 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_cast_guillotine_finish.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 2, 1.0) + 100; + if(obj.getVar("guillotine_bool").getBool(0)){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 2, 1.8) + 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + if(obj.getVar("guillotine_bool").getBool(0)){ + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + local delay = 25.0 / speedRate * 100.0; + obj.setTimeEvent(17, delay.tointeger(), 3, true); + } + obj.sq_PlaySound("BALAC_GUILLOTINE_FIN"); + break; + case 37://千魂祭 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/attack_cast_phantom_strom.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + local delay = 10.0 / speedRate * 100.0; + obj.setTimeEvent(13, delay.tointeger(), 60, true); + obj.getVar("phantom_bool").setBool(0, true); + break; + case 38://暴君极刑斩 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/executionerslash/newexecutionerslash_body.ani"; + if(obj.getVar("isStone_executionerslash").getBool(0)) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/talisman/executionerslash/executionerslashtalisman_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + if(obj.isExistTimeEvent(11)) obj.stopTimeEvent(11); + pAni = obj.getCurrentAnimation(); + sq_flashScreen(obj,pAni.getDelaySum(0, 3),pAni.getDelaySum(4, 17),0,255,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/executionerslash/executionerslash_smoke_g.ani", 50, 0, 50); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setSpeedRate(140.0); + obj.sq_PlaySound("R_BALAC_EXECUTIONSLASH"); + break; + case 39://亡者君临 : 巴拉克之戮 + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrecast02_set08n_empty.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/talisman/ballacretalismanswordloop_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(0, 0); + obj.setTimeEvent(0, delay / 4, -1, false); + obj.setTimeEvent(20, delay / 10, 50, true); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/talisman/ballacretalismanswordend_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + break; + } + break; + } + break; + case SKILL_BYKK_AMBITIONOFBALLACRE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ambitionofballacre/hand_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + local speedRate = obj.getVar("custom").getInt(3); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate.tofloat() / 100.0); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ambitionofballacre/hand_grab_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate); + sq_SetMyShake(obj, 5, 240); + break; + } + local sizeRate = obj.getVar("custom").getInt(2); + local currentAni = obj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_PHANTOMSTROM: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/sphere/start_circle_back_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(150.0); + local delay = pAni.getDelaySum(false); + local flashScreenObj = sq_flashScreen(obj,delay,9999999,0,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sqrChr.getVar("flashobj").clear_obj_vector(); + sqrChr.getVar("flashobj").push_obj_vector(flashScreenObj); + local range = 400; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, 800, 100); + } + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/sphere/loop_circle_back_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(10, obj.getVar("custom").getInt(3), 1, false); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/sphere/bottom.ani"; + local pooledObj = createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + obj.getVar("effect").clear_obj_vector(); + obj.getVar("effect").push_obj_vector(pooledObj); + obj.sq_PlaySound("FANTOM_BLACKHOLE_LOOP", 2000); + break; + case 22: + obj.stopSound(2000); + obj.sq_PlaySound("FANTOM_EXP"); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/sphere/end_circle_back_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + local totalDamage2 = obj.getVar("custom").getInt(2); + local strom2Time = obj.getVar("custom").getInt(5); + local strom2HitTime = obj.getVar("custom").getInt(6); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_PHANTOMSTROM,2,totalDamage,totalDamage2,strom2Time,strom2HitTime,0,0,0,0); + local effect_obj = obj.getVar("effect").get_obj_vector(0); + if(effect_obj) effect_obj.setValid(false); + if(!sqrChr) break; + CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/ghost/expstart_floor.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/ghost/expstart_back_dodge.ani"),true); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, 800, 100); + } + obj.sq_PlaySound("FANTOM_COLUMN_LOOP", 2000); + break; + case 21: + obj.stopSound(2000); + obj.sq_PlaySound("FANTOM_FIN"); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/ghost/expendfront_normal_back.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(20, 600, -1, false); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1000,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/ghost/expendfloor_common_dodge.ani"),true); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/phantomstrom/ghost/expendback_dodge.ani"),true); + obj.setTimeEvent(11, obj.getVar("custom").getInt(2), 1, false); + break; + } + break; + } + break; + case SKILL_BYKK_BALLACREADVENT: + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/beadstart02_set07n.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/beadloop_set01d.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(obj.getVar("custom").getInt(0).tofloat() / 100.0); + break; + case 6: + switch(state){ + case 20: + local aniPath = "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/bg/bgstart_set07d02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/bg/bg_set07d02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/bg/bgend_set07d02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(obj.getVar("custom").getInt(0).tofloat() / 100.0); + break; + } + break; + case SKILL_BYKK_DARKSOUL: + switch(subtype){ + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passivemagicspherestart_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(12, 100, -1, false); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passivemagicsphereloop_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); + obj.setTimeEvent(10, 100, -1, false); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passivemagicsphereend_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 4: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passiveskeletonstart_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passiveskeletonloop_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passiveskeletonend_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,100,0,0,0,0,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_DARKLURE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/bead_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/bead_dodge.ani"),true); + obj.sq_SetMoveParticle("particle/darklure.ptl", 0.0, 0.0); + obj.setTimeEvent(10, obj.getVar("custom").getInt(6), 1, false); + break; + case 21: + case 22: + obj.sq_RemoveMoveParticle(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/bead_exp.ani"; + if(state == 22) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/bead_exp_sky.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(2); + local increaseRate = obj.getVar("custom").getInt(3); + local increaseRate_cur = obj.getVar("custom").getInt(4); + local sizeRate = obj.getVar("custom").getInt(5); + local sub = 0; + if(obj.getVar().getBool(0)){totalDamage = totalDamage * (100 + increaseRate) / 100; sub = 2;} + if(state == 22) sub = 1; + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_DARKLURE); + if(!addAppendage){ + addAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, APDPATH_DARKLURE, true); + } + addAppendage.sq_SetValidTime(lifeTime); + addAppendage.getVar("custom").setInt(0, increaseRate_cur); + } + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_DARKLURE,2,totalDamage,lifeTime,hitTime,sizeRate,sub,0,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_LIVINGDEAD: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/start_livingdead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/attact1start_livingdead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/loopmagiccircle.ani"; + local pooledObj = createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + obj.getVar("effect").clear_obj_vector(); + obj.getVar("effect").push_obj_vector(pooledObj); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/attack2start_livingdead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/attack2loop_livingdead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/attack2darkmatterloop_10.ani"),true); + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(3); + local increaseRate = obj.getVar("custom").getInt(4); + local addSizeRate = obj.getVar("custom").getInt(5); + local sub = 0; + if(obj.getVar().getBool(0)){totalDamage = totalDamage * (100 + increaseRate) / 100; sub = 1;sizeRate = sizeRate + addSizeRate;} + obj.setTimeEvent(10, lifeTime, 1, false); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,35,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,2,totalDamage,lifeTime,hitTime,sizeRate * 80 / 100,sub,1,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,100,0,35,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,2,totalDamage,lifeTime,hitTime,sizeRate * 100 / 100,sub,0,0,0); + if(sub > 0){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,150,0,35,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,2,totalDamage,lifeTime,hitTime,sizeRate * 120 / 100,sub,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,0,35,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,2,totalDamage,lifeTime,hitTime,sizeRate * 140 / 100,sub,0,0,0); + } + break; + case 24: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/end_livingdead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local effect = obj.getVar("effect").get_obj_vector(0); + if(effect) effect.setValid(false); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/start_livingdead.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/110lvepicweapona/boom_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local pAni = obj.getCurrentAnimation(); + pAni.setSpeedRate(obj.getVar("custom").getInt(2).tofloat()); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEADEX: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/areastart.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(125.0); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/arealoop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(10, obj.getVar("custom").getInt(1), 1, false); + obj.setTimeEvent(0, obj.getVar("custom").getInt(2), -1, true); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/areaend.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local sizeRate = obj.getVar("custom").getInt(3).tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + } + break; + case SKILL_BYKK_HATEFULGHOST: + switch(subtype){ + case 1: + local aniPath = [ + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/hatefulbodysmall_00.ani",//20 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/hatefulbodysmallend_01.ani",//21 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack1/hatefulbodyattack1bottom_00.ani",//22 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack1/hatefulbodyattack1bottomend_01.ani",//23 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2abottom_00.ani",//24 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2bbottom_00.ani",//25 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2bottomend_01.ani",//26 + "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack3/hatefulbodyattack3bottom_01.ani"];//28 + local ani = sq_CreateAnimation("", aniPath[state - 20]); + obj.setCurrentAnimation(ani); + switch(state){ + case 20: break; + case 22: + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack1/hatefulbodyattack1effect_00.ani", 0, 1, 1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,3,2,0,0,0,0,0,0,0); + break; + case 24: + case 25: + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + if(state == 24){ + obj.setTimeEvent(22, currentAni.getDelaySum(0, 1), 1, false); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2aeffect_03.ani", 0, 1, 1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,3,0,0,0,0,0,0,0,0); + } + else{ + obj.setTimeEvent(23, currentAni.getDelaySum(0, 2), 1, false); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2beffect_03.ani", 0, 1, 1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,3,1,0,0,0,0,0,0,0); + } + break; + case 27: + local totalDamage = obj.getVar("custom").getInt(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + // currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack3/hatefulbodyattack3effect_05.ani"),true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack3/hatefulbodyattack3hand_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack3/hatefulbodyattack3effect_05.ani", 0, 1, 1); + obj.setTimeEvent(20, currentAni.getDelaySum(0, 8), 1, false); + obj.setTimeEvent(21, currentAni.getDelaySum(0, 1), 1, false); + break; + case 23: + case 26: + if(obj.getVar("custom").getInt(6) > 0) obj.getVar("phaseSet").setInt(0, 1000); + else obj.getVar("phaseSet").setInt(0, obj.getVar("phaseSet").getInt(0) + 1); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.setTimeEvent(11, delay / 100, 50, true); + break; + } + if(state <= 21) break; + local sizeRate = obj.getVar("custom").getInt(5).tofloat() / 100.0; + local currentAni = obj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2ahand_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2bhand_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack2/hatefulbodyattack2handend_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack1/hatefulbodyattack1hand_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 24: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/attack1/hatefulbodyattack1handend_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_BYKK_COCONOFUNDEAD: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonattractionattack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.getVar("tar").clear_obj_vector(); + obj.setTimeEvent(10, 440, 1, false); + obj.setTimeEvent(11, 520, 1, false); + obj.setTimeEvent(14, 800, 1, false); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonsmallstart_07.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/thief/2_necromancer_bykk/cocoonofundead/animation/cocoonsmallloop_00.ani"),true); + obj.setTimeEvent(13, 520, 1, true); + obj.sq_PlaySound("COCOON_UNDEAD_START"); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonmediumstart_07.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/thief/2_necromancer_bykk/cocoonofundead/animation/cocoonmediumloop_00.ani"),true); + obj.setTimeEvent(13, 520, 1, true); + obj.sq_PlaySound("COCOON_UNDEAD_GROW_01"); + break; + case 23: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonlargestart_07.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/thief/2_necromancer_bykk/cocoonofundead/animation/cocoonlargeloop_00.ani"),true); + obj.setTimeEvent(13, 520, 1, true); + obj.sq_PlaySound("COCOON_UNDEAD_GROW_02"); + break; + case 24: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonlargeloop_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 25: + obj.removeAllTimeEvent(); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonexplosion_09.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_COCONOFUNDEAD_HOLD); + } + } + } + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/rangestartbottom_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/rangeloopbottom_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonstartbottom_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonloopbottom_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_THBYKK_FLAMEBALL: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/flameballstart.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 127)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + // print("totalDamage1 = "+totalDamage); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/flameballloop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), -1, true); + obj.setTimeEvent(2, obj.getVar("custom").getInt(3), 1, false); + break; + case 22: + obj.removeAllTimeEvent(); + local pooledObj = obj.getVar().get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/flameballend.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + if(obj.getVar("custom").getInt(6) < 1) currentAni.addLayerAnimation(6,sq_CreateAnimation("","character/thief/effect/animation/3kunoichi_bykk/flameball/end/end_flameball_end_normal.ani"),true); + else{ + local aniPath = "passiveobject/z_ninja/animation/flameball/swordofkusanagi/end_flameball_end_dodge.ani"; + local direction = sq_GetDirection(obj), x = sq_GetDistancePos(sq_GetXPos(obj), direction, 230); + local sizeRate = obj.getVar("custom").getInt(4); + createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,direction,x,sq_GetYPos(obj),70,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate) + } + local totalDamage = obj.getVar("custom").getInt(1); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + // print("totalDamage2 = "+totalDamage); + break; + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("custom").getInt(5).tofloat()); + local sizeRate = obj.getVar("custom").getInt(4); + if(state == 21){ + local aniPath = "character/thief/effect/animation/3kunoichi_bykk/flameball/loop/loop_flameball_normal.ani"; + if(obj.getVar("custom").getInt(6) > 0) aniPath = "character/thief/effect/animation/3kunoichi_bykk/flameball/swordofkusanagi/loop_02.ani"; + local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 50); + local pooledObj = createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,direction,xPos,sq_GetYPos(obj),70,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(obj.getVar("custom").getInt(5).tofloat()); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(pooledObj); + } + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_THBYKK_BIGKUNAI: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunai/groundatking_a2_kunai.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + // local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetAddWeaponDamage(sq_GetCurrentAttackInfo(obj), false); + // sq_SetCurrentAttackBonusRate(, totalDamage); + local speed = 800.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunai/groundatkloop_d_dust3.ani"; + if(obj.getVar("custom").getInt(8) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunai/swordofkusanagi/groundatkloop_d_dust3.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), -1, true); + obj.setTimeEvent(2, obj.getVar("custom").getInt(3), 1, false); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunaijump/airatking_fire.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + // local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetAddWeaponDamage(sq_GetCurrentAttackInfo(obj), false); + obj.getVar("custom").setInt(5, sq_GetXPos(obj)); + local zpos = sq_GetZPos(obj); + obj.getVar("custom").setInt(6, zpos); + obj.getVar("custom").setInt(7, zpos / 2); + obj.setTimeEvent(3, 1, 30, true); + break; + case 21: + sq_CreateParticle("passiveobject/6_thief_bykk/particle/kunoichi_bykk/bigkunai.ptl", obj, 0, 1, 0, true, 100, 0, 20); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunaijump/airatkloop_d_back.ani"; + if(obj.getVar("custom").getInt(8) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunaijump/swordofkusanagi/airatkloop_d_back.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), -1, true); + obj.setTimeEvent(2, obj.getVar("custom").getInt(3), 1, false); + break; + } + break; + } + break; + case SKILL_THBYKK_FLAMETORNADO: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/start/projectile_01.ani"; + if(obj.getVar("custom").getInt(7) > 0){ + aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/blueprojectile/blueprojectile_01.ani"; + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/bluestart/blueflametornadostart02_flame01.ani", 0, 0, 0); + local totalDamage = obj.getVar("custom").getInt(0); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 77)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), -1, true); + obj.setTimeEvent(2, obj.getVar("custom").getInt(3), 1, false); + } + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(200.0); + local speed = 300.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_FLAMETORNADO_SUCK)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, APDPATH_FLAMETORNADO_SUCK); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_FLAMETORNADO_SUCK, false); + if(appendage){ + CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); + if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, obj.getVar("custom").getInt(5), 100); + } + } + obj.setTimeEvent(3, 800, 1, false); + local count = (obj.getVar("custom").getInt(3) - 800) / 50; + obj.setTimeEvent(4, 50, count, true); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/projectile/projectile_01.ani"; + if(obj.getVar("custom").getInt(7) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/blueprojectile/blueprojectile_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 77)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, obj.getVar("custom").getInt(2), -1, true); + obj.setTimeEvent(2, obj.getVar("custom").getInt(3), 1, false); + break; + } + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(4); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(subtype){ + case 3: + case 4: + switch(state){ + case 20: + local ani = obj.getVar("saveAni").get_ani_vector(0); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("custom").getInt(4).tofloat()); + obj.setTimeEvent(1, 1000, 1, true); + break; + case 21: + local ani = obj.getVar("saveAni").get_ani_vector(1); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("custom").getInt(4).tofloat()); + currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(2, currentAni.getDelaySum(0, 0), 1, false); + break; + case 22: + local ani = obj.getVar("saveAni").get_ani_vector(2); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("custom").getInt(4).tofloat()); + currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(3, currentAni.getDelaySum(0, 2), 1, false); + break; + } + break; + } + break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(subtype){ + case 2: + switch(state){ + case 20: + local aniPath = "character/thief/effect/animation/3kunoichi_bykk/flyingswallow/flyingswallowfuuin01_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "character/thief/effect/animation/3kunoichi_bykk/flyingswallow/flyingswallowfuuin02_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2, 80, -1, false); + break; + case 22: + local aniPath = "character/thief/effect/animation/3kunoichi_bykk/flyingswallow/flyingswallowfuuin03_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "character/thief/effect/animation/3kunoichi_bykk/flyingswallow/flyingswallowfuuin04_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 4: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_kunai1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local sub = obj.getVar("custom").getInt(1); + local num = obj.getVar("custom").getInt(2); + local baseAngle = -90.0, setAngle = 6.0, setbaseAngle = 20.0; + switch(sub){ + case 2: setAngle = 6.0;setbaseAngle = 30.0; break; + case 3: setAngle = 8.0;setbaseAngle = 0.0; break; + case 4: setAngle = 8.0;setbaseAngle = 0.0; break; + } + obj.sq_SetMoveParticle("particle/kunoichi_bykk/flyingswallow.ptl", 0.0, setbaseAngle + num * setAngle); + sq_SetCustomRotate(obj, sq_ToRadian(baseAngle + setbaseAngle + num * setAngle)); + local speed = -750 * sq_GetZPos(obj) / 110; + sq_SetSpeedToMoveParticle(obj,2,speed); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_boom1_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 7: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_kunai1.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local num = obj.getVar("custom").getInt(2); + local numMax = obj.getVar("custom").getInt(3); + local baseAngle = -90.0, setbaseAngle = 30.0; + local angle = 60.0 / numMax.tofloat() * num.tofloat(); + obj.sq_SetMoveParticle("particle/kunoichi_bykk/flyingswallow.ptl", sq_getRandom(-50, 50).tofloat(), setbaseAngle - angle); + sq_SetCustomRotate(obj, sq_ToRadian(baseAngle + setbaseAngle - angle)); + local speed = -750 * sq_GetZPos(obj) / 110; + sq_SetSpeedToMoveParticle(obj,2,speed); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_kunai2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/01_start/yamataorochi_01_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 125)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_SetMyShake(obj, 3, 200); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(4, currentAni.getDelaySum(0, 2), 1, false); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/02_loop/yamataorochi_02_loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 125)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitMax = obj.getVar("custom").getInt(2); + obj.setTimeEvent(1, 100, hitMax, true); + obj.setTimeEvent(2, 100 * (hitMax + 1), 1, false); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/03_end/yamataorochi_03_end.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(5, currentAni.getDelaySum(0, 5), 1, false); + obj.setTimeEvent(6, currentAni.getDelaySum(0, 6), 1, false); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/00_start/floor_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/01_loop/floor_loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 126)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local lifeTime = obj.getVar("custom").getInt(1); + obj.setTimeEvent(1, 600, -1, true); + obj.setTimeEvent(2, lifeTime, 1, false); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/02_end/end_2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + break; + } + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(2); + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/yamataorochistarttalisman_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetMyShake(obj, 3, 200); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(4, currentAni.getDelaySum(0, 2), 1, false); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/yamataorochilooptalisman_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 650, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,4,totalDamage,lifeTime,sizeRate,0,0,0,0,0); + obj.setTimeEvent(2, lifeTime, 1, false); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/yamataorochiendtalisman_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(5, currentAni.getDelaySum(0, 5), 1, false); + obj.setTimeEvent(6, currentAni.getDelaySum(0, 6), 1, false); + break; + } + break; + case 4: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/firelooptalisman_00.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 126)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, 100, -1, false); + obj.setTimeEvent(3, lifeTime, 1, false); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/firebottomlooptalisman_00.ani"; + local sizeRate = obj.getVar("custom").getInt(2); + local pooledObj = createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + obj.getVar().clear_obj_vector(); + obj.getVar().push_obj_vector(pooledObj); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/fireendtalisman_10.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + local pooledObj = obj.getVar().get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/talisman/firebottomendtalisman_00.ani"; + local sizeRate = obj.getVar("custom").getInt(2); + local pooledObj = createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + break; + } + local currentAni = obj.getCurrentAnimation(); + local sizeRate = obj.getVar("custom").getInt(2); + if(sizeRate > 100){ + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/bird/amateras_birth_bird_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local flashScreenObj = sq_flashScreen(obj,120,500,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/bird/amateras_roof_bird_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.setTimeEvent(2, 5000, 1, false); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/bird/amateras_finish_dodge2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/laser/amateras_lighting_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/laser/amateras_lighting_loop_normal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local size = sqrChr.getVar("AmaterasObj").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("AmaterasObj").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE) obj.getVar("tar").push_obj_vector(targetObj); + } + local size2 = obj.getVar("tar").get_obj_vector_size(); + if(size2 > 0){ + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 62)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + for(local i = 0; i < size2; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,4,group,uniqueId,0,0,0,0,0,0); + } + obj.setTimeEvent(3, 500, 1, false); + obj.setTimeEvent(2, 550, 1, false); + } + } + } + obj.setTimeEvent(2, 550, 1, false); + break; + } + break; + } + break; + case SKILL_THBYKK_SWORDOFKUSANAGI: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkstart_04.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 114)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkstay_05.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local lifeTime = obj.getVar("custom").getInt(2); + obj.setTimeEvent(3, lifeTime, 1, false); + obj.setTimeEvent(2, 1500, -1, false); + break; + } + break; + } + break; + case SKILL_THBYKK_FIREHIDE: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firehide/firehide_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firehide/firehide_fire.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firehide/firehide_end.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case SKILL_THBYKK_KURVEJADE: + switch(subtype){ + case 1: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/firejewelsstart_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/firejewels_01.ani"; + if(obj.getVar("custom").getInt(1) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/firejewels_fire_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/firejewelsend_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 2: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/darkjewelsstart_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/darkjewels_01.ani"; + if(obj.getVar("custom").getInt(1) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/darkjewels_fire_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/darkjewelsend_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/lightjewelsstart_01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/lightjewels_01.ani"; + if(obj.getVar("custom").getInt(1) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/lightjewels_fire_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kurvejade/lightjewelsend_02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + break; + } + break; + case SKILL_THBYKK_LEAVETRACE: + switch(subtype){ + case SKILL_THBYKK_FLAMEBALL: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameball/flameball_start_body01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + if(sqrChr.getVar("FlameBall").get_obj_vector_size() < 1){ + local speedRate = 150; + local ninjutsuPhase = obj.getVar("custom").getInt(2); + local lifeTime = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMEBALL, 2) * 100 / speedRate; + local hitTime = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMEBALL, 0) * 100 / speedRate; + local bonusRate = obj.getVar("custom").getInt(4).tofloat() / 100.0; + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, bonusRate); + local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, bonusRate); + local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMEBALL, 9); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMEBALL, 8 + ninjutsuPhase); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEBALL,1,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,speedRate,isBlue,0); + obj.sq_PlaySound("R_TF_FLAMEBALL"); + } + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameball/flameball_loop_body01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + local aObj = sqrChr.getVar("FlameBall").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + // if(colObj.isExistTimeEvent(2)){ + local pAni = colObj.getCurrentAnimation(); + local lifeTime = colObj.getVar("custom").getInt(3) - sq_GetCurrentTime(pAni); + obj.setTimeEvent(1, lifeTime, 1, false); + // } + // else obj.setTimeEvent(1, 1000, 1, true); + } + else obj.setTimeEvent(1, 1000, 1, true); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameball/flameball_end_body01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + } + break; + case SKILL_THBYKK_BIGKUNAI: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/bigkunai/bigkunai.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshurikenstart.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshurikencreate.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("custom").getInt(0) <= 21){ + obj.sq_PlaySound("R_TF_GHOSTKUNAI"); + local ninjutsuPhase = obj.getVar("custom").getInt(2); + local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN); + local createMax = sq_GetLevelData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); + local reboundCount = sq_GetLevelData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 4, skillLevel); + local bonusRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 6, skillLevel); + local bonusRate2 = sq_GetLevelData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 7, skillLevel); + local speedRate = obj.getVar("custom").getInt(3); + local offSet = [[50,55],[120,-40],[-47,83],[17,-62]]; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + switch(ninjutsuPhase){ + case 1: + case 2: + local create = sq_GetIntData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 5); + totalDamage = totalDamage * bonusRate / 100; + for(local i = 0; i < create; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage,reboundCount,createMax,speedRate,isBlue,1,0,0); + } + break; + case 3: + case 4: + local create = sq_GetIntData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 7); + local totalDamage1 = totalDamage * bonusRate / 100; + local totalDamage2 = totalDamage * bonusRate2 / 100; + for(local i = 0; i < create; i++){ + if(i < 2) createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage1,reboundCount,createMax,speedRate,isBlue,1,0,0); + else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage2,reboundCount,createMax,speedRate,isBlue,1,0,0); + } + break; + case 5: + case 6: + local create = sq_GetIntData(sqrChr, SKILL_THBYKK_ILUSIONSHURIKEN, 9); + local totalDamage1 = totalDamage * bonusRate / 100; + local totalDamage2 = totalDamage * bonusRate2 / 100; + for(local i = 0; i < create; i++){ + if(i < 2) createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage1,reboundCount,createMax,speedRate,isBlue,1,0,0); + else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage2,reboundCount,createMax,speedRate,isBlue,1,0,0); + } + break; + } + } + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken2.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 24: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken3.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 25: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshurikenend.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + case SKILL_THBYKK_FLAMETORNADO: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flametornado/flametornado.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + } + break; + case SKILL_THBYKK_SKYROADS: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/skyroads/skyroads_cast.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("R_TF_SKYROADS"); + obj.sq_PlaySound("SKYROADS_APPEAR"); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/skyroads/skyroads_jump.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("custom").getInt(3).tofloat()); + currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(false) / 24, 24, true); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/skyroads/skyroads_throw.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + case SKILL_THBYKK_GASOLINEFIRE: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/gasolinefire/gasolinefire.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + case SKILL_THBYKK_FLAMEFLOWER: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowercast.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("R_TF_OPENFIRE"); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerslasha.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(7); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflower/slasha/fistofhellfire_fire_d.ani", 0, 1, 0); + obj.sq_PlaySound("R_OPENFIRE_MOVE"); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerslashb.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(7); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflower/slashb/fistofhellfire_fire_d.ani", 0, 1, 0); + obj.sq_PlaySound("R_OPENFIRE_MOVE"); + break; + case 23: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerslashc.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(7); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflower/slashc/fistofhellfire_fire_d.ani", 0, 1, 0); + obj.sq_PlaySound("R_OPENFIRE_MOVE"); + break; + case 24: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerslashd.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(7); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflower/slashd/fistofhellfire_fire_d.ani", 0, 1, 0); + obj.sq_PlaySound("R_OPENFIRE_MOVE"); + break; + case 25: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerloopready.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.sq_PlaySound("TF_OPENFIRE_01"); + break; + case 26: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerloop.ani"; + if(obj.getVar("custom").getInt(13) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerloopblue.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(8); + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; + obj.getVar("markofFlameSet").setInt(3, burnDamage); + totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 129)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, obj.getVar("custom").getInt(9), 1, false); + obj.setTimeEvent(2, obj.getVar("custom").getInt(10), -1, false); + obj.sq_PlaySound("OPENFIRE_LOOP", 2333); + break; + case 27: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/flameflower/flameflowerlast.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + obj.removeAllTimeEvent(); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEFLOWER,1,obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),0,0,0,0,0); + obj.stopSound(2333); + obj.sq_PlaySound("OPENFIRE_EXP"); + break; + } + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/doomfield/doomfiledmotion_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/doomfield/doomfiledmotion_end.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + if(obj.getVar("DoomFieldSet").getInt(0) > 0){ + sq_setCurrentAxisPos(obj, 0, obj.getVar("DoomFieldSet").getInt(0)); + } + break; + } + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/fuumashuriken/funmasuriken01_body_ready.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/fuumashuriken/funmasuriken02_body_throw01.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + local delay = 850 * obj.getVar("custom").getInt(3) / 100; + sq_SetFrameDelayTime(currentAni, 15, delay); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/fuumashuriken/funmasuriken03_body_throw02.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 23: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/fuumashuriken/funmasurikentalisman_body.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + } + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/yamataorochi/ymataorochicasting.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/amateras/amateras.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local startFrameIndex = obj.getVar("custom").getInt(1); + if(startFrameIndex > 0 && state == obj.getVar("custom").getInt(0)){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(startFrameIndex); + } + break; + } + break; + } + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("custom").getInt(3).tofloat()); + break; + case SKILL_THBYKK_FIREMARK: + switch(subtype){ + case 2: + case 3: + switch(state){ + case 20: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarkb/firemark_markbnormal_start.ani"; + if(subtype == 2) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarka/firemark_markanormal_start.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + break; + case 21: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarkb/firemark_markbnormal_loop.ani"; + if(subtype == 2) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarka/firemark_markanormal_loop.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(1); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 74)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local hitTime = obj.getVar("custom").getInt(3); + local lifeTime = obj.getVar("custom").getInt(4); + obj.setTimeEvent(2, hitTime, -1, true); + obj.setTimeEvent(3, lifeTime, 1, false); + break; + case 22: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarkb/firemark_firebnormal.ani"; + if(subtype == 2) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarka/firemark_fireanormal.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + local totalDamage = obj.getVar("custom").getInt(2); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 73)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + if(subtype == 2) sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarka/firemark_marka_end.ani", 0, 1, 0); + else sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/firemark/firemarkb/firemark_markb_end.ani", 0, 1, 0); + obj.setTimeEvent(2, 100, 1, false); + break; + } + break; + } + break; + } + break; + case 4: + break; + } +} + +function onEndCurrentAni_po_thief_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_SUMMONNICOLAS: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_NICOLASSUMMONZOMBIE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_NICOLASBLACKWAVE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_NICOLASBLACKARACHNIA: + switch(subtype){ + case 1: + case 2: + case 4: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(subtype){ + case 1: + switch(state){ + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 2: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_AMBITIONOFBALLACRE: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_GUILLOTINE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_PHANTOMSTROM: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: + if(sqrChr) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_EXECUTIONERSLASH: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_BALLACREADVENT: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 3: + local background_obj = sqrChr.getVar("Ballacreadvent_Background").get_obj_vector(0); + if(background_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(background_obj); + colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + local ballacreObj = sqrChr.getVar("ballacreObj").get_obj_vector(0); + if(ballacreObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + local effect_obj = sqrChr.getVar("Ballacreadvent_Effect").get_obj_vector(0); + if(effect_obj) effect_obj.setValid(false); + local flashScreenObj = sqrChr.getVar("flashobj").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) pflashScreen.fadeOut(); + local size = sqrChr.getVar("Ballacreadvent_Tar").get_obj_vector_size(); + // print("size = "+size); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("Ballacreadvent_Tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_BALLACRE_HOLD); + } + } + case 4: + case 5: + sq_SendDestroyPacketPassiveObject(obj); + break; + case 6: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_DARKSOUL: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + case 4: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_DARKNAIL: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_DARKLURE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_BLAMEOFDEAD: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_BYKK_LIVINGDEAD: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_BYKK_BLAMEOFDEADEX: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: + if(sqrChr && sqrChr.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut"); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_HATEFULGHOST: + switch(subtype){ + case 1: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + case 22: + if(obj.getVar("custom").getInt(6) > 0) obj.addSetStatePacket(sq_getRandom(24, 25), null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 23: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + case 24: + case 25: + if(obj.getVar("custom").getInt(6) > 0) obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 26: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + case 27: + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + switch(state){ + case 20: + case 21: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + case 23: obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; + case 24: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_BYKK_COCONOFUNDEAD: + switch(subtype){ + case 1: + switch(state){ + case 20: + local lifeTime = obj.getVar("custom").getInt(2); + obj.setTimeEvent(12, lifeTime, 1, false); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_COCONOFUNDEAD,2,lifeTime,0,0,0,0,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_COCONOFUNDEAD,3,lifeTime,0,0,0,0,0,0,0); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; + case 25: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_COCONOFUNDEAD_HOLD); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 2: + case 3: + switch(state){ + case 20: + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_THBYKK_FLAMEBALL: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_BIGKUNAI: + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_THBYKK_FLAMETORNADO: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_GASOLINEFIRE: + switch(subtype){ + case 1: + local totalDamage_disexp = obj.getVar("custom").getInt(3); + local toadSizeRate = obj.getVar("custom").getInt(6); + local offSetX = 0 + toadSizeRate>100?75:0; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSetX, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,5,totalDamage_disexp,0,0,0,0,0,0,0); + break; + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(subtype){ + case 3: + case 4: + if(obj.getVar("custom").getInt(3) + 1 > obj.getVar("custom").getInt(2)){ + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/end_smoke.ani", 0, 1, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + else{ + obj.getVar("custom").setInt(3, obj.getVar("custom").getInt(3) + 1); + obj.addSetStatePacket(sq_getRandom(20, 22), null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + case SKILL_THBYKK_MIGAWARI: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_SKYROADS: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_FLAMEFLOWER: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 4: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + case 6: sq_SendDestroyPacketPassiveObject(obj); break; + case 7: + switch(state){ + case 21: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(sqrChr),obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,6,totalDamage,sizeRate,1,0,0,0,0,0); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_boom2_normal.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 1, 0); + local pAni = pooledObj.getCurrentAnimation(); + sizeRate = sizeRate.tofloat() / 100.0; + pAni.setImageRateFromOriginal(sizeRate, sizeRate); + pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); + if(sqrChr && sqrChr.getState() != STATE_DIE && obj.getVar("custom").getInt(2) == 0){ + local size = sqrChr.getVar("FlyingSwallowTar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("FlyingSwallowTar").get_obj_vector(i); + if(targetObj && CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, APDPATH_FLYINGSWALLOW_HOLD)) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_FLYINGSWALLOW_HOLD); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 8: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(subtype){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + local totalDamage = obj.getVar("custom").getInt(0); + local speedRate = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,4,totalDamage,speedRate,sizeRate,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + case 6: sq_SendDestroyPacketPassiveObject(obj); break; + case 7: sq_SendDestroyPacketPassiveObject(obj); break; + case 8: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(subtype){ + case 1: + case 2: + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 4: + switch(state){ + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(subtype){ + case 1: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_JADEKAMAITACHI: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_SWORDOFKUSANAGI: + switch(subtype){ + case 1: + if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + case 5: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_FIREHIDE: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_KURVEJADE: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_LEAVETRACE: + switch(subtype){ + case SKILL_THBYKK_FLAMEBALL: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_BIGKUNAI: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + case 23: + case 24: + // print(obj.getVar("custom").getInt(5)+",,,"+obj.getVar("custom").getInt(6)); + if(obj.getVar("custom").getInt(5) + 1 >= obj.getVar("custom").getInt(6)){ + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + obj.getVar("custom").setInt(5, obj.getVar("custom").getInt(5) + 1); + if(state == 24) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 25: + // sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kunoichitrace/leavetracesfire_04.ani", 0, 1, 0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_THBYKK_FLAMETORNADO: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_SKYROADS: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_GASOLINEFIRE: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_FLAMEFLOWER: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: + case 22: + case 23: + case 24: + if(obj.getVar("custom").getInt(5) + 1 >= obj.getVar("custom").getInt(6)){ + obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); + } + else{ + obj.getVar("custom").setInt(5, obj.getVar("custom").getInt(5) + 1); + if(state == 24) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 25: obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); break; + case 27: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 21: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: + switch(state){ + case 20: + if(false) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); + else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: sq_SendDestroyPacketPassiveObject(obj); break; + case 23: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: sq_SendDestroyPacketPassiveObject(obj); break; + case SKILL_THBYKK_AMATERAS: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_DEITIESREBIRTH: + if(subtype == 2){ + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local speedRate = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DEITIESREBIRTH,3,totalDamage,sizeRate,speedRate,0,0,0,0,0); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case SKILL_THBYKK_FIREMARK: + switch(subtype){ + case 2: + case 3: + switch(state){ + case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 22: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + activeObj.getVar("firemark").setBool(0, false); + } + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case 255: + if(subtype == 2) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case 4: + break; + } +} diff --git a/user/116.205.165.25/8_thief_4.c b/user/116.205.165.25/8_thief_4.c new file mode 100644 index 0000000..5957c93 --- /dev/null +++ b/user/116.205.165.25/8_thief_4.c @@ -0,0 +1,3139 @@ + +function onTimeEvent_po_thief_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + if(timeEventIndex < 5){ + switch(timeEventIndex){ + case 0: obj.resetHitObjectList(); break; + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + } + } + else{ + switch(skillIndex){ + case SKILL_BYKK_SUMMONNICOLAS: + switch(timeEventIndex){ + case 10: obj.sq_SetMoveParticle("particle/daggerdown.ptl", 0.0, 0.0); break; + case 11: + local totalDamage = obj.getVar("custom").getInt(10); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/nicolastp_spider_fire.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_BYKK_NICOLASBLACKAREA: + switch(timeEventIndex){ + case 10: + if(!sqrChr || sqrChr.getState() == STATE_DIE) break; + local bDownKey = sqrChr.isDownSkillLastKey(); + if(bDownKey){ + obj.getVar("custom").setInt(0, obj.getVar("custom").getInt(0) + 1); + if(timeEventCount >= 10){ + if(obj.getVar("custom").getInt(0) >= 8) obj.stopTimeEvent(11); + } + } + else{ + if(obj.getVar("custom").getInt(0) >= 8) obj.stopTimeEvent(11); + } + break; + case 11: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj){ + sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); + sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_NICOLASSUMMONZOMBIE: + switch(timeEventIndex){ + case 11: + case 12: + case 13: + case 14: + local sizeRate = obj.getVar("custom").getInt(0); + sizeRate = sizeRate.tofloat() / 100.0; + switch(timeEventIndex){ + case 11: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 12: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 13: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 14: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + } + break; + case SKILL_BYKK_NICOLASBLACKARACHNIA: + switch(timeEventIndex){ + case 10: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + break; + case 11: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(timeEventIndex){ + case 10: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 11: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), -25), offsetY = sq_GetYPos(sqrChr) - 1, offsetZ = sq_GetZPos(sqrChr); + if(sqrChr.getState() == STATE_JUMP_ATTACK) offsetY = offsetY + 2; + sq_setCurrentAxisPos(obj, 0, offsetX); + sq_setCurrentAxisPos(obj, 1, offsetY); + sq_setCurrentAxisPos(obj, 2, offsetZ); + sq_SetCurrentDirection(obj, sq_GetDirection(sqrChr)); + break; + case 12: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(2, 7); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + if(speedRate > 100.0) delay = (delay.tofloat() / speedRate * 100.0).tointeger(); + obj.setTimeEvent(0, delay / 10, 4, false); + break; + case 13: + local v = sq_GetUniformVelocity(0, 500, timeEventCount, 100); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= 100) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 14: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), -25), offsetY = sq_GetYPos(sqrChr) + 1, offsetZ = sq_GetZPos(sqrChr) + 30; + sq_setCurrentAxisPos(obj, 0, offsetX); + sq_setCurrentAxisPos(obj, 1, offsetY); + break; + case 15: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local subX = sq_GetUniformVelocity(-25, 15, timeEventCount, 5), subY = -1; + switch(timeEventCount){ + case 2: subY = 0; break; + case 3: subY = 1; break; + case 4: subY = 1; break; + case 5: subY = 1; break; + } + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), subX), offsetY = sq_GetYPos(sqrChr) + subY; + sq_setCurrentAxisPos(obj, 0, offsetX); + sq_setCurrentAxisPos(obj, 1, offsetY); + break; + case 16: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local v = sq_GetUniformVelocity(15, 50, timeEventCount, 5); + local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), v); + sq_setCurrentAxisPos(obj, 0, offsetX); + break; + case 17: + if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); + local v = sq_GetYPos(sqrChr) + sq_GetUniformVelocity(-1, 1, timeEventCount, 3); + sq_setCurrentAxisPos(obj, 1, v); + break; + case 18: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 20: + local v = sq_GetUniformVelocity(0, 400, timeEventCount, 50); + local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), v); + sq_setCurrentAxisPos(obj, 0, dstX); + if(timeEventCount >= 50) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_PHANTOMSTROM: + switch(timeEventIndex){ + case 10: + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 11: + local flashScreenObj = sqrChr.getVar("flashobj").get_obj_vector(0); + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen){ + pflashScreen.fadeOut(); + sq_flashScreen(obj,0,0,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + local totalDamage = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,0,0,100,obj.getDirection(),2,SKILL_BYKK_PHANTOMSTROM,3,totalDamage,0,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 12: + case 13: + case 14: + case 15: + local sizeRate = 3.0; + switch(timeEventIndex){ + case 11: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 12: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle2.ani", 0, 2, 0); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + case 13: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle3.ani", 0, 1, 1); + local currentAni = pooledObj.getCurrentAnimation(); + local angle = sq_ToRadian(360.0 * timeEventCount / 16); + sq_SetfRotateAngle(currentAni, angle); + currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); + break; + case 14: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); + local currentAni = pooledObj.getCurrentAnimation(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + break; + } + break; + case 20: + obj.sq_PlaySound("R_PHANTOMBLADE_GHOST_ATK"); + obj.sq_PlaySound("BLADE_PHANTOM_RISE"); + obj.sq_PlaySound("BLADE_PHANTOM_SWISH"); + break; + } + break; + case SKILL_BYKK_DARKSOUL: + switch(timeEventIndex){ + case 10: + local offsetY = obj.getVar("custom").getInt(3); + local targetObj = obj.sq_FindFirstTarget(50, 150, offsetY, 100); + if(targetObj){ + obj.sq_RemoveMoveParticle(); + obj.getVar("tat").clear_obj_vector(); + obj.getVar("tat").push_obj_vector(targetObj); + obj.getVar("move").setInt(0, sq_GetXPos(obj)); + obj.getVar("move").setInt(1, sq_GetYPos(obj)); + obj.setTimeEvent(11, 5, 50, true); + } + break; + case 11: + local targetObj = obj.getVar("tat").get_obj_vector(0); + if(targetObj){ + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(targetObj), timeEventCount, 50); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(targetObj) + 1, timeEventCount, 50); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + if(timeEventCount >= 50){ + if(subtype <= 2){ + sq_moveWithParent(targetObj, obj); + local attackIndex = 19; + if(subtype == 2) attackIndex = 20; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); + obj.setTimeEvent(0, obj.getVar("custom").getInt(4), obj.getVar("custom").getInt(2), false); + obj.setTimeEvent(13, obj.getVar("custom").getInt(4) * (obj.getVar("custom").getInt(2) + 1) + 100, 1, false); + } + else{ + sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passiveskeletonhit_00.ani", 0, 0, sq_GetHeightObject(targetObj) / 2); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + local totalDamage = obj.getVar("custom").getInt(0); + local totalDamage_exp = obj.getVar("custom").getInt(1); + local hitMax = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(4); + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + createSkillPassive_Theif_bykk(obj,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,sq_GetHeightObject(targetObj) / 2,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,4,totalDamage,totalDamage_exp,hitMax,0,hitTime,group,uniqueId,0); + } + } + } + else{ + obj.stopTimeEvent(11); + obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); + } + break; + case 12: + createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passivetrail01_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL,80,70); + break; + case 13: + local totalDamage = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,100,0,0,0,0,-1,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 14: + obj.resetHitObjectList(); + if(timeEventCount >= obj.getVar("custom").getInt(2) - 1) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_DARKLURE: + switch(timeEventIndex){ + case 10: + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEAD: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 10: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + sq_AddDrawOnlyAniFromParent(targetObj, "character/thief/effect/animation/blameofdead/bonehandhitrnormal.ani", 0, 0, sq_GetHeightObject(targetObj) / 2); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + break; + } + if(timeEventCount >= obj.getVar("custom").getInt(0)) sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_BYKK_LIVINGDEAD: + switch(timeEventIndex){ + case 10: + obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); + break; + case 11: + local lifeTime = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,-10 * timeEventCount,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,5,lifeTime,sizeRate,0,0,0,0,0,0); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEADEX: + switch(timeEventIndex){ + case 10: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_BYKK_HATEFULGHOST: + switch(timeEventIndex){ + case 10: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 11: + local dstX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), -75); + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), dstX, timeEventCount, 50); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(sqrChr), timeEventCount, 50); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffecta.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectb.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectc.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectd.ani"]; + createOnlyDrawObject_Theif_bykk(obj,aniPath[sq_getRandom(0, 3)],true,obj.getDirection(),vx,vy - 1,0,ENUM_DRAWLAYER_BOTTOM); + if(timeEventCount >= 50) obj.setTimeEvent(12, 10, -1, false); + break; + case 12: + local xPos = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), -75), yPos = sq_GetYPos(sqrChr); + sq_setCurrentAxisPos(obj, 0, xPos); + sq_setCurrentAxisPos(obj, 1, yPos); + sq_SetCurrentDirection(obj, sq_GetDirection(sqrChr)); + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffecta.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectb.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectc.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectd.ani"]; + createOnlyDrawObject_Theif_bykk(obj,aniPath[sq_getRandom(0, 3)],true,obj.getDirection(),xPos,yPos - 1,0,ENUM_DRAWLAYER_BOTTOM); + break; + case 13: + local dstX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 150); + local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), dstX, timeEventCount, 50); + local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(sqrChr), timeEventCount, 50); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffecta.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectb.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectc.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectd.ani"]; + createOnlyDrawObject_Theif_bykk(obj,aniPath[sq_getRandom(0, 3)],true,obj.getDirection(),vx,vy - 1,0,ENUM_DRAWLAYER_BOTTOM); + if(timeEventCount >= 50){ + local setState = obj.getVar("setState").getInt(0); + obj.addSetStatePacket(setState, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + case 20: + local totalDamage = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(5); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,100,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,2,totalDamage,sizeRate,0,0,0,0,1,0); + break; + case 21: + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(0, currentAni.getDelaySum(2, 8) / 4, 2, false); + break; + case 22: + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(0, currentAni.getDelaySum(2, 19) / 6, 2, false); + break; + case 23: + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(0, currentAni.getDelaySum(3, 22) / 6, 2, false); + break; + } + break; + case SKILL_BYKK_COCONOFUNDEAD: + switch(timeEventIndex){ + case 10: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonafront.ani", 0, 1, 0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonaback.ani", 0, -1, 0); + break; + case 11: + createOnlyDrawObject_Theif_bykk(obj,"passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonabottom.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + break; + case 12: obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); break; + case 13: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + break; + case 14://if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, -1, 125, 1200, true, AddAppendage); + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj){ + local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_COCONOFUNDEAD_HOLD); + if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 0, -1, 75, 300, true, AddAppendage); + } + } + } + break; + } + break; + } + } + break; + case 3: + switch(skillIndex){ + case SKILL_THBYKK_FLAMEBALL: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: sq_SendDestroyPacketPassiveObject(obj); break; + } + break; + case SKILL_THBYKK_BIGKUNAI: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + obj.removeAllTimeEvent(); + local totalDamage = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(4); + local offSet = [[],[0, 0, 0], [0, 0, 30]]; + local isBlue = obj.getVar("custom").getInt(8); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[subtype][0],offSet[subtype][1],offSet[subtype][2],sq_GetDirection(obj),3,SKILL_THBYKK_BIGKUNAI,3,totalDamage,sizeRate,subtype,isBlue,0,0,0,0); + if(obj.getVar("custom").getInt(9) > 0){ + if(sqrChr && sqrChr.getState() != STATE_DIE){ + sqrChr.getVar("bigkunaiMoveBool").setBool(0, false); + sqrChr.getVar("bigkunaiMoveBool").setBool(1, false); + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(7), timeEventCount, 30); + local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(6), 0, timeEventCount, 30); + local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(5), sq_GetDirection(obj), vx); + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount >= 30) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case SKILL_THBYKK_FLAMETORNADO: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + local totalDamage = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(6); + local isBlue = obj.getVar("custom").getInt(7); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMETORNADO,2,totalDamage,sizeRate,isBlue,0,0,0,0,0); + if(sqrChr && sqrChr.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, APDPATH_FLAMETORNADO_SUCK); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local speed = 30.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + sq_SetVelocity(obj, 1, 0.0); + break; + case 4: + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/floor/floor_01.ani"; + if(obj.getVar("custom").getInt(7) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/bluefloor/bluefloor_01.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(subtype){ + case 3: + case 4: + switch(timeEventIndex){ + case 1: + case 2: + case 3: + local totalDamage = obj.getVar("custom").getInt(0); + local reboundCount = obj.getVar("custom").getInt(1); + local isBlue = obj.getVar("custom").getInt(5); + local offSet = [[],[72,0,66],[78,0,68],[87,0,67]]; + if(subtype == 4) offSet = [[],[42,0,58],[36,0,61],[41,0,58]]; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[timeEventIndex][0],offSet[timeEventIndex][1],offSet[timeEventIndex][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,subtype - 2,totalDamage,reboundCount,isBlue,0,0,0,0,0); + if(subtype == 3) sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/particle_dust.ani", 0, 0, 0); + obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); + break; + case 4: + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/end_smoke.ani", 0, 1, 0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + } + break; + case SKILL_THBYKK_MIGAWARI: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 1, 30,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,3,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_THBYKK_SKYROADS: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(1); + local sizeRate = obj.getVar("custom").getInt(2); + local time = obj.getVar("custom").getInt(3); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,5,totalDamage,sizeRate,time,0,0,0,0,0); + break; + } + break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, APDPATH_FLYINGSWALLOW_HOLD)){ + obj.removeAllTimeEvent(); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + local totalDamage = obj.getVar("custom").getInt(0); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_kunai1_attack.ani"; + local ani = sq_CreateAnimation("",aniPath); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 83)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(timeEventIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(2); + local isBlue = obj.getVar("custom").getInt(3); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,6,totalDamage,sizeRate,isBlue,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 2: obj.resetHitObjectList(); break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 3: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; + case 4: + sq_flashScreen(obj,0,80,160,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 4, 200); + break; + case 5: sq_flashScreen(obj,0,80,160,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; + case 6: + sq_flashScreen(obj,0,80,320,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); + sq_SetMyShake(obj, 1, 500); + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: sq_SendDestroyPacketPassiveObject(obj); break; + case 3: + local size = obj.getVar("tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("tar").get_obj_vector(i); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); + } + } + } + break; + case 4: + if(sqrChr && sqrChr.getState() != STATE_DIE){ + local size = sqrChr.getVar("AmaterasObj").get_obj_vector_size(); + if(size > 0){ + local aObj = sqrChr.getVar("Amateras").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.setTimeEvent(1, 2000, 1, false); + } + local laserMax = obj.getVar("custom").getInt(2); + local totalDamage_laser = obj.getVar("custom").getInt(1); + local offSet = [[210,130],[-210,130],[180,90],[-180,90],[130,60],[-130,60],[90,5],[-90,4]]; + for(local i = 0; i < laserMax; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[i][0], 0, offSet[i][1],sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,3,totalDamage_laser,i,0,0,0,0,0,0); + } + } + else{ + local aObj = sqrChr.getVar("Amateras").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.setTimeEvent(1, 1500, 1, true); + } + } + } + sq_SendDestroyPacketPassiveObject(obj); + break; + case 5: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; + case 6: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local baseX = obj.getVar("custom").getInt(0); + local baseY = obj.getVar("custom").getInt(1); + local baseZ = obj.getVar("custom").getInt(2); + local vx = sq_GetUniformVelocity(baseX, sq_GetXPos(targetObj), timeEventCount, 10); + local vy = sq_GetUniformVelocity(baseY, sq_GetYPos(targetObj), timeEventCount, 10); + local vz = sq_GetUniformVelocity(baseZ, sq_GetZPos(targetObj) + obj.getVar("custom").getInt(3), timeEventCount, 10); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + sq_setCurrentAxisPos(obj, 2, vz); + if(timeEventCount == 10){ + sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/laser/amateras_boom_dodge.ani", 0, 0, obj.getVar("custom").getInt(3)); + sq_SendDestroyPacketPassiveObject(obj); + } + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: + switch(timeEventIndex){ + case 0: sq_SendDestroyPacketPassiveObject(obj); break; + case 1: obj.resetHitObjectList(); break; + case 2: + sq_SetVelocity(obj, 0, 0.0); + sq_SetVelocity(obj, 1, 0.0); + obj.getVar("custom").setInt(3, sq_GetXPos(obj)); + obj.getVar("custom").setInt(4, sq_GetYPos(obj)); + obj.setTimeEvent(3, 100, 1, false); + break; + case 3: obj.setTimeEvent(4, 10, obj.getVar("custom").getInt(0) / 10, true); break; + case 4: + local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(1), timeEventCount, 30); + local vy = sq_GetUniformVelocity(obj.getVar("custom").getInt(4), obj.getVar("custom").getInt(2), timeEventCount, 30); + sq_setCurrentAxisPos(obj, 0, vx); + sq_setCurrentAxisPos(obj, 1, vy); + if(timeEventCount >= 30){ + if(obj.getVar("custom").getInt(5) < 1){ + if(sqrChr && (sqrChr.getState() == 0 || sqrChr.getState() == 8 || sqrChr.getState() == 14)){ + local atkObj = sqrChr.getVar("FuumaShuriken").get_obj_vector(0); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + colObj.setTimeEvent(0, 1000, 1, true); + } + sqrChr.sq_IntVectClear(); + sqrChr.sq_IntVectPush(2); + sqrChr.sq_AddSetStatePacket(STATE_THBYKK_FUUMASHURIKEN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 5: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local isBlue = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,5,totalDamage,sizeRate,0,isBlue,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_THBYKK_JADEKAMAITACHI: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + case 2: + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 10,sq_GetDirection(obj),3,SKILL_THBYKK_JADEKAMAITACHI,3,0,0,0,0,0,0,0,0); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattack_18.ani", 0, 0, 10); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattackbottom_00.ani"; + createOnlyDrawObject_Theif_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.getVar("custom").getInt(0); + local addNumber = obj.getVar("custom").getInt(0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 10,sq_GetDirection(obj),3,SKILL_THBYKK_JADEKAMAITACHI,2,totalDamage,addNumber,0,0,0,0,0,0); + break; + case 4: + sq_flashScreen(obj,0,30,0,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetShake(obj, 20, 200); + break; + } + break; + case SKILL_THBYKK_SWORDOFKUSANAGI: + switch(timeEventIndex){ + case 1: + sq_flashScreen(obj,0,40,320,255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, 300); + break; + case 2: + local totalDamage = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,2,totalDamage,0,0,0,0,0,0,0); + break; + case 3: + if(sqrChr.getVar("SwordOfKusanagiBool").getBool(0)) sqrChr.getVar("SwordOfKusanagiBool").setBool(0, false); + sq_SendDestroyPacketPassiveObject(obj); + break; + case 4: + obj.resetHitObjectList(); + sq_SetMyShake(obj, 6, 300); + break; + case 5: + obj.resetHitObjectList(); + sq_SetMyShake(obj, 12, 300); + local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkfinishfl_ff_a.ani"; + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); + sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_THBYKK_LEAVETRACE: + switch(subtype){ + case SKILL_THBYKK_FLAMEBALL: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; + } + break; + case SKILL_THBYKK_SKYROADS: + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 150, timeEventCount, 24, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + } + break; + case SKILL_THBYKK_FLAMEFLOWER: + switch(timeEventIndex){ + case 1: obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); break; + case 2: obj.resetHitObjectList(); break; + } + break; + } + break; + case SKILL_THBYKK_DEITIESREBIRTH: + switch(timeEventIndex){ + case 1: obj.resetHitObjectList(); break; + } + break; + case SKILL_THBYKK_FIREMARK: + switch(timeEventIndex){ + case 1: sq_SendDestroyPacketPassiveObject(obj); break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + case 3: + obj.removeAllTimeEvent(); + obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + case 255: + switch(timeEventIndex){ + case 1: + obj.getVar("custom").setInt(3, timeEventCount); + local allDamage = obj.getVar("damage").getInt(0); + local count = obj.getVar("custom").getInt(2); + local damage = allDamage / count; + local targetObj = obj.getVar("tar").get_obj_vector(0); + // print("timeEventCount = "+timeEventCount); + // print("allDamage = "+allDamage+",,damage = "+damage); + if(targetObj && targetObj.getState() != STATE_DIE){ + local group = obj.getVar("custom").getInt(0); + local uniqueId = obj.getVar("custom").getInt(1); + local height = sq_GetHeightObject(targetObj) / 2; + if(height > 75) height = 75; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, height,sq_GetDirection(obj),3,255,2,group,uniqueId,damage,0,0,0,0,0); + // obj.getVar("damage").setInt(0, allDamage - damage); + if(timeEventCount == 1){ + local time = obj.getVar("time").getInt(0); + sq_EffectLayerAppendage(targetObj,sq_RGB(0,0,0),195,0,0,time + 2000); + } + if(timeEventCount == count){ + obj.getVar("damage").setInt(0, 0); + obj.getVar("damage").setInt(1, 0); + } + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + return; + } + if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ + local newDamage = allDamage - damage * obj.getVar("custom").getInt(3); + // print("newDamage = "+newDamage); + if(newDamage < 0) newDamage = 0; + obj.getVar("damage").setInt(0, newDamage); + obj.getVar("damage").setInt(1, newDamage); + + obj.stopTimeEvent(1); + obj.setTimeEvent(1, 500, count, false); + } + break; + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + local height = sq_GetObjectHeight(targetObj) / 2; + if(height > 75) height = 75; + sq_SendHitObjectPacket(obj,targetObj,0,0,height); + obj.sq_PlaySound("BURN_VINE"); + } + break; + case 3: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_EffectLayerAppendage(targetObj,sq_RGB(255,192,130),66,0,0,300); + local allDamage = obj.getVar("damage").getInt(0); + // print("PoisonDamageExp = "+allDamage); + local group = obj.getVar("custom").getInt(0); + local uniqueId = obj.getVar("custom").getInt(1); + local height = sq_GetHeightObject(targetObj) / 2; + if(height > 75) height = 75; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, height,sq_GetDirection(obj),3,255,2,group,uniqueId,allDamage,0,0,0,0,0); + } + break; + } + break; + } + break; + case 4: + break; + } +} + +function onAttack_po_thief_bykk(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_SUMMONNICOLAS: + switch(subtype){ + case 3: + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + obj.sq_RemoveMoveParticle(); + obj.setTimeEvent(1, 1000, 1, false); + } + break; + } + break; + case SKILL_BYKK_NICOLASSUMMONZOMBIE: + switch(subtype){ + case 2: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local targetObj = obj.getVar("targetObj").get_obj_vector(0); + if(targetObj){ + local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); + if(!activeObj.getVar("tar").is_obj_vector(damager)) activeObj.getVar("tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_ZOMBIE_HOLD, true); + AddAppendage.sq_SetValidTime(5000); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + } + break; + } + break; + case SKILL_BYKK_NICOLASBLACKWAVE: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "monster/newmonsters/thief/nicolas/animation/effect/blackwave/hitnormal.ani", 0, 0, sq_GetCenterZPos(boundingBox) - sq_GetZPos(damager)); + if(!sqrChr.getVar("blackwave_tar").is_obj_vector(damager)) sqrChr.getVar("blackwave_tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, APDPATH_NICOLAS_BLACKWAVE, true); + AddAppendage.sq_SetValidTime(5000); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + } + break; + } + break; + case SKILL_BYKK_NICOLASBLACKARACHNIA: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr.getVar("blacjarachnia_tar").is_obj_vector(damager)){ + sqrChr.getVar("blacjarachnia_tar").push_obj_vector(damager); + local totalDamage = obj.getVar("custom").getInt(0); + local holdTime = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(2); + local sub = obj.getVar("custom").getInt(3); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(sqrChr,damager,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,3,totalDamage,holdTime,hitTime,group,uniqueId,sub,0,0); + } + } + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(subtype){ + case 1: + switch(state){ + case 27: + if(isStuck) break; + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)){ + if(!obj.getVar("anjiquan_tar").is_obj_vector(damager)){ + obj.getVar("anjiquan_tar").push_obj_vector(damager); + local frameIndex = sq_GetCurrentFrameIndex(obj); + if(frameIndex <= 5){ + local currentAni = obj.getCurrentAnimation(); + local delay = 80; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_BALLACRE_HOLD, true); + AddAppendage.sq_SetValidTime(5000); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + sq_MoveToAppendageForce(damager, obj, obj, 30, -1, 150, delay, true, AddAppendage); + } + } + } + break; + } + break; + } + break; + case SKILL_BYKK_BALLACREADVENT: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!sqrChr.getVar("Ballacreadvent_Tar").is_obj_vector(damager)) sqrChr.getVar("Ballacreadvent_Tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_BALLACRE_HOLD, true); + AddAppendage.sq_SetValidTime(5000); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + } + break; + } + break; + case SKILL_BYKK_BLAMEOFDEAD: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + local totalDamage = obj.getVar("custom").getInt(0); + local lifeTime = obj.getVar("custom").getInt(1); + local hitMax = obj.getVar("custom").getInt(2); + local activeObj = sq_GetCNRDObjectToActiveObject(damager); + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEAD,2,totalDamage,lifeTime,hitMax,group,uniqueId,0,0,0); + } + break; + } + break; + case SKILL_BYKK_LIVINGDEAD: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(obj.getVar("custom").getInt(2) == 0) sq_AddDrawOnlyAniFromParent(damager, "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/damageeffect01_03.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + else sq_AddDrawOnlyAniFromParent(damager, "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/damageeffect02_03.ani", 0, 0, sq_GetCenterZPos(boundingBox)); + } + break; + } + break; + case SKILL_BYKK_COCONOFUNDEAD: + switch(subtype){ + case 1: + switch(state){ + case 20: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + if(!obj.getVar("tar").is_obj_vector(damager)) obj.getVar("tar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_COCONOFUNDEAD_HOLD, true); + AddAppendage.sq_SetValidTime(5000); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, 0, 0, 750, true, AddAppendage); + } + break; + } + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_THBYKK_BIGKUNAI: + switch(subtype){ + case 1: + switch(state){ + case 20: + local speed = 80.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)) sq_moveWithParent(obj, damager); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + break; + } + break; + } + if(subtype <= 2 && obj.getVar("custom").getInt(9) > 0){ + if(sqrChr && sqrChr.getState() != STATE_DIE && sqrChr.getVar("bigkunaiMoveBool").getBool(0) == false){ + sqrChr.getVar("bigkunaiMoveBool").setBool(0, true); + sqrChr.getVar("bigkunaiMoveBool").setBool(1, true); + sqrChr.getVar("bigkunaiMove").setInt(0, sq_GetXPos(obj)); + sqrChr.getVar("bigkunaiMove").setInt(1, sq_GetYPos(obj)); + } + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(subtype){ + case 1: + if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ + sq_AddDrawOnlyAniFromParent(damager, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/hit_"+sq_getRandom(0, 2).tostring()+".ani", 0, 0, sq_GetCenterZPos(boundingBox)); + local reboundCount = obj.getVar("custom").getInt(0); + if(reboundCount > 0){ + obj.getVar("custom").setInt(0, reboundCount - 1); + local speed = 1000.0; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, -speed); + else sq_SetVelocity(obj, 0, speed); + sq_SetVelocity(obj, 1, sq_getRandom(-150, 150).tofloat()); + } + else sq_SendDestroyPacketPassiveObject(obj); + } + else sq_SendDestroyPacketPassiveObject(obj); + break; + } + break; + case SKILL_THBYKK_MIGAWARI: + switch(subtype){ + case 1: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, APDPATH_MIGAWARI_HOLD, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(!sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, -2, damager.getZPos(), 200, true, AddAppendage); + local time = 200000 / obj.getVar("custom").getInt(0); + AddAppendage.sq_SetValidTime(time); + break; + } + break; + case SKILL_THBYKK_SKYROADS: + switch(subtype){ + case 5: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SKYROADS_HOLD)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SKYROADS_HOLD, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); + if(!sq_IsFixture(damager) && sq_GetZPos(obj) > 0) sq_MoveToAppendageForce(damager, obj, damager, 0, 0, -damager.getZPos(), 200, true, AddAppendage); + AddAppendage.sq_SetValidTime(2000); + } + break; + } + break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(subtype){ + case 1: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(!sqrChr.getVar("FlyingSwallowTar").is_obj_vector(damager)){ + sqrChr.getVar("FlyingSwallowTar").push_obj_vector(damager); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_FLYINGSWALLOW_HOLD, true); + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, 0, 0, 200, true, AddAppendage); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF,0, 1, sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,2,group,uniqueId,0,0,0,0,0,0); + } + break; + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(subtype){ + case 3: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_DOOMFIELD_HOLD)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, APDPATH_DOOMFIELD_HOLD, true); + sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, sqrChr, obj, 0, 0, 0, 200, true, AddAppendage); + } + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(subtype){ + case 2: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(!sqrChr.getVar("AmaterasObj").is_obj_vector(damager)){ + sqrChr.getVar("AmaterasObj").push_obj_vector(damager); + } + break; + } + break; + case SKILL_THBYKK_FIREMARK: + switch(subtype){ + case 1: + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; + if(damager.getVar("firemark").getBool(0) == false){ + damager.getVar("firemark").setBool(0, true); + local rangeNear = obj.getVar("custom").getInt(0); + local dis = sq_GetDistance(sq_GetXPos(obj), sq_GetYPos(obj), sq_GetXPos(damager), sq_GetYPos(damager), true); + if(dis < rangeNear){ + local totalDamage = obj.getVar("custom").getInt(1); + local totalDamage_exp = obj.getVar("custom").getInt(2); + local hitTime = obj.getVar("custom").getInt(3); + local lifeTime = obj.getVar("custom").getInt(4); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, sq_GetZPos(damager) + sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),3,SKILL_THBYKK_FIREMARK,2,totalDamage,totalDamage_exp,hitTime,lifeTime,group,uniqueId,0,0); + } + else{ + local totalDamage = obj.getVar("custom").getInt(6); + local totalDamage_exp = obj.getVar("custom").getInt(7); + local hitTime = obj.getVar("custom").getInt(8); + local lifeTime = obj.getVar("custom").getInt(9); + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, sq_GetZPos(damager) + sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),3,SKILL_THBYKK_FIREMARK,3,totalDamage,totalDamage_exp,hitTime,lifeTime,group,uniqueId,0,0); + } + } + break; + } + break; + case SKILL_THBYKK_JADEKAMAITACHI: + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0 && obj.getVar().getBool(0) == false && subtype == 2){ + local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); + if(markofFlameObj){ + obj.getVar().setBool(0, true); + local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); + if(colObj.isExistTimeEvent(1)) colObj.stopTimeEvent(1); + colObj.setTimeEvent(3, 500, 1, true); + } + } + break; + } + if(obj.getVar("markofFlame").getBool(0)){ + local burnDamage = obj.getVar("markofFlameSet").getInt(3); + local burnTime = obj.getVar("markofFlameSet").getInt(2); + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!sqrChr || sqrChr.getState() == STATE_DIE) return; + if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ + local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); + if(markofFlameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); + // print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + local burnTime = obj.getVar("markofFlameSet").getInt(2); + local baseDamage = obj.getVar("markofFlameSet").getInt(3); + createSkillPassive_Theif_bykk(sqrChr,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,baseDamage,0,0,0,0); + } + } + break; + case 4: + break; + } +} + +function onKeyFrameFlag_po_thief_bykk(obj, flagIndex) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + if(flagIndex == 1000 && sq_GetZPos(obj) > 1100){ + local parentObj = obj.getParent(); + if(!parentObj) sq_SendDestroyPacketPassiveObject(obj); + local id = parentObj.getCollisionObjectIndex(); + // print("id:" + id); + if(sq_IsMyControlObject(sqrChr)) { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(id); + sq_BinaryWriteDword(sq_GetGroup(parentObj)); + sq_BinaryWriteDword(sq_GetUniqueId(parentObj)); + sq_SendChangeSkillEffectPacket(sqrChr, SKILL_BYKK_SUMMONNICOLAS); + sq_SendDestroyPacketPassiveObject(obj); + } + return true; + } + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_NICOLASBLACKAREA: + switch(subtype){ + case 1: + switch(flagIndex){ + case 1001: + if(obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + local sizeRate = obj.getVar("custom").getInt(0) / 2; + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blackarea/floorappear.ani"; + local pooledObj = createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + obj.getVar("effect").clear_obj_vector(); + obj.getVar("effect").push_obj_vector(pooledObj); + // print("test"); + } + break; + case 1004: + if(obj.getVar().getBool(1) == false){ + obj.getVar().setBool(1, true); + local pooledObj = obj.getVar("effect").get_obj_vector(0); + if(pooledObj) pooledObj.setValid(false); + // print("test2"); + } + break; + } + break; + } + break; + case SKILL_BYKK_NICOLASSUMMONZOMBIE: + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + local level = obj.getVar("custom").getInt(0); + local summonTime = obj.getVar("custom").getInt(1); + local summonMax = obj.getVar("custom").getInt(2); + for(local i = 0; i < summonMax; i++){ + summonmonster_necromancer_bykk(sqrChr,obj,sq_getRandom(-15,15),sq_getRandom(-15,15),0,0,MONSTER_ID_ZOMBIE,summonTime,level,0); + } + break; + } + break; + } + break; + case SKILL_BYKK_NICOLASBLACKARACHNIA: + switch(subtype){ + case 4: + switch(flagIndex){ + case 101: + local totalDamage2 = obj.getVar("custom").getInt(0); + local holdTime = obj.getVar("custom").getInt(1); + local hitTime = obj.getVar("custom").getInt(2); + local totalDamage = obj.getVar("custom").getInt(3); + local sizeRate = obj.getVar("custom").getInt(4); + sq_flashScreen(obj,0,200,200,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolasblackarachnia/talisman/black_attack_webgrounddodge1.ani"; + createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,142,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,1,totalDamage,sizeRate,totalDamage2,holdTime,hitTime,1,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(subtype){ + case 1: + switch(flagIndex){ + case 2801: obj.resetHitObjectList(); break; + case 307: + case 404: + case 605: + sqrChr.getVar("ballacre_strongattack_bool").setBool(0, true); + break; + case 500: + obj.sq_PlaySound("BALAC_STRONGATTACK"); + obj.sq_PlaySound("BAL_STRONGATTACK"); + break; + case 502: + local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 225); + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/strong_attack_ground01.ani"; + createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),offsetX,sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); + aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/strong_attack_up01.ani"; + createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),offsetX,sq_GetYPos(obj) + 1,0,ENUM_DRAWLAYER_BOTTOM); + break; + case 503: sq_SetMyShake(obj, 8, 240); break; + case 608: + local size = obj.getVar("anjiquan_tar").get_obj_vector_size(); + if(size > 0){ + obj.sq_PlaySound("BALAC_DASHATK_EXP"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 14, 1.0) + 100; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_APPORTBALLACRE, 8); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,15,1,200,obj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 5, 240); + } + break; + case 610: + local size = obj.getVar("anjiquan_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("anjiquan_tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_BALLACRE_HOLD); + } + } + break; + case 703://`createSwordSpirit` 200 10 100 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 12, 0.72) + 100; + local hitMax = 5; + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,200,10,100,obj.getDirection(),2,SKILL_BYKK_APPORTBALLACRE,2,totalDamage,hitMax,0,0,0,0,0,0); + break; + case 803://生成 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 0, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 2, 1.0) + 100; + local sizeRate = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 5, 1.0) + 100; + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_AMBITIONOFBALLACRE,1,totalDamage,totalDamage2,sizeRate,(speedRate * 100.0).tointeger(),0,0,0,0); + sq_SetMyShake(obj, 10, 240); + sq_flashScreen(obj,240,0,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 902://护石 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 0, 1.0) + sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 2, 1.0) + 200; + local sizeRate = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 5, 1.0) + 100; + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_AMBITIONOFBALLACRE,2,totalDamage,sizeRate,(speedRate * 100.0).tointeger(),0,0,0,0,0); + sq_SetMyShake(obj, 10, 240); + sq_flashScreen(obj,240,0,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1005://冲击波 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 4, 1.0) + 100; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_GUILLOTINE, 10); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,350,0,0,obj.getDirection(),2,SKILL_BYKK_GUILLOTINE,1,totalDamage,sizeRate,0,0,0,0,0,0); + sq_SetMyShake(obj, 10, 300); + break; + case 1011://抓地多段 + obj.sq_PlaySound("BAL_GUILLOTINE_GET"); + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 6, 1.0) + 100; + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(11, 14); + local hitMax = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 7, 1.0) + 100; + obj.setTimeEvent(0, delay / (hitMax + 2), hitMax, true); + break; + case 1013: + local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotine/guillotine_hand_drag_normal.ani"; + local offsetX = [115,100,85], offsetY = [-37,-8,23]; + local direction = sq_GetDirection(obj); + for(local i = 0; i < offsetX.len(); i++){ + local xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX[i]); + local yPos = sq_GetYPos(obj) + offsetY[i]; + createOnlyDrawObject_Theif_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM); + } + break; + case 1104: + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 5, 1.0) + 100; + if(obj.getVar("guillotine_bool").getBool(0)){ + totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 5, 1.8) + 100; + } + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_GUILLOTINE, 10); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,325,1,0,obj.getDirection(),2,SKILL_BYKK_GUILLOTINE,1,totalDamage,sizeRate,1,0,0,0,0,0); + sq_SetMyShake(obj, 15, 400); + break; + case 1214: + if(obj.getVar("phantom_bool").getBool(0)){ + obj.getVar("phantom_bool").setBool(0, false); + obj.setTimeEvent(18, 1000, 1, false); + obj.sq_PlaySound("BALAC_FANTOM_FIN"); + local totalDamage1 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_PHANTOMSTROM, -1, 0, 1.0) + 100; + local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_PHANTOMSTROM, -1, 1, 1.0) + 100; + local totalDamage3 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_PHANTOMSTROM, -1, 2, 1.0) + 100; + local stromTime = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 0); + local stromHitTime = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 8); + local strom2Time = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 1); + local strom2HitTime = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 9); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,0,1,sq_GetHeightObject(obj) / 2,obj.getDirection(),2,SKILL_BYKK_PHANTOMSTROM,1,totalDamage1,totalDamage2,totalDamage3,stromTime,stromHitTime,strom2Time,strom2HitTime,0); + } + break; + case 1304: + sq_SetMyShake(obj, 3, 120); + break; + case 1316: + sq_flashScreen(obj,0,120,320,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 240); + //`creatDustEffect` 50 0 50 + local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_EXECUTIONERSLASH, -1, 0, 1.0) + 100; + local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_EXECUTIONERSLASH, 5); + local speedRate = obj.getVar("setSpeedRate").getFloat(0); + speedRate = (speedRate * 100.0).tointeger(); + local sub = 1; + if(obj.getVar("isStone_executionerslash").getBool(0)) sub = 2; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_EXECUTIONERSLASH,sub,totalDamage,sizeRate,speedRate,0,0,0,0,0); + break; + } + break; + } + break; + case SKILL_BYKK_GUILLOTINE: + switch(flagIndex){ + case 101: + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar01.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar02.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar03.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar04.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar05.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_big_sub_dust1.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_big_sub_dust2.ani"]; + local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 26), yPos = sq_GetYPos(obj) + 22; + for(local i = 0; i < aniPath.len(); i++){ + createOnlyDrawObject_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); + } + break; + case 102: + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub01.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub02.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub03.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub04.ani"]; + local offsetX = [0,0,15,15]; + local direction = sq_GetDirection(obj), yPos = sq_GetYPos(obj) + 1; + for(local i = 0; i < aniPath.len(); i++){ + local xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]); + createOnlyDrawObject_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM); + } + break; + } + break; + case SKILL_BYKK_BALLACREADVENT: + switch(flagIndex){ + case 1004: + sq_flashScreen(obj,0,210,140,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 8, 140); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/ballacrecast/ballacrecast01_set02d03.ani", 0, 1, 1); + local totalDamage_start = obj.getVar("custom").getInt(0); + local totalDamage_multihit = obj.getVar("custom").getInt(1); + local totalDamage_finish = obj.getVar("custom").getInt(2); + local hitMax = obj.getVar("custom").getInt(3); + local speedRate = obj.getVar("custom").getInt(4); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,-2,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,6,speedRate,0,0,0,0,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,-1,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,3,totalDamage_multihit,hitMax,speedRate,totalDamage_finish,0,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,4,speedRate,0,0,0,0,0,0,0); + break; + case 2011: + //`add effect` 0 0 0 + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(11, 26); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,135,3,75,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,7,delay,0,0,0,0,0,0,0); + break; + case 3015: + //`createAttraction` 0 0 0 + local speedRate = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,135,2,75,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,2,speedRate,0,0,0,0,0,0,0); + break; + case 3016://`setBeadStartAttackInfo` + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + break; + case 3026: + //`add effect` + //`destroy effect` + local pAni = obj.getCurrentAnimation(); + local delay = pAni.getDelaySum(26, 62); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,3,85,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,7,delay,1,0,0,0,0,0,0); + break; + case 3028: + //`hold` + local attract_obj = sqrChr.getVar("Ballacreadvent_Attract").get_obj_vector(0); + if(attract_obj){ + sq_setCurrentAxisPos(attract_obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 200)); + sq_setCurrentAxisPos(attract_obj, 2, 85); + } + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(28, 30); + local size = sqrChr.getVar("Ballacreadvent_Tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = sqrChr.getVar("Ballacreadvent_Tar").get_obj_vector(i); + if(targetObj && !sq_IsFixture(targetObj)){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_BALLACRE_HOLD); + sq_MoveToAppendageForce(targetObj, obj, obj, 200, 1, 100, delay, true, addAppendage); + } + } + } + break; + case 3030: + //`setBeadLoopAttackInfo` + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(16, 27); + local hitMax = obj.getVar("custom").getInt(0); + obj.setTimeEvent(0, delay / (hitMax + 2), hitMax, true); + break; + case 3000: + local attract_obj = sqrChr.getVar("Ballacreadvent_Attract").get_obj_vector(0); + if(attract_obj){ + local colObj = sq_GetCNRDObjectToCollisionObject(attract_obj); + colObj.setTimeEvent(1, 1000, 1, true); + } + local totalDamage = obj.getVar("custom").getInt(3); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,2,175,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,5,totalDamage,0,0,0,0,0,0,0); + break; + case 5001: + sq_flashScreen(obj,0,300,600,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEAD: + switch(flagIndex){ + case 100: + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floorboneheadnormal.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandrndummy.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandlndummy.ani"]; + local offsetX = [136, 175, 190], offsetY = [-20, 20, 20]; + local sizeRate = obj.getVar("custom").getInt(3); + for(local i = 0; i < aniPath.len(); i++){ + local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]), yPos = sq_GetYPos(obj) + offsetY[i]; + createOnlyDrawObjectEX_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + case 101: + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandrndummysmall.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandlndummysmall.ani"]; + local offsetX = [225, 235], offsetY = [-28, -28]; + local sizeRate = obj.getVar("custom").getInt(3); + for(local i = 0; i < aniPath.len(); i++){ + local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]), yPos = sq_GetYPos(obj) + offsetY[i]; + createOnlyDrawObjectEX_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + case 102: + local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floorboneheadsmallnormal.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floorboneheadsmallnormal.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandrndummy.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandlndummy.ani"]; + local offsetX = [240, 280, 300, 315], offsetY = [21, -31, 9, 9]; + local sizeRate = obj.getVar("custom").getInt(3); + for(local i = 0; i < aniPath.len(); i++){ + local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]), yPos = sq_GetYPos(obj) + offsetY[i]; + createOnlyDrawObjectEX_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); + } + break; + } + break; + case SKILL_BYKK_LIVINGDEAD: + switch(flagIndex){ + case 316: + if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,300,100,300,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 329: + if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,0,100,50,38, sq_RGB(255,0,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 17, 300); + //`create Explosion` 0 0 0 + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,4,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 331: + sq_SetMyShake(obj, 5, 200); + break; + } + break; + case SKILL_BYKK_BLAMEOFDEADEX: + switch(flagIndex){ + case 105: + local lifeTime = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-74, 8, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-103, -13, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); + break; + case 106: + local lifeTime = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-37, -14, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-13, 28, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); + break; + case 107: + local lifeTime = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,41, 2, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,14, -25, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); + break; + case 108: + local lifeTime = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,80, 15, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); + createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,116, 6, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); + break; + case 210: + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(10, 22); + obj.setTimeEvent(0, delay / 4, 3, false); + break; + case 223: + local totalDamage = obj.getVar("custom").getInt(0); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_THBYKK_GASOLINEFIRE: + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + local totalDamage_shockwave = obj.getVar("custom").getInt(0); + local sockwaveSizeRate = obj.getVar("custom").getInt(5); + local toadSizeRate = obj.getVar("custom").getInt(6); + local offSet = toadSizeRate * 175 / 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,190 + toadSizeRate>100?offSet:0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,2,totalDamage_shockwave,sockwaveSizeRate,0,0,0,0,0,0); + local speedRate = 100.0 + obj.getVar("custom").getInt(7).tofloat(); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(speedRate); + obj.sq_PlaySound("GASOLINEFIRE_TOAD"); + break; + case 2: + local totalDamage_ball = obj.getVar("custom").getInt(1); + local totalDamage_ballexp = obj.getVar("custom").getInt(2); + local sizeRate = obj.getVar("custom").getInt(4); + local toadSizeRate = obj.getVar("custom").getInt(6); + local isBlue = obj.getVar("custom").getInt(7); + local offSet = toadSizeRate * 250 / 100; + local offSetX = 190 + 50 + toadSizeRate>100?offSet:0; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSetX, 1, 75,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,3,totalDamage_ball,totalDamage_ballexp,sizeRate,isBlue,0,0,0,0); + obj.sq_PlaySound("R_GASOLINEFIRE_BALL"); + break; + } + break; + } + break; + case SKILL_THBYKK_MIGAWARI: + switch(subtype){ + case 1: + switch(flagIndex){ + case 1: + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawari_charm.ani", 0, -1, 15); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawari_charmeff.ani", 0, -1, 15); + break; + } + break; + } + break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(subtype){ + case 3: + local totalDamage_shuriken = obj.getVar("custom").getInt(0); + local totalDamage_exp = obj.getVar("custom").getInt(1); + local createMax = obj.getVar("custom").getInt(2); + local sub = obj.getVar("custom").getInt(3); + for(local i = 0; i < createMax; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,30,0,40,obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,4,totalDamage_exp,sub,i,0,0,0,0,0); + createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(sqrChr),obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,5,totalDamage_shuriken,0,0,0,0,0,0,0); + } + break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(subtype){ + case 2: + switch(flagIndex){ + case 1: + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/mist_nomal_"+sq_getRandom(1, 3).tostring()+".ani", sq_getRandom(-320, 320), sq_getRandom(-30,120), 0); + // sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/mist_nomal_"+sq_getRandom(1, 3).tostring()+".ani", sq_getRandom(0, 320), sq_getRandom(-30,120), 0); + break; + } + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(subtype){ + case 1: + switch(state){ + case 20: + local totalDamage = obj.getVar("custom").getInt(0); + local totalDamage_laser = obj.getVar("custom").getInt(1); + local laserMax = obj.getVar("custom").getInt(2); + local range = obj.getVar("custom").getInt(3); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,2,totalDamage,range,totalDamage_laser,laserMax,0,0,0,0); + break; + case 22: + sq_flashScreen(obj,0,0,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 5, 300); + break; + } + break; + } + break; + case SKILL_THBYKK_SWORDOFKUSANAGI: + switch(subtype){ + case 3: + switch(flagIndex){ + case 1: + //`finish throw sword` 21 0 231 + if(sq_GetCurrentFrameIndex(obj) > 10){ + local totalDamage = obj.getVar("custom").getInt(0); + local totalDamage_exp = obj.getVar("custom").getInt(1); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 21, 0, 231,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,4,totalDamage,totalDamage_exp,0,0,0,0,0,0); + } + break; + } + break; + } + break; + case SKILL_THBYKK_LEAVETRACE: + switch(subtype){ + case SKILL_THBYKK_BIGKUNAI: + switch(flagIndex){ + case 1002: + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,75,0,50,sq_GetDirection(obj),3,SKILL_THBYKK_BIGKUNAI,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),obj.getVar("custom").getInt(10),obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),0); + break; + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(flagIndex){ + case 1: + case 2: + case 3: + local offSet = [[],[72,0,66],[78,0,68],[87,0,67]]; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[flagIndex][0],offSet[flagIndex][1],offSet[flagIndex][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0,0,0); + obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); + break; + } + break; + case SKILL_THBYKK_FLAMETORNADO: + switch(flagIndex){ + case 1001: + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,90, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMETORNADO,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),obj.getVar("custom").getInt(10),obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(14)); + break; + } + break; + case SKILL_THBYKK_SKYROADS: + if(flagIndex != 1) break; + switch(state){ + case 20: + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),0,0,0,0,0,0); + break; + case 21: + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,2,obj.getVar("custom").getInt(10),0,0,0,0,0,0,0); + break; + case 22: + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 95, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,3,obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(14),obj.getVar("custom").getInt(15),0,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 200, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,4,obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(16),obj.getVar("custom").getInt(9),0,0,0,0); + break; + } + break; + case SKILL_THBYKK_GASOLINEFIRE: + switch(flagIndex){ + case 1: + local totalDamage_shockwave = obj.getVar("custom").getInt(7); + local totalDamage_ball = obj.getVar("custom").getInt(8); + local totalDamage_ballexp = obj.getVar("custom").getInt(9); + local totalDamage_disexp = obj.getVar("custom").getInt(10); + local sizeRate = obj.getVar("custom").getInt(11); + local sockwaveSizeRate = obj.getVar("custom").getInt(12); + local isTalisman = obj.getVar("custom").getInt(13); + if(isTalisman > 0){ + totalDamage_ballexp = totalDamage_ballexp * 133 / 100; + sizeRate = sizeRate * 130 / 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -275, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,obj.getVar("custom").getInt(3),150); + } + else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,obj.getVar("custom").getInt(3),100); + break; + case 2: + sq_flashScreen(obj,40,80,240,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 160); + break; + } + break; + case SKILL_THBYKK_DOOMFIELD: + switch(flagIndex){ + case 1: + if(state != 20) break; + obj.sq_PlaySound("R_TF_NINPOJIN_01", 2333); + local offSet = 330; + local baseX = sq_GetXPos(obj), baseY = sq_GetYPos(obj), direction = sq_GetDirection(obj); + for(local i = 0; i < 22; i++){ + local offSetX = sq_GetDistancePos(baseX, direction, offSet); + if(sqrChr.isMovablePos(offSetX, baseY)) break; + else offSet = offSet - 15; + } + local speedRate = obj.getVar("custom").getInt(3); + if(offSet > 0){ + local offSetX = sq_GetDistancePos(baseX, direction, offSet); + obj.getVar("DoomFieldSet").setInt(0, offSetX); + // print(offSetX); + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,1,obj.getVar("custom").getInt(7),speedRate,obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0,0); + break; + case 6: + local size = sqrChr.getVar("DoomFieldObj").get_obj_vector_size(); + if(size > 0){ + local speedRate = obj.getVar("custom").getInt(3); + local delay = 40000 / speedRate; + for(local i = 0; i < size; i++){ + local aObj = sqrChr.getVar("DoomFieldObj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + local phaseSet = colObj.getVar("custom").getInt(1); + colObj.setTimeEvent(1, delay * phaseSet, 1, false); + } + } + } + break; + case 7: sq_SetMyShake(obj, 4, 200); break; + case 8: + local speedRate = obj.getVar("custom").getInt(3); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,3,obj.getVar("custom").getInt(10),obj.getVar("custom").getInt(11),speedRate,obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0); + if(obj.getVar("custom").getInt(15) >= 3){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,2,obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(8),0,0,0,0,0,0); + } + break; + case 9: + obj.stopSound(2333); + obj.sq_PlaySound("R_TF_NINPOJIN_02"); + local offSet = [[-170,-30,1,1],[170,30,1,2],[0,60,2,3],[0,-60,2,4],[-170,30,3,5],[170,-30,3,6]]; + if(obj.getVar("custom").getInt(15) >= 9){ + offSet = [[-204,-36,1,1],[204,36,1,2],[0,72,2,3],[0,-72,2,4],[-204,36,3,5],[204,-36,3,6]]; + } + sqrChr.getVar("DoomFieldObj").clear_obj_vector(); + for(local i = 0; i < 6; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[i][0], offSet[i][1], 75,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,5,obj.getVar("custom").getInt(14),offSet[i][2],offSet[i][3],obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0); + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,7,obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(8),0,0,0,0,0,0); + break; + case 10: + local speedRate = obj.getVar("custom").getInt(3); + local delay1 = 6000 / speedRate, delay2 = 12000 / speedRate, delay3 = 1000 / speedRate; + sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 150); + break; + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: + switch(flagIndex){ + case 100: + local speedRate = obj.getVar("custom").getInt(3); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken01suriken_00.ani", 36, 1, 85); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 101: + obj.sq_PlaySound("R_TF_FUUMA_01"); + obj.sq_PlaySound("FUUMA_CAST"); + break; + case 102: + //`throw` 116 0 66 passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_smallsuriken_suriken.ani + // obj.getVar("FuumaShuriken").clear_obj_vector(); + local totalDamage = obj.getVar("custom").getInt(7); + local hitMax = obj.getVar("custom").getInt(8); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,1,totalDamage,hitMax,1,0,0,0,0,0); + for(local i = 0; i < 4; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,2,i,hitMax,1,0,0,0,0,0); + } + break; + case 103: + //`throw` 255 0 58 + local totalDamage = obj.getVar("custom").getInt(9); + local totalDamage_exp = obj.getVar("custom").getInt(10); + local hitMax = obj.getVar("custom").getInt(11); + local sizeRate = obj.getVar("custom").getInt(12); + local sizeRate_shuriken = obj.getVar("custom").getInt(13); + local isBlue = obj.getVar("custom").getInt(14); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,3,totalDamage,hitMax,totalDamage_exp,sizeRate,sizeRate_shuriken,isBlue,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,4,hitMax,sizeRate_shuriken,isBlue,0,0,0,0,0); + break; + case 201: + //`createEffectBack` 23 0 -56 + local speedRate = obj.getVar("custom").getInt(3); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken04_underjumpsuriken.ani", 23, 0, -56); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 202: + //`throw` 111 0 -11 + local totalDamage_exp = obj.getVar("custom").getInt(15); + local sizeRate = obj.getVar("custom").getInt(16); + local isBlue = obj.getVar("custom").getInt(14); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 111, 0, -11,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,6,totalDamage_exp,sizeRate,isBlue,0,0,0,0,0); + break; + } + break; + case SKILL_THBYKK_YAMATAOROCHI: + switch(flagIndex){ + case 1: + obj.sq_PlaySound("R_TF_YAMATAOROCHI"); + local isTalisman = obj.getVar("custom").getInt(10); + if(isTalisman > 0){ + local totalDamage_loop = obj.getVar("custom").getInt(7); + local lifeTime = obj.getVar("custom").getInt(8); + local sizeRate = obj.getVar("custom").getInt(9); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -300, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,3,totalDamage_loop,lifeTime,sizeRate,0,0,0,0,0); + } + else{ + local totalDamage = obj.getVar("custom").getInt(11); + local totalDamage_loop = obj.getVar("custom").getInt(12); + local hitMax = obj.getVar("custom").getInt(13); + local sizeRate = obj.getVar("custom").getInt(14); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -100, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,1,totalDamage,totalDamage_loop,hitMax,sizeRate,0,0,0,0); + local totalDamage = obj.getVar("custom").getInt(15); + local lifeTime = obj.getVar("custom").getInt(16); + local sizeRate = obj.getVar("custom").getInt(17); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,2,totalDamage,lifeTime,sizeRate,0,0,0,0,0); + } + break; + } + break; + case SKILL_THBYKK_AMATERAS: + switch(flagIndex){ + case 1: + obj.sq_PlaySound("R_TF_AMATERAS"); + local totalDamage = obj.getVar("custom").getInt(7); + local totalDamage_laser = obj.getVar("custom").getInt(8); + local laserMax = obj.getVar("custom").getInt(9); + local range = obj.getVar("custom").getInt(10); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 250,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,1,totalDamage,totalDamage_laser,laserMax,range,0,0,0,0); + if(sqrChr && sqrChr.getState() != STATE_DIE){ + sqrChr.getVar("AmaterasObj").clear_obj_vector(); + sqrChr.getVar("Amateras").clear_obj_vector(); + } + break; + } + break; + } + break; + case SKILL_THBYKK_DEITIESREBIRTH: + switch(flagIndex){ + case 1: + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local speedRate = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 250, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DEITIESREBIRTH,2,totalDamage,sizeRate,speedRate,0,0,0,0,0); + break; + case 101: + sq_SetMyShake(obj, 10, 100); + local currentAni = obj.getCurrentAnimation(); + obj.setTimeEvent(1, currentAni.getDelaySum(2, 32) / 6, 5, true); + break; + case 102: + case 103: + case 104: + sq_SetMyShake(obj, 5, 50); + break; + case 105: + local speedRate = obj.getVar("custom").getInt(2); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/avatarfinish_08.ani", -300, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 106: + local speedRate = obj.getVar("custom").getInt(2); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/textmark_00.ani", 0, 0, 150); + sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + obj.sq_PlaySound("DEITIES_REBIRTH_FLAME"); + break; + case 201: + sq_SetMyShake(obj, 20, 150); + // obj.sq_PlaySound("DEITIES_REBIRTH_EXP"); + break; + } + break; + } + break; + case 4: + break; + } + return true; +} + +function procAppend_po_thief_bykk(obj) +{ + if(!obj) return; + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local job = obj.getVar("job").getInt(0); + local skillIndex = obj.getVar("skillIndex").getInt(0); + local subtype = obj.getVar("subtype").getInt(0); + local state = obj.getVar("state").getInt(0); + + switch(job){ + case 0: + break; + case 1: + break; + case 2: + switch(skillIndex){ + case SKILL_BYKK_SUMMONNICOLAS: + switch(subtype){ + case 2: + if(sq_GetZPos(obj) <= 0 && sq_GetCurrentFrameIndex(obj) == 0){ + local currentAni = obj.getCurrentAnimation(); + currentAni.setCurrentFrameWithChildLayer(1); + local totalDamage = obj.getVar("custom").getInt(10); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,4,totalDamage,0,0,0,0,0,0,0); + } + break; + } + break; + case SKILL_BYKK_NICOLASSUMMONZOMBIE: + switch(subtype){ + case 1: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0){ + obj.sq_RemoveMoveParticle(); + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_BYKK_APPORTBALLACRE: + switch(subtype){ + case 1: + switch(state){ + case 21: + if(!sq_GetSkill(sqrChr, SKILL_BYKK_MADNESSBALLACRE).isInCoolTime()){ + sq_SetKeyxEnable(sqrChr, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(sqrChr, E_SKILL_COMMAND)){ + sqrChr.startSkillCoolTime(SKILL_BYKK_MADNESSBALLACRE, sq_GetSkillLevel(sqrChr, SKILL_BYKK_MADNESSBALLACRE), -1); + //local skill = sq_GetSkill(sqrChr, SKILL_BYKK_MADNESSBALLACRE); + if(sq_GetIntData(sqrChr, SKILL_BYKK_MADNESSBALLACRE, 20) > 0) obj.addSetStatePacket(30, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + else obj.addSetStatePacket(28, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + break; + case 24: + case 25: + case 27: + local skill = sq_GetSkill(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK); + if(sqrChr.getVar("ballacre_strongattack_bool").getBool(0) && !skill.isInCoolTime()){ + sq_SetKeyxEnable(sqrChr, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(sqrChr, E_SKILL_COMMAND)){ + sqrChr.startSkillCoolTime(SKILL_BYKK_BALLACRESTRONGATTACK, sq_GetSkillLevel(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK), -1); + sqrChr.getVar("ballacre_strongattack_bool").setBool(0, false); + if(state == 27){ + local size = obj.getVar("anjiquan_tar").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local targetObj = obj.getVar("anjiquan_tar").get_obj_vector(i); + if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_BALLACRE_HOLD); + } + } + } + obj.addSetStatePacket(29, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + break; + case 28: + local skill = sq_GetSkill(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK); + if(!skill.isInCoolTime()){ + sq_SetKeyxEnable(sqrChr, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(sqrChr, E_SKILL_COMMAND)){ + sqrChr.startSkillCoolTime(SKILL_BYKK_BALLACRESTRONGATTACK, sq_GetSkillLevel(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK), -1); + obj.addSetStatePacket(29, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); + } + } + break; + } + break; + } + break; + case SKILL_BYKK_LIVINGDEAD: + switch(subtype){ + case 1: + switch(state){ + case 20: + case 21: + if(obj.getVar().getBool(0)) break; + local bDownKey = sqrChr.isDownSkillLastKey(); + if(bDownKey && obj.getVar().getBool(0) == false) obj.getVar().setBool(0, true); + break; + } + break; + } + break; + } + break; + case 3: + switch(skillIndex){ + case SKILL_THBYKK_FLAMETORNADO: + switch(subtype){ + case 1: + if(obj.isExistTimeEvent(3)){ + if(sq_IsMyControlObject(obj)){ + if(obj.getVar().getBool(0) == false){ + local speed = 75.0; + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){obj.getVar().setBool(0, true);sq_SetVelocity(obj, 1, speed);} + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){obj.getVar().setBool(0, true);sq_SetVelocity(obj, 1, -speed);} + } + if(obj.getVar().getBool(1) == false){ + local speed = 500.0; + local direction = sq_GetDirection(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) { + obj.getVar().setBool(1, true); + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) { + obj.getVar().setBool(1, true); + speed = 100.0; + if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); + else sq_SetVelocity(obj, 0, -speed); + } + } + } + } + break; + } + break; + case SKILL_THBYKK_GASOLINEFIRE: + switch(subtype){ + case 3: + if(obj.getVar().getBool(0) == false){ + if(sq_GetZPos(obj) <= 0){ + obj.getVar().setBool(0, true); + local totalDamage_ballexp = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local isBlue = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,4,totalDamage_ballexp,sizeRate,isBlue,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + } + break; + } + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + switch(subtype){ + case 1: + if(sq_GetObjectTime(obj) >= 1500 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 2: + if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/dust.ani", 0, 1, 0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_THBYKK_FLYINGSWALLOW: + switch(subtype){ + case 4: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(sqrChr),obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,6,totalDamage,0,0,0,0,0,0,0); + } + break; + } + break; + case 7: + switch(state){ + case 20: + if(sq_GetZPos(obj) <= 0){ + obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + break; + } + break; + } + break; + case SKILL_THBYKK_FUUMASHURIKEN: + switch(subtype){ + case 6: + if(sq_GetZPos(obj) <= 20 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_SetVelocity(obj, 0, 0.0); + sq_SetVelocity(obj, 2, 0.0); + local totalDamage = obj.getVar("custom").getInt(0); + local sizeRate = obj.getVar("custom").getInt(1); + local isBlue = obj.getVar("custom").getInt(2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,5,totalDamage,sizeRate,1,isBlue,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_THBYKK_SWORDOFKUSANAGI: + switch(subtype){ + case 4: + if(sq_GetZPos(obj) <= 10 && obj.getVar().getBool(0) == false){ + obj.getVar().setBool(0, true); + sq_SetVelocity(obj, 0, 0.0); + sq_SetVelocity(obj, 0, 0.0); + local totalDamage = obj.getVar("custom").getInt(0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),3,SKILL_THBYKK_SWORDOFKUSANAGI,5,totalDamage,0,0,0,0,0,0,0); + sq_SendDestroyPacketPassiveObject(obj); + } + break; + } + break; + case SKILL_THBYKK_FIREHIDE: + case SKILL_THBYKK_KURVEJADE: + if(sqrChr && sqrChr.getState() != STATE_DIE){ + if(skillIndex == SKILL_THBYKK_KURVEJADE && state > 21) break; + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + local currentSpeedRate = 1.0 ; + + local defaultRoundTime = 1920; + + local radius = 50; + local base100Angle = 36000 / 3 * obj.getVar("custom").getInt(0); + local baseX = sq_GetXPos(sqrChr); + local baseZ = sq_GetYPos(sqrChr); + local t100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; + local angle = (t100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); + + local axisMagnifyRate = 50 * 0.5; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + + local mov_y = baseZ + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 0, mov_x); + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 70); + } + else{ + sq_SendDestroyPacketPassiveObject(obj); + } + break; + case 255: + switch(subtype){ + case 1: + if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ + if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 500, obj.getVar("time").getInt(0) / 500, true); + } + break; + } + break; + } + break; + case 4: + break; + } +} + + +function getRestAni_Thief(obj) +{ + if(!obj) return null; + local animation = obj.sq_GetRestAni(); + local growType = sq_getGrowType(obj); + if(growType == 2) animation = getRestAni_Thief_necromancer(obj); + else if(growType == 3){ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) animation = obj.sq_GetCustomAni(ANI_THBYKK_KUNOICHI3RD_BODY); + else if(sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA) > 0) animation = obj.sq_GetCustomAni(ANI_THBYKK_KUNOICHI2ND_BODY); + else if(sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK) > 0) animation = obj.sq_GetCustomAni(ANI_THBYKK_KUNOICHI1ST_BODY); + } + return animation; +} + +//站立 +function onAfterSetState_Thief_Stand(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + obj.getVar("StaySet").setInt(0, 0); + } + break; + } +} + +function onEndCurrentAni_Thief_Stand(obj) +{ + if(!obj) return; +} + +function onProcCon_Thief_Stand(obj) +{ + if(!obj) return; + if(!sq_GetSkill(obj, 45).isInCoolTime() && sq_getGrowType(obj) == 1){ + obj.setSkillCommandEnable(45, true); + if(obj.sq_IsEnterSkill(45) != -1 && obj.isMyControlObject()) + { + obj.startSkillCoolTime(45, sq_GetSkillLevel(obj, 45), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(32); + obj.sq_AddSetStatePacket(37, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onProc_Thief_Stand(obj) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 3 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + local poleAni = obj.getCurrentAnimation(); + local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0); + if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){ + // print("poleAniFrameNumberGet = "+poleAniFrameNumber); + obj.getVar("StaySet").setInt(0, poleAniFrameNumber); + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF); + addAppendage.sq_DeleteEffectFront(); + addAppendage.sq_DeleteEffectBack(); + local aniPath = ""; + switch(poleAniFrameNumber){ + case 6: aniPath = "stay"; break; + case 8: aniPath = "move"; break; + case 20: aniPath = "rest"; break; + case 30: aniPath = "kunoichi2nd_body"; break; + case 35: aniPath = "kunoichi3rd_body"; break; + } + if(aniPath == "") return; + addAppendage.sq_AddEffectBack("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweaponnormal/"+aniPath+".ani"); + addAppendage.sq_AddEffectBack("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweapondodge/"+aniPath+".ani"); + addAppendage.sq_AddEffectBack("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimuffbot/"+aniPath+".ani"); + addAppendage.sq_AddEffectFront("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweaponnormal/"+aniPath+".ani"); + addAppendage.sq_AddEffectFront("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweapondodge/"+aniPath+".ani"); + addAppendage.sq_AddEffectFront("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimufftop/"+aniPath+".ani"); + } + } +} + +function onKeyFrameFlag_Thief_Stand(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Thief_Stand(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thief_Stand(obj, new_state) +{ + if(!obj) return; +} + +//跳跃 +function onAfterSetState_Thief_Jump(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.getVar("jumpSet").setInt(0, sq_GetVectorData(datas, 1)); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "jump"); +} + +function onEndCurrentAni_Thief_Jump(obj) +{ + if(!obj) return; +} + +function onProcCon_Thief_Jump(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 1: + if(sq_GetSkillLevel(obj, 75) <= 0) return; + if(!sq_GetSkill(obj, 75).isInCoolTime() && sq_GetZPos(obj) >= 0){ + obj.setSkillCommandEnable(75, true); + if(obj.sq_IsEnterSkill(75) != -1 && obj.isMyControlObject()){ + obj.startSkillCoolTime(75 , sq_GetSkillLevel(obj, 75), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(65 , STATE_PRIORITY_IGNORE_FORCE, true); + } + } + if(!sq_GetSkill(obj, 47).isInCoolTime() && sq_GetZPos(obj) >= 0){ + obj.setSkillCommandEnable(47, true); + if(obj.sq_IsEnterSkill(47) != -1 && obj.isMyControlObject()){ + obj.startSkillCoolTime(47, sq_GetSkillLevel(obj, 47) , -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(40); + obj.sq_IntVectPush(obj.getDirection()); + obj.sq_AddSetStatePacket(38 , STATE_PRIORITY_IGNORE_FORCE , true); + } + } + break; + case 3: + if(obj.getWeaponSubType() == 5 && obj.getVar("jumpSet").getInt(0) == 1){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(8, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + break; + } +} + +function onKeyFrameFlag_Thief_Jump(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Thief_Jump(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thief_Jump(obj, new_state) +{ + if(!obj) return; +} + +//跳跃攻击 +function onSetState_Thief_JumpAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 2){ + onSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer); + } +} + +function onAfterSetState_Thief_JumpAttack(obj, state, datas, isResetTimer) +{ + if (!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onAfterSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer); break; + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "swordofkusanagi_normaljumpatk_body"); + obj.getVar("atkSet").setBool(0, true); + break; + } +} + +function onEndCurrentAni_Thief_JumpAttack(obj) +{ + if(!obj) return; +} + +function onProcCon_Thief_JumpAttack(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Thief_JumpAttack(obj, flagIndex) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onKeyFrameFlag_jumpattack_thief_necromancer(obj, flagIndex); break; + case 3: + switch(flagIndex){ + case 10: + //`jump attack shoot` 35 0 40 + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,35,0,40,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,2,124,0,0,0,0,0,0,0); + break; + } + } + return true; +} + +function onTimeEvent_Thief_JumpAttack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thief_JumpAttack(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Thief_JumpAttack(obj, damager, boundingBox, isStuck) +{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + local burnDamage = obj.getVar("markofFlameSet").getInt(2); + local burnTime = obj.getVar("markofFlameSet").getInt(4); + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj || obj.getState() == STATE_DIE) return; + if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ + local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); + if(markofFlameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); + // print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); + } + } +} + +function onBeforeAttack_Thief_JumpAttack(obj,damager,boundingBox,isStuck) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF) && obj.getVar("atkSet").getBool(0)){ + obj.getVar("atkSet").setBool(0, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 9, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); + if(skillLevel > 0){ + local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); + local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); + local burnDamage = totalDamage * burnDamageRate / 100; + obj.getVar("markofFlameSet").setInt(2, burnDamage); + obj.getVar("markofFlameSet").setInt(4, burnTime); + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + break; + } +} + +function getJumpAttackAni_Thief(obj) +{ + if (!obj) return null; + + local animation = obj.sq_GetJumpAttackAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: animation = getJumpAttackAni_Thief_necromancer(obj); break; + case 3: + if(obj.getWeaponSubType() == 5){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALJUMPATK_BODY); + } + else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONJUMPATK_BODY); + } + break; + } + return animation; +} + +function getJumpAttackInfo_Thief(obj) +{ + if(!obj) return null; + local attackInfo = obj.sq_GetJumpAttackInfo(); + if(obj.getWeaponSubType() == 5){ + attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPONJUMP); + } + return attackInfo; +} + +//普通攻击 +function onSetState_Thief_Attack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 2){ + onSetState_attack_thief_necromancer(obj, state, datas, isResetTimer); + } +} + +function onAfterSetState_Thief_Attack(obj, state, datas, isResetTimer) +{ + if (!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onAfterSetState_attack_thief_necromancer(obj, state, datas, isResetTimer); break; + case 3: + local attackIndex = obj.getAttackIndex(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + switch(attackIndex){ + case 0: setSwordKusanagiEffect(obj, "swordofkusanagi_normalatka_body"); break; + case 1: setSwordKusanagiEffect(obj, "swordofkusanagi_normalatkb_body"); break; + case 10: setSwordKusanagiEffect(obj, "swordofkusanagi_normalbackatk_body"); break; + } + } + if(attackIndex == 10){ + local currentAni = obj.getCurrentAnimation(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + local speedRate = 12600 / currentAni.getDelaySum(0, 0); + if(speedRate > 130) currentAni.setSpeedRate(130.0); + } + else{ + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + if(speedRate < 200){ + obj.getVar("AttackBool").setBool(1, true); + } + } + obj.getVar("AttackSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("AttackSet").setInt(1, -150); + obj.getVar("AttackSet").setInt(2, sq_GetZPos(obj)); + } + obj.getVar("atkSet").setBool(0, true); + break; + } +} + +function onBeforeAttack_Thief_Attack(obj,damager,boundingBox,isStuck) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if( obj.getVar("atkSet").getBool(0)){ + obj.getVar("atkSet").setBool(0, false); + local attackIndex = obj.getAttackIndex(); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + if(attackIndex != 10){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 7 + attackIndex, 1.0) + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); + if(skillLevel > 0){ + local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); + local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); + local burnDamage = totalDamage * burnDamageRate / 100; + obj.getVar("markofFlameSet").setInt(2, burnDamage); + obj.getVar("markofFlameSet").setInt(4, burnTime); + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + else{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 9, 1.0) + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); + if(skillLevel > 0){ + local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); + local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); + local burnDamage = totalDamage * burnDamageRate / 100; + obj.getVar("markofFlameSet").setInt(2, burnDamage); + obj.getVar("markofFlameSet").setInt(4, burnTime); + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + } + else{ + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + } + } + break; + } +} + +function onEndCurrentAni_Thief_Attack(obj) +{ + if(!obj) return; +} + +function onProc_Thief_Attack(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onProc_attack_thief_necromancer(obj); break; + case 1: + if(!sq_GetSkill(obj, 45).isInCoolTime()){ + obj.setSkillCommandEnable(45, true); + if(obj.sq_IsEnterSkill(45) != -1 && obj.isMyControlObject()){ + obj.startSkillCoolTime(45, sq_GetSkillLevel(obj, 45), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(32); + obj.sq_AddSetStatePacket(37, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + break; + case 3: + local attackIndex = obj.getAttackIndex(); + if(attackIndex == 10){ + local currentAni = obj.getCurrentAnimation(); + local fullTime = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + if(obj.getVar("AttackBool").getBool(0) == false){ + local v = sq_GetUniformVelocity(0, obj.getVar("AttackSet").getInt(1), stateTime, fullTime); + local dstX = sq_GetDistancePos(obj.getVar("AttackSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.getVar("AttackBool").setBool(0, true); + } + local height = 80; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) height = 30; + local vz = sq_GetUniformVelocity(0, height, stateTime, fullTime / 2); + if(obj.getVar("AttackSet").getInt(2) > 0){ + height = obj.getVar("AttackSet").getInt(2); + vz = height; + } + if(stateTime > fullTime / 2){ + vz = sq_GetUniformVelocity(height, 0, stateTime - fullTime / 2, fullTime / 2); + } + sq_setCurrentAxisPos(obj, 2, vz); + + if(obj.getVar("AttackBool").getBool(1)){ + obj.getVar("AttackBool").setBool(1, false); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(200.0); + } + } + break; + } +} + +function onProcCon_Thief_Attack(obj) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(obj.getWeaponSubType() == 5){ + local attackIndex = obj.getAttackIndex(); + if(attackIndex != 10){ + local direction = sq_GetDirection(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(10); + obj.sq_AddSetStatePacket(8, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } + break; + } +} + +function onKeyFrameFlag_Thief_Attack(obj, flagIndex) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onKeyFrameFlag_attack_thief_necromancer(obj, flagIndex); break; + case 3: + switch(flagIndex){ + case 1001: + obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_02"); + obj.sq_PlaySound("R_SWORD_KUSANAGI"); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/fire/backstepfront_00.ani", 0, 1, 0); + // sq_moveWithParent(obj, pooledObj); + break; + case 9: + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: + obj.sq_PlaySound("TF_ATK12_01"); + obj.sq_PlaySound("KUNAI_01"); + break; + case 1: + obj.sq_PlaySound("TF_ATK12_02"); + obj.sq_PlaySound("KUNAI_02"); + break; + case 2: + obj.sq_PlaySound("TF_ATK3"); + obj.sq_PlaySound("KUNAI_03"); + break; + case 10: + obj.sq_PlaySound("TF_ATK4"); + break; + } + break; + case 10: + // local prob = sq_GetLevelData(obj, SKILL_THBYKK_SHURIKENIMPROVE, 2, sq_GetSkillLevel(obj, SKILL_THBYKK_SHURIKENIMPROVE)); + // if(sq_getRandom(1, 100) < prob) break; + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: + //`normal attack shoot` 83 0 64 + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,83,0,64,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,118,0,0,0,0,0,0,0); + break; + case 1: + //`normal attack shoot` 52 0 80 + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,52,0,80,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,119,0,0,0,0,0,0,0); + break; + case 2: + //`normal attack shoot` 102 0 56 + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,102,0,56,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,120,0,0,0,0,0,0,0); + break; + case 10: + //`normal attack shoot` 43 0 9 + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,43,0,9,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,121,0,0,0,0,0,0,0); + break; + } + break; + case 11: + local attackIndex = obj.getAttackIndex(); + switch(attackIndex){ + case 0: + obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_02"); + obj.sq_PlaySound("R_SWORD_KUSANAGI"); + break; + case 1: + obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_02"); + obj.sq_PlaySound("R_SWORD_KUSANAGI"); + break; + case 2: + //`normal attack shoot` 102 0 56 + break; + case 10: + //`normal attack shoot` 43 0 9 + break; + } + break; + } + break; + } + return true; +} + +function onTimeEvent_Thief_Attack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + switch(timeEventIndex){ + case 1: + local v = sq_GetUniformVelocity(0, -100, timeEventCount, 20); + local dstX = sq_GetDistancePos(obj.getVar("AttackSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(1); + break; + case 2: + local v = sq_GetUniformVelocity(0, 30, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, v); + if(timeEventCount >= 10){ + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(3, delay / 20, 10, true); + } + break; + case 3: + local v = sq_GetUniformVelocity(30, 0, timeEventCount, 10); + sq_setCurrentAxisPos(obj, 2, v); + break; + } + break; + } +} + +function onEndState_Thief_Attack(obj, new_state) +{ + if(!obj) return; + local attackIndex = obj.getAttackIndex(); + if(attackIndex == 10) obj.getVar("AttackBool").setBool(0, false); +} + +function onAttack_Thief_Attack(obj, damager, boundingBox, isStuck) +{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + local burnDamage = obj.getVar("markofFlameSet").getInt(2); + local burnTime = obj.getVar("markofFlameSet").getInt(4); + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj || obj.getState() == STATE_DIE) return; + if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ + local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); + if(markofFlameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); + // print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); + } + } +} + +function getAttackAni_Thief(obj, index) +{ + if (!obj) return null; + local animation = obj.sq_GetAttackAni(index); + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: animation = getAttackAni_Thief_necromancer(obj, index); break; + case 3: + if(obj.getWeaponSubType() == 5){ + switch(index){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALATKA_BODY); + } + else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK01_BODY); + break; + case 1: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALATKB_BODY); + else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK02_BODY); + break; + case 2: + animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK03A_BODY); + break; + case 10: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALBACKATK_BODY); + else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK03B_BODY); + break; + } + } + break; + } + return animation; +} + +function getAttackCancelStartFrameSize_Thief(obj) +{ + local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); + if(obj.getWeaponSubType() == 5){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) maxAttackNumber = 1; + else maxAttackNumber = 2; + } + return maxAttackNumber; +} + +function getAttackCancelStartFrame_Thief(obj, index) +{ + if(!obj) return null; + local growType = sq_getGrowType(obj); + local frm = obj.sq_GetAttackCancelStartFrame(index); + if(growType == 3 && obj.getWeaponSubType() == 5) frm = 3; + return frm; +} + +function getDefaultAttackInfo_Thief(obj, index) +{ + if(!obj) return null; + // print("index = "+index); + local attackInfo = obj.sq_GetDefaultAttackInfo(index); + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(obj.getWeaponSubType() == 5){ + switch(index){ + case 0: + case 1: + case 2: + attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPON1 + index); + break; + case 10: + attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPONBACK); + break; + } + } + break; + } + return attackInfo; +} + + + + +//前冲 +function onAfterSetState_Thief_Dash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "dash"); + break; + } +} + +function onEndCurrentAni_Thief_Dash(obj) +{ + if(!obj) return; +} + +function onProcCon_Thief_Dash(obj) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 1){ + if(!sq_GetSkill(obj, 45).isInCoolTime()){ + obj.setSkillCommandEnable(45, true); + if(obj.sq_IsEnterSkill(45) != -1 && obj.isMyControlObject()){ + obj.startSkillCoolTime(45, sq_GetSkillLevel(obj, 45), -1); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(32); + obj.sq_AddSetStatePacket(37, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } +} + +function onKeyFrameFlag_Thief_Dash(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Thief_Dash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thief_Dash(obj, new_state) +{ + if(!obj) return; +} + + + +//前冲攻击 +function onSetState_Thief_DashAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 2){ + onSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer); + } +} + +function onAfterSetState_Thief_DashAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onAfterSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer); break; + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_00.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_01.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_02.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10004,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_03.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10005,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_04.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10006,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_05.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10007,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_06.ani"), 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dashfront_00.ani", 85 , 1, 22); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dashback_00.ani", 85 , 0, 22); + } + obj.getVar("atkSet").setBool(0, true); + break; + } +} + +function onBeforeAttack_Thief_DashAttack(obj,damager,boundingBox,isStuck) +{ + if(!obj) return; + local growType = sq_getGrowType(obj); + switch(growType){ + case 3: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF) && obj.getVar("atkSet").getBool(0)){ + obj.getVar("atkSet").setBool(0, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 7, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); + if(skillLevel > 0){ + local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); + local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); + local burnDamage = totalDamage * burnDamageRate / 100; + obj.getVar("markofFlameSet").setInt(2, burnDamage); + obj.getVar("markofFlameSet").setInt(4, burnTime); + } + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + break; + } +} + +function onEndCurrentAni_Thief_DashAttack(obj) +{ + if(!obj) return; +} + +function onProcCon_Thief_DashAttack(obj) +{ + if(!obj) return; + if(sq_getGrowType(obj) == 2){ + onProcCon_dashattack_thief_necromancer(obj); + } +} + +function onKeyFrameFlag_Thief_DashAttack(obj, flagIndex) +{ + if(!obj) return false; + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: onKeyFrameFlag_dashattack_thief_necromancer(obj, flagIndex); break; + case 3: + switch(flagIndex){ + case 10: + //`normal attack shoot` 85 0 51 + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,85,0,51,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,122,0,0,0,0,0,0,0); + break; + } + } + return true; +} + +function onTimeEvent_Thief_DashAttack(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Thief_DashAttack(obj, new_state) +{ + if(!obj) return; +} + +function onAttack_Thief_DashAttack(obj, damager, boundingBox, isStuck) +{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + local burnDamage = obj.getVar("markofFlameSet").getInt(2); + local burnTime = obj.getVar("markofFlameSet").getInt(4); + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj || obj.getState() == STATE_DIE) return; + if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ + local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); + if(markofFlameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); + // print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); + } + } +} + +function getDashAttackAni_Thief(obj) +{ + if (!obj) return null; + local animation = obj.sq_GetDashAttackAni(); + local growType = sq_getGrowType(obj); + switch(growType){ + case 2: animation = getDashAttackAni_Thief_necromancer(obj); break; + case 3: + if(obj.getWeaponSubType() == 5){ + // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALATKB_BODY); + // else + animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONDASHATK_BODY); + + } + break; + } + return animation; +} + +function getDashAttackInfo_Thief(obj) +{ + if(!obj) return null; + local attackInfo = obj.sq_GetDashAttackInfo(); + if(obj.getWeaponSubType() == 5){ + attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPONDASH); + } + return attackInfo; +} + diff --git a/user/116.205.165.25/8_thief_5.c b/user/116.205.165.25/8_thief_5.c new file mode 100644 index 0000000..709d989 --- /dev/null +++ b/user/116.205.165.25/8_thief_5.c @@ -0,0 +1,3467 @@ + +/////////////////////忍者///////////////////////////////////////////////////////////// + +//忍术精通 +function onSetState_Ninjutsu(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_NINJUTSUBODY1); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ninjutsubody1"); + obj.getVar("NinjutsuBool").setBool(0, false); + local skillIndex = obj.sq_GetVectorData(datas, 1); + local stateIndex = obj.sq_GetVectorData(datas, 2); + obj.getVar("NinjutsuSet").setInt(0, skillIndex); + obj.getVar("NinjutsuSet").setInt(1, stateIndex); + obj.getVar("NinjutsuSet").setInt(2, 0); + obj.sq_IsEnterSkillLastKeyUnits(skillIndex); + obj.sq_PlaySound("NINJUTSU"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_NINJUTSUBODY2); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ninjutsubody2"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_NINJUTSUBODY3); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ninjutsubody3"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + if(subState == 0){ + local speed = 8000 / currentAni.getDelaySum(0, 0); + local delay = sq_GetIntData(obj, SKILL_THBYKK_NINJUTSU, 0); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) delay = delay * (100 - sq_GetIntData(obj, SKILL_THBYKK_CHAKRATRINITY, 0)) / 100; + delay = delay * 100 / speed; + local speedRate = 72000 / (delay * 6 + 200); + obj.getVar("NinjutsuSet").setInt(3, speedRate); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + currentAni.setSpeedRate(speedRate.tofloat()); + obj.setTimeEvent(1, delay, 6, false); + } + else currentAni.setSpeedRate(obj.getVar("NinjutsuSet").getInt(3).tofloat()); +} + +function onEndCurrentAni_Ninjutsu(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_AUTO, true); + break; + case 2: + local skillIndex = obj.getVar("NinjutsuSet").getInt(0); + local stateIndex = obj.getVar("NinjutsuSet").getInt(1); + local ninjutsuPhase = obj.getVar("NinjutsuSet").getInt(2); + setSkillState_Kunoichi_bykk(obj, skillIndex, stateIndex, ninjutsuPhase); + break; + } +} + +function onProcCon_Ninjutsu(obj) +{ + if(!obj) return; + if(obj.getVar("canbreak").getBool(0)) return; + if(obj.getVar("NinjutsuBool").getBool(0) == false){ + if(!obj.isDownSkillLastKey()){ + obj.getVar("NinjutsuBool").setBool(0, true); + local skillIndex = obj.getVar("NinjutsuSet").getInt(0); + local stateIndex = obj.getVar("NinjutsuSet").getInt(1); + local ninjutsuPhase = obj.getVar("NinjutsuSet").getInt(2); + setSkillState_Kunoichi_bykk(obj, skillIndex, stateIndex, ninjutsuPhase); + } + } +} + +function onKeyFrameFlag_Ninjutsu(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_Ninjutsu(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + // print("timeEventCount = "+timeEventCount); + obj.getVar("NinjutsuSet").setInt(2, timeEventCount); + local aniPath = ["", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step1type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step2type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step3type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step4type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step5type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step6type_01.ani"]; + local offSet = [[],[-40, 0, 80],[-70, 0, 120],[-40, 0, 160],[40, 0, 160],[70, 0, 120],[40, 0, 80]]; + createOnlyDrawObject_Theif_bykk(obj,aniPath[timeEventCount],true,ENUM_DIRECTION_RIGHT,sq_GetDistancePos(sq_GetXPos(obj), ENUM_DIRECTION_RIGHT, offSet[timeEventCount][0]),sq_GetYPos(obj) - 1,offSet[timeEventCount][2],ENUM_DRAWLAYER_NORMAL); + obj.sq_PlaySound("NINJUTSU_CAST"); + break; + } +} + +function onEndState_Ninjutsu(obj, new_state) +{ + if(!obj) return; + if(new_state == 1 || new_state == 2 || new_state == 3 || new_state == 4 || new_state == 5 || new_state == 9 || new_state == 6 || new_state == 7) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + obj.getVar("canbreak").setBool(0, false); + local skillIndex = obj.getVar("NinjutsuSet").getInt(0); + local stateIndex = obj.getVar("NinjutsuSet").getInt(1); + createLeaveTraceObj(obj, skillIndex, stateIndex, 0, 0, 6); + } +} + +function setSkillState_Kunoichi_bykk(obj, skillIndex, stateIndex, ninjutsuPhase) +{ + // print("skillIndex = " + skillIndex); + // print("stateIndex = " + stateIndex); + // print("ninjutsuPhase = " + ninjutsuPhase); + local aniPath = ["", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step1suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step2suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step3suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step4suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step5suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step06suck_01.ani"]; + if(ninjutsuPhase > 0) createOnlyDrawObject_Theif_bykk(obj,aniPath[ninjutsuPhase],true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); + switch(skillIndex){ + case SKILL_THBYKK_FLAMEBALL: + case SKILL_THBYKK_BIGKUNAI: + case SKILL_THBYKK_FLAMETORNADO: + case SKILL_THBYKK_GASOLINEFIRE: + case SKILL_THBYKK_ILUSIONSHURIKEN: + case SKILL_THBYKK_SKYROADS: + case SKILL_THBYKK_FLAMEFLOWER: + case SKILL_THBYKK_FUUMASHURIKEN: + case SKILL_THBYKK_YAMATAOROCHI: + case SKILL_THBYKK_AMATERAS: + case SKILL_THBYKK_FUUMASHURIKEN: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(ninjutsuPhase); + obj.sq_AddSetStatePacket(stateIndex, STATE_PRIORITY_IGNORE_FORCE, true); + break; + } +} + +//火遁·豪火球之術 +function checkExecutableSkill_FlameBall(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLAMEBALL); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FLAMEBALL); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEBALL, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_FLAMEBALL); + } + } + } + obj.sq_IntVectClear(); + if(obj.getState() == 6) obj.sq_IntVectPush(10); + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_FLAMEBALL); + obj.sq_IntVectPush(STATE_THBYKK_FLAMEBALL); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + } + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEBALL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlameBall(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlameBall(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLSTART); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/mouthpieceflameball.ani"), 0, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballstart"); + // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/start/start_flameball_normal.ani"), 0, -70); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("FlameBallSet").setInt(0, ninjutsuPhase); + obj.getVar("FlameBallSet").setInt(1, speedRate); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + obj.getVar("FlameBall").clear_obj_vector(); + local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 2) * 100 / speedRate; + local hitTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 0) * 100 / speedRate; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0); + // print("totalDamage1&2 :"+totalDamage+",,"+totalDamage_exp); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 9); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 8 + ninjutsuPhase); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEBALL,1,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,speedRate,isBlue,0); + obj.sq_PlaySound("R_TF_FLAMEBALL"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLLOOP); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/loop/loop_flameball_body.ani"), 0, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballloop"); + local currentAni = obj.getCurrentAnimation(); + local speedRate = obj.getVar("FlameBallSet").getInt(1); + currentAni.setSpeedRate(speedRate.tofloat()); + local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 2) * 100 / speedRate; + obj.setTimeEvent(1, lifeTime, 1, false); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLEND); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_body.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_dodge.ani"), 0, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballend"); + local currentAni = obj.getCurrentAnimation(); + currentAni.setSpeedRate(obj.getVar("FlameBallSet").getInt(1).tofloat()); + break; + case 10: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLENDILLUSION); + obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_body.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_dodge.ani"), 0, 0); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballendillusion"); + obj.getVar("FlameBallSet").setInt(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,75,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEBALL,2,totalDamage,isBlue,0,0,0,0,0,0); + obj.sq_PlaySound("R_TF_FLAMEBALL"); + break; + } +} + +function onEndCurrentAni_FlameBall(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEBALL, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(sq_GetZPos(obj) / 4); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlameBall(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FlameBall(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FlameBall(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEBALL, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onEndState_FlameBall(obj, new_state) +{ + if(!obj) return; + if(new_state == 1 || new_state == 2 || new_state == 3 || new_state == 4 || new_state == 5 || new_state == 9){ + local aObj = obj.getVar("FlameBall").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.setTimeEvent(3, 1000, 1, false); + } + } + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("FlameBallSet").getInt(0); + createLeaveTraceObj(obj, SKILL_THBYKK_FLAMEBALL, STATE_THBYKK_FLAMEBALL, subState, startFrameIndex, ninjutsuPhase); + } +} + +//火遁·螺旋手裡劍 +function checkExecutableSkill_BigKunai(obj) +{ + if (!obj) return false; + if(obj.getVar("bigkunaiMoveBool").getBool(0) && obj.getVar("bigkunaiMoveBool").getBool(1) && obj.getState() != STATE_THBYKK_BIGKUNAI){ + obj.getVar("bigkunaiMoveBool").setBool(1, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_THBYKK_BIGKUNAI, STATE_PRIORITY_IGNORE_FORCE, true); + return false; + } + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_BIGKUNAI); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_BIGKUNAI); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_BIGKUNAI, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_BIGKUNAI); + } + } + } + obj.sq_IntVectClear(); + if(obj.getState() == 6) obj.sq_IntVectPush(1); + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_BIGKUNAI); + obj.sq_IntVectPush(STATE_THBYKK_BIGKUNAI); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + } + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_BIGKUNAI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_BigKunai(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_BigKunai(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_BIGKUNAI); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "bigkunai"); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("BigKunaiSet").setInt(0, ninjutsuPhase); + obj.sq_PlaySound("R_TF_NSKUNAI"); + break; + case 1: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANI_THBYKK_BIGKUNAIJUMP); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "bigkunaijump"); + obj.getVar("BigKunaiSet").setInt(0, 0); + obj.sq_PlaySound("R_TF_NSKUNAI"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_BIGKUNAIRAPIDMOVE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "bigkunairapidmove"); + local offSetX = obj.getVar("bigkunaiMove").getInt(0); + local offSetY = obj.getVar("bigkunaiMove").getInt(1); + sq_setCurrentAxisPos(obj, 0, offSetX); + sq_setCurrentAxisPos(obj, 1, offSetY); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + } +} + +function onEndCurrentAni_BigKunai(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 2: + if(subState == 2) obj.getVar("bigkunaiMoveBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_BigKunai(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_BigKunai(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local subState = obj.getSkillSubState(); + local bonusRate = 1.0; + if(subState == 1) bonusRate = sq_GetIntData(obj, SKILL_THBYKK_BIGKUNAI, 9).tofloat() / 100.0; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 0, bonusRate); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 1, bonusRate); + local ninjutsuPhase = obj.getVar("BigKunaiSet").getInt(0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_BIGKUNAI); + local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 2, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 3, skillLevel); + local sizeRate = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 4, skillLevel); + local addSizeRate = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 5, skillLevel); + sizeRate = sizeRate + addSizeRate * ninjutsuPhase; + local offSet = [[75,0,50],[75,0,0]]; + local isBlue = 0, moveBool = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) moveBool = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[subState][0],offSet[subState][1],offSet[subState][2],sq_GetDirection(obj),3,SKILL_THBYKK_BIGKUNAI,1 + subState,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,isBlue,moveBool,0); + break; + } + return true; +} + +function onTimeEvent_BigKunai(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_BigKunai(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("BigKunaiSet").getInt(0); + createLeaveTraceObj(obj, SKILL_THBYKK_BIGKUNAI, STATE_THBYKK_BIGKUNAI, subState, startFrameIndex, ninjutsuPhase); + } + if(new_state != STATE_THBYKK_BIGKUNAI){ + if(obj.getSkillSubState() == 2) sq_SimpleMoveToNearMovablePos(obj,200); + } +} + +//忍法:幻影手裡劍 +function checkExecutableSkill_IlusionShuriken(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_ILUSIONSHURIKEN); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_ILUSIONSHURIKEN); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_ILUSIONSHURIKEN, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_ILUSIONSHURIKEN); + } + } + } + obj.sq_IntVectClear(); + if(obj.getState() == 6) obj.sq_IntVectPush(10); + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_ILUSIONSHURIKEN); + obj.sq_IntVectPush(STATE_THBYKK_ILUSIONSHURIKEN); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + } + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_IlusionShuriken(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_IlusionShuriken(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + if(subState >= 10) obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDSTART); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundstart"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDCREATE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundcreate"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundattack"); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK2); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundattack2"); + break; + case 4: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK3); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundattack3"); + break; + case 5: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDEND); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundend"); + break; + case 10: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRSTART); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairstart"); + break; + case 11: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRCREATE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenaircreate"); + break; + case 12: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairattack"); + break; + case 13: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK2); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairattack2"); + break; + case 14: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK3); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairattack3"); + break; + case 15: + obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIREND); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairend"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0 || subState == 10){ + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("IlusionShurikenSet").setInt(0, ninjutsuPhase); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN); + local createMax = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); + local reboundCount = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 4, skillLevel); + obj.getVar("IlusionShurikenSet").setInt(1, createMax); + obj.getVar("IlusionShurikenSet").setInt(2, 0); + obj.getVar("IlusionShurikenSet").setInt(3, reboundCount); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + } + else if(subState == 1 || subState == 11){ + obj.sq_PlaySound("R_TF_GHOSTKUNAI"); + local ninjutsuPhase = obj.getVar("IlusionShurikenSet").getInt(0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN); + local createMax = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); + local reboundCount = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 4, skillLevel); + local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 6, skillLevel); + local bonusRate2 = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 7, skillLevel); + local offSet = [[50,55],[120,-40],[-47,83],[17,-62]]; + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("IlusionShuriken").clear_obj_vector(); + if(subState == 11){ + offSet = [[20,-30],[-50,40]]; + totalDamage = totalDamage * bonusRate / 100; + for(local i = 0; i < 2; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,4,totalDamage,reboundCount,createMax,speedRate,isBlue,0,0,0); + } + return; + } + switch(ninjutsuPhase){ + case 1: + case 2: + local create = sq_GetIntData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 5); + totalDamage = totalDamage * bonusRate / 100; + for(local i = 0; i < create; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage,reboundCount,createMax,speedRate,isBlue,0,0,0); + } + break; + case 3: + case 4: + local create = sq_GetIntData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 7); + local totalDamage1 = totalDamage * bonusRate / 100; + local totalDamage2 = totalDamage * bonusRate2 / 100; + for(local i = 0; i < create; i++){ + if(i < 2) createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage1,reboundCount,createMax,speedRate,isBlue,0,0,0); + else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage2,reboundCount,createMax,speedRate,isBlue,0,0,0); + } + break; + case 5: + case 6: + local create = sq_GetIntData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 9); + local totalDamage1 = totalDamage * bonusRate / 100; + local totalDamage2 = totalDamage * bonusRate2 / 100; + for(local i = 0; i < create; i++){ + if(i < 2) createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage1,reboundCount,createMax,speedRate,isBlue,0,0,0); + else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage2,reboundCount,createMax,speedRate,isBlue,0,0,0); + } + break; + } + } +} + +function onEndCurrentAni_IlusionShuriken(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 10: + case 11: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 3: + case 4: + case 12: + case 13: + case 14: + if(obj.getVar("IlusionShurikenSet").getInt(2) + 1 >= obj.getVar("IlusionShurikenSet").getInt(1)){ + obj.sq_IntVectClear(); + if(subState < 10) obj.sq_IntVectPush(5); + else obj.sq_IntVectPush(15); + obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_AUTO, true); + } + else{ + obj.getVar("IlusionShurikenSet").setInt(2, obj.getVar("IlusionShurikenSet").getInt(2) + 1); + obj.sq_IntVectClear(); + if(subState == 4) obj.sq_IntVectPush(2); + else if(subState == 14) obj.sq_IntVectPush(12); + else obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_AUTO, true); + } + break; + case 5: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 15: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_IlusionShuriken(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_IlusionShuriken(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + case 2: + case 3: + local subState = obj.getSkillSubState(); + if(subState < 2 || (subState > 9 && subState < 12)) break; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); + local reboundCount = obj.getVar("IlusionShurikenSet").getInt(3); + local offSet = [[],[72,0,66],[78,0,68],[87,0,67]]; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[flagIndex][0],offSet[flagIndex][1],offSet[flagIndex][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,1,totalDamage,reboundCount,isBlue,0,0,0,0,0); + obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); + break; + case 11: + case 12: + case 13: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); + local reboundCount = obj.getVar("IlusionShurikenSet").getInt(3); + local offSet = [[],[42,0,58],[36,0,61],[41,0,58]]; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[flagIndex - 10][0],offSet[flagIndex - 10][1],offSet[flagIndex - 10][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,2,totalDamage,reboundCount,isBlue,0,0,0,0,0); + obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); + break; + } + return true; +} + +function onTimeEvent_IlusionShuriken(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_IlusionShuriken(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("IlusionShurikenSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_ILUSIONSHURIKEN, STATE_THBYKK_ILUSIONSHURIKEN, subState, startFrameIndex, ninjutsuPhase); + } + if(new_state == 1 || new_state == 2 || new_state == 3 || new_state == 4 || new_state == 5 || new_state == 9){ + local size = obj.getVar("IlusionShuriken").get_obj_vector_size(); + if(size > 0){ + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("IlusionShuriken").get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + colObj.setTimeEvent(4, 1000, 1, true); + } + } + } + } +} + +//忍法:原木分身術 +function checkExecutableSkill_WoodMove(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_WOODMOVE); + if (isUse){ + obj.sq_IntVectClear(); + if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_WOODMOVE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_WoodMove(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_WoodMove(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + case 1: + if(subState == 0){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_WOODMOVE_START_GROUND_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "woodmove_start_ground_body"); + } + else{ + obj.sq_SetCurrentAnimation(ANI_THBYKK_WOODMOVE_START_JUMP_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "woodmove_start_jump_body"); + } + obj.getVar("WoodMoveBool").setBool(0, true); + obj.getVar("WoodMoveBool").setBool(1, true); + obj.getVar("WoodMoveSet").setInt(0, 0); + obj.getVar("WoodMoveSet").setInt(1, 0); + sq_SendMessage(obj, 0, 1, 0); + break; + case 2: + local sub = obj.sq_GetVectorData(datas, 1); + switch(sub){ + case 0: + local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0); + if(obj.getVar("WoodMoveSet").getInt(0) == 1) offSet = -offSet; + local offSetX = 0; + for(local i = 0; i < 20; i++){ + offSetX = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offSet); + if(obj.isMovablePos(offSetX, sq_GetYPos(obj))) break; + else offSet = offSet - offSet / 20; + } + if(offSet != 0) sq_setCurrentAxisPos(obj, 0, offSetX); + if(obj.getVar("WoodMoveBool").getBool(1) == false){ + local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0) / 3; + if(obj.getVar("WoodMoveSet").getInt(1) == 1) offSet = -offSet; + for(local i = 0; i < 20; i++){ + if(obj.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + offSet)) break; + else offSet = offSet - offSet / 20; + } + if(offSet != 0) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + offSet); + } + break; + case 1: + if(obj.getVar("WoodMoveBool").getBool(0) == false){ + local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0); + if(obj.getVar("WoodMoveSet").getInt(0) == 1) offSet = -offSet; + local offSetX = 0; + for(local i = 0; i < 20; i++){ + offSetX = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offSet); + if(obj.isMovablePos(offSetX, sq_GetYPos(obj))) break; + else offSet = offSet - offSet / 20; + } + if(offSet != 0) sq_setCurrentAxisPos(obj, 0, offSetX); + } + if(obj.getVar("WoodMoveBool").getBool(1) == false){ + local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0) / 3; + if(obj.getVar("WoodMoveSet").getInt(1) == 1) offSet = -offSet; + for(local i = 0; i < 20; i++){ + if(obj.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + offSet)) break; + else offSet = offSet - offSet / 20; + } + if(offSet != 0) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + offSet); + } + break; + } + sq_setCurrentAxisPos(obj, 2, 0); + local yPos = sq_GetYPos(obj); + obj.sq_SetCurrentAnimation(ANI_THBYKK_WOODMOVE_FINISH_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "woodmove_finish_body"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_WoodMove(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_IntVectPush(subState); + obj.sq_AddSetStatePacket(STATE_THBYKK_WOODMOVE, STATE_PRIORITY_AUTO, true); + break; + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_WoodMove(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + if(obj.getVar("WoodMoveBool").getBool(0)){ + local direction = sq_GetDirection(obj); + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("WoodMoveBool").setBool(0, false); + if(direction == ENUM_DIRECTION_RIGHT) obj.getVar("WoodMoveSet").setInt(0, 1); + else obj.getVar("WoodMoveSet").setInt(0, 2); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("WoodMoveBool").setBool(0, false); + if(direction == ENUM_DIRECTION_LEFT) obj.getVar("WoodMoveSet").setInt(0, 1); + else obj.getVar("WoodMoveSet").setInt(0, 2); + } + } + if(obj.getVar("WoodMoveBool").getBool(1)){ + if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("WoodMoveBool").setBool(1, false); + obj.getVar("WoodMoveSet").setInt(1, 1); + } + else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ + obj.getVar("WoodMoveBool").setBool(1, false); + obj.getVar("WoodMoveSet").setInt(1, 2); + } + } + break; + } +} + +function onKeyFrameFlag_WoodMove(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_WoodMove(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_WoodMove(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_THBYKK_WOODMOVE){ + sq_SendMessage(obj, 0, 0, 0); + local range = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0); + sq_SimpleMoveToNearMovablePos(obj, range); + } +} + +//火遁·颶風煞 +function checkExecutableSkill_FlameTornado(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLAMETORNADO); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FLAMETORNADO); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMETORNADO, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_FLAMETORNADO); + } + } + } + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_FLAMETORNADO); + obj.sq_IntVectPush(STATE_THBYKK_FLAMETORNADO); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + } + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMETORNADO, STATE_PRIORITY_IGNORE_FORCE, true); + } + return true; + } + return false; +} + +function checkCommandEnable_FlameTornado(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlameTornado(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMETORNADO); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flametornado"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("FlameTornadoSet").setInt(0, ninjutsuPhase); + obj.sq_PlaySound("R_TF_FLAMETORNADO"); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + break; + } +} + +function onEndCurrentAni_FlameTornado(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlameTornado(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FlameTornado(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + //90 1 0 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 0, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 1, 1.0); + local ninjutsuPhase = obj.getVar("FlameTornadoSet").getInt(0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLAMETORNADO); + local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 3, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 2, skillLevel); + local sizeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 6, skillLevel); + local addSizeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 5, skillLevel); + local addExpSizeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 7, skillLevel); + sizeRate = sizeRate + addSizeRate * ninjutsuPhase; + local range = sq_GetIntData(obj, SKILL_THBYKK_FLAMETORNADO, 2); + local addRangeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 9, skillLevel); + range = range * (100 + addRangeRate * ninjutsuPhase) / 100; + local expSizeRate = sizeRate + addExpSizeRate * ninjutsuPhase; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,90, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMETORNADO,1,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,range,expSizeRate,isBlue); + break; + } + return true; +} + +function onTimeEvent_FlameTornado(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FlameTornado(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("FlameTornadoSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_FLAMETORNADO, STATE_THBYKK_FLAMETORNADO, subState, startFrameIndex, ninjutsuPhase); + } +} + +function proc_appendage_flametornado_suck(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +//忍法:六道輪迴 +function checkExecutableSkill_DeitiesreBirth(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_DEITIESREBIRTH); + if (isUse){ + obj.sq_IntVectClear(); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.isCooling()) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_DEITIESREBIRTH, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DeitiesreBirth(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DeitiesreBirth(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_DEITIESREBIRTHCAST_04); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_DEITIESREBIRTHSTART_BODY); + break; + } + // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_DeitiesreBirth(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DeitiesreBirth(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DeitiesreBirth(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("R_TF_DEITIES_REBIRTH_CAST"); + obj.sq_PlaySound("SIXROTATION_REC"); + sq_flashScreen(obj,0,0,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local saveMax = sq_GetIntData(obj, SKILL_THBYKK_DEITIESREBIRTH, 0); + local coolTime = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DEITIESREBIRTH, -1, 1, 1.0) + 100; + obj.sq_AddSkillLoad(SKILL_THBYKK_DEITIESREBIRTH, 181, saveMax, coolTime); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot) loadSlot.setStartCool(); + obj.getVar("DeitiesreBirthDamageSave").setInt(0, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEBALL, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMETORNADO, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_ILUSIONSHURIKEN, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_BIGKUNAI, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_SKYROADS, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_GASOLINEFIRE, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEFLOWER, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FUUMASHURIKEN, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_YAMATAOROCHI, 0); + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_AMATERAS, 0); + break; + case 2: + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + createDeitiesreBirthAttackObj(obj, loadNumber); + obj.getVar("canSaveDeitiesreBirth").setBool(0, false); + obj.sq_RemoveSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + } + obj.sq_PlaySound("R_TF_DEITIES_REBIRTH_FIN"); + obj.sq_PlaySound("DEITIES_REBIRTH_START"); + break; + } + return true; +} + +function onTimeEvent_DeitiesreBirth(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DeitiesreBirth(obj, new_state) +{ + if(!obj) return; +} + +function deitiesreBirthDamageSave(obj, skillIndex) +{ + local totalDamage = 0; + switch(skillIndex){ + case SKILL_THBYKK_FLAMEBALL: + local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 2); + local hitTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 0); + local count = lifeTime / hitTime + 1; + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, 1.0) * count; + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0); + // print("Get1 : "+obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, 1.0)); + // print("Get2 : "+obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0)); + totalDamage = totalDamage + totalDamage_exp; + break; + case SKILL_THBYKK_FLAMETORNADO: + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLAMETORNADO); + local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 3, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 2, skillLevel); + local count = lifeTime / hitTime + 1; + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 0, 1.0) * count; + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 1, 1.0); + totalDamage = totalDamage + totalDamage_exp; + break; + case SKILL_THBYKK_ILUSIONSHURIKEN: + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN); + local createMax = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0) * createMax * 5; + break; + case SKILL_THBYKK_BIGKUNAI: + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_BIGKUNAI); + local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 2, skillLevel); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 3, skillLevel); + local count = lifeTime / hitTime + 1; + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 0, 1.0) * count; + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 1, 1.0); + totalDamage = totalDamage + totalDamage_exp; + break; + case SKILL_THBYKK_SKYROADS: + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 0, 1.0); + totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, 1.0); + totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 2, 1.0); + totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 3, 1.0); + break; + case SKILL_THBYKK_GASOLINEFIRE: + local totalDamage_shockwave = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, 1.0); + local totalDamage_ball = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, 1.0); + local totalDamage_ballexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, 1.0); + local totalDamage_disexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, 1.0); + totalDamage = totalDamage_shockwave + totalDamage_ball + totalDamage_ballexp + totalDamage_disexp; + break; + case SKILL_THBYKK_FLAMEFLOWER: + local slashMax = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 3); + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, 1.0) * slashMax; + totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 5, 1.0); + break; + case SKILL_THBYKK_FUUMASHURIKEN: + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 13); + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 0, 1.0) * hitMax; + local hitMax2 = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 20); + totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, 1.0) * hitMax2; + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); + totalDamage = totalDamage + totalDamage_exp; + break; + case SKILL_THBYKK_YAMATAOROCHI: + local isTalisman = 0; + if(isTalisman > 0){ + local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); + local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 3); + totalDamage = totalDamage_loop * (lifeTime / 100); + } + else{ + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 0, 1.0); + local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 1); + totalDamage = totalDamage + totalDamage_loop * hitMax; + local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 2, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_YAMATAOROCHI); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 3, skillLevel); + totalDamage = totalDamage + totalDamage_loop * (lifeTime / 600); + } + break; + case SKILL_THBYKK_AMATERAS: + totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 0, 1.0); + local totalDamage_laser = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 1, 2.0); + local laserMax = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 2, 1.0) + 100; + totalDamage = totalDamage + totalDamage_laser * laserMax; + break; + } + if(totalDamage > 0) obj.getVar("DeitiesreBirthDamageSave").setInt(0, obj.getVar("DeitiesreBirthDamageSave").getInt(0) + totalDamage); + // print("skillIndex = "+skillIndex+",,,saveDamage = "+totalDamage); + // print("nowDamage = "+obj.getVar("DeitiesreBirthDamageSave").getInt(0)); +} + +function createDeitiesreBirthAttackObj(obj, loadNumber) +{ + if(obj.getVar("DeitiesreBirthDamageSave").getInt(0) > 0){ + local totalDamage = obj.getVar("DeitiesreBirthDamageSave").getInt(0); + // print("totalDamage = "+totalDamage); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_DEITIESREBIRTH); + local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_DEITIESREBIRTH, 0, skillLevel); + totalDamage = totalDamage * bonusRate / 100; + local sizeRate = 100 + 3 * (6 - loadNumber); + local speedRate = 100; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA) > 0) speedRate = speedRate + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 4, sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA)); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 50, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DEITIESREBIRTH,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); + } +} + +//火遁·紅蓮 +function checkExecutableSkill_FireHide(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FIREHIDE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_FIREHIDE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FireHide(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut")) return false; + return true; +} + +function onSetState_FireHide(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FIREHIDE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "firehide"); + obj.sq_PlaySound("R_TF_FIREHIDE"); + break; + } +} + +function onEndCurrentAni_FireHide(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut"); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, true, "character/thief/3_kunoichi_bykk/ap_firehide.nut", true); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE) > 0){ + local name = ["kurvejadeFireObj","kurvejadeDarkObj","kurvejadeLightObj"]; + for(local i = 0; i < name.len(); i++){ + local aObj = obj.getVar(name[i]).get_obj_vector(0); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + if(colObj.getVar("custom").getInt(1) != 1){ + colObj.getVar("custom").setInt(1, 1); + colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + else{ + obj.getVar("firehide").clear_obj_vector(); + for(local i = 0; i < 3; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_FIREHIDE,1,i,0,0,0,0,0,0,0); + } + } + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FireHide(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FireHide(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FireHide(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FireHide(obj, new_state) +{ + if(!obj) return; +} + +function onStart_appendage_firehide_buff(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FIREHIDE); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_THBYKK_FIREHIDE, skillLevel); + local buffTime = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 0, skillLevel); + appendage.setBuffIconImage(72); + if(buffTime > 0) appendage.sq_SetValidTime(buffTime); + local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 2, skillLevel) / 10; + obj.getVar("apGetSetbyKK").setInt(0, bonusRate); + + local equPhyDefense = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 3, skillLevel); + local equMagDefense = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 4, skillLevel); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE) > 0){ + local add = sq_GetIntData(obj, SKILL_THBYKK_KURVEJADE, 22); + equPhyDefense = equPhyDefense + add; + equMagDefense = equMagDefense + add; + } + + local change_appendage = appendage.sq_getChangeStatus("firehide_buff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("firehide_buff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (equPhyDefense).tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (equMagDefense).tofloat()); + } + + setSkillBonusRate_3Kunoichi_bykk(obj); + print("setBuff"); +} + +function onEnd_appendage_firehide_buff(appendage) +{ + if(!appendage) return; + // local parentObj = appendage.getParent(); + // local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + // if(obj && obj.getState() != STATE_DIE){ + // setSkillBonusRate_3Kunoichi_bykk(obj); + // } +} + +function proc_appendage_firehide_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + + + +//火遁·蟾蜍油炎彈 +function checkExecutableSkill_GasolineFire(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_GASOLINEFIRE); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_GASOLINEFIRE); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_GASOLINEFIRE, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_GASOLINEFIRE); + } + } + } + obj.sq_IntVectClear(); + if(obj.getState() == 6) obj.sq_IntVectPush(1); + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_GASOLINEFIRE); + obj.sq_IntVectPush(STATE_THBYKK_GASOLINEFIRE); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + } + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_GASOLINEFIRE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_GasolineFire(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_GasolineFire(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_GASOLINEFIRE); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "gasolinefire"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("GasolineFireSet").setInt(0, ninjutsuPhase); + obj.sq_PlaySound("R_TF_GASOLINEFIRE"); + obj.sq_PlaySound("R_GASOLINEFIRE_CAST"); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + break; + case 1: + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANI_THBYKK_GASOLINEFIREJUMP); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "gasolinefirejump"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("R_TF_GASOLINEFIRE"); + obj.sq_PlaySound("R_GASOLINEFIRE_CAST"); + break; + } +} + +function onEndCurrentAni_GasolineFire(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_GasolineFire(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_GasolineFire(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local ninjutsuPhase = obj.getVar("GasolineFireSet").getInt(0); + local totalDamage_shockwave = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, 1.0); + local totalDamage_ball = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, 1.0); + local totalDamage_ballexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, 1.0); + local totalDamage_disexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 4); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 3 + ninjutsuPhase); + local sockwaveSizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 0); + if(false){ + totalDamage_ballexp = totalDamage_ballexp * 133 / 100; + sizeRate = sizeRate * 130 / 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -275, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,speedRate,150); + } + else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,speedRate,100); + break; + case 2: + sq_flashScreen(obj,40,80,240,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 160); + break; + case 3: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 24000 / currentAni.getDelaySum(0, 0); + local totalDamage_shockwave = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, 1.0); + local totalDamage_ball = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, 1.0); + local totalDamage_ballexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, 1.0); + local totalDamage_disexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, 1.0); + local sizeRate = 100; + local sockwaveSizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 2); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,speedRate,100); + break; + } + return true; +} + +function onTimeEvent_GasolineFire(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_GasolineFire(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_GASOLINEFIRE, STATE_THBYKK_GASOLINEFIRE, subState, startFrameIndex, ninjutsuPhase); + } +} + +//忍法:殘影術 +function checkExecutableSkill_LeaveTrace(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_LEAVETRACE); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_LEAVETRACE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_LeaveTrace(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_LeaveTrace(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_LEAVETRACE_CAST); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_LeaveTrace(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_LeaveTrace(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_LeaveTrace(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_LEAVETRACE); + if(loadSlot){} + else{ + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE); + local countMax = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel); + local coolTime = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel); + local mirrorofyataLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA); + if(mirrorofyataLevel > 0){ + countMax = countMax + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 1, mirrorofyataLevel); + coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 0, mirrorofyataLevel)) / 100; + } + obj.sq_AddSkillLoad(SKILL_THBYKK_LEAVETRACE, 66, countMax, coolTime); + } + break; + } + return true; +} + +function onTimeEvent_LeaveTrace(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_LeaveTrace(obj, new_state) +{ + if(!obj) return; +} + +function createLeaveTraceObj(obj, skillIndex, stateIndex, state, startFrameIndex, ninjutsuPhase) +{ + // print("test :"); + // print("skillIndex = "+skillIndex); + // print("stateIndex = "+stateIndex); + // print("state = "+state); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + + local speedRate = obj.getVar("kunoichiSpeedRateSave").getInt(0); + if(speedRate == 0) speedRate = 100; + // print("speedRate = "+speedRate); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE); + local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 2, skillLevel); + local set_1 = 0, set_2 = 0; + switch(skillIndex){ + case SKILL_THBYKK_ILUSIONSHURIKEN: + if(state > 1){ + set_1 = obj.getVar("IlusionShurikenSet").getInt(2); + set_2 = obj.getVar("IlusionShurikenSet").getInt(1); + } + else{ + set_2 = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN)); + } + break; + case SKILL_THBYKK_FLAMEFLOWER: + if(state > 0){ + set_1 = obj.getVar("FlameFlowerSet").getInt(2); + set_2 = obj.getVar("FlameFlowerSet").getInt(1); + } + else{ + set_2 = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 3); + } + break; + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_LEAVETRACE,skillIndex,state,startFrameIndex,ninjutsuPhase,speedRate,bonusRate,set_1,set_2,0); +} + + +//忍法:替身術 +function checkExecutableSkill_Migawari(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_MIGAWARI); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_MIGAWARI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Migawari(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Migawari(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARISTART); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawaristart"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_PlaySound("R_TF_MIGAWARI"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARIBACKSTEP); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawaribackstep"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + // local speedRate = 8000 / currentAni.getDelaySum(0, 0); + // obj.getVar("") + // if(speedRate > 150) speedRate = 150; + // obj.sq_SetStaticMoveInfo(0, 3 * speedRate, 0, false, 100, true); + // obj.sq_SetMoveDirection(sq_GetOppositeDirection(sq_GetDirection(obj)), ENUM_DIRECTION_NEUTRAL); + obj.setTimeEvent(1, currentAni.getDelaySum(false) / 10, 20, true); + obj.getVar("MigawariSet").setInt(0, sq_GetXPos(obj)); + obj.setTimeEvent(2, currentAni.getDelaySum(false) / 10, 20, true); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARISPIN); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawarispin"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 1, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 3, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 4, 1.0) + 100; + local offSet = obj.getVar("MigawariSet").getInt(0) - sq_GetXPos(obj); + if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) offSet = sq_GetXPos(obj) - obj.getVar("MigawariSet").getInt(0); + obj.getVar("MigawariObj").clear_obj_vector(); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,2,totalDamage,totalDamage_exp,sizeRate,0,0,0,0,0); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARIATTACK); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawariattack"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + } +} + +function onEndCurrentAni_Migawari(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_THBYKK_MIGAWARI, STATE_PRIORITY_AUTO, true); + break; + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Migawari(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Migawari(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local delay1 = 4000 / speedRate, delay2 = 8000 / speedRate, delay3 = 24000 / speedRate; + sq_flashScreen(obj,delay1,delay2,delay3,255,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 0, 1.0); + local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 4, 1.0) + 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); + break; + case 3: + local atkObj = obj.getVar("MigawariObj").get_obj_vector(0); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + colObj.setTimeEvent(1, 1000, 1, true); + } + break; + } + break; + } + return true; +} + +function onTimeEvent_Migawari(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 75, timeEventCount, 20, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + case 2: + local v = sq_GetAccel(0, -275, timeEventCount, 20, true); + local dstX = sq_GetDistancePos(obj.getVar("MigawariSet").getInt(0), sq_GetDirection(obj), v); + if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); + else obj.stopTimeEvent(2); + break; + } +} + +function onEndState_Migawari(obj, new_state) +{ + if(!obj) return; +} + +//火遁·炎天道 +function checkExecutableSkill_SkyRoads(obj) +{ + if (!obj) return false; + if(obj.getState() == 6 && sq_GetZPos(obj) < 60) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_SKYROADS); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_SKYROADS); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_SKYROADS, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_SKYROADS); + } + } + } + obj.sq_IntVectClear(); + if(obj.getState() == 6){ + obj.getVar("SkyRoadsBool").setBool(0, true); + obj.sq_IntVectPush(2); + } + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_SKYROADS); + obj.sq_IntVectPush(STATE_THBYKK_SKYROADS); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + } + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_SKYROADS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SkyRoads(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SkyRoads(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSACTCAST); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsactcast"); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("SkyRoadsSet").setInt(0, ninjutsuPhase); + obj.sq_PlaySound("R_TF_SKYROADS"); + obj.sq_PlaySound("SKYROADS_APPEAR"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSACTJUMP); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsactjump"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local delay = currentAni.getDelaySum(false); + obj.setTimeEvent(1, delay / 24, 24, true); + return; + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSACTTHROW); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsactthrow"); + if(obj.getVar("SkyRoadsBool").getBool(0)){ + obj.sq_PlaySound("R_TF_SKYROADS"); + obj.sq_PlaySound("SKYROADS_APPEAR"); + obj.getVar("SkyRoadsBool").setBool(0, false); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, 1.0); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj), sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,2,totalDamage,isBlue,0,0,0,0,0,0); + } + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSGRABFALL); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsgrabfall"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + } +} + +function onEndCurrentAni_SkyRoads(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + // case 2: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_THBYKK_SKYROADS, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SkyRoads(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SkyRoads(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 0, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 13); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,1,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, 1.0); + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,2,totalDamage,0,0,0,0,0,0,0); + break; + case 2: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 2, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 3, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 13); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); + local xPos = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), 225); + local zPos = sq_GetZPos(obj); + local isBlue = 0, isTalisman = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 95, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,3,totalDamage,sizeRate,xPos,zPos,0,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 200, 1, -zPos,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,4,totalDamage_exp,sizeRate,isTalisman,isBlue,0,0,0,0); + break; + } + break; + } + return true; +} + +function onTimeEvent_SkyRoads(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local v = sq_GetAccel(0, 150, timeEventCount, 24, true); + sq_setCurrentAxisPos(obj, 2, v); + break; + } +} + +function onEndState_SkyRoads(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_SKYROADS, STATE_THBYKK_SKYROADS, subState, startFrameIndex, ninjutsuPhase); + } +} + +//火遁·炎舞天璇 +function checkExecutableSkill_FlameFlower(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLAMEFLOWER); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FLAMEFLOWER); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEFLOWER, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_FLAMEFLOWER); + } + } + } + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_FLAMEFLOWER); + obj.sq_IntVectPush(STATE_THBYKK_FLAMEFLOWER); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlameFlower(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlameFlower(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERCAST); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowercast"); + local slashMax = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 3); + obj.getVar("FlameFlowerSet").setInt(1, slashMax); + obj.getVar("FlameFlowerSet").setInt(2, 0); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("FlameFlowerSet").setInt(0, ninjutsuPhase); + obj.sq_PlaySound("R_TF_OPENFIRE"); + break; + case 1: + case 2: + case 3: + case 4: + if(subState == 1){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHA); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslasha"); + } + else if(subState == 2){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHB); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslashb"); + } + else if(subState == 3){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHC); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslashc"); + } + else if(subState == 4){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHD); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslashd"); + } + if(subState == 1){ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) + if(skillLevel > 0){ + local burnDamageRate = sq_GetLevelData(obj, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); + local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); + local decreaseBurnDamageRate = burnDamageRate; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + burnDamageRate = burnDamageRate + sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; + } + totalDamage = totalDamage * (100 - decreaseBurnDamageRate) / 100; + local burnDamage = totalDamage * burnDamageRate / 100; + obj.getVar("markofFlameSet").setInt(1, totalDamage); + obj.getVar("markofFlameSet").setInt(2, burnDamage); + obj.getVar("markofFlameSet").setInt(3, decreaseBurnDamageRate); + obj.getVar("markofFlameSet").setInt(4, burnTime); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_THBYKK_FLAMEFLOWERSLASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + else{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) + if(skillLevel > 0){ + totalDamage = obj.getVar("markofFlameSet").getInt(1); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_THBYKK_FLAMEFLOWERSLASH)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local ninjutsuPhase = obj.getVar("FlameFlowerSet").getInt(0); + if(ninjutsuPhase > 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + speedRate = speedRate * (100 + sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 6) * ninjutsuPhase) / 100; + currentAni.setSpeedRate(speedRate.tofloat()); + sq_AddAttackBox(currentAni, -225,-50,-15,450,100,212); + } + return; + break; + case 5: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLOOPREADY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerloopready"); + obj.sq_PlaySound("TF_OPENFIRE_01"); + break; + case 6: + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLOOPBLUE); + setSwordKusanagiEffect(obj, "flameflowerloop"); + } + else obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLOOP); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLAMEFLOWER); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 1, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) + if(skillLevel > 0){ + local burnDamageRate = sq_GetLevelData(obj, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); + local decreaseBurnDamageRate = burnDamageRate; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ + burnDamageRate = burnDamageRate + sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; + } + totalDamage = totalDamage * (100 - decreaseBurnDamageRate) / 100; + local burnDamage = totalDamage * burnDamageRate / 100; + obj.getVar("markofFlameSet").setInt(2, burnDamage); + } + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_THBYKK_FLAMEFLOWERLOOP)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMEFLOWER, 4, skillLevel) * 100 / speedRate; + local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMEFLOWER, 2, skillLevel) * 100 / speedRate; + obj.setTimeEvent(1, lifeTime, 1, false); + obj.setTimeEvent(2, hitTime, -1, false); + obj.sq_PlaySound("OPENFIRE_LOOP", 2333); + return; + break; + case 7: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLAST); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerlast"); + obj.removeAllTimeEvent(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 5, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 13) / 10; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEFLOWER,1,totalDamage,sizeRate,isBlue,0,0,0,0,0); + obj.stopSound(2333); + obj.sq_PlaySound("OPENFIRE_EXP"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + } +} + +function onEndCurrentAni_FlameFlower(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 3: + case 4: + if(obj.getVar("FlameFlowerSet").getInt(2) + 1 >= obj.getVar("FlameFlowerSet").getInt(1)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); + } + else{ + obj.getVar("FlameFlowerSet").setInt(2, obj.getVar("FlameFlowerSet").getInt(2) + 1); + obj.sq_IntVectClear(); + if(subState == 4) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); + } + break; + case 5: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(6); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); + break; + case 7: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlameFlower(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + case 2: + case 3: + case 4: + sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); + if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(5); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + break; + } +} + +function onKeyFrameFlag_FlameFlower(obj, flagIndex) +{ + if(!obj) return false; + return true; +} + +function onTimeEvent_FlameFlower(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(7); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); + break; + case 2: obj.resetHitObjectList(); break; + } +} + +function onEndState_FlameFlower(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_THBYKK_FLAMEFLOWER) obj.stopSound(2333); + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_FLAMEFLOWER, STATE_THBYKK_FLAMEFLOWER, subState, startFrameIndex, ninjutsuPhase); + } +} + +function onAttack_FlameFlower(obj, damager, boundingBox, isStuck) +{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0){ + local burnDamage = obj.getVar("markofFlameSet").getInt(2); + local burnTime = obj.getVar("markofFlameSet").getInt(4); + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + if(!obj || obj.getState() == STATE_DIE) return; + if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ + local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); + if(markofFlameObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); + // print("add = "+burnDamage); + local baseDamage = colObj.getVar("damage").getInt(0); + colObj.getVar("damage").setInt(0, baseDamage + burnDamage); + } + } + else{ + local group = sq_GetGroup(damager); + local uniqueId = sq_GetUniqueId(damager); + createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); + } + } +} + +//忍法:飛燕手裡劍 +function checkExecutableSkill_FlyingSwallow(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLYINGSWALLOW); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLYINGSWALLOW, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FlyingSwallow(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FlyingSwallow(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLYINGSWALLOWBOMB); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flyingswallowbomb"); + //obj.sq_SetCurrentAnimation(ANI_THBYKK_FLYINGSWALLOWBOMBDUMMY); + obj.getVar("FlyingSwallowTar").clear_obj_vector(); + break; + case 1: + sq_setCurrentAxisPos(obj, 2, 225); + obj.sq_ZStop(); + obj.sq_SetCurrentAnimation(ANI_THBYKK_FLYINGSWALLOWFINISH); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flyingswallowfinish"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_FlyingSwallow(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + sq_setCurrentAxisPos(obj, 2, 500); + obj.sq_ZStop(); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FlyingSwallow(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FlyingSwallow(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local delay1 = 4000 / speedRate, delay2 = 8000 / speedRate, delay3 = 24000 / speedRate; + sq_flashScreen(obj,delay1,delay2,delay3,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 1: + local totalDamage_shuriken = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 6, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 7, 1.0); + local createMax = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 8, 1.0) + 100; + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLYINGSWALLOW, 15); + for(local i = 0; i < createMax; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,7,totalDamage_exp,sizeRate,i,createMax,0,0,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,5,totalDamage_shuriken,0,0,0,0,0,0,0); + } + break; + } + break; + case 1: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 0, 1.0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,1,totalDamage,0,0,0,0,0,0,0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + local delay = 50000 / speedRate; + obj.setTimeEvent(1, delay, 5, true); + break; + } + return true; +} + +function onTimeEvent_FlyingSwallow(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + if(timeEventCount >= 5){ + local totalDamage_light = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 5, 1.0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 2, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,8,totalDamage_light,timeEventCount,0,0,0,0,0,0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_FLYINGSWALLOW, STATE_PRIORITY_AUTO, true); + } + else{ + local offSet = [[],[-155,70],[225,75],[-65,158],[115,158]]; + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLYINGSWALLOW); + local createMax = sq_GetLevelData(obj, SKILL_THBYKK_FLYINGSWALLOW, 4, skillLevel); + local totalDamage_shuriken = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 2, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 3, 1.0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[timeEventCount][0], 1, offSet[timeEventCount][1] - sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,3,totalDamage_shuriken,totalDamage_exp,createMax,timeEventCount,0,0,0,0); + local totalDamage_light = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 1, 1.0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 2, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,8,totalDamage_light,timeEventCount,0,0,0,0,0,0); + } + break; + } +} + +function onEndState_FlyingSwallow(obj, new_state) +{ + if(!obj) return; +} + +//火遁·冥焰業火陣 +function checkExecutableSkill_DoomField(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_DOOMFIELD); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_DOOMFIELD, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_DoomField(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_DoomField(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_DOOMFILEDMOTION_START); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "doomfiledmotion_start"); + obj.getVar("DoomFieldSet").setInt(0, 0); + break; + case 1: + if(obj.getVar("DoomFieldSet").getInt(0) > 0){ + sq_setCurrentAxisPos(obj, 0, obj.getVar("DoomFieldSet").getInt(0)); + obj.sq_SetXScrollStop(0); + } + obj.sq_SetCurrentAnimation(ANI_THBYKK_DOOMFILEDMOTION_END); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "doomfiledmotion_end"); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 4000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + } +} + +function onEndCurrentAni_DoomField(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_DOOMFIELD, STATE_PRIORITY_AUTO, true); + break; + case 1: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_DoomField(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_DoomField(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + if(obj.getSkillSubState() != 0) break; + obj.sq_PlaySound("R_TF_NINPOJIN_01", 2333); + local offSet = 330; + local baseX = sq_GetXPos(obj), baseY = sq_GetYPos(obj), direction = sq_GetDirection(obj); + for(local i = 0; i < 22; i++){ + // print(offSet); + local offSetX = sq_GetDistancePos(baseX, direction, offSet); + if(obj.isMovablePos(offSetX, baseY)) break; + else offSet = offSet - 15; + } + // print("final :" + offSet); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 3000 / currentAni.getDelaySum(0, 0); + if(offSet > 0){ + local delay = currentAni.getDelaySum(5, 14); + obj.sq_SetXScrollStart(offSet, delay); + local offSetX = sq_GetDistancePos(baseX, direction, offSet); + obj.getVar("DoomFieldSet").setInt(0, offSetX); + } + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 0, 1.0); + local sizeRate = 100; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 9) sizeRate = 120; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,1,totalDamage,speedRate,sizeRate,isBlue,0,0,0,0); + break; + case 6: + local size = obj.getVar("DoomFieldObj").get_obj_vector_size(); + if(size > 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local delay = 40000 / speedRate; + for(local i = 0; i < size; i++){ + local aObj = obj.getVar("DoomFieldObj").get_obj_vector(i); + if(aObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(aObj); + local phaseSet = colObj.getVar("custom").getInt(1); + colObj.setTimeEvent(1, delay * phaseSet, 1, false); + } + } + } + break; + case 7: sq_SetMyShake(obj, 4, 200); break; + case 8: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 4, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 1, 1.0); + local sizeRate = 100; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 9) sizeRate = 120; + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,3,totalDamage,totalDamage_exp,speedRate,sizeRate,isBlue,0,0,0); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 3){ + local bonusRate = 1.0; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 6) bonusRate = 1.1; + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 9, bonusRate); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,2,totalDamage,sizeRate,0,0,0,0,0,0); + } + break; + case 9: + obj.stopSound(2333); + obj.sq_PlaySound("R_TF_NINPOJIN_02"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 2, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 3, 1.0); + local sizeRate = 100; + local offSet = [[-170,-30,1,1],[170,30,1,2],[0,60,2,3],[0,-60,2,4],[-170,30,3,5],[170,-30,3,6]]; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 9){ + sizeRate = 120; + offSet = [[-204,-36,1,1],[204,36,1,2],[0,72,2,3],[0,-72,2,4],[-204,36,3,5],[204,-36,3,6]]; + } + local isBlue = 0; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; + obj.getVar("DoomFieldObj").clear_obj_vector(); + for(local i = 0; i < 6; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[i][0], offSet[i][1], 75,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,5,totalDamage_exp,offSet[i][2],offSet[i][3],sizeRate,isBlue,0,0,0); + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,7,totalDamage,sizeRate,0,0,0,0,0,0); + break; + case 10: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 6000 / currentAni.getDelaySum(0, 0); + local delay1 = 6000 / speedRate, delay2 = 12000 / speedRate, delay3 = 1000 / speedRate; + sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 3, 150); + break; + } + return true; +} + +function onTimeEvent_DoomField(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_DoomField(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_THBYKK_DOOMFIELD){ + obj.sq_SetXScrollStop(300); + } + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_DOOMFIELD, STATE_THBYKK_DOOMFIELD, subState, startFrameIndex, ninjutsuPhase); + } +} + +function proc_appendage_doomfield_hold(appendage) +{ + if(!appendage) return; + local sourceObj = appendage.getSource(); + if(!sourceObj || sourceObj.getState() == STATE_DIE || sourceObj.getState() != STATE_THBYKK_DOOMFIELD){ + appendage.setValid(false); + return; + } +} + +//火遁·風魔手裡劍 +function checkExecutableSkill_FuumaShuriken(obj) +{ + if (!obj) return false; + if(obj.getState() == 6 && sq_GetZPos(obj) < 60) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FUUMASHURIKEN); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FUUMASHURIKEN); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FUUMASHURIKEN, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_FUUMASHURIKEN); + } + } + } + obj.sq_IntVectClear(); + if(obj.getState() == 6){ + obj.sq_IntVectPush(10); + } + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_FUUMASHURIKEN); + obj.sq_IntVectPush(STATE_THBYKK_FUUMASHURIKEN); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + } + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_FUUMASHURIKEN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_FuumaShuriken(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_FuumaShuriken(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN01_BODY_READY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken01_body_ready"); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("FuumaShurikenSet").setInt(0, ninjutsuPhase); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN02_BODY_THROW01); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken02_body_throw01"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN03_BODY_THROW02); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken03_body_throw02"); + break; + case 3: + obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKENTALISMAN_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasurikentalisman_body"); + break; + case 10: + obj.sq_ZStop(); + if(false){ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKENTALISMANJUMP_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasurikentalismanjump_body"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasurikentalismanjumpeffect_00.ani", 43, 0, -49); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + return; + } + else{ + obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN04_BODY_JUMPTHROW); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken04_body_jumpthrow"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken04_jumpsuriken_00.ani", 43, 0, -49); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + return; + } + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + if(subState == 0){ + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + } +} + +function onEndCurrentAni_FuumaShuriken(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + if(false) obj.sq_IntVectPush(3); + else obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_FUUMASHURIKEN, STATE_PRIORITY_AUTO, true); + break; + case 1: + case 2: + case 3: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + case 10: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(sq_GetZPos(obj)); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_FuumaShuriken(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_FuumaShuriken(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 100: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken01suriken_00.ani", 36, 1, 85); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 101: + obj.sq_PlaySound("R_TF_FUUMA_01"); + obj.sq_PlaySound("FUUMA_CAST"); + break; + case 102: + //`throw` 116 0 66 passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_smallsuriken_suriken.ani + obj.getVar("FuumaShuriken").clear_obj_vector(); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 13); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,1,totalDamage,hitMax,0,0,0,0,0,0); + for(local i = 0; i < 4; i++){ + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,2,i,hitMax,0,0,0,0,0,0); + } + break; + case 103: + //`throw` 255 0 58 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 20); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 31); + local ninjutsuPhase = obj.getVar("FuumaShurikenSet").getInt(0); + if(ninjutsuPhase <= 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 32) / 100; + else if(ninjutsuPhase > 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 33) / 100; + local sizeRate_shuriken = 100; + local isBlue = 0; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,3,totalDamage,hitMax,totalDamage_exp,sizeRate,sizeRate_shuriken,isBlue,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,4,hitMax,sizeRate_shuriken,isBlue,0,0,0,0,0); + break; + case 201: + //`createEffectBack` 23 0 -56 + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken04_underjumpsuriken.ani", 23, 0, -56); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(speedRate.tofloat()); + break; + case 202: + //`throw` 111 0 -11 + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 31); + local isBlue = 0; + local isTalisman = 1; + if(isTalisman > 1){ + sizeRate = sizeRate * 130 / 100; + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 111, 0, -11,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,6,totalDamage_exp,sizeRate,isBlue,0,0,0,0,0); + break; + case 301: + //`throw` 255 0 58 + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 20); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 31); + local ninjutsuPhase = obj.getVar("FuumaShurikenSet").getInt(0); + if(ninjutsuPhase <= 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 32) / 100; + else if(ninjutsuPhase > 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 33) / 100; + local sizeRate_shuriken = 130; + local isBlue = 0; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,3,totalDamage,hitMax,totalDamage_exp,sizeRate,sizeRate_shuriken,isBlue,0,0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,4,hitMax,sizeRate_shuriken,isBlue,0,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_FuumaShuriken(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_FuumaShuriken(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_FUUMASHURIKEN, STATE_THBYKK_FUUMASHURIKEN, subState, startFrameIndex, ninjutsuPhase); + } +} + +//八岐大蛇 +function checkExecutableSkill_Yamataorochi(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_YAMATAOROCHI); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_YAMATAOROCHI); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_YAMATAOROCHI, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_YAMATAOROCHI); + } + } + } + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_YAMATAOROCHI); + obj.sq_IntVectPush(STATE_THBYKK_YAMATAOROCHI); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_YAMATAOROCHI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Yamataorochi(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Yamataorochi(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_YMATAOROCHICASTING); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ymataorochicasting"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("YamataorochiSet").setInt(0, ninjutsuPhase); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + obj.sq_PlaySound("R_TF_YAMATAOROCHI"); + break; + } +} + +function onEndCurrentAni_Yamataorochi(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Yamataorochi(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Yamataorochi(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + local isTalisman = 0; + if(isTalisman > 0){ + local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); + local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 3) + local sizeRate = 120; + local ninjutsuPhase = obj.getVar("YamataorochiSet").getInt(0); + if(ninjutsuPhase > 0){ + switch(ninjutsuPhase){ + case 4: + case 5: + case 6: + lifeTime = lifeTime * (110) / 100; + break; + } + } + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -300, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,3,totalDamage_loop,lifeTime,sizeRate,0,0,0,0,0); + } + else{ + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 0, 1.0); + local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 1); + local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 15); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -100, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,1,totalDamage,totalDamage_loop,hitMax,0,0,0,0,0); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 2, 1.0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_YAMATAOROCHI); + local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 3, skillLevel); + local ninjutsuPhase = obj.getVar("YamataorochiSet").getInt(0); + if(ninjutsuPhase > 0){ + switch(ninjutsuPhase){ + case 1: + case 2: + case 3: + local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); + lifeTime = lifeTime * (100 + addRate) / 100; + break; + case 4: + case 5: + case 6: + local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); + lifeTime = lifeTime * (100 + addRate) / 100; + break; + } + } + local sizeRate = 100; + local kurv_skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE); + if(kurv_skillLevel > 0) sizeRate = sizeRate + sq_GetLevelData(obj, SKILL_THBYKK_KURVEJADE, 7, kurv_skillLevel) * 60 / 100; + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,2,totalDamage,lifeTime,sizeRate,0,0,0,0,0); + } + break; + } + return true; +} + +function onTimeEvent_Yamataorochi(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Yamataorochi(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_YAMATAOROCHI, STATE_THBYKK_YAMATAOROCHI, subState, startFrameIndex, ninjutsuPhase); + } +} + +//天照 +function checkExecutableSkill_Amateras(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_AMATERAS); + if (isUse){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ + // print("testt"); + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_AMATERAS); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_AMATERAS, countSkillSave + 1); + loadSlot.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, SKILL_THBYKK_AMATERAS); + } + } + } + obj.sq_IntVectClear(); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(SKILL_THBYKK_AMATERAS); + obj.sq_IntVectPush(STATE_THBYKK_AMATERAS); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_AMATERAS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_Amateras(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_Amateras(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_AMATERAS_CASTING_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "amateras_casting_body"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 5000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); + obj.getVar("AmaterasSet").setInt(0, ninjutsuPhase); + break; + } +} + +function onEndCurrentAni_Amateras(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_Amateras(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_Amateras(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 1: + obj.sq_PlaySound("R_TF_AMATERAS"); + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 0, 1.0); + local totalDamage_laser = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 1, 1.0); + local laserMax = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 2, 1.0) + 100; + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_AMATERAS); + local ninjutsuPhase = obj.getVar("AmaterasSet").getInt(0); + if(ninjutsuPhase > 0){ + switch(ninjutsuPhase){ + case 1: + case 2: + case 3: + local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 6, skillLevel); + totalDamage = totalDamage * (100 + addRate) / 100; + totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; + break; + case 4: + case 5: + case 6: + local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 9, skillLevel); + totalDamage = totalDamage * (100 + addRate) / 100; + totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; + break; + } + } + local range = sq_GetIntData(obj, SKILL_THBYKK_AMATERAS, 7); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 250,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,1,totalDamage,totalDamage_laser,laserMax,range,0,0,0,0); + obj.getVar("AmaterasObj").clear_obj_vector(); + obj.getVar("Amateras").clear_obj_vector(); + break; + } + return true; +} + +function onTimeEvent_Amateras(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_Amateras(obj, new_state) +{ + if(!obj) return; + if(obj.getVar("createLeaveTraceObj").getBool(0)){ + obj.getVar("createLeaveTraceObj").setBool(0, false); + local subState = obj.getSkillSubState(); + local startFrameIndex = sq_GetCurrentFrameIndex(obj); + local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); + // print("subState = "+subState); + // print("startFrameIndex = "+startFrameIndex); + // print("ninjutsuPhase = "+ninjutsuPhase); + createLeaveTraceObj(obj, SKILL_THBYKK_AMATERAS, STATE_THBYKK_AMATERAS, subState, startFrameIndex, ninjutsuPhase); + } +} + +//火焰灼空:草薙劍 +function checkExecutableSkill_SwordOfKusanagi(obj) +{ + if (!obj) return false; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_SWORDOFKUSANAGI); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_SwordOfKusanagi(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_SwordOfKusanagi(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SWORDOFKUSANAGICAST); + obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_01"); + break; + case 1: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SWORDOFKUSANAGI_CATCHBODY); + obj.sq_PlaySound("TF_SWORD_KUSANAGI_03"); + break; + case 2: + obj.sq_SetCurrentAnimation(ANI_THBYKK_SWORDOFKUSANAGIEND_BODY); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "swordofkusanagiend_body"); + obj.getVar("SwordOfKusanagiBool").setBool(1, false); + break; + } + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_SwordOfKusanagi(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 2: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_SwordOfKusanagi(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_SwordOfKusanagi(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + case 102: + sq_SetMyShake(obj, 1, 50); + break; + case 103: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 1, 1.0); + local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 2, 1.0); + local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 0); + obj.getVar("SwordOfKusanagi").clear_obj_vector(); + obj.getVar("SwordOfKusanagiBool").setBool(0, true); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 182, 0, 3,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,1,totalDamage,totalDamage_loop,lifeTime,0,0,0,0,0); + break; + case 201: + obj.sq_PlaySound("SWORD_KUSANAGI_EQUIP"); + local atkObj = obj.getVar("SwordOfKusanagi").get_obj_vector(0); + if(atkObj){ + local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); + colObj.removeAllTimeEvent(); + colObj.setTimeEvent(3, 1000, 1, true); + } + + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, true, APDPATH_SWORDOFKUSANAGI_BUFF, true); + obj.getVar("SwordOfKusanagiBool").setBool(1, true); + break; + case 301: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 3, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 4, 1.0); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,3,totalDamage,totalDamage_exp,0,0,0,0,0,0); + sq_flashScreen(obj,80,4000,1000,166, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + } + return true; +} + +function onTimeEvent_SwordOfKusanagi(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_SwordOfKusanagi(obj, new_state) +{ + if(!obj) return; +} + +function onStart_appendage_swordofkusanagi_buff(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_THBYKK_SWORDOFKUSANAGI, sq_GetSkillLevel(obj, SKILL_THBYKK_SWORDOFKUSANAGI)); + local buffTime = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 2); + appendage.sq_SetValidTime(buffTime); + + local attackSpeed = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 15); + + local change_appendage = appendage.sq_getChangeStatus("swordofkusanagi_buff"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("swordofkusanagi_buff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); + } +} + +function onEnd_appendage_swordofkusanagi_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + if(obj && obj.getState() != STATE_DIE){ + if(obj.getVar("SwordOfKusanagiBool").getBool(1)){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true); + } + obj.getVar("SwordOfKusanagiBool").setBool(1, false); + } +} + +function proc_appendage_swordofkusanagi_buff(appendage) +{ + if(!appendage) return; + local parentObj = appendage.getParent(); + if(!parentObj || parentObj.getState() == STATE_DIE){ + appendage.setValid(false); + return; + } +} + +//勾玉之火:鐮鼬 +function checkExecutableSkill_JadeKamaitachi(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_JADEKAMAITACHI); + if (isUse){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_THBYKK_JADEKAMAITACHI, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_JadeKamaitachi(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_JadeKamaitachi(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + switch(subState){ + case 0: + obj.sq_SetCurrentAnimation(ANI_THBYKK_JADEKAMAITACHIBODY_01); + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "jadekamaitachibody_01"); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local currentAni = obj.getCurrentAnimation(); + sq_ClearAttackBox(currentAni); + local speedRate = 12000 / currentAni.getDelaySum(0, 0); + obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); + local delay1 = 60000 / speedRate, delay2 = 2000 / speedRate; + sq_flashScreen(obj,delay1,0,delay2,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + //`disappearJade_Renewal` 0 0 0 + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/jadekamaitachi/renewal/jadekamaitachi_10.ani", 0, 0, 0); + if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("TF_JADE_KAMAITACHI_01_A"); + else obj.sq_PlaySound("TF_JADE_KAMAITACHI_01_B"); + break; + } +} + +function onEndCurrentAni_JadeKamaitachi(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_JadeKamaitachi(obj) +{ + if(!obj) return; +} + +function onKeyFrameFlag_JadeKamaitachi(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 101: + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/jadekamaitachi/renewal/jadekamaitachibody_03.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/jadekamaitachi/renewal/jadekamaitachibody_04.ani"), 0, 0); + break; + case 102: + obj.sq_PlaySound("TF_JADE_KAMAITACHI_02_C"); + obj.sq_PlaySound("JADE_KAMAITACHI_READY"); + break; + case 103: sq_SetMyShake(obj, 5, 80); break; + case 104: + local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_JADEKAMAITACHI, -1, 1, 1.0); + local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_JADEKAMAITACHI, -1, 2, 1.0); + local addNumber = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_JADEKAMAITACHI, -1, 3, 1.0) + 100; + local hitMax = sq_GetIntData(obj, SKILL_THBYKK_JADEKAMAITACHI, 5); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,350,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_JADEKAMAITACHI,1,totalDamage,totalDamage_exp,addNumber,hitMax,0,0,0,0); + break; + } + return true; +} + +function onTimeEvent_JadeKamaitachi(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; +} + +function onEndState_JadeKamaitachi(obj, new_state) +{ + if(!obj) return; +} + diff --git a/user/116.205.165.25/8_thief_6.c b/user/116.205.165.25/8_thief_6.c new file mode 100644 index 0000000..1a04c60 --- /dev/null +++ b/user/116.205.165.25/8_thief_6.c @@ -0,0 +1,939 @@ + + +////////////////////////////////////////////////////////////////////////////// +function onStart_appendage_equipchakraweapon(appendage) +{ + local parentObj = appendage.getParent(); + local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + local magicalEquAttack = 0, stunRate = 0, coolTime = 0, criticaldamageRate = 0, criticalRate = 0; + local shurikenImproveLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_SHURIKENIMPROVE); + local ninjutsuLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU); + local kurokagenojutsuLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_KUROKAGENOJUTSU); + local fireMarkLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK); + if(shurikenImproveLevel > 0 && obj.getWeaponSubType() == 5){ + magicalEquAttack = sq_GetLevelData(obj, SKILL_THBYKK_SHURIKENIMPROVE, 0, shurikenImproveLevel); + stunRate = sq_GetLevelData(obj, SKILL_THBYKK_SHURIKENIMPROVE, 1, shurikenImproveLevel); + } + if(ninjutsuLevel > 0) coolTime = sq_GetLevelData(obj, SKILL_THBYKK_NINJUTSU, 6, ninjutsuLevel); + if(kurokagenojutsuLevel > 0) criticaldamageRate = sq_GetLevelData(obj, SKILL_THBYKK_KUROKAGENOJUTSU, 39, kurokagenojutsuLevel); + if(fireMarkLevel > 0) criticalRate = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 15, fireMarkLevel); + // print("magicalEquAttack = "+magicalEquAttack); + // print("stunRate = "+stunRate); + // print("coolTime = "+coolTime); + // print("criticaldamageRate = "+criticaldamageRate); + // print("criticalRate = "+criticalRate); + local change_appendage = appendage.sq_getChangeStatus("equipchakraweapon"); + if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("equipchakraweapon",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); + if(change_appendage){ + change_appendage.clearParameter(); + if(magicalEquAttack > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (magicalEquAttack * 0.1).tofloat()); + if(stunRate > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stunRate * -0.1).tofloat()); + if(coolTime > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (coolTime * -0.1).tofloat()); + if(criticaldamageRate > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat()); + if(criticalRate > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat()); + } +} + +function onAttackParent_appendage_equipchakraweapon(appendage, realAttacker, damager, boundingBox, isStuck) +{ + if(!appendage) return; + if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + // if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ + // local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); + // if(colObj.getVar("skillIndex").getInt(0) == false) return; + // } + // local parentObj = appendage.getParent(); + // local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); + // local prob = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 6, 1.0) + 100; + // if(sq_getRandom(1, 1000) < 1000 - prob) return; + // if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ + // local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); + // if(poisonObj){ + // local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); + // local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 4, 1.0) + 100; + // local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 3, 1.0) + 100; + // // print("damageAddSet = "+damage); + // local baseDamage = colObj.getVar("damage").getInt(0); + // colObj.getVar("damage").setInt(0, baseDamage + damage); + // colObj.getVar("time").setInt(0, time); + // colObj.getVar("custom").setInt(2, time / 500); + // } + // } +} + +function ProcPassiveSkill_Kunoichi(obj, skill_index, skill_level) +{ + if(!obj) return; + switch(skill_index){ + case SKILL_THBYKK_EQUIPCHAKRAWEAPON: + if(skill_level > 0){ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "character/thief/3_kunoichi_bykk/passiveskill/ap_equipchakraweapon.nut", true); + } + break; + } +} + +function setState_Kunoichi(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +function setSwordKusanagiEffect(obj, pathName) +{ + obj.sq_AddStateLayerAnimation(11001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweaponnormal/"+pathName+".ani"), 0, 0); + obj.sq_AddStateLayerAnimation(11002,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweapondodge/"+pathName+".ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweaponnormal/"+pathName+".ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweapondodge/"+pathName+".ani"), 0, 0); + obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimufftop/"+pathName+".ani"), 0, 0); + obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimuffbot/"+pathName+".ani"), 0, 0); + if(obj.getState() != 0){ + local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF); + addAppendage.sq_DeleteEffectFront(); + addAppendage.sq_DeleteEffectBack(); + } +} + +function resetDungeonStart_Kunoichi(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) +{ + if(!obj) return; +} + +function procSkill_Kunoichi(obj) +{ + if(!obj) return; + if(sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE) > 0){ + if(obj.getVar("kurvejadeBool").getBool(0) == false){ + if(obj.getVar("kurvejadeFireObj").get_obj_vector_size() < 1){ + obj.getVar("kurvejadeBool").setBool(0, true); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_KURVEJADE,1,0,0,0,0,0,0,0,0); + } + } + if(obj.getVar("kurvejadeBool").getBool(1) == false){ + if(obj.getVar("kurvejadeDarkObj").get_obj_vector_size() < 1){ + obj.getVar("kurvejadeBool").setBool(1, true); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_KURVEJADE,2,0,0,0,0,0,0,0,0); + } + } + if(obj.getVar("kurvejadeBool").getBool(2) == false){ + if(obj.getVar("kurvejadeLightObj").get_obj_vector_size() < 1){ + obj.getVar("kurvejadeBool").setBool(2, true); + createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_KURVEJADE,3,0,0,0,0,0,0,0,0); + } + } + } + if(sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK) > 0){ + local skill = sq_GetSkill(obj, SKILL_THBYKK_FIREMARK); + if(!skill.isSealFunction()){ + local timer = obj.getVar("fireMark").get_ct_vector(0); + if(!timer){ + obj.getVar("fireMark").clear_ct_vector(); + obj.getVar("fireMark").push_ct_vector(); + timer = obj.getVar("fireMark").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + } + local currentT = timer.Get(); + if(currentT > 1500){ + timer.Reset(); + timer.Start(10000,0); + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK); + local rangeNear = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 7, skillLevel); + local totalDamageNear = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 9, 1.0); + local totalDamageExpNear = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 12, 1.0); + local hitTimeNear = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 9, skillLevel); + local lifeTimeNear = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 10, skillLevel); + local rangeFar = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 0, skillLevel); + local totalDamageFar = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 1, 1.0); + local totalDamageExpFar = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 5, 1.0); + local hitTimeFar = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 2, skillLevel); + local lifeTimeFar = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 3, skillLevel); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(3); + sq_BinaryWriteDword(SKILL_THBYKK_FIREMARK); + sq_BinaryWriteDword(1); + sq_BinaryWriteDword(rangeNear); + sq_BinaryWriteDword(totalDamageNear); + sq_BinaryWriteDword(totalDamageExpNear); + sq_BinaryWriteDword(hitTimeNear); + sq_BinaryWriteDword(lifeTimeNear); + sq_BinaryWriteDword(rangeFar); + sq_BinaryWriteDword(totalDamageFar); + sq_BinaryWriteDword(totalDamageExpFar); + sq_BinaryWriteDword(hitTimeFar); + sq_BinaryWriteDword(lifeTimeFar); + sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_NUM_THIEF, 0, 0, 0, 0, sq_GetDirection(obj)); + } + } + } + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(loadSlot.isCooling()){ + if(loadNumber > 0){ + if(obj.getVar("canSaveDeitiesreBirth").getBool(0) == false) obj.getVar("canSaveDeitiesreBirth").setBool(0, true); + } + else if(obj.getVar("canSaveDeitiesreBirth").getBool(0) == true) obj.getVar("canSaveDeitiesreBirth").setBool(0, false); + } + else{ + if(loadNumber < sq_GetIntData(obj, SKILL_THBYKK_DEITIESREBIRTH, 0)){ + //释放轮子 + local state = obj.getState(); + if(state == STATE_THBYKK_DEITIESREBIRTH) return; + if(state == 1 || state == 2 || state == 3 || state == 4 || state == 5 || state == 9 || state == 6 || state == 7) obj.sq_RemoveSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + else{ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_DEITIESREBIRTH, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + else{ + obj.getVar("canSaveDeitiesreBirth").setBool(0, false); + obj.sq_RemoveSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + } + } + } + if(obj.getVar("SwordOfKusanagi").get_obj_vector_size() > 0 && obj.getVar("SwordOfKusanagiBool").getBool(0)){ + sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); + if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ + obj.getVar("SwordOfKusanagiBool").setBool(0, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + if(obj.getVar("SwordOfKusanagiBool").getBool(1)){ + local state = obj.getState(); + if(state == 1 || state == 2 || state == 3 || state == 4 || state == 5 || state == 9 || state == 6 || state == 7){ + obj.setSkillCommandEnable(SKILL_THBYKK_SWORDOFKUSANAGI,false); + return; + } + else{ + obj.setSkillCommandEnable(SKILL_THBYKK_SWORDOFKUSANAGI,true); + if(obj.sq_IsEnterSkill(SKILL_THBYKK_SWORDOFKUSANAGI) != -1){ + obj.getVar("SwordOfKusanagiBool").setBool(1, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(2); + obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + } +} + +function procAppend_Kunoichi(obj) +{ + if(!obj) return; + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_LEAVETRACE); + if(loadSlot){ + local loadNumber = loadSlot.getRemainLoadNumber(); + if(!loadSlot.isCooling()){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE); + local countMax = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel); + local mirrorofyataLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA); + if(mirrorofyataLevel > 0){ + countMax = countMax + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 1, mirrorofyataLevel); + } + if(loadNumber < countMax){ + loadSlot.increaseLoadCount(1); + loadSlot.setStartCool(); + } + } + if(loadNumber > 0){ + if(obj.getVar("createLeaveTraceObj").getBool(0)) return; + local state = obj.getState(); + local subState = obj.getSkillSubState(); + switch(state){ + case STATE_THBYKK_AMATERAS: + case STATE_THBYKK_BIGKUNAI: + case STATE_THBYKK_DOOMFIELD: + case STATE_THBYKK_FLAMEBALL: + case STATE_THBYKK_FLAMEFLOWER: + case STATE_THBYKK_FLAMETORNADO: + case STATE_THBYKK_FUUMASHURIKEN: + case STATE_THBYKK_GASOLINEFIRE: + case STATE_THBYKK_ILUSIONSHURIKEN: + case STATE_THBYKK_JADEKAMAITACHI: + case STATE_THBYKK_SKYROADS: + case STATE_THBYKK_YAMATAOROCHI: + case STATE_THBYKK_NINJUTSU: + if(state == STATE_THBYKK_BIGKUNAI && subState != 1) break; + else if(state == STATE_THBYKK_FLAMEBALL && subState == 10) break; + else if(state == STATE_THBYKK_FUUMASHURIKEN && subState == 10) break; + else if(state == STATE_THBYKK_GASOLINEFIRE && subState == 1) break; + else if(state == STATE_THBYKK_ILUSIONSHURIKEN && subState >= 10) break; + else if(state == STATE_THBYKK_SKYROADS && subState > 0) break; + local enableCancelSkillIndex = [SKILL_THBYKK_AMATERAS, SKILL_THBYKK_BIGKUNAI, SKILL_THBYKK_DOOMFIELD, SKILL_THBYKK_FLAMEBALL, SKILL_THBYKK_FLAMEFLOWER, SKILL_THBYKK_FLAMETORNADO, SKILL_THBYKK_FUUMASHURIKEN, SKILL_THBYKK_GASOLINEFIRE, SKILL_THBYKK_ILUSIONSHURIKEN, SKILL_THBYKK_JADEKAMAITACHI, SKILL_THBYKK_SKYROADS, SKILL_THBYKK_YAMATAOROCHI, 24]; + local enableCancelStateIndex = [STATE_THBYKK_AMATERAS, STATE_THBYKK_BIGKUNAI, STATE_THBYKK_DOOMFIELD, STATE_THBYKK_FLAMEBALL, STATE_THBYKK_FLAMEFLOWER, STATE_THBYKK_FLAMETORNADO, STATE_THBYKK_FUUMASHURIKEN, STATE_THBYKK_GASOLINEFIRE, STATE_THBYKK_ILUSIONSHURIKEN, STATE_THBYKK_JADEKAMAITACHI, STATE_THBYKK_SKYROADS, STATE_THBYKK_YAMATAOROCHI, 47]; + for(local i = 0; i < enableCancelSkillIndex.len(); i++){ + if(sq_GetSkill(obj, enableCancelSkillIndex[i]).isInCoolTime()) continue; + if(state != enableCancelStateIndex[i]){ + obj.setSkillCommandEnable(enableCancelSkillIndex[i], true); + if(obj.sq_IsEnterSkill(enableCancelSkillIndex[i]) != -1){ + obj.startSkillCoolTime(enableCancelSkillIndex[i], sq_GetSkillLevel(obj, enableCancelSkillIndex[i]), -1); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kunoichitrace/leavetracesfire_04.ani", 0, 0, 0); + local pAni = pooledObj.getCurrentAnimation(); + pAni.setSpeedRate(200.0); + local loadSlot2 = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + if(loadSlot2 && loadSlot2.getRemainLoadNumber() > 0){ + local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(enableCancelStateIndex[i]); + if(countSkillSave < 3){ + obj.getVar("DeitiesreBirthSkillSave").setInt(enableCancelStateIndex[i], countSkillSave + 1); + loadSlot2.decreaseLoadCount(1); + deitiesreBirthDamageSave(obj, enableCancelStateIndex[i]); + } + } + if(state == STATE_THBYKK_NINJUTSU) obj.getVar("canbreak").setBool(0, true); + obj.sq_IntVectClear(); + if(enableCancelSkillIndex[i] == 24){ + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(47, STATE_PRIORITY_IGNORE_FORCE, true); + obj.getVar("createLeaveTraceObj").setBool(0, true); + loadSlot.decreaseLoadCount(1); + if(!loadSlot.isCooling()) loadSlot.setStartCool(); + return; + } + if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0 && enableCancelSkillIndex[i] != SKILL_THBYKK_DOOMFIELD && enableCancelSkillIndex[i] != SKILL_THBYKK_JADEKAMAITACHI){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(enableCancelSkillIndex[i]); + obj.sq_IntVectPush(enableCancelStateIndex[i]); + obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); + obj.getVar("createLeaveTraceObj").setBool(0, true); + loadSlot.decreaseLoadCount(1); + if(!loadSlot.isCooling()) loadSlot.setStartCool(); + return; + } + else obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(enableCancelStateIndex[i], STATE_PRIORITY_IGNORE_FORCE, true); + obj.getVar("createLeaveTraceObj").setBool(0, true); + loadSlot.decreaseLoadCount(1); + if(!loadSlot.isCooling()) loadSlot.setStartCool(); + return; + } + } + } + break; + // default: + // local loadSlot2 = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); + // if(loadSlot2 && loadSlot2.getRemainLoadNumber() > 0){ + // obj.getVar("canSaveDeitiesreBirth").setBool(0, true); + // } + // break; + } + } + } + else{ + if(sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE) > 0){ + local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE); + local countMax = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel); + local coolTime = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 1, skillLevel); + local mirrorofyataLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA); + if(mirrorofyataLevel > 0){ + countMax = countMax + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 1, mirrorofyataLevel); + coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 0, mirrorofyataLevel)) / 100; + } + // print("countMax = "+countMax); + // print("coolTime = "+coolTime); + obj.sq_AddSkillLoad(SKILL_THBYKK_LEAVETRACE, 66, countMax, coolTime); + } + } +} + +function onStartDungeon_Kunoichi(obj) +{ + if(!obj) return; + local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_LEAVETRACE); + if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_THBYKK_LEAVETRACE); + setSkillBonusRate_3Kunoichi_bykk(obj); +} + +function onStartMap_Kunoichi(obj) +{ + if(!obj || obj.getState() == STATE_DIE) return; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_FLAMETORNADO_SUCK)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_FLAMETORNADO_SUCK); + + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0){ + local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ + local activeObj = sq_GetCNRDObjectToActiveObject(object); + if(activeObj.getVar("markofFlameObj").get_obj_vector_size() < 1){ + local group = sq_GetGroup(activeObj); + local uniqueId = sq_GetUniqueId(activeObj); + createSkillPassive_Fighter_bykk(obj,activeObj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,0,0,0,0,0); + } + } + } + } +} + +function setSkillBonusRate_3Kunoichi_bykk(obj) +{ + local bonusRate = 1000; + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 2, sq_GetSkillLevel(obj, SKILL_THBYKK_FIREHIDE))) / 1000; + print("bonusRate0 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_CHAKRATRINITY, 0, sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY))) / 1000; + print("bonusRate1 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 14, sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK))) / 1000; + print("bonusRate2 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_MARKOFFLAME, 0, sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME))) / 1000; + print("bonusRate3 = "+bonusRate); + if(sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 8, sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA))) / 1000; + print("bonusRate4 = "+bonusRate); + obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); + // bonusRate = bonusRate.tofloat() / 1000.0; + //sq_SetSkillAttackBonus(obj, bonusRate); +} + + +function onEndCurrentAni_po_youbishenshou(obj) +{ + if(!obj) return; + sq_SendDestroyPacketPassiveObject(obj); +} + + +function onKeyFrameFlag_po_youbishenshou(obj, flagIndex) +{ + if(!obj) return; + print("zpos = "+sq_GetZPos(obj)); + local apdPath = "appendage/character/ap_common_buff.nut"; + switch(sq_GetZPos(obj)){ + case 1500: + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(10000); + local change_appendage = AddAppendage.sq_getChangeStatus("youbishenshou"); + if(!change_appendage){ + change_appendage = AddAppendage.sq_AddChangeStatus("youbishenshou",sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); + } + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, 50.0); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, 50.0); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED , false, 50.0); + } + break; + case 2000: + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++) { + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && obj.isEnemy(object)) { + local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); + if(sqrChr.getState() != STATE_DIE){ + if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, apdPath); + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); + AddAppendage.sq_SetValidTime(10000); + local change_appendage = AddAppendage.sq_getChangeStatus("youbishenshou"); + if(!change_appendage){ + change_appendage = AddAppendage.sq_AddChangeStatus("youbishenshou",sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); + } + if(change_appendage){ + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, 10.0); //物理暴擊率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, 10.0); //魔法暴擊率 + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, 10.0); //物理攻擊力 + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, 10.0); //魔法攻擊力 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, 10.0); //獨立物理攻擊力 + change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, 10.0); //獨立魔法攻擊力 + } + } + } + } + break; + } + return true; +} + +function proc_appendage_common_buff(appendage) +{ + if(!appendage) return; +} + + +//幻灭瞬杀 +function checkExecutableSkill_VanishingIllusion(obj) +{ + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(223); + if (isUse){ + local state = obj.getState(); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + if(state == 6 || state == 7) obj.sq_IntVectPush(1); + else obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(223, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + return false; +} + +function checkCommandEnable_VanishingIllusion(obj) +{ + if (!obj) return false; + return true; +} + +function onSetState_VanishingIllusion(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_StopMove(); + obj.sq_ZStop(); + switch(subState){ + case 0: + local isJump = obj.sq_GetVectorData(datas, 1); + if(isJump > 0) obj.sq_SetCurrentAnimation(353); + else obj.sq_SetCurrentAnimation(354); + obj.getVar("VanishingIllusionBool").setBool(0, false); + obj.getVar("VanishingIllusionSet").setInt(0, sq_GetXPos(obj)); + obj.getVar("VanishingIllusionSet").setInt(1, sq_GetYPos(obj)); + obj.getVar("VanishingIllusionSet").setInt(4, sq_GetZPos(obj)); + print("saveX = "+ obj.getVar("VanishingIllusionSet").getInt(0)); + print("saveY = "+ obj.getVar("VanishingIllusionSet").getInt(1)); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + break; + case 1: + obj.sq_SetCurrentAnimation(351); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 20000 / currentAni.getDelaySum(false); + print("speedRate = "+speedRate); + local speed = 30.0 * speedRate; + if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat()); + else sq_SetVelocity(obj, 0, -speed.tofloat()); + local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/move/moveshine_00.ani", 0, 0, 60); + local offsetZ = obj.getVar("VanishingIllusionSet").getInt(4); + if(offsetZ > 0){ + sq_SetCustomRotate(pooledObj, sq_ToRadian(-10.0)); + } + break; + case 2: + sq_setCurrentAxisPos(obj, 2, 0); + obj.sq_SetCurrentAnimation(352); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/moveend/moveend_back_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/moveend/moveend_front_00.ani", 0, 1, 1); + local totalDamage = obj.sq_GetBonusRateWithPassive(223, -1, 0, 1.0); + local hitMax = sq_GetIntData(obj, 223, 6); + local baseX = obj.getVar("VanishingIllusionSet").getInt(0); + local offSetX = sq_GetXPos(obj); + local rangeX = sq_Abs(baseX - offSetX), rangeY = 300; + if(rangeX == 0) rangeX = 600; + else if(rangeX > 600) rangeX = 1200; + local objectManager = obj.getObjectManager();//得到對象管理器 + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ + local object = objectManager.getCollisionObject(i);//得到控制類對象 + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_GetZPos(object) <= 500){ + if(sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){ + print("isFront = "+IsFrontOf(obj, object)); + print("rangeX = "+sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object))); + if(IsFrontOf(obj, object) == false && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX){ + local group = sq_GetGroup(object); + local uniqueId = sq_GetUniqueId(object); + //createSkillPassive_Theif_bykk(obj,object,646001,0,0,0,sq_GetDirection(obj),1,totalDamage,hitMax,group,uniqueId,0,0,0,0,0,0); + + obj.sq_StartWrite(); + obj.sq_WriteDword(1000); + obj.sq_WriteDword(1); + obj.sq_WriteDword(1); + obj.sq_WriteDword(totalDamage); + obj.sq_WriteDword(hitMax); + obj.sq_WriteDword(group); + obj.sq_WriteDword(uniqueId); + obj.sq_SendCreatePassiveObjectPacket(24343, 0, 0, 0, 0); + local apdPath = "appendage/ap_common_hold.nut"; + if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, apdPath)){ + local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true); + sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); + AddAppendage.sq_SetValidTime(200 * hitMax); + } + } + } + } + } + break; + case 3: + // sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); + obj.sq_SetCurrentAnimation(350); + local currentAni = obj.getCurrentAnimation(); + local speedRate = 20000 / currentAni.getDelaySum(false); + obj.setTimeEvent(1, 1000 / speedRate, 20, true); + obj.getVar("VanishingIllusionSet").setInt(2, sq_GetXPos(obj)); + obj.getVar("VanishingIllusionSet").setInt(3, sq_GetYPos(obj)); + break; + case 4: + obj.sq_SetCurrentAnimation(349); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + local bonusRate = 1.0; + local hitEndCount = obj.getVar("VanishingIllusionSet").getInt(5); + bonusRate = sq_GetLevelData(obj, 9, 9 + hitEndCount, sq_GetSkillLevel(obj, 9)).tofloat() / 100.0; + print("bonusRate = "+bonusRate); + local totalDamage = obj.sq_GetBonusRateWithPassive(223, -1, 1, bonusRate); + sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 77)); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + break; + } +} + +function onEndCurrentAni_VanishingIllusion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 0: + case 1: + case 3: + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState + 1); + obj.sq_AddSetStatePacket(223, STATE_PRIORITY_AUTO, true); + break; + case 2: + case 4: + obj.sq_IntVectClear(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); + break; + } +} + +function onProcCon_VanishingIllusion(obj) +{ + if(!obj) return; + if(obj.getVar("VanishingIllusionBool").getBool(0)){ + if(obj.getVar("VanishingIllusionBool").getBool(1) == false){ + obj.setSkillCommandEnable(9, true); + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ + obj.getVar("VanishingIllusionBool").setBool(1, true); + obj.sq_StartWrite(); + obj.sq_WriteDword(1); + sq_SendChangeSkillEffectPacket(obj, 223); + } + } + } +} + +function onProc_VanishingIllusion(obj) +{ + if(!obj) return; + local subState = obj.getSkillSubState(); + switch(subState){ + case 1: + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local stateTime = obj.sq_GetStateTimer(); + local vz = sq_GetUniformVelocity(obj.getVar("VanishingIllusionSet").getInt(4), 0, stateTime, delaySum / 2); + sq_setCurrentAxisPos(obj, 2, vz); + break; + } +} + +function onChangeSkillEffect_VanishingIllusion(obj, skillIndex, reciveData) +{ + if(!obj) return; + local set = reciveData.readDword(); + if(set == 1){ + obj.getVar("VanishingIllusionBool").setBool(1, true); + } +} + +function onKeyFrameFlag_VanishingIllusion(obj, flagIndex) +{ + if(!obj) return false; + switch(flagIndex){ + case 0: sq_flashScreen(obj,20,80,60,239, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 1: + obj.sq_PlaySound("VANISHING_ILLUSION_ADD"); + obj.sq_PlaySound("R_TF_HITEND"); + sq_SetMyShake(obj, 25, 200); + break; + case 2: + //`smoke back` 81 0 8 + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitend_back_00.ani", 81, 0, 8); + break; + case 3: + //`smoke front` 101 0 10 + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitend_front_00.ani", 81, 0, 8); + break; + case 4: + //`hitend start effect` -39 0 37 + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitendstart/hitendstart_front_00.ani", 0, 0, 0); + break; + case 5: + obj.sq_PlaySound("VANISHING_ILLUSION_DASH"); + sq_flashScreen(obj,0,200,0,174, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_SetMyShake(obj, 1, 750); + //`Enable To Input Hitend Skill` + local hitEndCount = obj.getVar("hitEndCount").getInt(0); + if(hitEndCount > 0){ + obj.getVar("VanishingIllusionSet").setInt(5, hitEndCount); + obj.getVar("VanishingIllusionBool").setBool(0, true); + obj.getVar("VanishingIllusionBool").setBool(1, false); + } + break; + case 6: + sq_flashScreen(obj,0,300,100,184, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + break; + case 7: + //`Enable To Execute HitEndSkill` + if(obj.getVar("VanishingIllusionBool").getBool(1)){ + obj.getVar("VanishingIllusionBool").setBool(1, false); + hitEndCountDecrease(obj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); + obj.sq_AddSetStatePacket(223, STATE_PRIORITY_AUTO, true); + } + break; + case 8: + obj.sq_PlaySound("TF_ASSASSINATION_FIN_01");//R_TF_VANISHING_ILLUSION + obj.sq_PlaySound("VANISHING_ILLUSION_CAST"); + break; + case 9: sq_flashScreen(obj,60,300,0,174, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; + case 10: sq_SetMyShake(obj, 25, 100); break; + } + return true; +} + +function onTimeEvent_VanishingIllusion(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return false; + switch(timeEventIndex){ + case 1: + local vx = sq_GetUniformVelocity(obj.getVar("VanishingIllusionSet").getInt(2), obj.getVar("VanishingIllusionSet").getInt(0), timeEventCount, 18); + local vy = sq_GetUniformVelocity(obj.getVar("VanishingIllusionSet").getInt(3), obj.getVar("VanishingIllusionSet").getInt(1), timeEventCount, 18); + sq_setCurrentAxisPos(obj, 0, vx);//设置当前x坐标 + sq_setCurrentAxisPos(obj, 1, vy); + if(timeEventCount == 20){ + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitendgroundsmoke_back_00.ani", 0, 0, 0); + sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitendgroundsmoke_front_00.ani", 0, 1, 1); + } + break; + } +} + +function onEndState_VanishingIllusion(obj, new_state) +{ + if(!obj) return; + if(new_state != 223){ + obj.getVar("VanishingIllusionBool").setBool(0, false); + obj.getVar("VanishingIllusionBool").setBool(1, false); + } +} + +function onAttack_VanishingIllusion(obj, damager, boundingBox, isStuck) +{ + if(!obj || isStuck) return; + if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; + sq_AddDrawOnlyAniFromParent(damager, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitendslash_00.ani", 0, 0, sq_GetHeightObject(damager) / 2); +} + + +function setCustomData_po_vanishingillusion(obj, receiveData) +{ + if(!obj) return; + local sub = receiveData.readDword(); + obj.getVar("custom").setInt(0, sub); + switch(sub){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local group = receiveData.readDword(); + local uniqueId = receiveData.readDword(); + local targetObj = sq_GetObject(obj, group, uniqueId); + if(targetObj && targetObj.getState() != STATE_DIE){ + obj.getVar("tar").clear_obj_vector(); + obj.getVar("tar").push_obj_vector(targetObj); + obj.getVar("custom").setInt(4, hitMax); + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + local aniNum = [355, 357, 360]; + local ani = sq_GetCustomAni(sqrChr, aniNum[sq_getRandom(0, 2)]); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + local currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + obj.setTimeEvent(2, delaySum / (hitMax + 1), hitMax, false); + } + break; + } +} + +function onEndCurrentAni_po_vanishingillusion(obj) +{ + if(!obj) return; +} + +function onTimeEvent_po_vanishingillusion(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 2: + local targetObj = obj.getVar("tar").get_obj_vector(0); + if(targetObj && targetObj.getState() != STATE_DIE){ + sq_SendHitObjectPacketWithNoStuck(obj,targetObj,0,0,sq_GetHeightObject(targetObj) / 2); + } + local hitMax = obj.getVar("custom").getInt(4); + if(timeEventCount >= hitMax) sq_SendDestroyPacketPassiveObject(obj); + break; + } +} + +function onProcCon_thief_chainsaw(obj) +{ + if (!obj) return false; + + local subState = obj.getVar("subState").get_vector(0); + local hitEndCount = obj.getVar("hitEndCount").getInt(0); + + if (subState == 28) + { + if (obj.isMyControlObject() && hitEndCount > 0) + { + sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); + + if (sq_IsEnterCommand(obj, E_SKILL_COMMAND) && obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_CHAINSAWHITEND, STATE_PRIORITY_IGNORE_FORCE, true); + obj.sq_PlaySound("R_TF_HITEND"); + } + } + } + else if(subState == 26){ + if(sq_GetSkillLevel(obj, 224) > 0){ + obj.sq_IntVectClear(); + obj.sq_IntVectPush(28); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(34, STATE_PRIORITY_IGNORE_FORCE, true); + } + } +} + +function onAfterSetState_thief_chainsaw(obj, state, datas, isResetTimer) +{ + if (!obj) return false; + + local subState = obj.sq_GetVectorData(datas, 0); + obj.getVar("subState").clear_vector(); + obj.getVar("subState").push_vector(subState); + // dofile("Plugins/8_thief.c"); + if(sq_GetSkillLevel(obj, 224) > 0){ + switch(subState){ + case 28: + local currentAni = obj.getCurrentAnimation(); + local speedRate = 8000 / currentAni.getDelaySum(0, 0); + local totalDamage = obj.sq_GetBonusRateWithPassive(41, -1, 0, 1.0); + local totalDamage2 = obj.sq_GetBonusRateWithPassive(41, -1, 2, 1.0); + local skillLevel = sq_GetSkillLevel(obj, 41); + local hitMax = sq_GetLevelData(obj, 41, 1, skillLevel); + local hitMax2 = sq_GetLevelData(obj, 41, 3, skillLevel); + //createSkillPassive_Theif_bykk(obj,obj,646002,0,0,0,sq_GetDirection(obj),1,totalDamage,hitMax,speedRate,0,0,0,0,0,0,0); + //createSkillPassive_Theif_bykk(obj,obj,646002,0,0,0,sq_GetDirection(obj),2,totalDamage2,hitMax2,speedRate,0,0,0,0,0,0,0); + print("test = "+ currentAni.getDelaySum(0, 0)); + print("speedRate = "+ speedRate); + break; + } + } +} + +function setCustomData_po_chainsawexblade_bykk(obj, receiveData) +{ + if(!obj) return; + local sub = receiveData.readDword(); + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); + sq_moveWithParent(sqrChr, obj); + obj.getVar("custom").setInt(0, sub); + switch(sub){ + case 1: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_GetCustomAni(sqrChr, 116); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(255, 255, 255, 156); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local delay = delaySum / (hitMax + 1); + print("delay = "+delay+",,hitMax = "+hitMax); + //createSkillPassive_Theif_bykk(sqrChr,sqrChr,646002,50,0,70,sq_GetDirection(obj),3,totalDamage,hitMax,delay,speedRate,0,0,0,0,0,0); + break; + case 2: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local speedRate = receiveData.readDword(); + local ani = sq_GetCustomAni(sqrChr, 117); + sq_Rewind(ani); + obj.setCurrentAnimation(ani); + local currentAni = obj.getCurrentAnimation(); + currentAni.setRGBA(255, 255, 255, 156); + currentAni.setSpeedRate(speedRate.tofloat()); + currentAni = obj.getCurrentAnimation(); + local delaySum = currentAni.getDelaySum(false); + local delay = delaySum / (hitMax + 1); + print("delay = "+delay+",,hitMax = "+hitMax); + //createSkillPassive_Theif_bykk(sqrChr,sqrChr,646002,75,0,55,sq_GetDirection(obj),4,totalDamage,hitMax,delay,speedRate,0,0,0,0,0,0); + break; + case 3: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local delay = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, hitMax); + local aniPath = "passiveobject/6_thief_bykk/rogue_bykk/animation/chainsawex/rollingweaponeffect0.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.setSpeedRate(speedRate.tofloat()); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, delay, -1, true); + break; + case 4: + local totalDamage = receiveData.readDword(); + local hitMax = receiveData.readDword(); + local delay = receiveData.readDword(); + local speedRate = receiveData.readDword(); + obj.getVar("custom").setInt(1, hitMax); + local aniPath = "passiveobject/6_thief_bykk/rogue_bykk/animation/chainsawex/rollingweaponeffect0.ani"; + local ani = sq_CreateAnimation("", aniPath); + obj.setCurrentAnimation(ani); + // local currentAni = obj.getCurrentAnimation(); + // currentAni.setSpeedRate(speedRate.tofloat()); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); + obj.setTimeEvent(1, delay, -1, true); + break; + } +} + +function onEndCurrentAni_po_chainsawexblade_bykk(obj) +{ + if(!obj) return; + local sub = obj.getVar("custom").getInt(0); + if(sub < 3) sq_SendDestroyPacketPassiveObject(obj); +} + +function onTimeEvent_po_chainsawexblade_bykk(obj, timeEventIndex, timeEventCount) +{ + if(!obj) return; + switch(timeEventIndex){ + case 1: + print("reset"+timeEventCount); + obj.resetHitObjectList(); + if(timeEventCount >= obj.getVar("custom").getInt(1)) sq_SendDestroyPacketPassiveObject(obj); + break; + } +} diff --git a/user/116.205.165.25/config b/user/116.205.165.25/config new file mode 100644 index 0000000..c028597 --- /dev/null +++ b/user/116.205.165.25/config @@ -0,0 +1,51 @@ +1_atgunner_1.c +1_atgunner_2.c +1_atgunner_3.c +1_atgunner_4.c +1_atgunner_5.c +1_atgunner_6.c +2_atpriest_1.c +2_atpriest_2.c +2_atpriest_3.c +2_atpriest_4.c +2_atpriest_5.c +2_atpriest_6.c +3_atswordman_1.c +3_atswordman_2.c +3_atswordman_3.c +3_atswordman_4.c +3_atswordman_5.c +3_atswordman_6.c +3_atswordman_7.c +3_atswordman_8.c +4_fighter_1.c +4_fighter_2.c +4_fighter_3.c +5_gunner_1.c +5_gunner_2.c +5_gunner_3.c +6_mage_1.c +6_mage_10.c +6_mage_11.c +6_mage_12.c +6_mage_13.c +6_mage_2.c +6_mage_3.c +6_mage_4.c +6_mage_5.c +6_mage_6.c +6_mage_7.c +6_mage_8.c +6_mage_9.c +7_swordman_1.c +7_swordman_2.c +7_swordman_3.c +8_thief_1.c +8_thief_2.c +8_thief_3.c +8_thief_4.c +8_thief_5.c +8_thief_6.c +25_priest_1.c +25_priest_2.c +25_priest_3.c \ No newline at end of file diff --git a/user/43.249.195.64/a.nut b/user/43.249.195.64/a.nut new file mode 100644 index 0000000..e69de29 diff --git a/user/43.249.195.64/config b/user/43.249.195.64/config new file mode 100644 index 0000000..37d6154 --- /dev/null +++ b/user/43.249.195.64/config @@ -0,0 +1 @@ +a.nut \ No newline at end of file