This commit is contained in:
2024-03-18 21:37:40 +08:00
commit c4aef8f3a3
313 changed files with 74071 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,203 @@
// 桧够擎 湍?模蝶缣 桡朝 牖热 蝶觼董?煎虏 偃嫦?贼怃 ?蹂? 蝶鉴偃嫦缣 ?蹂? 鼻热,enum 跷陛高击 摹树?朝 睡碟殓栖棻.
// 湍?模蝶缣 毡朝 高击 桧够缣 厥戏卫贼 寰腌栖棻..
// 横渐螳 state 妇湿 睡碟殓栖棻
STATE_PRIEST_TEST <- 60 // 蛤?滓? 错[鬼?]
STATE_SPINCUTTER <- 61 // 蝶?醴搅(横渐螳)
STATE_PRIEST_SCYTHE_MASTERY <- 62 // 横渐螳 : 饵桧萄 葆蝶搅葬
STATE_HEDGEHOG <- 63 // ?虽?斜
STATE_FASTMOVE <- 64 // 横渐螳 : 绪艇桧翕
STATE_RIPPER <- 65 // 横渐螳 : 葬?
STATE_EARTHQUAKE <- 66 // 横渐螳 : 横蝶蠡桧觼
STATE_AVENGER_AWAKENING <- 67 // 横渐螳 : 陕撩渗褐
STATE_EXECUTION <- 68 // 横渐螳 : 籀?
STATE_AWAKENING_TURN_OFF <- 69 // 横渐螳 : 陕撩 - 给嬴螃晦
STATE_HIGH_SPEED_SPLASH <- 70 // 坚楼漆晦
STATE_POWER_OF_DARKNESS <- 71 // 横菸暧 掏栋
STATE_FALLING_SOUL <- 72 // 跷块?朝 舱?
STATE_PANDEMONIUM_EX <- 73 // 横渐螳 ?撩 : 犒葆瞪
STATE_EX_DISASTER <- 74 // EX 蝶鉴 : 营懈
// 横渐螳 skill妇湿 睡碟殓栖棻.
SKILL_CHANGE_HP_TO_MP <- 10 // 坚鳝暧 ?翮
SKILL_SPINCUTTER <- 113 // 蝶?醴搅 (横渐螳)
SKILL_SCYTHE_MASTERY <- 114 // 横渐螳 : 饵桧萄 葆蝶搅葬
SKILL_FASTMOVE <- 115 // 坚楼桧翕(横渐螳)
SKILL_HEDGEHOG <- 116 // ?虽?斜
SKILL_RIPPER <- 117 // 阗横嫦晦晦
SKILL_EARTH_QUAKE <- 118 // 横蝶蠡桧觼
SKILL_AVENGER_AWAKENING <- 119 // 横渐螳 陕撩
SKILL_EXECUTION <- 120 // 籀?
SKILL_HEARTHINGS <- 121 // ?羶
SKILL_NIGHTMARE <- 122 // 陕撩 ?卫粽学跦(48溯涟)
SKILL_DEVILSTRIKE <- 123 // 等网蝶?塭桧醴
SKILL_HIGH_SPEED_SLASH <- 124 // 坚楼漆晦
SKILL_POWER_OF_DARKNESS <- 125 // 樵菸暧 掏栋
SKILL_CANCEL_FASTMOVE <- 127 // 警蜗 坚楼桧翕
SKILL_CANCEL_HIGH_SPEED_SLASH <- 128 // 警蜗 坚楼漆晦
SKILL_CANCEL_EARTH_QUAKE <- 129 // 警蜗 虽煆霞
SKILL_CANCEL_HEDGEHOG <- 130 // 警蜗 尔?暧 陛卫(?虽?斜)
SKILL_FALLING_SOUL <- 131 // 跷块?朝 舱?
SKILL_CANCEL_SPINCUTTER <- 132 // 警蜗 蝶?醴搅
SKILL_PANDEMONIUM_EX <- 133 // 犒葆瞪
SKILL_EX_DISASTER <- 134 // ex蝶鉴 - 营懈
SKILL_FASTMOVE_EX <- 164 // ex蝶鉴 - 坚楼桧翕 鬼?
SKILL_RIPPER_EX <- 165 // ex蝶鉴 - 葬?鬼?
// 横渐螳 animation 妇湿 睡碟殓栖棻..
CUSTOM_ANI_SPINCUTTER1 <- 79 // 蝶?醴搅 THROW
CUSTOM_ANI_SPINCUTTER2 <- 80 // 蝶?醴搅 RE CALL
CUSTOM_ANI_SPINCUTTER3 <- 81 // 蝶?醴搅 ARRIVAL
CUSTOM_ANI_FASTMOVE1 <- 82 // 坚楼桧翕 卫翕
CUSTOM_ANI_FASTMOVE2 <- 83 // 坚楼桧翕 瑞?
CUSTOM_ANI_FASTMOVE3 <- 84 // 坚楼桧翕 霞?
CUSTOM_ANI_FASTMOVE4 <- 85 // 坚楼桧翕 谦猿
// 陕撩 横渐螳 渗褐
CUSTOM_ANI_AVENGER_AWAKENING1 <- 86 // 陕撩 横渐螳
CUSTOM_ANI_AVENGER_AWAKENING2 <- 87 // 陕撩 横渐螳
CUSTOM_ANI_AVENGER_AWAKENING3 <- 88 // 陕撩 横渐螳
CUSTOM_ANI_AVENGER_AWAKENING4 <- 89 // 陕撩 横渐螳
CUSTOM_ANI_HEDGEHOG <- 90 // ?虽?斜
CUSTOM_ANI_RIPPER <- 91 // 葬?
CUSTOM_ANI_EARTH_QUAKE <- 92 // 横蝶蠡桧觼
CUSTOM_ANI_EXC_GRAB <- 93 // 栉蝶听暮 濩晦
CUSTOM_ANI_EXC_GRAB_EX <- 94 // 栉蝶听暮 庵煎 湍虽晦
CUSTOM_ANI_EXC_TURNOVER <- 95 // 栉蝶听暮 庵煎 湍虽晦
CUSTOM_ANI_EXC_RUN <- 96 // 栉蝶听暮 殖葬晦
CUSTOM_ANI_EXC_LAST <- 97 // 栉蝶听暮 虞颤
CUSTOM_ANI_EXC_FAILED <- 98 // 栉蝶听暮 褒?
CUSTOM_ANI_AWAKENING_TURN_OFF <- 99 // 陕撩-渗褐 ?薯
CUSTOM_ANI_HIGH_SPEED_READY <- 100 // 坚楼 漆晦
CUSTOM_ANI_HIGH_SPEED_ATTACK_1 <- 101 // 坚楼 漆晦
CUSTOM_ANI_HIGH_SPEED_ATTACK_2 <- 102 // 坚楼 漆晦
CUSTOM_ANI_HIGH_SPEED_ATTACK_3 <- 103 // 坚楼 漆晦
CUSTOM_ANI_HIGH_SPEED_ATTACK_4 <- 104 // 坚楼 漆晦
CUSTOM_ANI_HIGH_SPEED_LAST <- 105 // 坚楼 漆晦
CUSTOM_ANI_AVENGER_ATTACK_1 <- 106 // 横渐荡 - ?颤1
CUSTOM_ANI_AVENGER_ATTACK_2 <- 107 // 横渐荡 - ?颤2
CUSTOM_ANI_AVENGER_ATTACK_3 <- 108 // 横渐荡 - ?颤3
CUSTOM_ANI_AVENGER_ATTACK_4_SCYTHE <- 109 // 横渐荡 ?颤 4 (陷 帼瞪)
CUSTOM_ANI_AVENGER_ATTACK_4_ROSARY <- 110 // 横渐荡 ?颤 4 (腻舆 帼瞪)
CUSTOM_ANI_POWER_OF_DARKNESS_START <- 111 // 横菸暧 掏栋
CUSTOM_ANI_POWER_OF_DARKNESS_STAY <- 112 // 横菸暧 掏栋
CUSTOM_ANI_POWER_OF_DARKNESS_END <- 113 // 横菸暧 掏栋
CUSTOM_ANI_AWAKENING_TURN_OFF_2 <- 114 // 陕撩-渗褐 ?薯2
CUSTOM_ANI_PANDEMONIUM_START <- 115 // 犒葆瞪
CUSTOM_ANI_PANDEMONIUM_END <- 116 // 犒葆瞪
CUSTOM_ANI_EX_DISASTER_1 <- 117 // EX蝶鉴 - 营懈1
CUSTOM_ANI_EX_DISASTER_2 <- 118 // EX蝶鉴 - 营懈1
CUSTOM_ANI_EX_DISASTER_3 <- 119 // EX蝶鉴 - 营懈1
CUSTOM_ANI_EX_DISASTER_4 <- 120 // EX蝶鉴 - 营懈1
CUSTOM_ANI_EX_DISASTER_5 <- 121 // EX蝶鉴 - 营懈1
// 横渐螳 atk?橾 妇湿 睡碟殓栖棻.
CUSTOM_ATTACKINFO_SPINCUTTER <- 70 // 蝶?醴搅 蟾晦颤
CUSTOM_ATTACKINFO_FASTMOVE <- 71 // 坚楼桧翕
CUSTOM_ATTACKINFO_HEDGEHOG <- 72 // ?虽?斜
CUSTOM_ATTACKINFO_RIPPER <- 73 // 葬?
CUSTOM_ATTACKINFO_EXCUTION_1 <- 74 // 濩晦
CUSTOM_ATTACKINFO_EXCUTION_2 <- 75 // 濩晦 ?嫦
CUSTOM_ATTACKINFO_EXCUTION_3 <- 76 // 给溥怃 镒晦
CUSTOM_ATTACKINFO_EXCUTION_4 <- 77 // 殖葬晦
CUSTOM_ATTACKINFO_EXCUTION_5 <- 78 // 夥款缣 援脑晦
CUSTOM_ATTACKINFO_EXCUTION_6 <- 79 // 虞颤
CUSTOM_ATTACKINFO_AW_ATTACK1 <- 80 // 陕撩 - 渗褐 晦狱奢问1 80
CUSTOM_ATTACKINFO_AW_ATTACK2 <- 81 // 陕撩 - 渗褐 晦狱奢问2 81
CUSTOM_ATTACKINFO_AW_ATTACK3 <- 82 // 陕撩 - 渗褐 晦狱奢问3 82
CUSTOM_ATTACKINFO_AW_ATTACK4 <- 83 // 陕撩 - 渗褐 晦狱奢问4 83
CUSTOM_ATTACKINFO_AW_DASHATTACK <- 84 // 陕撩 - 渗褐 晦狱奢问4 84
CUSTOM_ATTACKINFO_RIPPER_EXPLOSION <-85
CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH <-86 // 坚楼漆晦
CUSTOM_ATTACKINFO_AVENGER_ATTACK_1 <-87
CUSTOM_ATTACKINFO_AVENGER_ATTACK_2 <-88
CUSTOM_ATTACKINFO_AVENGER_ATTACK_3 <-89
CUSTOM_ATTACKINFO_AVENGER_ATTACK_4 <-90
CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH_LAST <-91 // 坚楼漆晦
CUSTOM_ATTACKINFO_POWER_OF_DARKNESS <- 92
CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2 <-93 // 横渐荡 - ?颤 虞颤镒晦 横鸥
CUSTOM_ATTACKINFO_AVENGER_ATTACK_4_2 <-94 // 横渐荡 - ?颤 虞颤镒晦 横鸥
CUSTOM_ATTACKINFO_DISASTER <-95 // 横渐荡 ex蝶鉴 营懈
CUSTOM_ATTACKINFO_PANDEMONIUM_EX_ON_START <- 96 // 横渐螳 犒葆瞪 罗颤 奢问
CUSTOM_ATTACKINFO_AWAKENING_PANDEMONIUM_START <- 97 // 横渐螳 犒葆瞪 罗颤 奢问 (陕撩)
E_ATTACK_COMMAND <- 0
E_JUMP_COMMAND <- 1
E_DASH_COMMANDS_1 <- 2
E_DASH_COMMANDS_2 <- 3
E_CREATURE_COMMAND <- 4
E_BUFF_COMMAND <- 5
E_SKILL_COMMAND <- 6
E_COMMAND_COUNT <- 7
// 横渐荡 - 等网蝶?塭桧醴(?卫粽蝶鉴) 蝶鹧鸥 等桧颤 ENUM INDEX
SI_DS_MAX_DEVIL_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂
// 桧? 等网蝶?塭桧醴 陕 蝶鉴涤 啪桧虽 离朝 晔
SI_DS_ATTACK <- 1 // (?颤)
SI_DS_JUMP_ATTACK <- 2 // (薄?奢问)
SI_DS_DASH_ATTACK <- 3 // (渠卫奢问)
SI_DS_DG_ATTACK <- 4 // (渗褐 ?颤奢问)
SI_DS_DG_DASH_ATTACK <- 5 // (渗褐 渠卫奢问)
SI_DS_DG_JUMP_ATTACK <- 6 // (渗褐 薄?奢问)
SI_DS_HIGH_SPEED_SLASH <- 7 // (坚楼漆晦)
SI_DS_GRASP_HANDOFANGER <- 8 // GraspHandOfAnger // (碟喻暧 遗面锅)
SI_DS_CHANGE_HPTOMP <- 9 // ChangeHpToMp (坚鳝暧 ?翮)
SI_DS_EARTH_QUAKE <- 10 // EarthQuake (横蝶蠡桧觼)
SI_DS_SPINCUTTER <- 11 // (蝶?醴搅)
SI_DS_HEDGEHOG <- 12 // Hedgehog (?虽?斜)
SI_DS_FASTMOVE <- 13 // (坚楼桧翕)
SI_DS_RIPPER <- 14 // (葬?)
SI_DS_EXECUTION <- 15 // (籀?)
SI_DS_DARK <- 16 // (横菸暧 掏栋)
SI_DS_COOLTIME <- 17 // 蛤?? 藤颤歜
SI_DS_ANTIAIR_UPPER <- 18 // 奢溜颤
SI_DS_SMASHER <- 19// 蝶衙敷
SI_DS_SLOW_HEAL <- 20 // 蜗煎办?
SI_DS_LUCKY_STRAIGHT <- 21 // 楣郦 蝶?溯桧?
SI_DS_STRIKING <- 22 // 蝶?塭桧缰
SI_DS_CURE <- 23 // 听横
SI_DS_SKILL_SECOND_UPPER <- 24 // 撮钟萄横?
SI_DS_BLESS <- 25 // 虽?暧 蹴犒
SI_DS_QUAKE_AREA <- 26 // 钒瑰跷
SI_DS_RISING_AREA <- 27 // 蝓茧霞
SI_DS_DISASTER <- 28 // EX蝶鉴 - 营懈
SI_DS_PANDEMONI <- 29 // EX蝶鉴 - 犒葆瞪
//PandemoniumEx
// 横渐荡 - 陕撩 横?蛤虽 sq_var 漱搅 樯策蝶 殓栖棻..
I_AVENGER_AWAKENING_TIME <- 0 // 渗褐 卫除
I_DOOMS_HP <- 1 // 菸蝶陛蛤树 HP
I_AVENGER_AWAKENING_VALID <- 2
// 葬橡 寨葬萄 ?楚斜煎 噩 詹帼殓栖棻.. 谒 桧楛冲桧 腑傍贼..
// 横渐荡陛 state_stand鼻鹧缣怃虏 渗褐?薯陛 肾横捡 ?栖棻
// 斜楚怃 valid陛 false陛 胀棻坚 ?怃 埠潍 渗褐?薯 腑棻坚 除舆?怃朝 寰腌栖棻 罹楝寞彻击 当陕?鱼 念娄 桧 寞彻桧 陛潍 梃莠?剪 伪嬴怃 殓栖棻..
// 该 噙桧朝 够紫 桡戏栖梱

View File

