Sqr/character/priest/pandemoniumex.nut

252 lines
8.7 KiB
Plaintext
Raw Normal View History

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