472 lines
12 KiB
Plaintext
472 lines
12 KiB
Plaintext
|
||
|
||
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;
|
||
} |