@@ -0,0 +1,434 @@
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_AvengerAttack(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
obj.getVar().clear_vector();
obj.getVar().push_vector(0); // 0廓樯策蝶
obj.getVar().push_vector(0); // 1廓樯策蝶
obj.getVar().push_vector(0);// 2廓樯策蝶
obj.getVar().push_vector(0);// 3廓樯策蝶
obj.getVar().push_vector(0);// 4廓樯策蝶
if(obj.getAttackIndex() == 0)
{
obj.setAttackXVelocity(100);
obj.setAttackXAccel(-300);
obj.setAttackXVelocityFast(200);
obj.setAttackXAccelFast(-300);
}
if(obj.getAttackIndex() == 1) { //
obj.setAttackXVelocity(50);
obj.setAttackXAccel(-300);
obj.setAttackXVelocityFast(50);
obj.setAttackXAccelFast(-300);
}
if(obj.getAttackIndex() == 2) { //
obj.setAttackXVelocity(20);
obj.setAttackXAccel(-300);
obj.setAttackXVelocityFast(50);
obj.setAttackXAccelFast(-30);
}
if(obj.getAttackIndex() == 3)
{ //
}
return;
}
obj.sq_stopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local dir = sq_GetDirection(obj);
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.setAttackXVelocity(0);
obj.setAttackXAccel(0);
obj.setAttackXVelocityFast(0);
obj.setAttackXAccelFast(0);
}
function onAfterSetState_AvengerAttack(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
return;
}
print(" onAfterSetState_AvengerAttack obj.getAttackIndex():" + obj.getAttackIndex());
// Awakening.skl 蝶鉴溯涟 才桧绾
//SL_PERFECT_CHANGE_HP <- 0 // (0) 谏瞪 渗褐羹 HP
//SL_CHANGE_TIME <- 1 // (1) 虽楼卫除
//SL_DEF_INC <- 2 // (2) 寞横溘隶陛(+)
//SL_ATK_SPD <- 3 // (3) 奢问楼紫(+)
//SL_MOV_SPD <- 4 // (4) 桧翕楼紫(+)
//SL_1_HIT_MAGIC_ATK <- 5 // (5) 1颤 葆彻奢问溘(+)
//SL_2_HIT_MAGIC_ATK <- 6 // (6) 2颤 葆彻奢问溘(+)
//SL_3_HIT_MAGIC_ATK <- 7 // (7) 3颤 葆彻奢问溘(+)
//SL_DASH_MAGIC_ATK <- 8 // (8) 渠卫 葆彻奢问溘(+)
//SL_JUMP_MAGIC_ATK <- 9 // (9) C(薄?) 葆彻奢问溘(+)
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local dir = sq_GetDirection(obj);
local power = 0;
if(obj.getAttackIndex() == 0) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼..
local v = 5;
local dstX = sq_GetDistancePos(posX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, posY)) {
obj.setCurrentPos(dstX, posY, posZ);
}
obj.setAttackXVelocity(50);
obj.setAttackXAccel(-300);
obj.setAttackXVelocityFast(100);
obj.setAttackXAccelFast(-300);
//print(" sqr_CreatePooledObject 4_dust_normal.ani");
sqr_CreatePooledObject(obj, "Effect/Animation/Awakening/attack/attack1/4_dust_normal.ani", posX, posY + 1, posZ, dir);
}
if(obj.getAttackIndex() == 1) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼..
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
//print(" sqr_CreatePooledObject 4_dust_normal_0.ani");
//print(" sqr_CreatePooledObject 4_dust_normal_1.ani");
sqr_CreatePooledObject(obj, "Effect/Animation/Awakening/attack/attack2/4_dust_normal_0.ani", posX, posY + 1, posZ, dir);
sqr_CreatePooledObject(obj, "Effect/Animation/Awakening/attack/attack2/4_dust_normal_1.ani", posX, posY + 1, posZ, dir);
}
if(obj.getAttackIndex() == 2) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼..
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
}
if(obj.getAttackIndex() == 3) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼..
obj.getVar().push_vector(0);
obj.getVar().push_vector(0); // 2廓 ?楚斜 醱瞪酝樯虽 嬴棋虽 ?钦?朝 ?楚斜
obj.getVar().push_vector(0);
}
if(obj.getAttackIndex() == 4) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼..
obj.getVar().push_vector(0);
obj.getVar().push_vector(0); // 2廓 ?楚斜 醱瞪酝樯虽 嬴棋虽 ?钦?朝 ?楚斜
obj.getVar().push_vector(0);
}
// 陕撩?卫粽 : 学跦(48溯涟)
// 1. 陕撩 渗褐 翕寰 陕撩晦 奢问溘桧 隶陛?
// 2. 等网 蝶?塭桧醴暧 学葆 啪桧虽 离朝榆 隶陛.
// 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻..
if(obj.getAttackIndex() < 3) {
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AW_ATTACK1 + obj.getAttackIndex());
//
local rate = obj.sq_getPassiveAttackRate(0, state, 1.0);
//print("sq_getPassiveAttackRate:" + rate.tofloat());
power = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_1_HIT_MAGIC_ATK + obj.getAttackIndex(),1.0);
//local before_power = obj.sq_getSkillPower(SKILL_AVENGER_AWAKENING, SL_1_HIT_MAGIC_ATK + obj.getAttackIndex());
//print("before CUSTOM_ATTACKINFO_AW_ATTACK1:" + before_power);
//print("CUSTOM_ATTACKINFO_AW_ATTACK1:" + power);
}
if(obj.getAttackIndex() >= 4)
{ // 横渐荡 - 菸蝶陛蛤树 虞颤 奢问溘 醱瞪缣 评塭 离桧蒂 尔殓栖棻..
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AW_ATTACK4);
//power = obj.sq_getSkillPower(SKILL_AVENGER_AWAKENING, SL_JUMP_MAGIC_ATK);
//power = obj.sq_getPowerWithPassive(SKILL_AVENGER_AWAKENING,SL_1_HIT_MAGIC_ATK + obj.getAttackIndex(),-1,1.0);
//print("CUSTOM_ATTACKINFO_AW_ATTACK4:" + power);
///////////////////////////////////
local chargeTime = sq_GetIntData(obj, SKILL_AVENGER_AWAKENING, 0); //薄? 葆彻 奢问 譆渠 醱瞪卫除
//local level = sq_GetSkillLevel(obj, SKILL_AVENGER_AWAKENING);
//local AtkAdd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_JUMP_MAGIC_ATK, level);
//local fullchargeAtkAdd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_JUMP_FULLCHARGE_MAGIC_ATK, level);
//local offset = fullchargeAtkAdd - AtkAdd; // ?醱瞪 奢问溘娄 晦狱 奢问溘 饵桧暧 offset高击 掘?鱼棻..
//local stateTimer = obj.getStateTimer();
local basePower = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_JUMP_MAGIC_ATK,1.0);
local maxPower = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_JUMP_FULLCHARGE_MAGIC_ATK,1.0);
local stateTimer = obj.sq_getVectorData(datas, 1); // 罗廓箪 substate殓栖棻..
local resultPower = sq_GetUniformVelocity(basePower, maxPower, stateTimer, chargeTime); // 醱瞪高
// ?姜溯涟 桧鼻橾唳办 鼠亵勒 裟蝶 ?表
if(obj.isOverSkillLevel(SKILL_AVENGER_AWAKENING, 3))
resultPower = maxPower;
power = resultPower;
//print("stateTimer:" + stateTimer + " chargeTime:" + chargeTime);
print("basePower:" + basePower + " maxPower:" + maxPower + " resultPower:" + resultPower + " timer:" + stateTimer);
//////////////////////////////////
local awakening_var = obj.getVar("awakening");
awakening_var.get_ct_vector(0).Reset();
awakening_var.get_ct_vector(0).Start(0,0);
local cooltime = getLoadSkillEnableTime(obj, SKILL_AVENGER_AWAKENING, 1); // 蛤?? 藤颤歜
awakening_var.set_vector(0, cooltime); // 藤颤歜撮?
}
obj.sq_setCurrentAttackBonusRate(power);
}
// prepareDraw ?热 殓栖棻..
function prepareDraw_AvengerAttack(obj)
{
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_AvengerAttack(obj)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
return;
}
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(obj.getAttackIndex() == 2) {
// 撮廓箪 ?纂朝 楼紫蒂 觊 绪脑啪
if(!obj.getVar().get_vector(0)) {
if(frmIndex >= 0 && frmIndex < 5) {
local pA = obj.sq_getCurrentAni();
obj.sq_setAnimationSpeedRate(pA, 160.0);
obj.getVar().set_vector(0, 1);
}
}
if(!obj.getVar().get_vector(1)) {
if(frmIndex >= 5) {
local pA = obj.sq_getCurrentAni();
obj.sq_setAnimationSpeedRate(pA, 100.0);
obj.getVar().set_vector(1, 1);
}
}
if(frmIndex >= 6) {
local dustFlag = obj.getVar().get_vector(3);
if(!dustFlag) {
obj.getVar().set_vector(3, 1);
//print("size_vector:" + obj.getVar().size_vector());
//local dustN = obj.getVar().GetAnimationMap("15_dust_normal","Character/Priest/Effect/Animation/Awakening/attack/attack3/15_dust_normal.ani");
//pAni.addLayerAnimation(1, dustN, false);
// 奢问 试虽 当撩
local dust_n_Ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/attack/attack3/15_dust_normal.ani");
local dustObj = obj.sq_createCNRDPooledObject(dust_n_Ani, true);
dustObj.setCurrentDirection(obj.getDirection());
dustObj.setCurrentPos(posX, posY + 2, 0);
obj.sq_AddObject(dustObj);
//print("dustFlag:" + dustFlag);
}
}
}
if(obj.getAttackIndex() == 3) { // 葆虽虞 顶溥镒晦 醱瞪 酝
// 撮廓箪 ?纂朝 楼紫蒂 觊 绪脑啪
local chargeTime = sq_GetIntData(obj, SKILL_AVENGER_AWAKENING, 0); //薄? 葆彻 奢问 譆渠 醱瞪卫除
local stateTimer = obj.sq_getStateTimer();
if(chargeTime <= stateTimer && !obj.getVar().get_vector(0)) {
print("\n fullCharge");
local pfullChargeAni = obj.getVar().GetAnimationMap("Attack4_2", "Character/Priest/Animation/AvengerAwakening/Attack4_2.ani");
if(pfullChargeAni) {
obj.setCurrentAnimation(pfullChargeAni);
}
obj.getVar().set_vector(0, 1);
}
}
if(obj.getAttackIndex() == 4) { // 葆虽虞 顶溥镒晦 奢问
// 撮廓箪 ?纂朝 楼紫蒂 觊 绪脑啪
if(!obj.getVar().get_vector(1)) {
local pA = obj.sq_getCurrentAni();
obj.sq_setAnimationSpeedRate(pA, 100.0);
obj.getVar().set_vector(1, 1);
}
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_AvengerAttack(obj)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
if(obj.getAttackIndex() == 2) // 虏擒 3颤 箪塭贼..
{
// (梦姜谏噢 ?棚)
if(frmIndex >= 5) // 6廓 ?溯歜 桧鼻桧塭贼.
{
if(obj.getVar().get_vector(2) == 0)
{ // 2廓 ?楚斜陛 0桧塭贼
obj.getVar().set_vector(2, 1); // 2廓?楚斜蒂 1煎 夥羞棻 谒傍?贼 词 ?廓虏 桧寰戏煎 菟横谛捡?晦阳侥缣..
//print("CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2:" + CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2); // 镒晦 奢问击 嫔?
}
}
}
// 锰?朝匙击 礼棻..
if(obj.getAttackIndex() == 3) // 虏擒 4颤 箪塭贼..
{
if(frmIndex >= 7) {
if(obj.getVar().get_vector(3) == 0)
{ // 3廓 ?楚斜陛 0桧塭贼
// 横渐荡 ?虞颤 2廓箪 atk?橾击 撮??晦 嫔?桧棻.. 镒晦奢问戏煎 夥绂晦 嫔?怃殓栖棻..
//print("obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AVENGER_ATTACK_4_2);");
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AVENGER_ATTACK_4_2);
obj.getVar().set_vector(3, 1); // 2廓?楚斜蒂 1煎 夥羞棻 谒傍?贼 词 ?廓虏 桧寰戏煎 菟横谛捡?晦阳侥缣..
}
}
if(frmIndex >= 8) // 8廓 ?溯歜 桧鼻桧塭贼.
{
if(obj.getVar().get_vector(2) == 0)
{ // 2廓 ?楚斜陛 0桧塭贼
obj.sq_setShake(obj, 1, 200); // 虽霞击 橾戏监棻..
obj.getVar().set_vector(2, 1); // 2廓?楚斜蒂 1煎 夥羞棻 谒傍?贼 词 ?廓虏 桧寰戏煎 菟横谛捡?晦阳侥缣..
}
}
}
return;
}
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local substate = obj.getSkillSubState();
//if (obj.getAttackIndex() < obj.sq_getAttackCancelStartFrameSize() &&
//frmIndex >= obj.sq_getAttackCancelStartFrame(obj.getAttackIndex()) &&
//sq_IsEnterCommand(obj, 1)
//)
if(obj.getAttackIndex() == 2) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼..
if(frmIndex >= 5) {
if(obj.getVar().get_vector(2) == 0) {
obj.getVar().set_vector(2, 1);
obj.sq_setShake(obj, 2, 500);
}
}
}
if(obj.getAttackIndex() < 3) {
sq_SetKeyxEnable(obj, 1, true);
local bCommand = sq_IsEnterCommand(obj, 1);
if (bCommand)
{
local var_awakening = obj.getVar("awakening");
local t = var_awakening.get_ct_vector(0).Get();
//print("var_awakening.get_ct_vector(0).Get():" + t + "var_awakening.get_vector(0):" + var_awakening.get_vector(0));
if(var_awakening.get_ct_vector(0).Get() > var_awakening.get_vector(0)) { // 濠羹 藤颤歜 羹觼
obj.sq_IntVectClear();
obj.sq_IntVectPush(3); // substate撮?
obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true);
}
else { // 藤颤歜桧 测 腑棻..
obj.startCantUseSkillWarning();
if (obj.isMessage()) {
sq_AddMessage(414); // 414>藤颤歜殓栖棻.
}
}
return;
}
}
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(obj.getAttackIndex() == 3) {
local bDownKey = sq_IsDownKey(obj, 1, false);
local chargeTime = sq_GetIntData(obj, SKILL_AVENGER_AWAKENING, 0) * 2; //薄? 葆彻 奢问 譆渠 醱瞪卫除
local stateTimer = obj.sq_getStateTimer();
print("\n chargeTime:" + chargeTime + " stateTimer:" + stateTimer);
// 蹂羶饵?
// 谏醱 ?缣 谏醱卫除虏踯 ?脑贼 濠翕戏煎 剩横骨栖棻..
if(!bDownKey || stateTimer >= chargeTime) { // 桨击 嗥历棻朝匙擎..
obj.sq_IntVectClear();
obj.sq_IntVectPush(4); // substate撮?
obj.sq_IntVectPush(stateTimer); // 晦狱缣怃 跷陛 奢问溘
obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true);
return;
}
}
}

View File

@@ -0,0 +1,87 @@
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_AvengerJump(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
return;
}
obj.sq_stopMove();
obj.setAttackXVelocity(0);
obj.setAttackXAccel(0);
obj.setAttackXVelocityFast(0);
obj.setAttackXAccelFast(0);
}
// prepareDraw ?热 殓栖棻..
function prepareDraw_AvengerJump(obj)
{
if(!obj) return;
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_AvengerJump(obj)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
return;
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_AvengerJump(obj)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
return;
}
if(obj.getAttackIndex() != 3) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(3); // substate撮?
obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true);
}
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local substate = obj.getSkillSubState();
if(bEnd) {
}
}
// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻.
function onEndState_AvengerJump(obj, new_state)
{
if(!obj) return;
if(isAvengerAwakenning(obj) == false) {
return;
}
//obj.sq_IntVectClear();
//obj.sq_IntVectPush(2); // substate撮?
//obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true);
//
}
function onAfterSetState_AvengerJump(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_stopMove();
obj.setAttackXVelocity(0);
obj.setAttackXAccel(0);
obj.setAttackXVelocityFast(0);
obj.setAttackXAccelFast(0);
}

View File

