Sqr/character/priest/disasterex.nut

472 lines
16 KiB
Plaintext
Raw Permalink 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.

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