252 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			252 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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;	
 | ||
| }
 | ||
|  |