@@ -0,0 +1,542 @@
// sub state
//S_FASTMOVE_PLAY <- 0
//S_FASTMOVE_LOOP <- 1
//S_FASTMOVE_PRO <- 2
//S_FASTMOVE_END <- 3
//
// sub state
S_AWAKENING_0 <- 0
S_AWAKENING_1 <- 1
S_AWAKENING_2 <- 2
S_AWAKENING_3 <- 3
// 蝶鹧? 等桧颤 樯策蝶
FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除
FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问
FM_SI_MOVE_VEL <- 2 // 体陈 桧翕楼紫
// 溯涟樯? 樯策蝶
FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
VECTOR_I_SRC_X <- 0 // 卫蒙虽薄击 荡潍? 漱搅 樯策蝶
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_Awakening(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_AVENGER_AWAKENING);
if(b_useskill) {
//print("\n sq_getSendState:" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻..
//
//if(obj.sq_getSendState() != -1) {
//print("\n warning warning skill skip :" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻..
//print("\n warning warning skill skip :" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻..
//print("\n warning warning skill skip :" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻..
//}
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_AWAKENING_0); // substate撮?
obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_Awakening(obj)
{
if(!obj) return false;
if(obj.getVar("takingAwakenSkillBack").size_vector() == 0) {
obj.getVar("takingAwakenSkillBack").push_vector(0);
obj.getVar("takingAwakenSkillBack").push_vector(0);
}
local var_takingAwakenSkillBack = obj.getVar("takingAwakenSkillBack").get_vector(0);
local bRet = false;
if(!var_takingAwakenSkillBack)
bRet = true;
else {
obj.getVar("takingAwakenSkillBack").set_vector(0, 0);
bRet = false;
}
return bRet;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_Awakening(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻..
obj.setSkillSubState(substate); //set substate
obj.sq_stopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local sq_var = obj.getVar();
local skill_level = sq_GetSkillLevel(obj, SKILL_AVENGER_AWAKENING);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_FASTMOVE);
//local attack_rate = obj.sq_getSkillAttackBonusRate(SKILL_SPINCUTTER, FM_LI_HIT_RATE);
//obj.sq_setCurrentAttackBonusRate(attack_rate);
//
if(substate == S_AWAKENING_0) {
//local time = obj.sq_getIntData(SKILL_AVENGER_AWAKENING, FM_SI_C_TIME);
//obj.sq_var.push_vector(time);
//obj.sq_var.push_vector(0);
sq_var.clear_vector();
sq_var.clear_obj_vector();
sq_var.clear_ani_vector();
sq_var.push_vector(0);
obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING1);
}
else if(substate == S_AWAKENING_1) {
//.func(&CSQStateVar::clear_ani_vector, NTEXT("clear_ani_vector"))
//.func(&CSQStateVar::push_ani_vector, NTEXT("push_ani_vector"))
//local bodyN = obj.sq_var.GetAnimationMap("2_body_normal","Effect/Animation/Awakening/Transform/01/2_body_normal.ani");
local p_body_normal_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/01/2_body_normal.ani");
sq_var.push_ani_vector(p_body_normal_ani);
sq_var.push_vector(0);
obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING2);
}
else if(substate == S_AWAKENING_2) {
local dstZ = sq_var.get_vector(0);
obj.setCurrentPos(posX, posY, dstZ);
obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING3);
// 横?蛤虽 煎注 map戏煎 ?卫 skill?橾缣怃 卫除 晦颤蛔蛔 姜尔 殓溘
//
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_AVENGER_AWAKENING, false, "Appendage/Character/ap_avenger_awakening.nut", false);
local change_time = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_CHANGE_TIME, skill_level);
appendage.sq_SetValidTime(change_time); // 横?蛤虽 颤歜 撮?
// 帼? UI 轿溘 横?萄蒂 勘横舆晦 瞪缣 ?轿肾横捡 ?栖棻..
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_AVENGER_AWAKENING, skill_level);
//
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
//
// Awakening.skl 蝶鉴溯涟 才桧绾
//SL_PERFECT_CHANGE_HP <- 0 // (0) 谏瞪 渗褐羹 HP
//SL_CHANGE_TIME <- 1 // (1) 虽楼卫除
//SL_DEF_INC <- 2 // (2) 寞横溘隶陛(+)
//SL_ATK_SPD <- 3 // (3) 奢问楼紫(+)
//SL_MOV_SPD <- 4 // (4) 桧翕楼紫(+)
//SL_1_HIT_MAGIC_ATK <- 5 // (5) 1颤 葆彻奢问溘(+)
//SL_2_HIT_MAGIC_ATK <- 6 // (6) 2颤 葆彻奢问溘(+)
//SL_3_HIT_MAGIC_ATK <- 7 // (7) 3颤 葆彻奢问溘(+)
//SL_DASH_MAGIC_ATK <- 8 // (8) 渠卫 葆彻奢问溘(+)
//SL_JUMP_MAGIC_ATK <- 9 // (9) C(薄?) 葆彻奢问溘(+)
// 奢楼隶陛, 檩楼撩 荡?隶陛, 赀楼撩 荡?马模
if(appendage) {
local dooms_hp = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_PERFECT_CHANGE_HP, skill_level);
local def_inc = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_DEF_INC, skill_level);
local atk_spd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_ATK_SPD, skill_level);
local mov_spd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_MOV_SPD, skill_level);
// 帼? UI 轿溘
appendage.setAppendCauseSkill(2, sq_getJob(obj), SKILL_AVENGER_AWAKENING, skill_level);
//
appendage.sq_var.clear_vector();
appendage.sq_var.push_vector(change_time); // 虽楼卫除
local awakening_var = obj.getVar("awakening");
awakening_var.clear_ct_vector();
awakening_var.push_ct_vector();
awakening_var.get_ct_vector(0).Reset();
awakening_var.get_ct_vector(0).Start(0,0);
if(awakening_var.size_vector() == 0) { // 颤桧该煎 噙橾 詹帼
awakening_var.push_vector(0);
}
else {
awakening_var.set_vector(0, 0);
}
// 菸蝶陛蛤树 hp撮?
local convert_rate = sq_GetAbilityConvertRate(obj, CONVERT_TABLE_TYPE_HP)
local dooms_con_hp = dooms_hp.tofloat() * convert_rate.tofloat();
appendage.sq_var.push_vector(dooms_con_hp.tointeger()); // 谏瞪 渗褐羹 HP
///////
appendage.sq_var.push_vector(1); // index 2
// 葬橡 寨葬萄 ?楚斜煎 噩 詹帼殓栖棻.. 谒 桧楛冲桧 腑傍贼..
// 横渐荡陛 state_stand鼻鹧缣怃虏 渗褐?薯陛 肾横捡 ?栖棻
// 斜楚怃 valid陛 false陛 胀棻坚 ?怃 埠潍 渗褐?薯 腑棻坚 除舆?怃朝 寰腌栖棻 罹楝寞彻击 当陕?鱼 念娄 桧 寞彻桧 陛潍 梃莠?剪 伪嬴怃 殓栖棻..
// 该 噙桧朝 够紫 桡戏栖梱
local change_appendage = appendage.sq_getChangeStatus("changeStatus");
if(!change_appendage)
change_appendage = appendage.sq_AddChangeStatus("changeStatus",obj, obj, change_time, CHANGE_STATUS_TYPE_ATTACK_SPEED, true, atk_spd);
if(change_appendage) {
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, def_inc.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, def_inc.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, atk_spd.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, mov_spd.tofloat());
}
///////////////////////////////////////////////////////////////////
// _C_2011_PASSIVE_SKILL_UPGRADE_OCTOBER_
// 学葆? 渗唳 学葆?鼻鹧暧 hP蒂 濠褐暧 HP谛 奢嵘?紫烟 渗唳腌栖棻.
local hpmaxup_appendage = appendage.sq_getHpMaxUp("HpMaxUp");
if(!hpmaxup_appendage)
hpmaxup_appendage = appendage.sq_AddHpMaxUp("HpMaxUp",obj, obj, change_time, dooms_hp, 0);
///////////////////////////////////////////////////////////////////
}
//appendage.sq_AddChangeStatus("2",obj, obj, 0, CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, dark_element);
//appendage.sq_AddChangeStatus("3",obj, obj, 0, CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, light_element);
// 罹晦缣怃 渗褐 翕蒙 拥栖诡桧暮 煎注 map戏煎 ?卫
//
//obj.sq_var.push_vector(posX); // 漱搅 樯策蝶 1
}
else if(substate == S_AWAKENING_3) {
obj.getVar().clear_vector();
obj.getVar().push_vector(posZ); // 漱搅 樯策蝶 1
obj.getVar().push_vector(0); // 虽霞 ?楚斜
obj.getVar().set_vector(1, 0);
obj.getVar().get_vector(0); // 漱搅 樯策蝶 1
//DWORD rgb = obj.sq_getRGB(0,0,0);
obj.sq_bottomcreateFlash(0, 240, 280, 150, 0);
//obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING4);
local awakening_ani = obj.getVar().GetAnimationMap("Awakening4", "Character/Priest/Animation/Awakening4.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(awakening_ani);
// 掘?..蛔烟
local ch_ld_0_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/03/1_change_light_dodge_00.ani"); // 掘? ?董?桧塭怃 评煎 跷陛?丑捡?栖棻..
local p_change_light_obj = obj.sq_createCNRDPooledObject(ch_ld_0_ani, true);
if(p_change_light_obj) {
// 15 -2 75
local dstX = sq_GetDistancePos(posX, obj.getDirection(), 15);
p_change_light_obj.setCurrentPos(dstX, posY - 2, posZ + 75);
obj.sq_AddObject(p_change_light_obj);
}
// 9溯涟 桧鼻桧贼
if(obj.isOverSkillLevel(SKILL_AVENGER_AWAKENING, 4))
{
obj.endSkillCoolTime(SKILL_PANDEMONIUM_EX);
obj.endSkillCoolTime(SKILL_EX_DISASTER);
}
}
}
// prepareDraw ?热 殓栖棻..
function prepareDraw_Awakening(obj)
{
if(!obj) return;
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_Awakening(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
local sq_var = obj.getVar();
//S_AWAKENING_0 <- 0
//S_AWAKENING_1 <- 1
//S_AWAKENING_2 <- 2
//S_AWAKENING_3 <- 3
//print("substate:" + substate);
if(substate == S_AWAKENING_0) {
}
else if(substate == S_AWAKENING_1) {
//local time = obj.sq_getIntData(SKILL_AVENGER_AWAKENING, FM_SI_C_TIME); // 体陈桧 谏瞪 当撩肾朝 卫除..
//local time = 1600; // 体陈桧 谏瞪 当撩肾朝 卫除..
local time = 1200; // 体陈桧 谏瞪 当撩肾朝 卫除..
local up_t = time;
local up_l = 40;
local move_l = 0;
move_l = sq_GetAccel(0, up_l, currentT, up_t, true);
obj.setCurrentPos(posX, posY, move_l);
if(move_l >= up_l) {
local body_n_ani = sq_var.get_ani_vector(0);
local b_body_n = sq_var.get_vector(1); //
//// 虏擒缣 ?娄陛 跷陛肾横 毡虽 强懊棻贼..
if(!b_body_n) {
pAni.addLayerAnimation(10010, body_n_ani, true);
sq_var.set_vector(1, 1);
}
local bEnd = sq_IsEnd(body_n_ani);
local index_bodyani = obj.sq_ani_GetCurrentFrameIndex(body_n_ani);
local body_currentT = sq_GetCurrentTime(body_n_ani);
//print("proc substate:" + substate + " index_bodyani:" + index_bodyani + " b_body_n:" + b_body_n);
if(bEnd == true) {
local backlight_dodge_obj = pAni.getLastAlsObject();
//print("backlight_dodge_obj:" + backlight_dodge_obj);
//if(backlight_dodge_obj) {
//print("setValid:" + backlight_dodge_objj);
//backlight_dodge_obj.setValid(false);
//}
sq_var.set_vector(0, move_l); // 葆虽虞 ?溯歜暧 堪桧蒂 ?卫?棻..
if(obj.isMyControlObject()) {
//obj.sq_IntVectClear();
//obj.sq_IntVectPush(S_AWAKENING_2);
//obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true);
//local backlight_dodge = obj.sq_getAutoLayerWorkAnimation(pAni, "1_e_bl_d");
//pAni.removeLayerAnimation(backlight_dodge);
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_AWAKENING_2);
obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true);
//obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
else {
if(move_l >= (up_l - 10)) {
local b_body_n = sq_var.get_vector(1); //
if(!b_body_n) {
//local bodyN = sq_var.GetAnimationMap("2_body_normal","Effect/Animation/Awakening/Transform/01/2_body_normal.ani");
local body_n_ani = sq_var.get_ani_vector(0);
pAni.addLayerAnimation(10010, body_n_ani, true);
sq_var.set_vector(1, 1);
}
}
//pAni.addLayerAnimation()
//addLayerAnimation(
}
}
else if(substate == S_AWAKENING_2) {
local dstZ = sq_var.get_vector(0);
local up_t = pAni.getDelaySum(false); //
local up_l = 3;
local move_l = 0;
move_l = sq_GetAccel(0, up_l, currentT, up_t, false);
obj.setCurrentPos(posX, posY, dstZ + move_l);
}
else if(substate == S_AWAKENING_3) { // 渗褐桧 胀 鼻鹧..
local fIndex = 2;
local delay = pAni.getDelaySum(0, fIndex); //
local down_t = 120; //
if(frmIndex > fIndex && (delay + down_t) >= currentT) {
local dstZ = obj.getVar().get_vector(0);
//local down_t = 180; //
local move_l = 0;
move_l = sq_GetAccel(dstZ, 0, currentT - delay, down_t, false);
local t = currentT - delay;
obj.setCurrentPos(posX, posY, move_l);
}
else if(frmIndex <= fIndex) {
local dstZ = obj.getVar().get_vector(0);
obj.setCurrentPos(posX, posY, dstZ);
}
if(obj.getVar().get_vector(1) == 0 && obj.getZPos() == 0 && (delay + down_t) < currentT) { // 虽霞 ?楚斜
//sq_SetMyShake(obj,4,1000);
obj.sq_setShake(obj, 2, 500);
// 醱问? 嫦当
local p_shockwave_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/03/sub_dodge.ani");
local p_obj_1 = obj.sq_createCNRDPooledObject(p_shockwave_ani, true);
p_obj_1.setCurrentDirection(obj.getDirection());
local v = 25;
local dstX = sq_GetDistancePos(posX, obj.getDirection(), v);
p_obj_1.setCurrentPos(dstX, posY - 1, 0);
obj.sq_AddObject(p_obj_1);
local p_shock_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/03/5_crack_normal.ani");
local p_obj_2 = obj.sq_createCNRDPooledObject(p_shock_ani, true);
p_obj_2.setCurrentDirection(obj.getDirection());
p_obj_2.setCurrentPos(posX, posY + 1, 0);
obj.sq_AddObject(p_obj_2);
obj.getVar().set_vector(1, 1);
}
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_Awakening(obj)
{
if(!obj) return;
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local substate = obj.getSkillSubState();
if(substate == S_AWAKENING_0) {
}
else if(substate == S_AWAKENING_1) {
}
else if(substate == S_AWAKENING_2) {
}
else if(substate == S_AWAKENING_3) {
}
if(obj.getVar("takingAwakenSkillBack").size_vector() > 0) {
if(obj.getVar("takingAwakenSkillBack").get_vector(0)) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(0); // substate撮?
obj.sq_addSetStatePacket(STATE_AWAKENING_TURN_OFF, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(bEnd) {
if(substate == S_AWAKENING_0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_AWAKENING_1);
obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true);
}
else if(substate == S_AWAKENING_1) {
}
else if(substate == S_AWAKENING_2) {
//obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_AWAKENING_3);
obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true);
}
else if(substate == S_AWAKENING_3) {
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛
// 毡棻贼 桧 ?热蒂 桧辨?栖棻.
function onAfterSetState_Awakening(obj, state, datas, isResetTimer)
{
if(!obj) return;
}
// onbeforeattack 属寥?热 殓栖棻
function onBeforeAttack_Awakening(obj, damager, boundingBox)
{
}
// onAttack 属寥?热 殓栖棻
function onAttack_Awakening(obj, damager, boundingBox)
{
}
// onAfterAttack 属寥?热 殓栖棻
function onAfterAttack_Awakening(obj, damager, boundingBox)
{
}
// onBeforeDamage 属寥?热 殓栖棻
function onBeforeDamage_Awakening(obj, attacker, boundingBox)
{
}
// onDamage 属寥?热 殓栖棻
function onDamage_Awakening(obj, attacker, boundingBox)
{
}
// onAfterDamage 属寥?热 殓栖棻
function onAfterDamage_Awakening(obj, attacker, boundingBox)
{
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,472 @@
S_DISASTER_0 <- 0
S_DISASTER_1 <- 1
S_DISASTER_2 <- 2
S_DISASTER_3 <- 3
S_DISASTER_4 <- 4
//750 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦
//500 // 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
//2000 // 颤啪? 卫除 (ms 钦嫔)
//500 // 颤啃暧 x蹴 桧翕卫除
//500 // 颤啃暧 y蹴 桧翕卫除
//250 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤)
//125 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫
SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦
SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
SD_I_TARGET_TIME <- 2 // 颤啪? 卫除 (ms 钦嫔)
SD_I_TARGET_MOV_X <- 3 // 颤啃暧 X蹴 桧翕卫除
SD_I_TARGET_MOV_Y <- 4 // 颤啃暧 y蹴 桧翕卫除
SD_I_TARGET_SUCK_LEN <- 5 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤)
SD_I_TARGET_SUCK_VEL <- 6 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_DisasterEx(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_EX_DISASTER);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_DISASTER_0); // substate撮?
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_DisasterEx(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
return obj.sq_IsCommandEnable(SKILL_EX_DISASTER); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_EARTH_QUAKE);
}
return true;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_DisasterEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
local sq_var = obj.getVar();
local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻..
local direction = obj.sq_getVectorData(datas, 1); // 罗廓箪 substate殓栖棻..
obj.setSkillSubState(substate); //set substate
obj.sq_stopMove();
sq_var.clear_vector();
sq_var.push_vector(0);
sq_var.push_vector(0);
sq_var.push_vector(0);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
//CUSTOM_ANI_EX_DISASTER_1 <- 118 // EX蝶鉴 - 营懈1
//CUSTOM_ANI_EX_DISASTER_2 <- 119 // EX蝶鉴 - 营懈1
//CUSTOM_ANI_EX_DISASTER_3 <- 120 // EX蝶鉴 - 营懈1
//CUSTOM_ANI_EX_DISASTER_4 <- 121 // EX蝶鉴 - 营懈1
//CUSTOM_ANI_EX_DISASTER_5 <- 122 // EX蝶鉴 - 营懈1
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_DISASTER);
local attack_rate = 1.0;
//SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦
//SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
if(isAvengerAwakenning(obj)) {
local inc = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_DAMAGE_INC); // 颤啃暧 X蹴 桧翕卫除
local inc_rate = inc.tofloat() / 100.0;
print("\n inc_rate:" + inc_rate);
attack_rate += inc_rate;
}
obj.stopSound(7575);
obj.sq_setAttackPowerWithPassive(SKILL_EX_DISASTER, state, -1, 0, attack_rate);
if(substate == S_DISASTER_0) {
if(isAvengerAwakenning(obj)) {
local ani = obj.getVar().GetAnimationMap("Disaster1", "Character/Priest/Animation/disasterEx/Disaster1.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_AVENGER_AWAKENING, false, "Appendage/Character/ap_avenger_awakening.nut", false);
if(appendage) { // 陕撩鼻鹧塭贼 陕撩卫除击 棺溥丑捡?栖棻.
local skill_level = obj.sq_getSkillLevel(SKILL_AVENGER_AWAKENING);
local t = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_CHANGE_TIME, skill_level);
local awakening_inc_t = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_AWAKENING_INC); // 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
appendage.sq_var.set_vector(I_AVENGER_AWAKENING_TIME, t + awakening_inc_t);
appendage.sq_SetValidTime(t + awakening_inc_t); // 横?蛤虽 颤歜 撮?
}
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_1);
}
local pAni = obj.sq_getCurrentAni();
}
else if(substate == S_DISASTER_1) {
obj.sq_setShake(obj, 3, 160);
if(isAvengerAwakenning(obj)) {
// 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
local ani = obj.getVar().GetAnimationMap("Disaster2", "Character/Priest/Animation/disasterEx/Disaster2.ani");
obj.setCurrentAnimation(ani);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_2);
}
/////////////////////////////////////////////
//if(obj.isMyControlObject()) {
//obj.sq_binaryData_startWrite();
//obj.sq_binaryData_writeDword(0);
//obj.sq_p00_sendCreatePassiveObjectPacket(24101, 0, 0, 0, 0);
//}
///////////////////////////////////////////////
local pA = obj.sq_getCurrentAni();
local iX = posX;
local iY = posY;
//int offsetX = lua_getIntData(SKILL_SPIRAL_COLUMN_EX, 0);
//offsetX = lua_getDistancePos(iX, sq_GetDirection(this), offsetX);
//int vX = lua_getIntData(SKILL_SPIRAL_COLUMN_EX, 1);
//int vY = 0;
//SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦
//SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
//SD_I_TARGET_TIME <- 2 // 颤啪? 卫除 (ms 钦嫔)
//SD_I_TARGET_MOV_X <- 3 // 颤啃暧 X蹴 桧翕卫除
//SD_I_TARGET_MOV_Y <- 4 // 颤啃暧 y蹴 桧翕卫除
//SD_I_TARGET_SUCK_LEN <- 5 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤)
//SD_I_TARGET_SUCK_VEL <- 6 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫
//
//
local vX = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_MOV_X); // 颤啃暧 X蹴 桧翕卫除
local vY = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_MOV_Y); // 颤啃暧 Y蹴 桧翕卫除
obj.sq_addAttractAimPointMark(iX, iY, vX, vY);
//450 // 庄横菟桧朝 彰嫔 (x蹴 虽荤)
//180 // 庄横菟桧朝 瞳暧 譆渠 堪桧
local range = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_SUCK_LEN); // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤)
local suck_vel = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_SUCK_VEL); // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫
obj.sq_setAttractAimInfo(suck_vel, suck_vel, range / 2, 180);
//obj.sq_setAttractAimInfo(91, 113, range / 2, 180);
}
else if(substate == S_DISASTER_2) {
//
//CUSTOM_ATTACKINFO_DISASTER
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_DISASTER);
if(isAvengerAwakenning(obj)) {
// 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
local ani = obj.getVar().GetAnimationMap("Disaster3", "Character/Priest/Animation/disasterEx/Disaster3.ani");
obj.setCurrentAnimation(ani);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_3);
}
obj.sq_PlaySound("DISASTER_CIRCLE_LOOP", 7575);
}
else if(substate == S_DISASTER_3) {
if(isAvengerAwakenning(obj)) {
// 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
local ani = obj.getVar().GetAnimationMap("Disaster4", "Character/Priest/Animation/disasterEx/Disaster4.ani");
obj.setCurrentAnimation(ani);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_4);
}
}
else if(substate == S_DISASTER_4) {
if(isAvengerAwakenning(obj)) {
// 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
local ani = obj.getVar().GetAnimationMap("Disaster5", "Character/Priest/Animation/disasterEx/Disaster5.ani");
obj.setCurrentAnimation(ani);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_5);
}
}
}
// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛
// 毡棻贼 桧 ?热蒂 桧辨?栖棻.
function onAfterSetState_DisasterEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
}
// onbeforeattack 属寥?热 殓栖棻
function onBeforeAttack_DisasterEx(obj, damager, boundingBox)
{
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_DisasterEx(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local sq_var = obj.getVar();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == S_DISASTER_0) {
}
else if(substate == S_DISASTER_1) {
if(frmIndex >= 0) {
local flag = sq_var.get_vector(0);
if(!flag) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_EX_DISASTER, true, "Appendage/Character/ap_avenger_effect.nut", true);
sq_var.set_vector(0, 1);
}
}
//isAvengerAwakenning()
}
else if(substate == S_DISASTER_2) {
local stateTimer = obj.sq_getStateTimer();
//SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦
//SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
//SD_I_TARGET_TIME <- 2 // 颤啪? 卫除 (ms 钦嫔)
//SD_I_TARGET_MOV_X <- 3 // 颤啃暧 X蹴 桧翕卫除
//SD_I_TARGET_MOV_Y <- 4 // 颤啃暧 y蹴 桧翕卫除
//SD_I_TARGET_SUCK_LEN <- 5 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤)
//SD_I_TARGET_SUCK_VEL <- 6 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫
//local t = 1000;
local t = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_TIME); // 颤啪? 卫除 (ms 钦嫔)
//print("\n stateTimer:" + stateTimer);
if(stateTimer > (t - 750)) {
local flag = sq_var.get_vector(1);
if(!flag) {
local iX = obj.getXPos();
local iY = obj.getYPos();
local iPX = obj.sq_getAttractAimPosX(iX,iY, false);
local iPY = obj.sq_getAttractAimPosY(iX,iY, false) + 2;
print("\n posX:" + posX + " posY:" + posY + " aimposX:" + iPX + " aimposY:" + iPY);
sq_MoveToNearMovablePos(obj, iPX, iPY, 0, iX, iY, posZ, 200, -1, 3);
obj.sq_removeAttractAimPointMark();
sq_var.set_vector(1, 1);
}
}
if(stateTimer > t) {
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_DISASTER_3);
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
else if(substate == S_DISASTER_3) {
if(frmIndex >= 5) {
local flag = sq_var.get_vector(0);
if(!flag) {
if(obj.isMyControlObject()) {
//SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦
//SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔
local attack_rate = 1.0;
if(isAvengerAwakenning(obj)) {
local inc = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_DAMAGE_INC); // 颤啃暧 X蹴 桧翕卫除
local inc_rate = inc.tofloat() / 100.0;
attack_rate += inc_rate;
}
local bonus_rate = obj.sq_getBonusRateWithPassive(SKILL_EX_DISASTER, STATE_EX_DISASTER, 1, attack_rate);
obj.sq_binaryData_startWrite();
obj.sq_binaryData_writeDword(bonus_rate);
obj.sq_p00_sendCreatePassiveObjectPacket(24109, 0, 0, 0, 0); // ?嫦
}
if(isAvengerAwakenning(obj)) {
//local particleCreater = sq_var.GetparticleCreaterMap("GuillotineSub", "PassiveObject/Character/Thief/Particle/GuillotineSub.ptl", obj);
local particleCreater = sq_var.GetparticleCreaterMap("GuillotineSub6", "Character/Priest/Effect/Particle/DisasterStonsSmall.ptl", obj);
particleCreater.Restart(0);
//local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20);
particleCreater.SetPos(posX, posY, posZ);
sq_AddParticleObject(obj, particleCreater);
obj.sq_PlaySound("PR_DGUARDIAN_DISASTER"); // 学葆? 渗褐 ? 葆虽虞 阶缣 睡??貊 廓偃舰阳 尔桧蝶
}
else {
obj.sq_PlaySound("PR_DISASTER"); // 葆虽虞 阶缣 睡??貊 廓偃舰阳 尔桧蝶
}
local fScreen = sq_flashScreen(obj,0,320,320,200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_setShake(obj, 6, 320);
obj.sq_removeAttractAimPointMark();
sq_var.set_vector(0, 1);
}
}
}
else if(substate == S_DISASTER_4) {
}
if(substate == S_DISASTER_4) {
if(frmIndex >= 4) {
local flag = sq_var.get_vector(0);
if(!flag) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_EX_DISASTER, true, "Appendage/Character/ap_avenger_effect.nut", true);
sq_var.set_vector(0, 1);
}
}
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_DisasterEx(obj)
{
if(!obj) return;
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
//
local subState = obj.getSkillSubState();
if(subState == S_DISASTER_1) {
}
else if(subState == S_DISASTER_2) {
}
else if(subState == S_DISASTER_3) {
}
if(bEnd) {
if(subState == S_DISASTER_0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_DISASTER_1);
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(subState == S_DISASTER_1) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_DISASTER_2);
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(subState == S_DISASTER_2) {
}
else if(subState == S_DISASTER_3) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_DISASTER_4);
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(subState == S_DISASTER_4) {
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻.
function onEndState_DisasterEx(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_EX_DISASTER) {
obj.sq_removeAttractAimPointMark();
}
obj.stopSound(7575);
}
// onAttack 属寥?热 殓栖棻
function onAttack_DisasterEx(obj, damager, boundingBox)
{
}
// onAfterAttack 属寥?热 殓栖棻
function onAfterAttack_DisasterEx(obj, damager, boundingBox)
{
}
// onBeforeDamage 属寥?热 殓栖棻
function onBeforeDamage_DisasterEx(obj, attacker, boundingBox)
{
}
// onDamage 属寥?热 殓栖棻
function onDamage_DisasterEx(obj, attacker, boundingBox)
{
}
// onAfterDamage 属寥?热 殓栖棻
function onAfterDamage_DisasterEx(obj, attacker, boundingBox)
{
}
function getScrollBasisPos_DisasterEx(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == S_DISASTER_2 || substate == S_DISASTER_1) {
if(obj.isMyControlObject()) {
local iX = obj.getXPos();
local iY = obj.getYPos();
local iPX = obj.sq_getAttractAimPosX(iX,iY, false);
local iPY = obj.sq_getAttractAimPosY(iX,iY, false);
obj.sq_SetCameraScrollPosition(iPX, iPY, 0);
return true;
}
}
return false;
}

