STATE_SLOW_HEAL <- 0 /// 茧茧? ?犒酝 STATE_REBIRTH_READY_DOWN <- 1 /// HP 0桧 脾. 斜楝釭 嬴霜 DOWN 擎 寰腑挤 STATE_REBIRTH_DOWN <- 2 /// HP 0桧 肾坚 棻遴腑挤. STATE_REBIRTH_DELAY <- 3 /// 睡? 裁溯桧 STATE_DIEHARD_DIE <- 4 // 棻桧 REBIRTH_STATE_NONE <- 0 REBIRTH_STATE_ANGEL_DOWN <- 1 REBIRTH_STATE_EFFECT <- 2 REBIRTH_STATE_END <- 3 VECTOR_I_STATE <- 0 VECTOR_I_FLAG <- 1 VECTOR_I_REBIRTH_STATE <- 2 VECTOR_I_REBIRTH_TIME <- 3 GHOST_TIME <- 2000 ANGEL_DOWN_TIME <- 1000 DOWN_PAUSE_TIME <- 100 function sq_AddFunctionName(appendage) { appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_diehard") appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_diehard") appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_diehard") appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_diehard") appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_diehard") appendage.sq_AddFunctionName("onSetHp", "onSetHp_appendage_atmage_diehard") } function sq_AddEffect(appendage) { } function pushSlowHeal(appendage) { if(!appendage) { return; } local parentObj = appendage.getParent(); local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); if(sqrChr) { local moduleType = sq_GetCurrentModuleType(); local recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_2); // 橾奁湍瞪 //print(" moduleType:" + moduleType); local stage = sq_GetGlobaludpModuleStage(); local dungeon = sq_GetDungeonByStage(stage); local isDimensionDungeon = sq_IsDimensionDungeon(dungeon); // 桧啗湍瞪樯虽 local isDespairTower = sq_IsDespairTower(dungeon); // 瞰蜂暧 鳖樯虽 local isAncientDungeon = sq_IsAncientDungeon(dungeon); // 坚渠湍瞪樯虽 if(isDimensionDungeon) { // 桧啗湍瞪桧塭贼.. //print( " DimensionDungeon"); recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_3); } else if(isDespairTower) { // 瞰蜂暧 鳖桧塭贼.. //print( " DespairTower"); recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_4); } else if(isAncientDungeon) {// 坚渠湍蟒 recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_LVL_COLUMN_IDX_6); } else { if(moduleType == MODULE_TYPE_WARROOM) { // 瞪爵虽羲 //print( " WARROOM"); recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_5); } else if(moduleType == MODULE_TYPE_DEAD_TOWER) { // 饵鳖 //print( " DEAD_TOWER"); recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_4); } } // 鼻鹧桧鼻桧 勘溜棻贼 鼻鹧桧鼻击 ?横鄹栖棻. 酝絮, 轿? if(parentObj.isMyControlObject()) { sq_ReleaseActiveStatus(parentObj, ACTIVESTATUS_POISON); sq_ReleaseActiveStatus(parentObj, ACTIVESTATUS_BLEEDING); } //print(" recoverTime:" + recoverTime); sq_SendMessage(parentObj, OBJECT_MESSAGE_GHOST, 1, 0); sq_PostDelayedMessage(parentObj, OBJECT_MESSAGE_GHOST, 0, 0, 8000); appendage.getVar("diehard").set_vector(0, 1); // 碳饵蒂 ?廓 橾横陬历朝虽 羹觼?朝 ?楚斜殓栖棻. local t = appendage.sq_var.get_ct_vector(0); if(t) { t.Reset(); t.Start(10000,0); } local healAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, SKILL_DIEHARD, true, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut", false); if(healAppendage) { local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_DIEHARD); healAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_DIEHARD, skillLevel); print( " recoverTime:" + recoverTime); healAppendage.sq_SetValidTime(recoverTime); // 罹晦怃 append 蒙机 CNSquirrelAppendage.sq_Append(healAppendage, sqrChr, sqrChr); // healAppendage.getVar("changehp").clear_vector(); healAppendage.getVar("changehp").push_vector(sqrChr.getHpMax()); healAppendage.getVar("changehp").push_vector(sqrChr.getMpMax()); //print(" recoverTime:" + recoverTime); healAppendage.getVar("changehp").push_vector(recoverTime); healAppendage.getVar("changehp").push_vector(0); healAppendage.getVar("changehp").push_vector(0); //local change_appendage = healAppendage.sq_GetCNChangeHp("changehp"); //if(!change_appendage) { //2. 橾钦湍瞪 ?犒卫除 (1/1000蟾) //3. 桧啗湍瞪 ?犒卫除 (1/1000蟾) //4. 鳖 ?犒卫除 (1/1000蟾) //5. 瞪爵虽羲 ?犒卫除 (1/1000蟾) // MODULE_TYPE_WARROOM // 瞪爵虽羲 // MODULE_TYPE_MAIN_GAME // 橾奁湍瞪(桧啗 ??) // MODULE_TYPE_PVP // 念潍 // MODULE_TYPE_FAIR_PVP // 奢念 //local recoverHp_ = sqrChr.getHpMax(); //4000 //2. 橾钦湍瞪 ?犒卫除 (1/1000蟾) //4000 //3. 桧啗湍瞪 ?犒卫除 (1/1000蟾) //4000 //4. 鳖 ?犒卫除 (1/1000蟾) //4000 //5. 瞪爵虽羲 ?犒卫除 (1/1000蟾) //change_appendage = healAppendage.sq_AddCNChangeHp("changehp",parentObj, parentObj, 0, //recoverHp_.tofloat(), recoverTime); } } } } function proc_appendage_atmage_diehard(appendage) { if(!appendage) { return; } local parentObj = appendage.getParent(); if(!parentObj) { appendage.setValid(false); return; } local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE); if(state_ == STATE_SLOW_HEAL) { if(parentObj.isGhostMode()) { // 鼠瞳虽楼 鼻鹧塭贼.. if (parentObj.getState() != STATE_DIEHARD) { if(appendage.getVar("diehard").get_vector(0) == 1) { local t = appendage.sq_var.get_ct_vector(0); local ghostCurrentTime = t.Get(); if(ghostCurrentTime > 8000) { sq_SendMessage(parentObj, OBJECT_MESSAGE_GHOST, 0, 0); appendage.getVar("diehard").set_vector(0, 0); } } } } return; } local currentT = appendage.getTimer().Get(); local rebirthTime_ = appendage.sq_var.get_vector(VECTOR_I_REBIRTH_TIME); //print(" proc_appendage_atmage_diehard Ln:" + 163); ////////////////////////////////////////////////////////////////////////////// if (state_ == STATE_REBIRTH_READY_DOWN) { // 棻遴 渠晦酝 ////print(" state_ == STATE_REBIRTH_READY_DOWN"); if (parentObj.getState() == STATE_DIEHARD) { appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_DOWN); // 陈嬴陛朝 翕寰 棻艇 蹂模缣 暧?怃 寞?嫡虽强紫烟 鼠瞳卫除 籀葬 } else if (parentObj.getSendState() != STATE_DIEHARD && parentObj.getSendState() != STATE_HOLD && parentObj.getState() != STATE_HOLD && parentObj.getSendState() != STATE_DOWN && parentObj.getState() != STATE_DOWN && parentObj.getSendState() != STATE_DAMAGE && parentObj.getState() != STATE_DAMAGE ) { if (parentObj.isMyControlObject()) { local pIntVec = sq_GetGlobalIntVector(); sq_IntVectorClear(pIntVec); sq_IntVectorPush(pIntVec, SUB_STATE_DIEHARD_0); parentObj.addSetStatePacket(STATE_DIEHARD, pIntVec, STATE_PRIORITY_FORCE, false, ""); parentObj.flushSetStatePacket(); } } else { ////print(" it is hold died"); ////print(" state_hold"); } } else if (state_ == STATE_REBIRTH_DOWN) { //print(" proc_appendage_atmage_diehard Ln:" + 201); ////print(" state_ == STATE_REBIRTH_DOWN"); // 棻遴 鼻鹧 if (parentObj.getState() == STATE_DIEHARD) { local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); if(sqrChr) { if(sqrChr.getSkillSubState() == SUB_STATE_DIEHARD_1) { // 棻遴缣怃 ?犒腑棻贼 : 唳霜 籀葬 // 鼠瞳卫除 籀葬 // 橾姜卫除 唳霜 //sq_SetPause(parentObj, PAUSETYPE_OBJECT, DOWN_PAUSE_TIME); // 睡? 卫除 荡潍 local rebirthTime = appendage.getTimer().Get() + GHOST_TIME; appendage.sq_var.set_vector(VECTOR_I_REBIRTH_TIME, rebirthTime); appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_DELAY); appendage.sq_var.set_vector(VECTOR_I_REBIRTH_STATE, REBIRTH_STATE_END); } } } } else if (state_ == STATE_REBIRTH_DELAY) { // 睡? 裁溯桧 if (currentT >= rebirthTime_) { // HP ?犒 // ?廓 ?犒腑棻贼 夥煎 谦猿 print(" go rebirth"); appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_SLOW_HEAL); appendage.sq_var.set_vector(VECTOR_I_REBIRTH_STATE, STATE_SLOW_HEAL); // state } } ////////////////////////////////////////////////////////////////////////////// } function onStart_appendage_atmage_diehard(appendage) { if(!appendage) { return; } local obj = appendage.getParent(); appendage.sq_var.clear_timer_vector(); appendage.sq_var.push_timer_vector(); appendage.sq_var.push_timer_vector(); //VECTOR_I_STATE <- 0 //VECTOR_I_REBIRTH_STATE <- 1 //VECTOR_I_REBIRTH_TIME <- 2 appendage.sq_var.clear_vector(); appendage.sq_var.push_vector(STATE_SLOW_HEAL); // state appendage.sq_var.push_vector(STATE_SLOW_HEAL); // state appendage.sq_var.push_vector(0); // state appendage.sq_var.push_vector(0); // state local t = appendage.sq_var.get_timer_vector(0); t.setParameter(400, -1); t.resetInstant(0); local t2 = appendage.sq_var.get_timer_vector(1); t2.setParameter(500, -1); t2.resetInstant(0); appendage.sq_var.clear_ct_vector(); appendage.sq_var.push_ct_vector(); local time = appendage.sq_var.get_ct_vector(0); time.Reset(); time.Start(10000,0); appendage.getVar("diehard").clear_vector(); appendage.getVar("diehard").push_vector(0); // 碳饵蒂 ?廓 橾横陬历朝虽 羹觼?朝 ?楚斜殓栖棻. local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); if(sqrObj) { } } function prepareDraw_appendage_atmage_diehard(appendage) { if(!appendage) { return; } local obj = appendage.getParent(); } function onSetHp_appendage_atmage_diehard(appendage, hp, attacker) { if(!appendage) return hp; local obj = appendage.getParent(); if(!obj) return hp; local org_hp = -1; if (hp <= 0) { // 湍瞪? 蹂羶饵? 12.03.16 // 碳饵蒂 鼠卫?坚 钦寞缣 避横帼溥捡 ?朝 牖除桧 毡棻. 桧匙缣 渠? 籀葬蒂 嫔? // attacker (奢问濠)暧 getCurrentAttackInfo 掘亵羹缣 // bool isIgnoreDieHard_; /// 碳饵 ?卫粽 蝶鉴 鼠卫 罹睡 (?问卫 夥煎 阔饵) // 渗热蒂 跷陛?艘棻. // 桧匙桧 true塭贼.. 夥煎 避横捡?匙 if(attacker) { local attackInfo = sq_GetCurrentAttackInfo(attacker); if(attackInfo) { if(attackInfo.isIgnoreDieHard_) return 0; } } local isRelayTimeOut = sq_isSendTimeOutPacket(); // 念潍 莴溯桧 颤歜嬴醒桧塭贼 夥煎 避横捡 ?栖棻. // 念潍 莴溯桧 颤歜嬴醒桧塭贼 夥煎 避横捡 ?栖棻. if (isRelayTimeOut) return 0; // HP蒂 1煎 坚姜?坚 STATE 渗? local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj); if(!sqrChr) return hp; if(!sq_IsInBattle()) { // 瞪瘫酝桧 嬴栖塭贼 return hp; } local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) // { //1. 饵蜂卫 蟾晦 ?犒肾朝 HP绿徽(%) local recoverHpRate = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_1); local maxHp = obj.getHpMax(); local currentHp = maxHp.tofloat() * (recoverHpRate.tofloat() / 100); //print(" hp:" + currentHp); org_hp = currentHp.tointeger(); pushSlowHeal(appendage); appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_READY_DOWN); print(" convert hp:" + org_hp); } else { if(state_ == STATE_REBIRTH_READY_DOWN || sqrChr.getState() == STATE_DIEHARD) { //print( " state_:" + state_ + " sqrChr.getState():" + sqrChr.getState() + " org_hp:" + org_hp); org_hp = 1; } } } //print(" hp:" + org_hp); return org_hp; } function onEnd_appendage_atmage_diehard(appendage) { if(!appendage) { return; } local obj = appendage.getParent(); local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); if(sqrObj) { } } // 横渐螳 陕撩 渗褐暧 部睡碟 function isEnd_appendage_atmage_diehard(appendage) { if(!appendage) return false; local T = appendage.getTimer().Get(); return false; }