Sqr/character/priest/pandemoniumex.nut

252 lines
8.7 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_PANDEMONIUM_EX_START <- 0;
SUBSTATE_PANDEMONIUM_EX_END <- 1;
// 渗热 樯策蝶
PEND_EX_MAGIC_FIELD <- 0;
PEND_EX_IS_ENDED <- 1;
PEND_EX_CREATE_DEVIL_COUNT <- 2;
PEND_EX_MAGIC_OVER <- 3;
PEND_EX_FLASHSCREEN <- 4;
PEND_EVENT_TIMER_CREATE_DEVIL <- 0;
function sendSubState_PandemoniumEx(obj, subState)
{
if(!obj) return;
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState); // substate撮?
obj.sq_addSetStatePacket(STATE_PANDEMONIUM_EX, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
//------------------------------------------------------------------------------
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_PandemoniumEx(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_PANDEMONIUM_EX);
if(b_useskill) {
sendSubState_PandemoniumEx(obj,SUBSTATE_PANDEMONIUM_EX_START);
return true;
}
return false;
}
function checkCommandEnable_PandemoniumEx(obj)
{
if(!obj) return false;
return true;
}
//------------------------------------------------------------------------------
function resetDungeonStart_PandemoniumEx(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
{
obj.sq_setXScrollStop(0);
}
//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥.
function onIsCheckHitCollision_PandemoniumEx(obj,damager)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_POWER_OF_DARKNESS_START) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?.
return obj.isMyControlObject();
//晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻.
return (damager && damager.isMyControlObject());
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_PandemoniumEx(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_PANDEMONIUM_EX_START) {
obj.sq_stopMove();
if(isAvengerAwakenning(obj)) {
local ani = obj.getVar().GetAnimationMap("PAND_EX_START", "Character/Priest/Animation/AvengerAwakening/PandemoniumStart.ani");
obj.setCurrentAnimation(ani);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AWAKENING_PANDEMONIUM_START);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_PANDEMONIUM_START);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_PANDEMONIUM_EX_ON_START);
}
//罗颤蒂 嫔? 掸?
local dmg = obj.sq_getBonusRateWithPassive(SKILL_PANDEMONIUM_EX, STATE_PANDEMONIUM_EX, 0,1.0);
//学葆? 鼻鹧缣摹 奢问溘 隶?
if(isAvengerAwakenning(obj)) {
local devilPowerUpRate = obj.sq_getIntData(0);
dmg = dmg * (devilPowerUpRate + 100) * 0.01;
}
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),dmg.tointeger());
obj.sq_setXScrollStart(300,150);
}
else if(subState == SUBSTATE_PANDEMONIUM_EX_END) {
if(isAvengerAwakenning(obj)) {
local ani = obj.getVar().GetAnimationMap("PAND_EX_END", "Character/Priest/Animation/AvengerAwakening/PandemoniumEnd.ani");
obj.setCurrentAnimation(ani);
}
else {
obj.sq_setCurrentAnimation(CUSTOM_ANI_PANDEMONIUM_END);
}
obj.sq_setXScrollStop(300);
sq_SetMyShake(obj,0,0);
local flashScreenObj = sq_var.getObject(PEND_EX_FLASHSCREEN);
if(flashScreenObj) { // ?楚莲 蝶觼萼 蒙翕酝桧贼 莠
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
if(pflashScreen)
pflashScreen.fadeOut();
}
}
}
function onEndState_PandemoniumEx(obj,newState)
{
if(!obj) return;
if(newState != SUBSTATE_PANDEMONIUM_EX_END) {
local sq_var = obj.getVar();
local magicField = sq_var.getObject(PEND_EX_MAGIC_FIELD);
if(magicField)
magicField.setValid(false);
local magicOver = sq_var.getObject(PEND_EX_MAGIC_OVER);
if(magicOver)
magicOver.setValid(false);
local isEnded = sq_var.getBool(PEND_EX_IS_ENDED);
if(!isEnded) {
local endMagicField = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/end/base.ani",ENUM_DRAWLAYER_NORMAL,true);
local endMagicFieldOver = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/end/OverEffectbase.ani",ENUM_DRAWLAYER_NORMAL,true);
if(isAvengerAwakenning(obj)) {
local xPos = sq_GetDistancePos(endMagicField.getXPos(), obj.getDirection(), 80);
endMagicField.setCurrentPos(xPos, endMagicField.getYPos(), endMagicField.getZPos()+20);
//xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 5);
endMagicFieldOver.setCurrentPos(endMagicField.getXPos(), endMagicField.getYPos()+2, endMagicField.getZPos());
}
sq_var.setBool(PEND_EX_IS_ENDED,true);
}
obj.sq_setXScrollStop(300);
sq_SetMyShake(obj,0,0);
}
}
function onTimeEvent_PandemoniumEx(obj, timeEventIndex, timeEventCount)
{
local sq_var = obj.getVar();
local maxCount = obj.sq_getIntData(1);
local moveSpeed = obj.sq_getIntData(2);
local maxTime = obj.sq_getIntData(3);
local moveMaxDistance = obj.sq_getIntData(4);
local currentCount = sq_var.getInt(PEND_EX_CREATE_DEVIL_COUNT);
if(currentCount == maxCount) {
obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,30,0,false);
sq_var.setInt(PEND_EX_CREATE_DEVIL_COUNT,currentCount+1);
}
else if(currentCount > maxCount) {
sendSubState_PandemoniumEx(obj,SUBSTATE_PANDEMONIUM_EX_END);
return true;
}
else {
local createDevilZ = currentCount%2 == 1 ? sq_getRandom(-20,-45) : sq_getRandom(20,45);
local createDevilSize = sq_getRandom(0,4); // 0桧贼 蒙擎 饵桧锷 斜 桧豭 赎饵桧锷 阔 20%?睦煎 蒙擎啪 釭褥
local devilPowerUpRate = obj.sq_getIntData(0);
local dmgRate = isAvengerAwakenning(obj) ? (devilPowerUpRate + 100)* 0.01 : 1.0;
local dmg = obj.sq_getBonusRateWithPassive(SKILL_PANDEMONIUM_EX, STATE_PANDEMONIUM_EX, 0, dmgRate);
local createXPos = 85;
local createZPos = 64;
if(isAvengerAwakenning(obj)) {
createXPos = 160;
createZPos = 80;
}
obj.sq_binaryData_startWrite(); //当撩 觼晦蒂 姜?怃 尔鸟匙.
obj.sq_binaryData_writeWord(createDevilSize);
obj.sq_binaryData_writeWord(moveSpeed);
obj.sq_binaryData_writeWord(maxTime);
obj.sq_binaryData_writeWord(moveMaxDistance);
obj.sq_binaryData_writeDword(dmg.tointeger());
sq_SendCreatePassiveObjectPacket(obj,24110, 0, createXPos, 1, createZPos + createDevilZ, obj.getDirection());
sq_var.setInt(PEND_EX_CREATE_DEVIL_COUNT,currentCount+1);
local createDevilTimeGap = sq_getRandom(50,90);
obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,createDevilTimeGap,0,false);
}
return false; // true贼 属寥 酝钦
}
function onEndCurrentAni_PandemoniumEx(obj)
{
local subState = obj.getSkillSubState();
if(subState == SUBSTATE_PANDEMONIUM_EX_END)
{
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onKeyFrameFlag_PandemoniumEx(obj,flagIndex)
{
if(flagIndex == 1)
{
local sq_var = obj.getVar();
local magicField = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/start/base.ani",ENUM_DRAWLAYER_NORMAL,false);
local overEffect = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/start/OverEffectbase.ani",ENUM_DRAWLAYER_NORMAL,false);
if(isAvengerAwakenning(obj)) {
local xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 80);
magicField.setCurrentPos(xPos, magicField.getYPos(), magicField.getZPos()+20);
}
sq_var.setObject(PEND_EX_MAGIC_FIELD, magicField);
sq_var.setObject(PEND_EX_MAGIC_OVER, overEffect);
//local xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 10);
overEffect.setCurrentPos(magicField.getXPos(), magicField.getYPos()+2, magicField.getZPos());
local createDevilTimeGap = sq_getRandom(50,90);
obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,createDevilTimeGap,0,true);
sq_SetMyShake(obj,4,3000);
local flashScreenObj = sq_flashScreen(obj,80,5000,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_var.setObject(PEND_EX_FLASHSCREEN,flashScreenObj);
}
return true;
}