View File

@@ -0,0 +1,67 @@
EARTHQUAKE_ROCK_MAX <- 3;
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_EarthQuake(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_EARTH_QUAKE);
if(b_useskill) {
obj.sq_addSetStatePacket(STATE_EARTHQUAKE , STATE_PRIORITY_USER, false);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_EarthQuake(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
return obj.sq_IsCommandEnable(SKILL_EARTH_QUAKE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_EARTH_QUAKE);
}
return true;
}
//------------------------------------------------------------------------------
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_EarthQuake(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_stopMove();
obj.sq_setCurrentAnimation(CUSTOM_ANI_EARTH_QUAKE);
obj.sq_setXScroll(50,200,200,0);
}
function onEndCurrentAni_EarthQuake(obj)
{
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
local x = sq_GetDistancePos(obj.getXPos(),obj.getDirection(),40);
if(obj.isMovablePos(x,obj.getYPos()))
obj.setCurrentPos(x, obj.getYPos(), obj.getZPos());
}
function onKeyFrameFlag_EarthQuake(obj,flagIndex)
{
local isMycontrolObject = obj.sq_isMyControlObject();
if(isMycontrolObject && flagIndex == 1) // 霞翕,廓翻 桧??朝 釭缣啪虏 尔樯棻.
{
local gap = obj.sq_getIntData(SKILL_EARTH_QUAKE,0); // ?卫粽 当撩 除问
local state = obj.sq_GetSTATE();
local dmg = obj.sq_getBonusRateWithPassive(SKILL_EARTH_QUAKE, state, 0,1.0);
obj.sq_binaryData_startWrite();
obj.sq_binaryData_writeWord(EARTHQUAKE_ROCK_MAX); // ?卫粽 营敝 当撩 偎热
obj.sq_binaryData_writeWord(gap); // ?卫粽 当撩 除问
obj.sq_binaryData_writeDword(dmg); // ?卫粽 当撩 除问
obj.sq_p00_sendCreatePassiveObjectPacket(24103, 0, 120, 1, 0);
}
return true;
}

View File

@@ -0,0 +1,618 @@
EXECUTION_SUB_STATE_GRAB <- 0
EXECUTION_SUB_STATE_GRAB_EX <- 1
EXECUTION_SUB_STATE_TURNOVER <- 2
EXECUTION_SUB_STATE_RUN <- 3
EXECUTION_SUB_STATE_LAST <- 4
EXECUTION_SUB_STATE_FAILED <- 5
TEST_MODE_EXCUTION <- DEBUG;
EXC_READY_FOR_THROW <- 0;
function sendSubState_Execution(obj,subState)
{
if(!obj) return;
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState); // substate撮?
obj.sq_addSetStatePacket(STATE_EXECUTION, STATE_PRIORITY_USER, true);
}
}
//------------------------------------------------------------------------------
// 籀?擎 学葆啪桧虽煎 亵瞰胀棻..斜楝嘎煎 学葆啪桧虽 comsume睡碟击 籀?缣 ?热?蒂 卫面捡?栖棻..
function IsEnableExecution(obj)
{
if(!obj) return false;
//if(TEST_MODE_EXCUTION)
// return true;
//if(!isInDevilStrike(obj)) return false;
if(!isInDevilStrikeSkill(obj)) return false;
local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽
if(!appendage) return false;
print("appendage.sq_var.size_vector():" + appendage.sq_var.size_vector());
if(appendage.sq_var.size_vector() > 1) {
// 7. 学葆啪桧虽 模赅榆
local skillLevel = sq_GetSkillLevel(obj, SKILL_EXECUTION);
local consumeValue = sq_GetLevelData(obj, SKILL_EXECUTION, 7, skillLevel);
//DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂
//DS_APEND_GAUGE <- 1 // ?营 学
local devil_gauge = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0
if(devil_gauge >= consumeValue)
{
consumeDevilGauge(obj, consumeValue); // 学葆啪桧虽蒂 还罹鄹栖棻..
return true;
}
else {
obj.startCantUseSkillWarning();
if (obj.isMessage()) {
sq_AddMessage(29002); // 29002>学葆啪桧虽陛 睡褶?栖棻.
}
return false;
}
}
return false;
}
function onEndState_Execution(obj, newState)
{
if(newState != STATE_EXECUTION)
removeAllExcutionAppendage(obj);
}
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_Execution(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_EXECUTION);
if(b_useskill) {
if(IsEnableExecution(obj)) { // 学葆啪桧虽煎 籀?击 噩 热 毡蝗栖棻..
sendSubState_Execution(obj,EXECUTION_SUB_STATE_GRAB);
return true;
}
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_Execution(obj)
{ //橾奁 鼻?缣怃 绿?撩? 卫监棻.. 桧匙击 ?撩? 卫郦朝 钦啗朝 螃煎虽.. 渗褐-陕撩击 ?朝 钦啗缣怃 殓栖棻.
//if(TEST_MODE_EXCUTION)
// return true;
return false;
}
//------------------------------------------------------------------------------
//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥.
function onIsCheckHitCollision_Execution(obj,damager)
{
local subState = obj.getSkillSubState();
if(subState == EXECUTION_SUB_STATE_GRAB) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return obj.isMyControlObject();
//晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻.
return (damager && damager.isMyControlObject());
}
function isForceHitCheck_Execution(obj)
{
if(obj.isMyControlObject()) {
local subState = obj.getSkillSubState();
if(subState == EXECUTION_SUB_STATE_GRAB) { //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return true;
}
}
return false;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_Execution(obj, state, datas, isResetTimer)
{
if(!obj) return;
// 怃粽 蝶才桧? 扑姜
local sq_var = obj.getVar();
local subState = obj.sq_getVectorData(datas, 0);
obj.setSkillSubState(subState);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
sq_var.clear_vector(); // als缣怃 create draw only object 蒂 跤噙晦 阳侥缣 ?溯歜 郦 ?楚斜煎 桧辨?啊蝗栖棻..
sq_var.push_vector(0); // index : 0
sq_var.push_vector(0); // index : 1
sq_var.push_vector(0); // index : 2
sq_var.push_vector(0); // index : 3
sq_var.push_vector(0); // index : 4
sq_var.push_vector(0); // index : 5
local ani = null; // 蝶监嬴夥颤 阳侥缣 getcustomani蒂 桧辨?虽 跤?栖棻.. 瞪睡 谖睡缣怃 拥栖诡桧暮击 煎注?怃 陛螳褫栖棻..
if(subState == EXECUTION_SUB_STATE_GRAB)
{
obj.sq_stopMove();
//obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_GRAB);
ani = obj.getVar().GetAnimationMap("EXC_GRAB", "Character/Priest/Animation/execution/grab.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_1);
obj.sq_PlaySound("PR_EXECUTION_READY");
sq_var.setBool(EXC_READY_FOR_THROW,false);
}
else if(subState == EXECUTION_SUB_STATE_GRAB_EX)
{
obj.sq_stopMove();
//obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_GRAB_EX);
ani = obj.getVar().GetAnimationMap("EXC_GRAB_EX", "Character/Priest/Animation/execution/grabEx.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_2);
obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION,state, 0,-1,1.0); // 0廓 樯策蝶 奢问溘 虽姜
}
else if(subState == EXECUTION_SUB_STATE_TURNOVER)
{
//obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_TURNOVER);
ani = obj.getVar().GetAnimationMap("EXC_TURNOVER", "Character/Priest/Animation/execution/turnOver.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
local sizeRate = obj.sq_getLevelData(3);
local explosionSizeRate = sizeRate.tofloat()/100.0;
local pAni = obj.sq_getCurrentAni();
pAni.applyBoundingBoxRate(explosionSizeRate,0,0); // 醱问? 彰嫔 瞳辨
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_3);
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
for(;i<objectsSize;++i)
{
local damager = sq_GetCNRDObjectToCollisionObject(sq_var.get_obj_vector(i));
if(damager)
obj.addHitObject(damager);
}
local ani = sq_CreateAnimation("","Character/Priest/Effect/Animation/execution/turnOver/finger.ani")
local fingerObj = sq_CreatePooledObject(ani,true);
fingerObj.setCurrentPos(obj.getXPos(),obj.getYPos()+2,obj.getZPos());
fingerObj.setCurrentDirection(obj.getDirection());
sq_AddObject(obj,fingerObj,2,false);
//obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION, state, 2,-1,1.0);
obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION, state, 1,-1,1.0); // // 1. 阶缣 镒历击阳 濩?拥缣 渠? 奢问溘(+)
}
else if(subState == EXECUTION_SUB_STATE_RUN)
{
obj.sq_PlaySound("PR_EXECUTION_DRAWN");
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_4);
local moveDistance = obj.sq_getIntData(SKILL_EXECUTION,0); // 桧翕剪葬
local velocityX = obj.sq_getIntData(SKILL_EXECUTION,1); // 蟾渡 桧翕楼紫
local velocityY = obj.sq_getIntData(SKILL_EXECUTION,2); // 蟾渡 桧翕楼紫
// ?蹂?勒 卫除 = 剪葬/楼紫
local targetTime = 0;
if(velocityX != 0)
targetTime = moveDistance* 1000 / velocityX;
obj.sq_timer_.setParameter(targetTime, 1);
obj.sq_timer_.setEventOnStart(false);
obj.sq_timer_.resetInstant(0);
obj.sq_setStaticMoveInfo(0,velocityX,velocityX,false);
obj.sq_setStaticMoveInfo(1,velocityY,velocityY,true);
obj.sq_setMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
//obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_RUN);
ani = obj.getVar().GetAnimationMap("EXC_RUN", "Character/Priest/Animation/execution/run.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
obj.playSound("EXECUTION_DRAWN_LOOP",3711,0,0,0);
}
else if(subState == EXECUTION_SUB_STATE_LAST)
{
obj.stopSound(3711);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_5);
local velocityX = obj.sq_getIntData(SKILL_EXECUTION,1); // 蟾渡 桧翕楼紫
local accelX = obj.sq_getIntData(SKILL_EXECUTION,3); // 马楼紫
obj.sq_setStaticMoveInfo(0,velocityX,velocityX,false,accelX,true);
obj.sq_setStaticMoveInfo(1,0,0,false);
obj.sq_setMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
ani = obj.getVar().GetAnimationMap("EXC_LAST", "Character/Priest/Animation/execution/last.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION,state, 5,-1,1.0);
}
else if(subState == EXECUTION_SUB_STATE_FAILED)
{
//obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_FAILED);
ani = obj.getVar().GetAnimationMap("EXC_FAILED", "Character/Priest/Animation/execution/grabFailed.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻..
obj.setCurrentAnimation(ani);
}
}
function onProc_Execution(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local dir = sq_GetDirection(obj);
local sq_var = obj.getVar();
if(subState == EXECUTION_SUB_STATE_RUN) {
// [use animation] `../../Effect/Animation/execution/run/26_dust_a_normal.ani` `5`
//[create draw only object] 4 `5` 0 50 0
//[create draw only object] 2 `5` 0 50 0
//[create draw only object] 0 `5` 0 50 0
// [use animation] `../../Effect/Animation/execution/run/1_dust_a_normal.ani` `1`
//[create draw only object] 1 `1` 0 -1 0
//[create draw only object] 3 `1` 0 -1 0
//[create draw only object] 5 `1` 0 -1 0
if(frmIndex >= 0 && !sq_var.get_vector(0)) {
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", posX, posY + 50, posZ, dir);
sq_var.set_vector(0, 1);
}
if(frmIndex >= 1 && !sq_var.get_vector(1)) {
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", posX, posY - 1, posZ, dir);
sq_var.set_vector(1, 1);
}
if(frmIndex >= 2 && !sq_var.get_vector(2)) {
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", posX, posY + 50, posZ, dir);
sq_var.set_vector(2, 1);
}
if(frmIndex >= 3 && !sq_var.get_vector(3)) {
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", posX, posY - 1, posZ, dir);
sq_var.set_vector(3, 1);
}
if(frmIndex >= 4 && !sq_var.get_vector(4)) {
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", posX, posY + 50, posZ, dir);
sq_var.set_vector(4, 1);
}
if(frmIndex >= 5 && !sq_var.get_vector(5)) {
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", posX, posY - 1, posZ, dir);
sq_var.set_vector(5, 1);
}
//
}
else if(subState == EXECUTION_SUB_STATE_LAST) {
//[use animation] `../../Effect/Animation/execution/run/26_dust_a_normal.ani` `3`
//[use animation] `../../Effect/Animation/execution/run/1_dust_a_normal.ani` `2`
//[create draw only object] 3 `3` 60 50 0
//[create draw only object] 1 `3` 30 50 0
//[create draw only object] 0 `2` 30 -1 0
//[create draw only object] 2 `2` 60 -1 0
//
if(frmIndex >= 0 && !sq_var.get_vector(0)) {
local dstX = sq_GetDistancePos(posX, obj.getDirection(), 30);
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", dstX, posY - 1, posZ, obj.getDirection());
sq_var.set_vector(0, 1);
}
if(frmIndex >= 0 && !sq_var.get_vector(4)) {
local dstX = sq_GetDistancePos(posX, obj.getDirection(), 90);
sqr_CreatePooledObject(obj, "Effect/Animation/execution/last/drawOnly/drawOnlyBase.ani", dstX, posY + 1, posZ, obj.getDirection());
sq_var.set_vector(4, 1);
}
if(frmIndex >= 1 && !sq_var.get_vector(1)) {
local dstX = sq_GetDistancePos(posX, obj.getDirection(), 30);
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", dstX, posY + 50, posZ, obj.getDirection());
sq_var.set_vector(1, 1);
}
if(frmIndex >= 2 && !sq_var.get_vector(2)) {
local dstX = sq_GetDistancePos(posX, obj.getDirection(), 60);
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", dstX, posY - 1, posZ, obj.getDirection());
sq_var.set_vector(2, 1);
}
if(frmIndex >= 3 && !sq_var.get_vector(3)) {
local dstX = sq_GetDistancePos(posX, obj.getDirection(), 60);
sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", dstX, posY + 50, posZ, obj.getDirection());
sq_var.set_vector(3, 1);
}
}
if(obj.isMyControlObject())
{
if(subState == EXECUTION_SUB_STATE_RUN)
{
local pAni = obj.sq_getCurrentAni();
local currentT = pAni.getCurrentTime();
if (obj.sq_timer_.isOnEvent(currentT) == true)
{
sendSubState_Execution(obj,EXECUTION_SUB_STATE_LAST);
}
obj.setSkillCommandEnable(SKILL_EXECUTION,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_EXECUTION);
if(b_useskill != -1)
sendSubState_Execution(obj,EXECUTION_SUB_STATE_LAST);
}
}
}
function onTimeEvent_Execution(obj, timeEventIndex, timeEventCount)
{
if(obj.isMyControlObject())
{
local subState = obj.getSkillSubState();
if(subState == EXECUTION_SUB_STATE_RUN)
{
local power = obj.sq_getPowerWithPassive(SKILL_EXECUTION, STATE_EXECUTION, 4,-1,1.0);
sq_createAttackObjectWithPath(obj, "Character/Priest/Effect/Animation/execution/run/runDamage.ani","PassiveObject/Character/Priest/AttackInfo/excutionBox.atk",false,power,100,0,0,0);
}
}
return false; // true贼 属寥 酝钦
}
function isExcutionGrabable(obj)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
if(damager) {
if(sq_IsGrabable(obj,damager) && sq_IsHoldable(obj,damager)) //濩击热 毡朝 鼻鹧
return true;
}
}
return false;
}
function removeAllExcutionAppendage(obj)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
if(objectsSize <= 0)
return;
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
if(damager)
CNSquirrelAppendage.sq_RemoveAppendage(damager, "Appendage/Character/executionAppendage.nut");
}
sq_var.clear_obj_vector();
}
function onEndCurrentAni_Execution(obj)
{
local subState = obj.getSkillSubState();
local sq_var = obj.getVar();
if(subState == EXECUTION_SUB_STATE_GRAB)
{
local objectsSize = sq_var.get_obj_vector_size();
if(objectsSize > 0)
{
//?问 螃粽薛?陛 ?涡绾桧贼 EXECUTION_SUB_STATE_TURNOVER 嬴栖贼 EXECUTION_SUB_STATE_GRAB_EX
if(isExcutionGrabable(obj)) {
sendSubState_Execution(obj,EXECUTION_SUB_STATE_TURNOVER);
}
else {
sendSubState_Execution(obj,EXECUTION_SUB_STATE_GRAB_EX);
}
}
else
{
sendSubState_Execution(obj,EXECUTION_SUB_STATE_FAILED);
}
}
else if(subState == EXECUTION_SUB_STATE_TURNOVER)
{
sendSubState_Execution(obj,EXECUTION_SUB_STATE_RUN);
local gap = obj.sq_getIntData(SKILL_EXECUTION,4);
obj.setTimeEvent(0,gap,0,true);
}
else if(subState == EXECUTION_SUB_STATE_RUN)
{
sendSubState_Execution(obj,EXECUTION_SUB_STATE_LAST);
}
else if(subState == EXECUTION_SUB_STATE_LAST || subState == EXECUTION_SUB_STATE_GRAB_EX || subState == EXECUTION_SUB_STATE_FAILED) //虞颤 部釭贼 stand
{
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
removeAllExcutionAppendage(obj);
}
}
// onAttack 属寥?热 殓栖棻
function onAttack_Execution(obj, damager, boundingBox)
{
local sq_var = obj.getVar();
local subState = obj.getSkillSubState();
if(subState == EXECUTION_SUB_STATE_GRAB)
{
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager,"Appendage/Character/executionAppendage.nut")) // 桧嘐 称横 毡朝 拥菟擎 称桧虽 强朝棻.
{
local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_EXECUTION, false, "Appendage/Character/executionAppendage.nut", true);
if(masterAppendage) {
sq_HoldAndDelayDie(damager, obj, true, true, true, 300, 300, ENUM_DIRECTION_NEUTRAL , masterAppendage);
damager.setCurrentDirection(sq_GetOppositeDirection(obj.getDirection()));
sq_var.push_obj_vector(damager);
}
}
}
local isLastThrowMode = sq_var.getBool(EXC_READY_FOR_THROW);
if(isLastThrowMode && damager)
CNSquirrelAppendage.sq_RemoveAppendage(damager, "Appendage/Character/executionAppendage.nut");
}
function onKeyFrameFlag_Execution(obj,flagIndex)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
// 赅苌 横?蛤虽缣 瞪殖
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
local ao = sq_GetCNRDObjectToActiveObject(damager);
if(ao) {
local appendage = ao.GetSquirrelAppendage("Appendage/Character/executionAppendage.nut");
if(appendage)
appendage.setState(flagIndex,sq_GetGlobalIntVector());
}
}
if(flagIndex == 18)
{
}
else if(flagIndex == 30 && obj.isMyControlObject()) // 濩挤
{
local fScreen = sq_flashScreen(obj,80,0,0,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(fScreen,0,240,320,250, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetShake(obj,6,400);
sq_setFullScreenEffect(obj,"Character/Priest/Effect/Animation/execution/grabEx/finish.ani");
}
else if(flagIndex == 11) // 阶缣 顶溥 蔼
{
sq_SetMyShake(obj,7,400);
sq_CreateParticle("Character/Priest/Effect/Particle/ExcutionStonsSmall.ptl", obj, -200, 0, 0, true, 30, 0,2);
}
else if(flagIndex == 12) //
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
local state = obj.sq_GetSTATE();
obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION, state, 1,-1,1.0);
for(;i<objectsSize;++i)
{
local damager = sq_GetCNRDObjectToCollisionObject(sq_var.get_obj_vector(i));
if(damager && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager))
sq_SendHitObjectPacket(obj,damager,0,0,0);
}
obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION, state, 2,-1,1.0);
}
else if(flagIndex == 19)
sq_SetMyShake(obj,4,80);
else if(flagIndex == 21)
sq_SetMyShake(obj,4,80);
else if(flagIndex == 23)
sq_SetMyShake(obj,4,80);
else if(flagIndex == 26)
sq_SetMyShake(obj,5,200);
else if(flagIndex == 32 && obj.isMyControlObject()) // 濩挤
{
local fScreen = sq_flashScreen(obj,80,0,0,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(fScreen,0,240,320,250, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetShake(obj,6,400);
sq_setFullScreenEffect(obj,"Character/Priest/Effect/Animation/execution/grabEx/finish.ani");
}
else if(flagIndex == 27 && obj.isMyControlObject())
{
local currentAni = obj.getCurrentAnimation();
local frameDelay = currentAni.getDelayBySpeedRate(1);
local fScreen = sq_flashScreen(obj,0,frameDelay*7,0, 200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(fScreen,0,0,frameDelay*2,100, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_6);
local state = obj.sq_GetSTATE();
obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION, state, 6,-1,1.0);
obj.stopTimeEvent(0);
}
else if(flagIndex == 28)
sq_SetMyShake(obj,6,160);
else if(flagIndex == 30) {
if(obj.isMyControlObject()) {
sq_SetMyShake(obj,6,400);
local currentAni = obj.getCurrentAnimation();
local frameDelay = currentAni.getDelayBySpeedRate(1);
local fScreen = sq_flashScreen(obj, frameDelay*2, frameDelay*5, frameDelay*3, 200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
}
sq_CreateParticle("Character/Priest/Effect/Particle/ExcutionStonsLarge.ptl", obj, 180, 5, 250, true, 30, 0, 2);
sq_var.setBool(EXC_READY_FOR_THROW,true);
}
else if(flagIndex == 31) {
removeAllExcutionAppendage(obj);
}
return true;
}

View File

@@ -0,0 +1,160 @@
//------------------------------------------------------------------------------
function IsCheckUseFallingSoul(obj)
{
if(!obj) return false;
local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽
if(!appendage) return false;
if(appendage.sq_var.size_vector() > 1) {
// 7. 学葆啪桧虽 模赅榆
local skillLevel = sq_GetSkillLevel(obj, SKILL_FALLING_SOUL);
local consumeMax = sq_GetIntData(obj, SKILL_FALLING_SOUL, 0, skillLevel);
local time = sq_GetLevelData(obj, SKILL_FALLING_SOUL, 1, skillLevel);
local darkPower = sq_GetLevelData(obj, SKILL_FALLING_SOUL, 2, skillLevel);
//DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂
//DS_APEND_GAUGE <- 1 // ?营 学葆啪桧虽 热纂
local consumeValue = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0
if(consumeValue == 0)
{
obj.startCantUseSkillWarning();
if (obj.isMessage())
sq_AddMessage(29002); // 29002>学葆啪桧虽陛 睡褶?栖棻.
return false;
}
if(consumeMax < consumeValue)
consumeValue = consumeMax;
local consumeRate = sq_GetLevelData(obj, SKILL_FALLING_SOUL, 0, skillLevel);
consumeRate = consumeRate.tofloat()/100.0;
//print("---- Falling Soul info -----------------------")
//print("consume : " + consumeValue + " / " + consumeRate);
local magicPowerUpValue = (consumeValue*consumeRate) + 0.5;
print("magicPowerUpValue : " + magicPowerUpValue);
magicPowerUpValue = magicPowerUpValue.tointeger();
print("magicPowerUpValue : " + magicPowerUpValue);
//print("time : " + time);
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_FALLING_SOUL, false, "FallingSoul", false);
// 帼? UI 轿溘 横?萄蒂 勘横舆晦 瞪缣 ?轿肾横捡 ?栖棻..
local skill_level = sq_GetSkillLevel(obj, SKILL_FALLING_SOUL);
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FALLING_SOUL, skill_level);
//
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
local change_appendage = appendage.sq_getChangeStatus("FallingSoulMagic");
if(!change_appendage) {
change_appendage = appendage.sq_AddChangeStatus("FallingSoulMagic",obj, obj, time, CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicPowerUpValue.tointeger());
}
// 奢楼隶陛, 檩楼撩 荡?隶陛, 赀楼撩 荡?马模
if(change_appendage) {
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicPowerUpValue.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, darkPower.tofloat());
//local appendageInfo = change_appendage.getAppendageInfo();
//appendageInfo.setValidTime(time);
}
local appendageInfo = appendage.getAppendageInfo();
appendageInfo.setValidTime(time);
consumeDevilGauge(obj, consumeValue); // 学葆啪桧虽蒂 还罹鄹栖棻..
return true;
}
return false;
}
function checkCommandEnable_FallingSoul(obj)
{
if(!obj) return false;
local bRet = true;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
////警蜗晦 饷薯 蒙机 (2012.04.12) bRet = obj.sq_IsCommandEnable(SKILL_FALLING_SOUL);
bRet = obj.sq_IsCommandEnable(SKILL_FALLING_SOUL);
}
if(!bRet) return false;
local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽
if(!appendage)
return false;
local consumeValue = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0
if(consumeValue == 0)
return false;
return true;
}
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_FallingSoul(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FALLING_SOUL);
if(b_useskill) {
if(IsCheckUseFallingSoul(obj)) { // 学葆啪桧虽煎 籀?击 噩 热 毡蝗栖棻..
if(obj.isMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0); //THROW_TYPE_SKILL
obj.sq_IntVectPush(SKILL_FALLING_SOUL);
obj.sq_IntVectPush(500);
obj.sq_IntVectPush(500);
obj.sq_IntVectPush(3);
obj.sq_IntVectPush(4); //SPEED_TYPE_CAST_SPEED
obj.sq_IntVectPush(4); //SPEED_TYPE_CAST_SPEED
obj.sq_addSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true);
}
return true;
}
}
return false;
}
//------------------------------------------------------------------------------
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_FallingSoul(obj, state, datas, isResetTimer)
{
if(!obj) return;
}

