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