Sqr/character/atmage/diehard/ap_atmage_diehard.nut

472 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}