View File

@@ -0,0 +1,591 @@
// sub state
S_FASTMOVE_PLAY <- 0
S_FASTMOVE_LOOP <- 1
S_FASTMOVE_PRO <- 2
S_FASTMOVE_END <- 3
// 蝶鹧? 等桧颤 樯策蝶
FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除
FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问
FM_SI_MOVE_VEL <- 2 // 体陈 桧翕楼紫
FM_SI_Y_AXIS_MOVESPEED <- 3 // 体陈 鼻? 桧翕楼紫
// 溯涟樯? 樯策蝶
FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
VECTOR_I_SRC_X <- 0 // 卫蒙虽薄击 荡潍? 漱搅 樯策蝶
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_Fastmove(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FASTMOVE);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PLAY); // substate撮?
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_Fastmove(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
return obj.sq_IsCommandEnable(SKILL_FASTMOVE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FASTMOVE);
}
return true;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_fastmove(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻..
obj.setSkillSubState(substate); //set substate
local sq_var = obj.getVar();
sq_var.clear_vector();
sq_var.push_vector(0);
// 蝶鹧? 等桧颤 樯策蝶
//FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除
//FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问
// 溯涟樯? 樯策蝶
//FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
//FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local particle = sq_var.GetparticleCreaterMap("FastMove", "Character/Priest/Effect/Particle/Fastmove.ptl", obj);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_FASTMOVE);
obj.sq_setAttackPowerWithPassive(SKILL_FASTMOVE, state, -1,FM_LI_HIT_RATE,1.0);
if(substate == S_FASTMOVE_PLAY) {
obj.sq_stopMove();
local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME);
sq_var.push_vector(time);
sq_var.push_vector(0);
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE1);
}
else if(substate == S_FASTMOVE_LOOP) {
obj.sq_stopMove();
//obj.sq_var.push_vector(posZ);
//local pAni = obj.sq_getCurrentAni();
sq_var.push_vector(posZ); // index : 1 // srcZ
local jumpstate = 0;
//print("sq_GetVelocityZ:" + sq_GetVelocity(obj, 2));
//print("getDownDownFrame:" + obj.getDownDownFrame() + " getDownUpFrame:" + obj.getDownUpFrame() + " getDownBounceUpFrame:" + obj.getDownBounceUpFrame() + " getDownLieFrame:" + obj.getDownLieFrame());
//print("getJumpUpStartFrame:" + obj.getJumpUpStartFrame() + " getJumpDownStartFrame:" + obj.getJumpDownStartFrame() + " getJumpLandStartFrame:" + obj.getJumpLandStartFrame());
if(posZ > 0) {
//local frmIndex = obj.getDownUpFrame();
if(sq_GetVelocity(obj, 2) < 0) {
jumpstate = 2; // ?鬼酝
}
else {
jumpstate = 1; // 鼻蝓酝
}
}
sq_var.push_vector(jumpstate); // index : 2 // 薄??楚斜 0 : 裔阶缣 毡历击 阳 1 : 萤塭陞 阳 毡历击阳 2 : 顶溥陛朝 牖除 毡历击 阳
sq_var.push_vector(0); // index : 3 //
sq_var.push_vector(0); // index : 4 //
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE2);
}
else if(substate == S_FASTMOVE_PRO) {
//CUSTOM_ATTACKINFO_FASTMOVE
local max_break_v = obj.sq_getVectorData(datas, 1); // 舒廓箪 vector高擎 马楼 高
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE3);
sq_var.push_vector(posX); // 漱搅 樯策蝶 1
local pAni = obj.sq_getCurrentAni();
local initDelay = pAni.GetFrameStartTime(3);
//local vel = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MOVE_VEL); // 桧翕楼紫
local vel = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MOVE_VEL); // 桧翕楼紫
local d = obj.sq_getLevelData(SKILL_FASTMOVE, FM_LI_MOVE_LEN, 1);
//local moveT = (d * 10) / vel; // 桧翕 识 卫除 掘?晦
local v_rate;
if(!(sq_GetCurrentModuleType() == 4) && !(sq_GetCurrentModuleType() == 5)) //?营赅菊桧 pvp赅菊桧釭 fair_pvp赅菊橾 唳办
{
v_rate = (vel - max_break_v);
}
else
{
v_rate = vel;
}
if(v_rate <= 0)
{
v_rate = 1;
}
local moveT = (d * 800) / (v_rate); // 桧翕 识 卫除 掘?晦
sq_var.push_vector(moveT); // 桧翕 识 卫除 漱搅 樯策蝶 2
sq_var.push_vector(0); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
sq_var.push_vector(posY); // 樯策蝶4 夥煎 瞪 posY谢?蒂 荡潍?朝 睡碟殓栖棻.. 体陈奢问桧 鼻?煎 桧翕桧 陛栋?虽贼怃 桧翕?楚斜妇湿 籀葬蒂 亿照啪 ?捡?栖棻..
local len = obj.sq_getLevelData(SKILL_FASTMOVE, FM_LI_MOVE_LEN, 1);
//len = len - break_len; // 马楼胀 高击 梗朝棻..
sq_var.push_vector(len); // 樯策蝶5
sq_var.push_vector(0); // 樯策蝶6 饵遴萄 ?楚斜
local hitCnt = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MULTI_HIT_COUNT); // 棻钦??
local term = moveT / hitCnt;
obj.sq_setShake(obj, 2, moveT);
//obj.sq_setShake(obj, 4, moveT);
// 赝葬?
sq_CurrentAnimationProc(pAni);
// local alsSpinNormal = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sn");
// local alsSpinDodge = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sd");
// if(alsSpinNormal)
// alsSpinNormal.setCustomClipArea(true, 0, 0, 10, 10, false);
//if(alsSpinDodge)
//alsSpinDodge.setCustomClipArea(true, 0, 0, 10, 10, false);
//
sq_var.clear_timer_vector();
sq_var.push_timer_vector();
local t = sq_var.get_timer_vector(0);
//t.setParameter(35, -1);
t.setParameter(60, -1);
t.resetInstant(0);
obj.sq_timer_.setParameter(term, hitCnt);
obj.sq_timer_.resetInstant(initDelay);
// 坚楼桧翕 y蹴 桧翕 陛栋?紫烟 热姜蒙机
// 蝶鹧? 等桧颤煎 鼻?桧翕 楼紫 跷陛
// FM_SI_Y_AXIS_MOVESPEED <- 3 // 体陈 鼻? 桧翕楼紫
local y_axis_movespeed = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_Y_AXIS_MOVESPEED);
//obj.sq_setMoveDirection(ENUM_DIRECTION_DOWN, ENUM_DIRECTION_DOWN);
//obj.setAxisMoveDirection(1, ENUM_DIRECTION_DOWN, true, true);
//obj.sq_setStaticMoveInfo(1, 263, 0, true, 0, 0);
//obj.sq_setStaticMoveInfo(1, 200, 0, true, 0, 0);
//obj.sq_setStaticSpeedInfo(1, 1);
//
obj.sq_setStaticMoveInfo(1,y_axis_movespeed,y_axis_movespeed,true);
obj.sq_setMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
//
}
else if(substate == S_FASTMOVE_END) {
obj.sq_stopMove();
sq_var.push_vector(posX); // 漱搅 樯策蝶 1
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE4);
}
}
// prepareDraw ?热 殓栖棻..
function prepareDraw_fastmove(obj)
{
if(!obj) return;
// local substate = obj.getSkillSubState();
//if(substate == S_FASTMOVE_PRO) {
//local pAni = obj.sq_getCurrentAni();
//local alsSpinNormal = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sn");
//local alsSpinDodge = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sd");
//if(alsSpinNormal)
// alsSpinNormal.setCustomClipArea(true, 5, 5, 5, 5, false);
//if(alsSpinDodge)
// alsSpinDodge.setCustomClipArea(true, 0, 0, 0, 0, false);
// }
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_fastmove(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
local currentT = sq_GetCurrentTime(pAni);
//S_FASTMOVE_PLAY <- 0
//S_FASTMOVE_LOOP <- 1
//S_FASTMOVE_PRO <- 2
//S_FASTMOVE_END <- 3
if(substate == S_FASTMOVE_PLAY) {
}
else if(substate == S_FASTMOVE_LOOP) {
local max_break_v = 0;
//local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME);
local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME); // 体陈桧 谏瞪 当撩肾朝 卫除..
if(obj.isMyControlObject()) {
if(sq_GetSkillLevel(obj, SKILL_FASTMOVE_EX) > 0) // 坚楼桧翕鬼? 妇湿 蒙机
{
local direction = obj.sq_getInputDirection(0);
if(direction == ENUM_DIRECTION_NEUTRAL) {
sq_var.set_vector(4, currentT); // 嬴鼠匙紫 寰扬毓击阳 卫除击 羹觼?棻..
}
if(direction == ENUM_DIRECTION_LEFT || direction == ENUM_DIRECTION_RIGHT) {
if(obj.getDirection() == ENUM_DIRECTION_LEFT || obj.getDirection() == ENUM_DIRECTION_RIGHT) {
if(direction != obj.getDirection()) {
//local max_break = 200;
local max_break = obj.sq_getIntData(SKILL_FASTMOVE_EX, 4); //替葬啪 桧翕?朝 绿徽 (0~300) // 0 戏煎 ?贼 晦襄 楼紫陛 釭螃啪 肾坚 高桧 棺横釭贼 楼紫陛 替溥喂栖棻..
local t = time - sq_var.get_vector(4);
local c_t = currentT - sq_var.get_vector(4);
local v = sq_GetUniformVelocity(0, max_break, c_t, t);
max_break_v = v;
//print("\n v:" + v + " c_t:" + c_t + " t:" + t);
}
}
}
}
}
//sq_var.push_vector(posZ); // index : 1 // srcZ
local srcZ = sq_var.get_vector(1); // 卫瞪 卫蒙 堪桧
local jumpstate = sq_var.get_vector(2); // jumpstate : 0 : 夥款 1 : 鼻蝓酝 2 : ?鬼酝
local up_t = time / 2;
local up_l = 20 + srcZ;
local move_l = 0;
//if(srcZ <= 0) {
if(jumpstate == 0) {
if(up_t > currentT) {
//move_l = sq_GetAccel(0, up_l, currentT, up_t, true);
move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true);
}
else {
move_l = sq_GetAccel(up_l, 0, currentT - up_t, up_t, false);
}
if(currentT >= time) {
obj.setCurrentPos(posX, posY, 0);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PRO);
obj.sq_IntVectPush(max_break_v);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
else {
obj.setCurrentPos(posX, posY, move_l);
}
}
else if(jumpstate == 1) {
up_t = 100;
local down_t = 400;
up_l = 10 + srcZ;
move_l = 0;
//print("\n uprising");
if(up_t > currentT) {
move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true);
}
else {
move_l = sq_GetAccel(up_l, 0, currentT - up_t, down_t, false);
}
if(currentT >= (down_t + up_t) ) {
obj.setCurrentPos(posX, posY, 0);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PRO);
obj.sq_IntVectPush(max_break_v);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
else {
obj.setCurrentPos(posX, posY, move_l);
}
}
else if(jumpstate == 2) { // ?鬼酝
up_t = 50;
local down_t = 400;
up_l = srcZ;
move_l = 0;
//print("\n downing");
if(up_t > currentT) {
move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true);
}
else {
move_l = sq_GetAccel(up_l, 0, currentT - up_t, down_t, false);
}
if(currentT >= (down_t + up_t) ) {
obj.setCurrentPos(posX, posY, 0);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PRO);
obj.sq_IntVectPush(max_break_v);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
else {
obj.setCurrentPos(posX, posY, move_l);
}
}
}
else if(substate == S_FASTMOVE_PRO) {
//FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
//FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
local initDelay = pAni.GetFrameStartTime(2);
if(initDelay <= currentT) {
local delayT = sq_var.get_vector(2); // 漱搅樯策蝶 2 识 桧翕卫除
//print(delayT);
local len = sq_var.get_vector(5);
//print(len);
if(sq_var.get_vector(6) == 0) // 樯策蝶6 饵遴萄 ?楚斜
{
obj.sq_PlaySound("FMOVE_DASH_LOOP", 7575);
sq_var.set_vector(6, 1);
}
local v = sq_GetAccel(0, len, currentT - initDelay, delayT, false);
//local v = sq_GetUniformVelocity(0, len, currentT - initDelay, delayT);
local srcX = sq_var.get_vector(1); // 漱搅 樯策蝶 1
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(sq_var.get_vector(3)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼..
if(sq_var.get_vector(4) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼..
sq_var.set_vector(3, 0); // 桧翕?楚斜蒂 off?鄹栖棻..
sq_var.set_vector(4, posY);
}
}
if(obj.isMovablePos(dstX, posY) && !sq_var.get_vector(3)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕
//obj.setCurrentPos(dstX, posY, posZ);
sq_setCurrentAxisPos(obj, 0, dstX);
}
else { // 桧翕? 热 桡朝 虽羲击 虏陬棻..
sq_var.set_vector(3,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
local offset = dstX - posX;
if(offset != 0) {
if(offset < 0)
offset = -offset;
local totalLen = sq_var.get_vector(5);
sq_var.set_vector(5, totalLen - offset);
}
}
if (obj.sq_timer_.isOnEvent(currentT) == true)
obj.resetHitObjectList();
if(v >= len) { // 迹瞳虽缣 紫杂?击 阳 sub state蒂 夥羞棻..
obj.stopSound(7575);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_END);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
// 坚楼桧翕 y蹴 桧翕 陛栋?紫烟 热姜蒙机
// 蝶鹧? 等桧颤煎 鼻?桧翕 楼紫 跷陛
// 试虽 ??赝 当撩
local t = sq_var.get_timer_vector(0);
if(t.isOnEvent(currentT) == true) {
//local dust_type = obj.getDustParticleType(LANDPARTICLE_MOVE);
//local particleCreater = sq_GetobjectParticleCreaters(dust_type);
//if(obj.getDirection() == ENUM_DIRECTION_LEFT)
//particleCreater.getParticleInfo().xFlip = true;
//else
//particleCreater.getParticleInfo().xFlip = false;
//OBJECT_VECTOR objects = chargeSpearParticleCreator_->createObjectParticle();
local particleCreater = sq_var.GetparticleCreaterMap("FastMove", "Character/Priest/Effect/Particle/Fastmove.ptl", obj);
particleCreater.Restart(0);
//particleCreater.SetPos(posX, posY, posZ-1);
local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20);
particleCreater.SetPos(dstX, posY, posZ+28);
sq_AddParticleObject(obj, particleCreater);
}
}
}
else if(substate == S_FASTMOVE_END) {
local len = 40;
local delaySum = 400;
local v = sq_GetAccel(0, len, currentT, delaySum, false);
//local v = sq_GetUniformVelocity(0, len, currentT - initDelay, delayT);
local srcX = sq_var.get_vector(1); // 漱搅 樯策蝶 1
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, posY)) {
obj.setCurrentPos(dstX, posY, posZ);
}
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_fastmove(obj)
{
if(!obj) return;
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
//
local substate = obj.getSkillSubState();
if(substate == S_FASTMOVE_PLAY) {
}
else if(substate == S_FASTMOVE_LOOP) {
}
else if(substate == S_FASTMOVE_PRO) {
}
else if(substate == S_FASTMOVE_END) {
}
if(bEnd) {
if(substate == S_FASTMOVE_PLAY) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_LOOP);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
//obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == S_FASTMOVE_LOOP) {
}
else if(substate == S_FASTMOVE_PRO) {
//obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == S_FASTMOVE_END) {
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻.
function onEndState_fastmove(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_FASTMOVE) {
obj.stopSound(7575);
}
}
// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛
// 毡棻贼 桧 ?热蒂 桧辨?栖棻.
function onAfterSetState_fastmove(obj, state, datas, isResetTimer)
{
if(!obj) return;
}
// onbeforeattack 属寥?热 殓栖棻
function onBeforeAttack_fastmove(obj, damager, boundingBox)
{
}
// onAttack 属寥?热 殓栖棻
function onAttack_fastmove(obj, damager, boundingBox)
{
}
// onAfterAttack 属寥?热 殓栖棻
function onAfterAttack_fastmove(obj, damager, boundingBox)
{
}
// onBeforeDamage 属寥?热 殓栖棻
function onBeforeDamage_fastmove(obj, attacker, boundingBox)
{
}
// onDamage 属寥?热 殓栖棻
function onDamage_fastmove(obj, attacker, boundingBox)
{
}
// onAfterDamage 属寥?热 殓栖棻
function onAfterDamage_fastmove(obj, attacker, boundingBox)
{
}

