Sqr/character/priest/powerofdarkness.nut

421 lines
15 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.

// 怃粽 蝶才桧?陛 ?蹂 桡棻.
SUBSTATE_POWER_OF_DARKNESS_START <- 0;
SUBSTATE_POWER_OF_DARKNESS_EXPLOSION <- 1;
SUBSTATE_POWER_OF_DARKNESS_LIFT <- 2;
SUBSTATE_POWER_OF_DARKNESS_LAST <- 3;
SUBSTATE_POWER_OF_DARKNESS_END <- 4;
POD_VAR_ARROW_COUNT <- 1; // 饵辨? ?髦 偎热
POD_VAR_CIRCLE_INDEX <- 2; // 当撩胀 掘羹 樯策蝶
POD_VAR_CIRCLE_OBJECT_GROUP <- 3; // 当撩胀 掘羹 斜瑜
POD_VAR_CIRCLE_OBJECT_UID <- 4; // 当撩胀 掘羹 UID
POD_VAR_CIRCLE_OBJECT <- 5; // 当撩胀 掘羹
POD_VAR_SUPERARMOR <- 6; // 蓬?嬴该 横?蛤虽
POD_VAR_FLASHSCREEN <- 7; // 当撩胀 掘羹
POD_TIME_EVENT_ARROWGAP <- 1; // 颤歜 桧渐? : ?髦 嫦翕 卫除 除问
POD_TIME_EVENT_LIFTTIME <- 2; // 颤歜 桧渐? : 跨蝶搅 嗥办朝 卫除
POD_TIME_EVENT_LASTDELAY <- 3; // 颤歜 桧渐? : 虞颤梱虽 裁溯桧
POD_TIME_EVENT_LAST <- 4; // 颤歜 桧渐? : 虞颤? 裁溯桧
POD_SOUND_INDEX_LOOP <- 92716;
function sendSubState_PowerOfDarkness(obj, subState)
{
if(!obj) return;
if(obj.isMyControlObject()) {
local sq_var = obj.getVar();
local circleGroup = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_GROUP);
local circleUID = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_UID);
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState); // substate撮?
obj.sq_IntVectPush(circleGroup);
obj.sq_IntVectPush(circleUID); // 掘羹暧 UID 撮?
obj.sq_addSetStatePacket(STATE_POWER_OF_DARKNESS, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
//------------------------------------------------------------------------------
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_PowerOfDarkness(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_POWER_OF_DARKNESS);
if(b_useskill) {
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_START);
return true;
}
return false;
}
//------------------------------------------------------------------------------
function isGrabable_PowerOfDarkness(obj)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
if(objectsSize == 0)
return false;
for(;i<objectsSize;++i)
{
local damager = sq_GetCNRDObjectToCollisionObject(sq_var.get_obj_vector(i));
if(damager && !sq_IsGrabable(obj,damager)) {
return false;
}
}
return true;
}
function resetDungeonStart_PowerOfDarkness(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
{
obj.sq_setXScrollStop(0);
}
//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥.
function onIsCheckHitCollision_PowerOfDarkness(obj,damager)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return obj.isMyControlObject();
//晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻.
return (damager && damager.isMyControlObject());
}
function isForceHitCheck_PowerOfDarkness(obj)
{
if(obj.isMyControlObject()) {
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START) { //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return true;
}
}
return false;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_PowerOfDarkness(obj, state, datas, isResetTimer)
{
if(!obj) return;
local sq_var = obj.getVar();
local subState = obj.sq_getVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState == SUBSTATE_POWER_OF_DARKNESS_START)
{
sq_var.clear_obj_vector();
obj.sq_stopMove();
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_START);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_POWER_OF_DARKNESS);
obj.sq_setAttackPowerWithPassive(SKILL_POWER_OF_DARKNESS, STATE_POWER_OF_DARKNESS, -1, 0, 1.0);
if(!sq_isPVPMode()) // 念潍缣怃朝 蓬嬴 寰匐
obj.sq_setSuperArmor(POD_VAR_SUPERARMOR);
local sk = sq_GetSkill(obj,SKILL_POWER_OF_DARKNESS);
local pw = sq_GetAttackBonusRate(sk,0,1.0);
sq_var.setInt(POD_VAR_CIRCLE_INDEX,-1);
obj.sq_PlaySound("PR_DARKPOWER_READY");
obj.sq_setXScrollStart(150,300);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_LIFT)
{
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
local liftTime = obj.sq_getIntData(3);
local x = obj.sq_getIntData(1);
local z = obj.sq_getIntData(2);
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
local aoDamager = sq_GetCNRDObjectToActiveObject(damager);
if(aoDamager) {
local masterAppendage = aoDamager.GetSquirrelAppendage("Appendage/Character/ap_PowerOfDarkness.nut");
sq_AccelMoveToAppendageForce(aoDamager, obj, obj, x, 0, z - aoDamager.getObjectHeight()/2, liftTime, true, masterAppendage,true);
}
}
local circleGroup = obj.sq_getVectorData(datas, 1);
local circleUID = obj.sq_getVectorData(datas, 2);
local darkCircle = sq_GetObject(obj,circleGroup,circleUID);
if(darkCircle) {
local damager = sq_var.get_obj_vector(0);
darkCircle.setCurrentPos(darkCircle.getXPos(),damager.getYPos()+1,darkCircle.getZPos()); // y蹴 谢? 蜃跷晦
sq_moveWithParent(damager,darkCircle);
}
sq_SetMyShake(obj,5,160);
obj.setTimeEvent(POD_TIME_EVENT_LIFTTIME,liftTime,1,false);
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_STAY);
sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/PowerOfDarkness/guard_attack_none.ani",172,0,0);
sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/PowerOfDarkness/guard_attack_none_r.ani",172,0,0);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_LAST)
{
local gap = obj.sq_getIntData(5);
obj.setTimeEvent(POD_TIME_EVENT_LASTDELAY,gap,1,false);
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_STAY);
obj.stopSound(POD_SOUND_INDEX_LOOP);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_EXPLOSION)
{
local gap = obj.sq_getIntData(4);
obj.setTimeEvent(POD_TIME_EVENT_ARROWGAP,gap,0,true);
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_STAY);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_END)
{
obj.sq_setCurrentAnimation(CUSTOM_ANI_POWER_OF_DARKNESS_END);
obj.sq_setXScrollStop(300);
}
}
function onEndState_PowerOfDarkness(obj,newState)
{
if(!obj) return;
if(newState != STATE_POWER_OF_DARKNESS) {
obj.sq_removeSuperArmor(POD_VAR_SUPERARMOR);
local sq_var = obj.getVar();
local darkCircleObject = sq_var.getObject(POD_VAR_CIRCLE_OBJECT);
local darkCircle = sq_GetCNRDObjectToCollisionObject(darkCircleObject);
local flashScreenObj = sq_var.getObject(POD_VAR_FLASHSCREEN);
if(flashScreenObj) { // ?楚莲 蝶觼萼 蒙翕酝桧贼 莠
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
if(pflashScreen)
pflashScreen.fadeOut();
}
sq_moveWithParent(null,darkCircle);
obj.sq_setXScrollStop(300);
if(darkCircle && darkCircle.isMyControlObject()) {
sendPowerOfDarknessCircleSubState(darkCircle,POWER_OF_DARKNESS_CIRCLE_DESTROY);
}
removeAllPoweOfDarknessAppendage(obj);
}
}
// ?姜胀 楠浑击 嫔? ?热
function getArrowCreateAngle(areaIndex)
{
areaIndex = areaIndex%6;
local minAngle = 0;
local maxAngle = 0;
if(areaIndex == 0) // 250~310 紫
minAngle = 250, maxAngle = 310;
else if(areaIndex == 1) // 10~70 紫
minAngle = 10, maxAngle = 70;
else if(areaIndex == 2) // 70~130 紫
minAngle = 70, maxAngle = 130;
else if(areaIndex == 3) // 190~250紫
minAngle = 190, maxAngle = 250;
else if(areaIndex == 4) // 310~370紫
minAngle = 310, maxAngle = 370;
else if(areaIndex == 5) // 130~190紫
minAngle = 130, maxAngle = 190;
local angle = sq_getRandom(minAngle,maxAngle);
return angle.tofloat() * 0.0174532;
}
function createPowerOfDarknessArrow(obj, angle)
{
local sq_var = obj.getVar();
local circleGroup = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_GROUP);
local circleUID = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_UID);
local darkCircle = sq_GetObject(obj,circleGroup,circleUID);
if(darkCircle) {
local x = darkCircle.getXPos() > obj.getXPos() ? darkCircle.getXPos() - obj.getXPos() : obj.getXPos() - darkCircle.getXPos();
local z = darkCircle.getZPos() > obj.getZPos() ? darkCircle.getZPos() - obj.getZPos() : obj.getZPos() - darkCircle.getZPos();
local rate = obj.sq_getBonusRateWithPassive(SKILL_POWER_OF_DARKNESS, STATE_POWER_OF_DARKNESS,2,1.0);
obj.sq_binaryData_startWrite();
obj.sq_binaryData_writeFloat(angle.tofloat());
obj.sq_binaryData_writeDword(rate);
sq_SendCreatePassiveObjectPacket(obj,24108, 0, x, sq_getRandom(-1,2), z, obj.getDirection());
}
}
//POD_TIME_EVENT_ARROWGAP <- 1; // 颤歜 桧渐? : ?髦 嫦翕 卫除 除问
//POD_TIME_EVENT_LIFTTIME <- 2; // 颤歜 桧渐? : 跨蝶搅 嗥办朝 卫除
function onTimeEvent_PowerOfDarkness(obj, timeEventIndex, timeEventCount)
{
local subState = obj.getSkillSubState();
if(timeEventIndex == POD_TIME_EVENT_LIFTTIME) {
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION);
}
else if(timeEventIndex == POD_TIME_EVENT_ARROWGAP) {
local sq_var = obj.getVar();
local current = sq_var.getInt(1);
sq_var.setInt(1,current+1);
local maxArraw = obj.sq_getLevelData(1);
if(current >= maxArraw) // 卫除 裁溯桧蒂 觊涡 舆晦 嫔?
{
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_LAST);
return true;
}
else if(current < maxArraw)
{
createPowerOfDarknessArrow(obj,getArrowCreateAngle(current));
}
return false;
}
else if(timeEventIndex == POD_TIME_EVENT_LASTDELAY)
{
local lastMaxArrow = obj.sq_getIntData(6);
local i = 0;
for(i=0;i<lastMaxArrow;++i){
local angle = 360/lastMaxArrow * i;
angle = angle * 0.0174532;
createPowerOfDarknessArrow(obj,angle.tofloat());
}
obj.sq_PlaySound("PR_DARKPOWER");
obj.setTimeEvent(POD_TIME_EVENT_LAST,900,1,false);
return true;
}
else if(timeEventIndex == POD_TIME_EVENT_LAST)
{
sq_flashScreen(obj,160,0,0,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END);
return true;
}
else
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END);
return true; // true贼 属寥 酝钦
}
function onEndCurrentAni_PowerOfDarkness(obj)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START)
{
local sq_var = obj.getVar();
local objectsSize = sq_var.get_obj_vector_size();
if (objectsSize > 0)
{
if(isGrabable_PowerOfDarkness(obj))
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_LIFT);
else
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION);
obj.playSound("DARKPOWER_CATCH_LOOP",POD_SOUND_INDEX_LOOP,0,0,0);
}
else
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END);
}
else if(subState == SUBSTATE_POWER_OF_DARKNESS_END)
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
// onAttack 属寥?热 殓栖棻
function onAttack_PowerOfDarkness(obj, damager, boundingBox)
{
local sq_var = obj.getVar();
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START)
{
local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_EXECUTION, false, "Appendage/Character/ap_PowerOfDarkness.nut", true);
if(masterAppendage) {
if(sq_IsHoldable(obj,damager)) {
sq_HoldAndDelayDie(damager, obj, true, true, true, 300, 300, ENUM_DIRECTION_NEUTRAL , masterAppendage);
damager.setCurrentDirection(sq_GetOppositeDirection(obj.getDirection()));
}
local collectingTime = obj.sq_getIntData(0);
if(sq_IsGrabable(obj,damager) && sq_IsHoldable(obj,damager) && !sq_IsFixture(damager)) //濩击热 毡朝 鼻鹧
sq_MoveToAppendageForce(damager, obj, obj, 160, 0, 90 - damager.getObjectHeight()/2, collectingTime, true, masterAppendage);
else if(sq_IsHoldable(obj,damager) && !sq_IsFixture(obj))
sq_MoveToAppendageForce(damager, obj, obj, 160, 0, damager.getZPos(), collectingTime, true, masterAppendage);
obj.sq_PlaySound("DARKPOWER_CATCH");
sq_var.push_obj_vector(damager);
}
}
}
function removeAllPoweOfDarknessAppendage(obj)
{
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
if(damager)
CNSquirrelAppendage.sq_RemoveAppendage(damager, "Appendage/Character/ap_PowerOfDarkness.nut");
sq_SimpleMoveToNearMovablePos(damager,200);
}
}
function onKeyFrameFlag_PowerOfDarkness(obj,flagIndex)
{
local sq_var = obj.getVar();
if(flagIndex == 0 && obj.isMyControlObject())
{
obj.sq_binaryData_startWrite(); //蟾晦?蒂 嫔? 涡嘐 啭萄
obj.sq_binaryData_writeDword(0);
local circleIndex = sq_SendCreatePassiveObjectPacket(obj,24107, 0, 172, 2, 97,obj.getDirection());
sq_var.setInt(POD_VAR_CIRCLE_INDEX,circleIndex);
}
else if(flagIndex == 1 && obj.isMyControlObject())
{
local flashScreenObj = sq_flashScreen(obj,80,99990,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_var.setObject(POD_VAR_FLASHSCREEN,flashScreenObj);
}
else if(flagIndex == 2 && obj.isMyControlObject()) // 赅击 偌羹酝缣 寰 濩?朝 拥陛 毡棻贼 夥煎 ?嫦 赅萄煎
{
local objectsSize = sq_var.get_obj_vector_size();
if(!isGrabable_PowerOfDarkness(obj) && objectsSize > 0)
sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION);
}
return true;
}
function onCreateObject_PowerOfDarkness(obj, createObject)
{
local sq_var = obj.getVar();
local cuid = sq_GetUniqueId(createObject);
local circleIndex = sq_var.getInt(POD_VAR_CIRCLE_INDEX);
if(cuid == circleIndex) {
local group = sq_GetGroup(createObject);
local uid = sq_GetUniqueId(createObject);
sq_var.setObject(POD_VAR_CIRCLE_OBJECT, createObject);
sq_var.setInt(POD_VAR_CIRCLE_OBJECT_GROUP, group);
sq_var.setInt(POD_VAR_CIRCLE_OBJECT_UID, uid);
}
}