Sqr/character/atmage/diehard/ap_atmage_diehard.nut

472 lines
12 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
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;
}