View File

Binary file not shown.

View File

@@ -0,0 +1,202 @@
HSS_SUB_STATE_READY <- 0
HSS_SUB_STATE_ATTACK_1 <- 1
HSS_SUB_STATE_ATTACK_2 <- 2
HSS_SUB_STATE_ATTACK_3 <- 3
HSS_SUB_STATE_ATTACK_4 <- 4
HSS_SUB_STATE_LAST <- 5
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_HighSpeedSlash(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_HIGH_SPEED_SLASH);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(HSS_SUB_STATE_READY); // substate撮?
obj.sq_addSetStatePacket(STATE_HIGH_SPEED_SPLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_HighSpeedSlash(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
return obj.sq_IsCommandEnable(SKILL_HIGH_SPEED_SLASH); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_HIGH_SPEED_SLASH);
}
return true;
}
//------------------------------------------------------------------------------
function onProc_HighSpeedSlash(obj)
{
if(!obj) return;
if(obj.isMyControlObject())
{
obj.setSkillCommandEnable(SKILL_HIGH_SPEED_SLASH,true);
local subState = obj.getSkillSubState();
if(subState >= HSS_SUB_STATE_ATTACK_1 && subState <= HSS_SUB_STATE_ATTACK_4)
{
local b_useskill = obj.sq_IsEnterSkill(SKILL_HIGH_SPEED_SLASH);
if(b_useskill != -1)
{
local sq_var = obj.getVar();
sq_var.setBool(2,true);
}
}
}
}
function onEndState_HighSpeedSlash(obj, newState)
{
if(!obj) return;
if(newState != STATE_HIGH_SPEED_SPLASH) {
obj.setCarryWeapon(true);
}
}
function sendSubState_HighSpeedSlash(obj, subState)
{
if(!obj) return;
if(obj.sq_isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState); // substate撮?
obj.sq_addSetStatePacket(STATE_HIGH_SPEED_SPLASH, STATE_PRIORITY_USER, true);
}
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_HighSpeedSlash(obj, state, datas, isResetTimer)
{
local sq_var = obj.getVar();
local subState = obj.sq_getVectorData(datas, 0);
obj.setSkillSubState(subState);
//奢鳝 瞳辨
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH);
if(subState == HSS_SUB_STATE_READY)
{
sq_var.setInt(0,0); // ?营暧 棻钦 ?? ?热 蟾晦?
sq_var.setFloat(1,100.0); // 楼紫 隶陛徽 蟾晦?
sq_var.setBool(2,false); // 郦殓溘 蟾晦?
obj.sq_stopMove();
obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_READY);
obj.sq_PlaySound("PR_FASTCUT_READY");
}
else if(subState == HSS_SUB_STATE_ATTACK_1)
{
if(obj.isCarryWeapon())
obj.setCarryWeapon(false);
obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_1);
obj.sq_PlaySound("FASTCUT_SWISH");
}
else if(subState == HSS_SUB_STATE_ATTACK_2)
{
obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_2);
obj.sq_PlaySound("FASTCUT_SWISH");
}
else if(subState == HSS_SUB_STATE_ATTACK_3)
{
obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_3);
obj.sq_PlaySound("FASTCUT_SWISH");
}
else if(subState == HSS_SUB_STATE_ATTACK_4)
{
obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_4);
obj.sq_PlaySound("FASTCUT_SWISH");
}
else if(subState == HSS_SUB_STATE_LAST)
{
obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_LAST);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH_LAST);
obj.sq_PlaySound("FASTCUT_WHOOSH");
obj.sq_PlaySound("PR_FASTCUT");
}
if(subState >= HSS_SUB_STATE_ATTACK_1 && subState <= HSS_SUB_STATE_ATTACK_4)
{
local isKeyInput = sq_var.getBool(2);
if(isKeyInput) { //郦殓溘桧 毡历棻.
local speedUpRate = sq_var.getFloat(1); // 楼紫 隶陛徽
//楼紫 隶陛.
local intDataSpeedUpRate = obj.sq_getIntData(0);
local maxSpeedUpRate = obj.sq_getIntData(1);
maxSpeedUpRate = maxSpeedUpRate.tofloat();
intDataSpeedUpRate = (intDataSpeedUpRate.tofloat() + 100.0) / 100;
speedUpRate = speedUpRate * intDataSpeedUpRate.tofloat();
if(speedUpRate > maxSpeedUpRate)
speedUpRate = maxSpeedUpRate;
sq_var.setBool(2,false);
sq_var.setFloat(1,speedUpRate); //?营 楼紫 侦褐
if(speedUpRate > 0)
{
local ani = obj.sq_getCurrentAni();
ani.setSpeedRate(speedUpRate);
//print("subState" + subState + "speedUpRate : "+speedUpRate);
}
}
//print("DelaySum : " + obj.sq_getDelaySum());
}
obj.sq_setAttackPowerWithPassive(SKILL_HIGH_SPEED_SLASH, state, -1,1,1.0);
}
function onEndCurrentAni_HighSpeedSlash(obj)
{
local sq_var = obj.getVar();
local subStateIndex = obj.getSkillSubState();
local currentHitCount = sq_var.getInt(0);
local maxHitCount = obj.sq_getLevelData(0);
if(subStateIndex < HSS_SUB_STATE_LAST && currentHitCount >= maxHitCount){
sendSubState_HighSpeedSlash(obj,HSS_SUB_STATE_LAST);
return;
}
sq_var.setInt(0,currentHitCount+1); //棻钦?? ?热 侦褐
if(subStateIndex == HSS_SUB_STATE_READY)
sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_1);
else if(subStateIndex == HSS_SUB_STATE_ATTACK_1)
sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_2);
else if(subStateIndex == HSS_SUB_STATE_ATTACK_2)
sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_3);
else if(subStateIndex == HSS_SUB_STATE_ATTACK_3)
sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_4);
else if(subStateIndex == HSS_SUB_STATE_ATTACK_4)
sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_1);
else if(subStateIndex == HSS_SUB_STATE_LAST){
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onKeyFrameFlag_HighSpeedSlash(obj,flagIndex)
{
//if(flagIndex == 1)
return true;
}

View File

@@ -0,0 +1,252 @@
SUBSTATE_PANDEMONIUM_EX_START <- 0;
SUBSTATE_PANDEMONIUM_EX_END <- 1;
// 渗热 樯策蝶
PEND_EX_MAGIC_FIELD <- 0;
PEND_EX_IS_ENDED <- 1;
PEND_EX_CREATE_DEVIL_COUNT <- 2;
PEND_EX_MAGIC_OVER <- 3;
PEND_EX_FLASHSCREEN <- 4;
PEND_EVENT_TIMER_CREATE_DEVIL <- 0;
function sendSubState_PandemoniumEx(obj, subState)
{
if(!obj) return;
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState); // substate撮?
obj.sq_addSetStatePacket(STATE_PANDEMONIUM_EX, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
//------------------------------------------------------------------------------
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_PandemoniumEx(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_PANDEMONIUM_EX);
if(b_useskill) {
sendSubState_PandemoniumEx(obj,SUBSTATE_PANDEMONIUM_EX_START);
return true;
}
return false;
}
function checkCommandEnable_PandemoniumEx(obj)
{
if(!obj) return false;
return true;
}
//------------------------------------------------------------------------------
function resetDungeonStart_PandemoniumEx(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
{
obj.sq_setXScrollStop(0);
}
//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥.
function onIsCheckHitCollision_PandemoniumEx(obj,damager)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return obj.isMyControlObject();
//晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻.
return (damager && damager.isMyControlObject());
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_PandemoniumEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
local sq_var = obj.getVar();
local subState = obj.sq_getVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState == SUBSTATE_PANDEMONIUM_EX_START) {
obj.sq_stopMove();
if(isAvengerAwakenning(obj)) {
local ani = obj.getVar().GetAnimationMap("PAND_EX_START", "Character/Priest/Animation/AvengerAwakening/PandemoniumStart.ani");
obj.setCurrentAnimation(ani);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AWAKENING_PANDEMONIUM_START);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_PANDEMONIUM_START);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_PANDEMONIUM_EX_ON_START);
}
//罗颤蒂 嫔? 掸?
local dmg = obj.sq_getBonusRateWithPassive(SKILL_PANDEMONIUM_EX, STATE_PANDEMONIUM_EX, 0,1.0);
//学葆? 鼻鹧缣摹 奢问溘 隶?
if(isAvengerAwakenning(obj)) {
local devilPowerUpRate = obj.sq_getIntData(0);
dmg = dmg * (devilPowerUpRate + 100) * 0.01;
}
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),dmg.tointeger());
obj.sq_setXScrollStart(300,150);
}
else if(subState == SUBSTATE_PANDEMONIUM_EX_END) {
if(isAvengerAwakenning(obj)) {
local ani = obj.getVar().GetAnimationMap("PAND_EX_END", "Character/Priest/Animation/AvengerAwakening/PandemoniumEnd.ani");
obj.setCurrentAnimation(ani);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_PANDEMONIUM_END);
}
obj.sq_setXScrollStop(300);
sq_SetMyShake(obj,0,0);
local flashScreenObj = sq_var.getObject(PEND_EX_FLASHSCREEN);
if(flashScreenObj) { // ?楚莲 蝶觼萼 蒙翕酝桧贼 莠
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
if(pflashScreen)
pflashScreen.fadeOut();
}
}
}
function onEndState_PandemoniumEx(obj,newState)
{
if(!obj) return;
if(newState != SUBSTATE_PANDEMONIUM_EX_END) {
local sq_var = obj.getVar();
local magicField = sq_var.getObject(PEND_EX_MAGIC_FIELD);
if(magicField)
magicField.setValid(false);
local magicOver = sq_var.getObject(PEND_EX_MAGIC_OVER);
if(magicOver)
magicOver.setValid(false);
local isEnded = sq_var.getBool(PEND_EX_IS_ENDED);
if(!isEnded) {
local endMagicField = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/end/base.ani",ENUM_DRAWLAYER_NORMAL,true);
local endMagicFieldOver = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/end/OverEffectbase.ani",ENUM_DRAWLAYER_NORMAL,true);
if(isAvengerAwakenning(obj)) {
local xPos = sq_GetDistancePos(endMagicField.getXPos(), obj.getDirection(), 80);
endMagicField.setCurrentPos(xPos, endMagicField.getYPos(), endMagicField.getZPos()+20);
//xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 5);
endMagicFieldOver.setCurrentPos(endMagicField.getXPos(), endMagicField.getYPos()+2, endMagicField.getZPos());
}
sq_var.setBool(PEND_EX_IS_ENDED,true);
}
obj.sq_setXScrollStop(300);
sq_SetMyShake(obj,0,0);
}
}
function onTimeEvent_PandemoniumEx(obj, timeEventIndex, timeEventCount)
{
local sq_var = obj.getVar();
local maxCount = obj.sq_getIntData(1);
local moveSpeed = obj.sq_getIntData(2);
local maxTime = obj.sq_getIntData(3);
local moveMaxDistance = obj.sq_getIntData(4);
local currentCount = sq_var.getInt(PEND_EX_CREATE_DEVIL_COUNT);
if(currentCount == maxCount) {
obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,30,0,false);
sq_var.setInt(PEND_EX_CREATE_DEVIL_COUNT,currentCount+1);
}
else if(currentCount > maxCount) {
sendSubState_PandemoniumEx(obj,SUBSTATE_PANDEMONIUM_EX_END);
return true;
}
else {
local createDevilZ = currentCount%2 == 1 ? sq_getRandom(-20,-45) : sq_getRandom(20,45);
local createDevilSize = sq_getRandom(0,4); // 0桧贼 蒙擎 饵桧锷 斜 桧豭 赎饵桧锷 阔 20%?睦煎 蒙擎啪 釭褥
local devilPowerUpRate = obj.sq_getIntData(0);
local dmgRate = isAvengerAwakenning(obj) ? (devilPowerUpRate + 100)* 0.01 : 1.0;
local dmg = obj.sq_getBonusRateWithPassive(SKILL_PANDEMONIUM_EX, STATE_PANDEMONIUM_EX, 0, dmgRate);
local createXPos = 85;
local createZPos = 64;
if(isAvengerAwakenning(obj)) {
createXPos = 160;
createZPos = 80;
}
obj.sq_binaryData_startWrite(); //当撩 觼晦蒂 姜?怃 尔鸟匙.
obj.sq_binaryData_writeWord(createDevilSize);
obj.sq_binaryData_writeWord(moveSpeed);
obj.sq_binaryData_writeWord(maxTime);
obj.sq_binaryData_writeWord(moveMaxDistance);
obj.sq_binaryData_writeDword(dmg.tointeger());
sq_SendCreatePassiveObjectPacket(obj,24110, 0, createXPos, 1, createZPos + createDevilZ, obj.getDirection());
sq_var.setInt(PEND_EX_CREATE_DEVIL_COUNT,currentCount+1);
local createDevilTimeGap = sq_getRandom(50,90);
obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,createDevilTimeGap,0,false);
}
return false; // true贼 属寥 酝钦
}
function onEndCurrentAni_PandemoniumEx(obj)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_PANDEMONIUM_EX_END)
{
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onKeyFrameFlag_PandemoniumEx(obj,flagIndex)
{
if(flagIndex == 1)
{
local sq_var = obj.getVar();
local magicField = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/start/base.ani",ENUM_DRAWLAYER_NORMAL,false);
local overEffect = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/start/OverEffectbase.ani",ENUM_DRAWLAYER_NORMAL,false);
if(isAvengerAwakenning(obj)) {
local xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 80);
magicField.setCurrentPos(xPos, magicField.getYPos(), magicField.getZPos()+20);
}
sq_var.setObject(PEND_EX_MAGIC_FIELD, magicField);
sq_var.setObject(PEND_EX_MAGIC_OVER, overEffect);
//local xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 10);
overEffect.setCurrentPos(magicField.getXPos(), magicField.getYPos()+2, magicField.getZPos());
local createDevilTimeGap = sq_getRandom(50,90);
obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,createDevilTimeGap,0,true);
sq_SetMyShake(obj,4,3000);
local flashScreenObj = sq_flashScreen(obj,80,5000,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_var.setObject(PEND_EX_FLASHSCREEN,flashScreenObj);
}
return true;
}

View File

@@ -0,0 +1,200 @@
/////////////////////////////////////////////////////////
//
// ?卫粽 蝶鉴籀葬
// ?渡 蝶鉴暧 ?卫粽 蝶鉴暧 Appendage蛔烟/?薯 蛔蛔
//
/////////////////////////////////////////////////////////
function ProcPassiveSkillAvenger(obj, skill_index, skill_level)
{
if (skill_index == SKILL_SCYTHE_MASTERY)
{
if (obj.getWeaponSubType() == WEAPON_SUBTYPE_SCYTHE && skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/scythe_mastery.nut", true);
local attack_speed = sq_GetLevelData(obj, skill_index, 0, skill_level);
local dark_element = sq_GetLevelData(obj, skill_index, 1, skill_level);
local light_element = sq_GetLevelData(obj, skill_index, 2, skill_level) * -1;
local weaponMagicAttack = sq_GetLevelData(obj, skill_index, 3, skill_level);
local change_appendage = appendage.sq_getChangeStatus("scythe");
if(!change_appendage) {
change_appendage = appendage.sq_AddChangeStatus("scythe",obj, obj, 0, CHANGE_STATUS_TYPE_ATTACK_SPEED, true, attack_speed );
}
// 奢楼隶陛, 檩楼撩 荡?隶陛, 赀楼撩 荡?马模
if(change_appendage) {
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, attack_speed.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, dark_element.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, light_element.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, weaponMagicAttack.tofloat());
}
}
else
{
//CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/scythe_mastery.nut");
if(skill_level > 0) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/scythe_mastery.nut", true);
if(appendage) {
local change_appendage = appendage.sq_getChangeStatus("scythe");
if(change_appendage) {
change_appendage.clearParameter();
}
}
}
}
}
else if(skill_index == SKILL_HEARTHINGS)
{
if (skill_level > 0)
obj.sq_addPassiveSkillAttackBonusRate(SKILL_HEARTHINGS,1);
}
if(skill_index == SKILL_DEVILSTRIKE) { // 等网蝶?塭桧醴
if (skill_level > 0) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/ap_avenger_devilstrike.nut", true);
local maxValue = sq_GetIntData(obj, SKILL_DEVILSTRIKE, SI_DS_MAX_DEVIL_GAUGE); // 譆渠 学葆啪桧虽 热纂
if(appendage.sq_var.size_vector() != 5) { // 虽陪 啪桧虽陛 虽表虽朝 帼斜热姜
appendage.sq_var.clear_vector();
appendage.sq_var.push_vector(maxValue); // 譆渠 学葆啪桧虽 热纂
appendage.sq_var.push_vector(0); // ?营 学葆啪桧虽 热纂
appendage.sq_var.push_vector(0); // 虽陪 热纂
appendage.sq_var.push_vector(0); //
appendage.sq_var.push_vector(0);
}
else {
// 虏橾 裟蝶啪桧虽陛 棻脑棻贼 侦褐?丑捡?栖棻..
local max_gauge = appendage.sq_var.get_vector(DS_APEND_MAX_GAUGE);
if(max_gauge != maxValue) {
appendage.sq_var.set_vector(DS_APEND_MAX_GAUGE, maxValue);
}
}
obj.getVar("devilStrike").clear_vector();
obj.getVar("devilStrike").push_vector(0); // character "devilstrike" sqrvar 0廓樯策蝶 晦奖击 当 樯策蝶
obj.getVar("devilStrike").push_vector(0);
obj.getVar("devilStrike").push_vector(0);
obj.getVar("devilStrike").push_vector(0);
obj.getVar("devilStrike").clear_ct_vector(); // 颤桧该 赝葬横
obj.getVar("devilStrike").push_ct_vector();
obj.getVar("devilStrike").push_ct_vector();
obj.getVar("devilStrike").push_ct_vector();
obj.getVar("devilStrike").get_ct_vector(0).Reset();
obj.getVar("devilStrike").get_ct_vector(0).Start(0,0);
appendage.sq_var.clear_timer_vector(); // 颤桧该 赝葬横
appendage.sq_var.push_timer_vector(); // 颤桧该 ?卫
appendage.sq_var.push_timer_vector();
}
else {
CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/ap_avenger_devilstrike.nut");
}
}
if(skill_index == SKILL_NIGHTMARE) { // 陕撩 ?卫粽学跦(48溯涟)
// 陕撩?卫粽 : 学跦(48溯涟)
// 1. 陕撩 渗褐 翕寰 陕撩晦 奢问溘桧 隶陛?
// 2. 等网 蝶?塭桧醴暧 学葆 啪桧虽 离朝榆 隶陛.
// 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻..
if (skill_level > 0) {
obj.sq_addPassiveSkillAttackBonusRate(SKILL_NIGHTMARE,1); // 1.奢问溘 隶陛榆(%)
}
//if (skill_level > 0) {
//local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/ap_avenger_nightmare.nut", true);
//obj.sq_addPassiveSkillAttackBonusRate(SKILL_NIGHTMARE,1);
//}
//else {
//CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/ap_avenger_nightmare.nut");
//}
}
return true;
}
function onUseSkillAvengerPassiveSkill(obj,skillIndex, skillLevel)
{
if(!obj)
return;
local hearthingsLevel = obj.sq_getSkillLevel(SKILL_HEARTHINGS);
local activeRate = obj.sq_getIntData(SKILL_HEARTHINGS,1); //嫦翕 ?睦
if(activeRate >= sq_getRandom(0,100) && hearthingsLevel > 0 && obj.isSkillClassType(skillIndex,3)) {
local time = obj.sq_getLevelData(SKILL_HEARTHINGS,0,hearthingsLevel);
local changeMoveSpeed = obj.sq_getLevelData(SKILL_HEARTHINGS,2,hearthingsLevel);
local changeHp = obj.sq_getLevelData(SKILL_HEARTHINGS,3,hearthingsLevel) * -1;
local changeMp = obj.sq_getLevelData(SKILL_HEARTHINGS,4,hearthingsLevel) * -1;
local currentCount = 1;
local maxCount = obj.sq_getIntData(SKILL_HEARTHINGS,0);
local oldAppendage = obj.GetSquirrelAppendage("Appendage/Character/hearthings.nut");
if(oldAppendage) {
currentCount = currentCount + oldAppendage.sq_var.getInt(0);
if(currentCount > maxCount) // 酝绘 譆渠纂
return;
}
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, true, "Appendage/Character/hearthings.nut", true);
local change_appendage = appendage.sq_getChangeStatus("hearthings");
if(!change_appendage) {
change_appendage = appendage.sq_AddChangeStatus("hearthings",obj, obj, 0, CHANGE_STATUS_TYPE_MOVE_SPEED, true, currentCount.tointeger() * changeMoveSpeed.tointeger() );
}
if(change_appendage) {
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, currentCount.tofloat() * changeMoveSpeed.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, true, currentCount.tofloat() * changeHp.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, true, currentCount.tofloat() * changeMp.tofloat());
}
appendage.getAppendageInfo().setValidTime(time); // 嵘?卫除
appendage.sq_var.setInt(0,currentCount.tointeger());
}
}
function OnBeforeAttackAvengerPassiveSkill(obj, damager, bounding_box, is_stuck)
{
// 饵桧萄 葆蝶搅葬蒂 乾坚 毡棻贼, 陷缣 暧? 颤问 僭葬 奢问击 -> 葆彻 奢问戏煎 夥脯遽棻.
if(!obj) return false;
if (is_stuck == false)
{
local result = CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Appendage/Character/scythe_mastery.nut");
if (result == true)
{
if(obj.getWeaponSubType() == WEAPON_SUBTYPE_SCYTHE) { // 陷 橾阳虏
// state 陛 ?颤橾阳谛 僭葬颤橾阳虏 瞳辨腌栖棻..
local state = obj.sq_GetSTATE();
if(sqr_IsNormalAttack(state) == true) {
local attack_info = sq_GetCurrentAttackInfo(obj);
local eType = sq_GetAttackType(attack_info);
if(eType == ATTACKTYPE_PHYSICAL) {
sq_ChangeAttackTypeToOpposite(attack_info);
}
}
}
}
}
return true;
}

View File

@@ -0,0 +1,421 @@
// 怃粽 蝶才桧?陛 ?蹂 桡棻.
SUBSTATE_POWER_OF_DARKNESS_START <- 0;
SUBSTATE_POWER_OF_DARKNESS_EXPLOSION <- 1;
SUBSTATE_POWER_OF_DARKNESS_LIFT <- 2;
SUBSTATE_POWER_OF_DARKNESS_LAST <- 3;
SUBSTATE_POWER_OF_DARKNESS_END <- 4;
POD_VAR_ARROW_COUNT <- 1; // 饵辨? ?髦 偎热
POD_VAR_CIRCLE_INDEX <- 2; // 当撩胀 掘羹 樯策蝶
POD_VAR_CIRCLE_OBJECT_GROUP <- 3; // 当撩胀 掘羹 斜瑜
POD_VAR_CIRCLE_OBJECT_UID <- 4; // 当撩胀 掘羹 UID
POD_VAR_CIRCLE_OBJECT <- 5; // 当撩胀 掘羹
POD_VAR_SUPERARMOR <- 6; // 蓬?嬴该 横?蛤虽
POD_VAR_FLASHSCREEN <- 7; // 当撩胀 掘羹
POD_TIME_EVENT_ARROWGAP <- 1; // 颤歜 桧渐? : ?髦 嫦翕 卫除 除问
POD_TIME_EVENT_LIFTTIME <- 2; // 颤歜 桧渐? : 跨蝶搅 嗥办朝 卫除
POD_TIME_EVENT_LASTDELAY <- 3; // 颤歜 桧渐? : 虞颤梱虽 裁溯桧
POD_TIME_EVENT_LAST <- 4; // 颤歜 桧渐? : 虞颤? 裁溯桧
POD_SOUND_INDEX_LOOP <- 92716;
function sendSubState_PowerOfDarkness(obj, subState)
{
if(!obj) return;
if(obj.isMyControlObject()) {
local sq_var = obj.getVar();
local circleGroup = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_GROUP);
local circleUID = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_UID);
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState); // substate撮?
obj.sq_IntVectPush(circleGroup);
obj.sq_IntVectPush(circleUID); // 掘羹暧 UID 撮?
obj.sq_addSetStatePacket(STATE_POWER_OF_DARKNESS, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
//------------------------------------------------------------------------------
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_PowerOfDarkness(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_POWER_OF_DARKNESS);
if(b_useskill) {
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_START);
return true;
}
return false;
}
//------------------------------------------------------------------------------
function isGrabable_PowerOfDarkness(obj)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
if(objectsSize == 0)
return false;
for(;i<objectsSize;++i)
{
local damager = sq_GetCNRDObjectToCollisionObject(sq_var.get_obj_vector(i));
if(damager && !sq_IsGrabable(obj,damager)) {
return false;
}
}
return true;
}
function resetDungeonStart_PowerOfDarkness(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
{
obj.sq_setXScrollStop(0);
}
//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥.
function onIsCheckHitCollision_PowerOfDarkness(obj,damager)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return obj.isMyControlObject();
//晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻.
return (damager && damager.isMyControlObject());
}
function isForceHitCheck_PowerOfDarkness(obj)
{
if(obj.isMyControlObject()) {
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START) { //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return true;
}
}
return false;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_PowerOfDarkness(obj, state, datas, isResetTimer)
{
if(!obj) return;
local sq_var = obj.getVar();
local subState = obj.sq_getVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState == SUBSTATE_POWER_OF_DARKNESS_START)
{
sq_var.clear_obj_vector();
obj.sq_stopMove();
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_START);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_POWER_OF_DARKNESS);
obj.sq_setAttackPowerWithPassive(SKILL_POWER_OF_DARKNESS, STATE_POWER_OF_DARKNESS, -1, 0, 1.0);
if(!sq_isPVPMode()) // 念潍缣怃朝 蓬嬴 寰匐
obj.sq_setSuperArmor(POD_VAR_SUPERARMOR);
local sk = sq_GetSkill(obj,SKILL_POWER_OF_DARKNESS);
local pw = sq_GetAttackBonusRate(sk,0,1.0);
sq_var.setInt(POD_VAR_CIRCLE_INDEX,-1);
obj.sq_PlaySound("PR_DARKPOWER_READY");
obj.sq_setXScrollStart(150,300);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_LIFT)
{
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
local liftTime = obj.sq_getIntData(3);
local x = obj.sq_getIntData(1);
local z = obj.sq_getIntData(2);
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
local aoDamager = sq_GetCNRDObjectToActiveObject(damager);
if(aoDamager) {
local masterAppendage = aoDamager.GetSquirrelAppendage("Appendage/Character/ap_PowerOfDarkness.nut");
sq_AccelMoveToAppendageForce(aoDamager, obj, obj, x, 0, z - aoDamager.getObjectHeight()/2, liftTime, true, masterAppendage,true);
}
}
local circleGroup = obj.sq_getVectorData(datas, 1);
local circleUID = obj.sq_getVectorData(datas, 2);
local darkCircle = sq_GetObject(obj,circleGroup,circleUID);
if(darkCircle) {
local damager = sq_var.get_obj_vector(0);
darkCircle.setCurrentPos(darkCircle.getXPos(),damager.getYPos()+1,darkCircle.getZPos()); // y蹴 谢? 蜃跷晦
sq_moveWithParent(damager,darkCircle);
}
sq_SetMyShake(obj,5,160);
obj.setTimeEvent(POD_TIME_EVENT_LIFTTIME,liftTime,1,false);
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_STAY);
sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/PowerOfDarkness/guard_attack_none.ani",172,0,0);
sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/PowerOfDarkness/guard_attack_none_r.ani",172,0,0);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_LAST)
{
local gap = obj.sq_getIntData(5);
obj.setTimeEvent(POD_TIME_EVENT_LASTDELAY,gap,1,false);
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_STAY);
obj.stopSound(POD_SOUND_INDEX_LOOP);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_EXPLOSION)
{
local gap = obj.sq_getIntData(4);
obj.setTimeEvent(POD_TIME_EVENT_ARROWGAP,gap,0,true);
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_STAY);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_END)
{
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_END);
obj.sq_setXScrollStop(300);
}
}
function onEndState_PowerOfDarkness(obj,newState)
{
if(!obj) return;
if(newState != STATE_POWER_OF_DARKNESS) {
obj.sq_removeSuperArmor(POD_VAR_SUPERARMOR);
local sq_var = obj.getVar();
local darkCircleObject = sq_var.getObject(POD_VAR_CIRCLE_OBJECT);
local darkCircle = sq_GetCNRDObjectToCollisionObject(darkCircleObject);
local flashScreenObj = sq_var.getObject(POD_VAR_FLASHSCREEN);
if(flashScreenObj) { // ?楚莲 蝶觼萼 蒙翕酝桧贼 莠
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
if(pflashScreen)
pflashScreen.fadeOut();
}
sq_moveWithParent(null,darkCircle);
obj.sq_setXScrollStop(300);
if(darkCircle && darkCircle.isMyControlObject()) {
sendPowerOfDarknessCircleSubState(darkCircle,POWER_OF_DARKNESS_CIRCLE_DESTROY);
}
removeAllPoweOfDarknessAppendage(obj);
}
}
// ?姜胀 楠浑击 嫔? ?热
function getArrowCreateAngle(areaIndex)
{
areaIndex = areaIndex%6;
local minAngle = 0;
local maxAngle = 0;
if(areaIndex == 0) // 250~310 紫
minAngle = 250, maxAngle = 310;
else if(areaIndex == 1) // 10~70 紫
minAngle = 10, maxAngle = 70;
else if(areaIndex == 2) // 70~130 紫
minAngle = 70, maxAngle = 130;
else if(areaIndex == 3) // 190~250紫
minAngle = 190, maxAngle = 250;
else if(areaIndex == 4) // 310~370紫
minAngle = 310, maxAngle = 370;
else if(areaIndex == 5) // 130~190紫
minAngle = 130, maxAngle = 190;
local angle = sq_getRandom(minAngle,maxAngle);
return angle.tofloat() * 0.0174532;
}
function createPowerOfDarknessArrow(obj, angle)
{
local sq_var = obj.getVar();
local circleGroup = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_GROUP);
local circleUID = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_UID);
local darkCircle = sq_GetObject(obj,circleGroup,circleUID);
if(darkCircle) {
local x = darkCircle.getXPos() > obj.getXPos() ? darkCircle.getXPos() - obj.getXPos() : obj.getXPos() - darkCircle.getXPos();
local z = darkCircle.getZPos() > obj.getZPos() ? darkCircle.getZPos() - obj.getZPos() : obj.getZPos() - darkCircle.getZPos();
local rate = obj.sq_getBonusRateWithPassive(SKILL_POWER_OF_DARKNESS, STATE_POWER_OF_DARKNESS,2,1.0);
obj.sq_binaryData_startWrite();
obj.sq_binaryData_writeFloat(angle.tofloat());
obj.sq_binaryData_writeDword(rate);
sq_SendCreatePassiveObjectPacket(obj,24108, 0, x, sq_getRandom(-1,2), z, obj.getDirection());
}
}
//POD_TIME_EVENT_ARROWGAP <- 1; // 颤歜 桧渐? : ?髦 嫦翕 卫除 除问
//POD_TIME_EVENT_LIFTTIME <- 2; // 颤歜 桧渐? : 跨蝶搅 嗥办朝 卫除
function onTimeEvent_PowerOfDarkness(obj, timeEventIndex, timeEventCount)
{
local subState = obj.getSkillSubState();
if(timeEventIndex == POD_TIME_EVENT_LIFTTIME) {
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION);
}
else if(timeEventIndex == POD_TIME_EVENT_ARROWGAP) {
local sq_var = obj.getVar();
local current = sq_var.getInt(1);
sq_var.setInt(1,current+1);
local maxArraw = obj.sq_getLevelData(1);
if(current >= maxArraw) // 卫除 裁溯桧蒂 觊涡 舆晦 嫔?
{
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_LAST);
return true;
}
else if(current < maxArraw)
{
createPowerOfDarknessArrow(obj,getArrowCreateAngle(current));
}
return false;
}
else if(timeEventIndex == POD_TIME_EVENT_LASTDELAY)
{
local lastMaxArrow = obj.sq_getIntData(6);
local i = 0;
for(i=0;i<lastMaxArrow;++i){
local angle = 360/lastMaxArrow * i;
angle = angle * 0.0174532;
createPowerOfDarknessArrow(obj,angle.tofloat());
}
obj.sq_PlaySound("PR_DARKPOWER");
obj.setTimeEvent(POD_TIME_EVENT_LAST,900,1,false);
return true;
}
else if(timeEventIndex == POD_TIME_EVENT_LAST)
{
sq_flashScreen(obj,160,0,0,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END);
return true;
}
else
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END);
return true; // true贼 属寥 酝钦
}
function onEndCurrentAni_PowerOfDarkness(obj)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START)
{
local sq_var = obj.getVar();
local objectsSize = sq_var.get_obj_vector_size();
if (objectsSize > 0)
{
if(isGrabable_PowerOfDarkness(obj))
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_LIFT);
else
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION);
obj.playSound("DARKPOWER_CATCH_LOOP",POD_SOUND_INDEX_LOOP,0,0,0);
}
else
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_END)
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
// onAttack 属寥?热 殓栖棻
function onAttack_PowerOfDarkness(obj, damager, boundingBox)
{
local sq_var = obj.getVar();
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START)
{
local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_EXECUTION, false, "Appendage/Character/ap_PowerOfDarkness.nut", true);
if(masterAppendage) {
if(sq_IsHoldable(obj,damager)) {
sq_HoldAndDelayDie(damager, obj, true, true, true, 300, 300, ENUM_DIRECTION_NEUTRAL , masterAppendage);
damager.setCurrentDirection(sq_GetOppositeDirection(obj.getDirection()));
}
local collectingTime = obj.sq_getIntData(0);
if(sq_IsGrabable(obj,damager) && sq_IsHoldable(obj,damager) && !sq_IsFixture(damager)) //濩击热 毡朝 鼻鹧
sq_MoveToAppendageForce(damager, obj, obj, 160, 0, 90 - damager.getObjectHeight()/2, collectingTime, true, masterAppendage);
else if(sq_IsHoldable(obj,damager) && !sq_IsFixture(obj))
sq_MoveToAppendageForce(damager, obj, obj, 160, 0, damager.getZPos(), collectingTime, true, masterAppendage);
obj.sq_PlaySound("DARKPOWER_CATCH");
sq_var.push_obj_vector(damager);
}
}
}
function removeAllPoweOfDarknessAppendage(obj)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
if(damager)
CNSquirrelAppendage.sq_RemoveAppendage(damager, "Appendage/Character/ap_PowerOfDarkness.nut");
sq_SimpleMoveToNearMovablePos(damager,200);
}
}
function onKeyFrameFlag_PowerOfDarkness(obj,flagIndex)
{
local sq_var = obj.getVar();
if(flagIndex == 0 && obj.isMyControlObject())
{
obj.sq_binaryData_startWrite(); //蟾晦?蒂 嫔? 涡嘐 啭萄
obj.sq_binaryData_writeDword(0);
local circleIndex = sq_SendCreatePassiveObjectPacket(obj,24107, 0, 172, 2, 97,obj.getDirection());
sq_var.setInt(POD_VAR_CIRCLE_INDEX,circleIndex);
}
else if(flagIndex == 1 && obj.isMyControlObject())
{
local flashScreenObj = sq_flashScreen(obj,80,99990,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_var.setObject(POD_VAR_FLASHSCREEN,flashScreenObj);
}
else if(flagIndex == 2 && obj.isMyControlObject()) // 赅击 偌羹酝缣 寰 濩?朝 拥陛 毡棻贼 夥煎 ?嫦 赅萄煎
{
local objectsSize = sq_var.get_obj_vector_size();
if(!isGrabable_PowerOfDarkness(obj) && objectsSize > 0)
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION);
}
return true;
}
function onCreateObject_PowerOfDarkness(obj, createObject)
{
local sq_var = obj.getVar();
local cuid = sq_GetUniqueId(createObject);
local circleIndex = sq_var.getInt(POD_VAR_CIRCLE_INDEX);
if(cuid == circleIndex) {
local group = sq_GetGroup(createObject);
local uid = sq_GetUniqueId(createObject);
sq_var.setObject(POD_VAR_CIRCLE_OBJECT, createObject);
sq_var.setInt(POD_VAR_CIRCLE_OBJECT_GROUP, group);
sq_var.setInt(POD_VAR_CIRCLE_OBJECT_UID, uid);
}
}

164
character/priest/ripper.nut Normal file
View File

@@ -0,0 +1,164 @@
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_Ripper(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_RIPPER);
if(b_useskill) {
obj.sq_addSetStatePacket(STATE_RIPPER, STATE_PRIORITY_USER, false);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_Ripper(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_RIPPER);
}
return true;
}
//------------------------------------------------------------------------------
//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥.
function onIsCheckHitCollision_Ripper(obj,damager)
{
return obj.isMyControlObject();
}
function isForceHitCheck_Ripper(obj)
{
return obj.isMyControlObject();
}
function onAttack_Ripper(obj,damager,boundingBox)
{
local sq_var = obj.getVar();
sq_var.setBool(0,true); // 奢问 撩奢
local isLast = sq_var.getBool(1); // 虞颤
if (!isLast) {
sq_var.push_obj_vector(damager);
sq_AtrractionForce(obj, damager, false, 270, -1, 2000.0, 1500.0, false); // 尘横顶晦
sq_EffectLayerAppendage(damager,sq_RGB(255,255,255),155,0,80,0);
}
}
function onEndState_Ripper(obj, newState)
{
if(!obj) return;
local sq_var = obj.getVar();
sq_var.clear_obj_vector();
local ani = sq_GetCurrentAnimation(obj);
if(ani){
local sizeRate = sq_var.getFloat(2);
ani.setAttackBoundingBoxSizeRate(1.0/sizeRate,true);
}
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_Ripper(obj, state, datas, isResetTimer)
{
if(!obj) return;
local sq_var = obj.getVar();
obj.sq_stopMove();
obj.sq_setCurrentAnimation(CUSTOM_ANI_RIPPER);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_RIPPER);
obj.sq_setAttackPowerWithPassive(SKILL_RIPPER, state, -1,0,1.0);
sq_var.setBool(0,false);
sq_var.setBool(1,false);
sq_var.setFloat(2,1.0);
obj.sq_setXScroll(180,500,1500,100);
obj.sq_PlaySound("PR_RIPPER_READY");
}
function onEndCurrentAni_Ripper(obj)
{
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
obj.sq_setfindNearMovablePos(obj.getXPos(),obj.getYPos(),50,1,5);
}
function onKeyFrameFlag_Ripper(obj,flagIndex)
{
local isMycontrolObject = obj.sq_isMyControlObject();
local sq_var = obj.getVar();
if(isMycontrolObject && flagIndex == 1) // 霞翕,廓翻 桧??朝 釭缣啪虏 尔樯棻.
obj.sq_setShake(obj,4,60);
else if(isMycontrolObject && flagIndex == 2)
obj.sq_setShake(obj,2,30);
else if(flagIndex == 3)
{
if(isMycontrolObject)
obj.sq_setShake(obj,3,60);
}
else if(isMycontrolObject && flagIndex == 4)
obj.sq_setShake(obj,2,30);
else if(flagIndex == 6)
{
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_RIPPER);
local state = obj.sq_GetSTATE();
obj.sq_setAttackPowerWithPassive(SKILL_RIPPER, state, -1,0,1.0);
}
else if(flagIndex == 5 && sq_var.getBool(0))
{
local state = obj.sq_GetSTATE();
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_RIPPER_EXPLOSION);
// 葬? ?撩 蝶鉴桧贼
local exSkillLevel = sq_GetSkillLevel(obj,SKILL_RIPPER_EX);
if(!sq_isPVPMode() && exSkillLevel > 0) {
local sizeRate = sq_GetLevelData(obj, SKILL_RIPPER, 2, exSkillLevel);
sizeRate = sizeRate * 0.01;
local ani = sq_GetCurrentAnimation(obj);
if(ani){
ani.setAttackBoundingBoxSizeRate(sizeRate,true);
sq_var.setFloat(2,sizeRate);
}
}
obj.sq_setAttackPowerWithPassive(SKILL_RIPPER, state, -1,1,1.0);
sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/Ripper/etc/33p_1_burst1-handup_normal.ani",0,1,0);
sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/Ripper/etc/33p_burst1-handup_normal.ani",0,1,0);
if(isMycontrolObject)
{
local flash = sq_flashScreen(obj,80, 80, 0, 255, sq_RGBA(255,255,255,128),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(flash,0,0,400,255,sq_RGBA(0,0,0,180),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM);
local objListSize = sq_var.get_obj_vector_size();
for(local i =0;i<objListSize;++i)
{
local obj = sq_var.get_obj_vector(i);
if(obj == null)
continue;
sq_EffectLayerAppendage(obj,sq_RGB(0,0,0),255,0,160,160);
}
}
}
else if(flagIndex == 7 && sq_var.getBool(0))
{
sq_var.setBool(1,true);
if(isMycontrolObject)
sq_SendCreatePassiveObjectPacket(obj,24102, 0, 267, 1, 83,obj.getDirection());
obj.sq_PlaySound("R_PR_RIPPER");
}
return true;
}

View File

@@ -0,0 +1,391 @@
S_SPINCUTTER_THROW <- 0
S_SPINCUTTER_RECALL <- 1
S_SPINCUTTER_ARRIVAL <- 2
CSI_THROW_LEN <- 0
CSI_STAY_TIME <- 1
CSI_SPIN_HIT_COUNT <- 2
I_OBJ_VECTOR_ROPE_ANI <- 0
I_OBJ_VECTOR_ROPE_DODGE_ANI <- 1
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_Spincutter(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_SPINCUTTER);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_SPINCUTTER_THROW); // substate撮?
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_SPINCUTTER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_Spincutter(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_SPINCUTTER); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_SPINCUTTER);
}
return true;
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_spincutter(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local sq_var = obj.getVar();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == S_SPINCUTTER_THROW) {
local startT = pAni.GetFrameStartTime(1);
local pushT = pAni.getDelaySum(0, 6);
local pRope1 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_ANI); // 煎? 拥栖1
local pRope2 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2
local pRopeAniN = pRope1.getCurrentAnimation();
local pRopeAniD = pRope2.getCurrentAnimation();
local ropeObjX = pRope1.getXPos();
local len = sq_var.get_vector(1);
local delay = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_STAY_TIME) + pushT;
local rate = 1.0;
if(currentT > startT && currentT < delay) {
//local v = sq_GetAccel(100, len, currentT, delay, true);
local v = sq_GetAccel(50, len, currentT, 650, true);
rate = v / 1000.0;
}
else if(currentT >= delay) {
rate = len / 1000.0;
}
//print("ropeObjX:" + ropeObjX + "obj.getDirection():" + obj.getDirection() + "len:" + len);
pRopeAniN.setImageRate(rate, 1.0);
pRopeAniD.setImageRate(rate, 1.0);
local size = sq_GetAniRealImageSize(pRopeAniD, ENUM_DIRECTION_RIGHT);
local ropeX = sq_GetDistancePos(ropeObjX, obj.getDirection(), size);
local pSickleObj = obj.sq_GetPassiveObject(24101); // sickle
if(pSickleObj) {
pSickleObj.setCurrentPos(ropeX, posY, posZ);
}
local pSpincutterObj = obj.sq_GetPassiveObject(24100); // 嫦饵?晦 瞪 蝶?醴搅陛 亵旎噶 擅戏煎 陛朝 ?娄蒂 翱轿?濠
if(pSpincutterObj) {
pSpincutterObj.setCurrentPos(ropeX, posY - 1, posZ);
}
if(frmIndex >= 2 && frmIndex < 6) {
local flag = sq_var.get_vector(0);
if(flag == 0) {
local offsetLen = 110;
local pRope = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2
local pRopeAniD = pRope.getCurrentAnimation();
local size = sq_GetAniRealImageSize(pRopeAniD, ENUM_DIRECTION_RIGHT);
local distanceL = size + offsetLen;
local state = obj.sq_GetSTATE();
local attack_bonus_rate = obj.sq_getBonusRateWithPassive(SKILL_SPINCUTTER, state, 1 ,1.0);
local skill = sq_GetSkill(obj, SKILL_SPINCUTTER);
local bonus_rate = sq_GetAttackBonusRate(skill, 1, 1.0);
print("\n passive_bonus_rate:" + attack_bonus_rate + " attack_bonus_rate:" + bonus_rate);
local multiHit = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_SPIN_HIT_COUNT);
if(obj.isMyControlObject()) {
obj.sq_binaryData_startWrite();
obj.sq_binaryData_writeDword(multiHit);
obj.sq_binaryData_writeDword(attack_bonus_rate);
obj.sq_p00_sendCreatePassiveObjectPacket(24100, 0, distanceL, -1, 0);
}
sq_var.set_vector(0, 1);
}
}
else if(frmIndex >= 6) {
local delay = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_STAY_TIME);
local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(false);
if(obj.isMyControlObject()) {
obj.setSkillCommandEnable(SKILL_SPINCUTTER, true);
local iEnterSkill = obj.sq_IsEnterSkill(SKILL_SPINCUTTER);
if(currentT >= delay || iEnterSkill != -1) { // 蝶?醴搅 recall 嫦翕
local flag = sq_var.get_vector(2);
if(!flag) {
sq_var.set_vector(2,1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_SPINCUTTER_RECALL);
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_SPINCUTTER, STATE_PRIORITY_USER, true);
}
}
}
}
}
else if(substate == S_SPINCUTTER_RECALL) {
}
else if(substate == S_SPINCUTTER_ARRIVAL) {
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_spincutter(obj)
{
if(!obj) return;
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
//
local subState = obj.getSkillSubState();
if(subState == S_SPINCUTTER_RECALL) {
}
else if(subState == S_SPINCUTTER_ARRIVAL) {
}
if(bEnd) {
if(subState == S_SPINCUTTER_THROW) {
}
else if(subState == S_SPINCUTTER_RECALL) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_SPINCUTTER_ARRIVAL);
obj.sq_IntVectPush(obj.getDirection()); // substate撮?
obj.sq_addSetStatePacket(STATE_SPINCUTTER, STATE_PRIORITY_USER, true);
}
else if(subState == S_SPINCUTTER_ARRIVAL) {
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻.
function onEndState_spincutter(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SPINCUTTER) {
local sq_var = obj.getVar();
local pRope1 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_ANI); // 煎? 拥栖1
local pRope2 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2
if(pRope1) {
pRope1.setValid(false);
}
if(pRope2) {
pRope2.setValid(false);
}
}
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_spincutter(obj, state, datas, isResetTimer)
{
if(!obj) return;
local sq_var = obj.getVar();
local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻..
local direction = obj.sq_getVectorData(datas, 1); // 罗廓箪 substate殓栖棻..
obj.setSkillSubState(substate); //set substate
obj.sq_stopMove();
sq_var.clear_vector();
//sq_var.clear_obj_vector();
sq_var.push_vector(0);
local len = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_THROW_LEN);
sq_var.push_vector(len);
sq_var.push_vector(0);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == S_SPINCUTTER_THROW) {
sq_var.clear_ani_vector(); // 拥栖诡桧暮 漱搅蒂 饷薯?棻..
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_SPINCUTTER); //
local firstAttackRate = obj.sq_getBonusRateWithPassive(SKILL_SPINCUTTER, state, 0, 1.0);
local skill = sq_GetSkill(obj, SKILL_SPINCUTTER);
local bonus_rate = sq_GetAttackBonusRate(skill, 0, 1.0);
print("\n state:" + state + " first_passive_bonus_rate:" + firstAttackRate + " first_attack_bonus_rate:" + bonus_rate);
obj.sq_setCurrentAttackBonusRate(firstAttackRate);
/////////////////////////////////////////////
if(obj.isMyControlObject()) {
obj.sq_binaryData_startWrite();
obj.sq_binaryData_writeDword(firstAttackRate);
obj.sq_p00_sendCreatePassiveObjectPacket(24101, 0, 0, 0, 0);
}
///////////////////////////////////////////////
obj.sq_setCurrentAnimation(CUSTOM_ANI_SPINCUTTER1);
local pAni = obj.sq_getCurrentAni();
local pRopeNormal = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/4_rope_normal_0.ani");
local pRopeDodge = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/5_rope_dodge_0.ani");
//local pSickleAni = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/sickle/2_sickle_00_normal.ani");
pRopeNormal.setImageRate(0.1, 1.0);
pRopeDodge.setImageRate(0.1, 1.0);
local offsetLen = 101;
local ropeX = sq_GetDistancePos(posX, direction, offsetLen);
local pPooledObj = obj.sq_createCNRDPooledObject(pRopeNormal, false);
local pRopeDogeObj = obj.sq_createCNRDPooledObject(pRopeDodge, false);
//local pSickleObj = obj.sq_createCNRDPooledObject(pSickleAni, false);
pPooledObj.setCurrentDirection(direction);
pRopeDogeObj.setCurrentDirection(direction);
//pSickleObj.setCurrentDirection(direction);
pPooledObj.setCurrentPos(ropeX, posY, posZ);
pRopeDogeObj.setCurrentPos(ropeX, posY, posZ);
sq_var.clear_obj_vector();
sq_var.push_obj_vector(pPooledObj);
sq_var.push_obj_vector(pRopeDogeObj);
//sq_var.push_obj_vector(pSickleObj);
obj.sq_AddObject(pPooledObj);
obj.sq_AddObject(pRopeDogeObj);
//obj.sq_AddObject(pSickleObj);
local size = sq_GetAniRealImageSize(pRopeDodge, direction);
//pSickleObj.setCurrentPos(ropeX + size, posY, posZ);
}
else if(substate == S_SPINCUTTER_RECALL) {
obj.sq_setCurrentAnimation(CUSTOM_ANI_SPINCUTTER2);
local pA = obj.sq_getCurrentAni();
obj.sq_setAnimationSpeedRate(pA, 120.0);
local pRope1 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_ANI); // 煎? 拥栖1
local pRope2 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2
if(pRope1) {
pRope1.setValid(false);
}
if(pRope2) {
pRope2.setValid(false);
}
}
else if(substate == S_SPINCUTTER_ARRIVAL) {
obj.sq_setCurrentAnimation(CUSTOM_ANI_SPINCUTTER3);
}
}
// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛
// 毡棻贼 桧 ?热蒂 桧辨?栖棻.
function onAfterSetState_spincutter(obj, state, datas, isResetTimer)
{
if(!obj) return;
}
// onbeforeattack 属寥?热 殓栖棻
function onBeforeAttack_spincutter(obj, damager, boundingBox)
{
}
// onAttack 属寥?热 殓栖棻
function onAttack_spincutter(obj, damager, boundingBox)
{
}
// onAfterAttack 属寥?热 殓栖棻
function onAfterAttack_spincutter(obj, damager, boundingBox)
{
}
// onBeforeDamage 属寥?热 殓栖棻
function onBeforeDamage_spincutter(obj, attacker, boundingBox)
{
}
// onDamage 属寥?热 殓栖棻
function onDamage_spincutter(obj, attacker, boundingBox)
{
}
// onAfterDamage 属寥?热 殓栖棻
function onAfterDamage_spincutter(obj, attacker, boundingBox)
{
}