270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | PO_MAGIC_CANNON_STATE_CREATE	<- 2; | |||
|  | PO_MAGIC_CANNON_STATE_SHOOT		<- 3; | |||
|  | 
 | |||
|  | PO_MAGIC_CANNON_VAR_SHOOT_POSITION <- 0; | |||
|  | PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE <- 1; | |||
|  | 
 | |||
|  | function setCustomData_po_ATMagicCannon(obj, receiveData) | |||
|  | { | |||
|  | 	if(!obj) return; | |||
|  | 	 | |||
|  | 	local shootPosition	= receiveData.readWord(); | |||
|  | 	local elementalType	= receiveData.readWord(); | |||
|  | 	 | |||
|  | 	obj.setTimeEvent(0,2000,1,false); // 0廓 樯策蝶暧 颤桧该, 蟾钦嫔 桧渐? 嫦当, 1廓虏, 籀挤缚 褒?寰?. | |||
|  | 	local var = obj.getVar(); | |||
|  | 	var.setInt(PO_MAGIC_CANNON_VAR_SHOOT_POSITION, shootPosition); | |||
|  | 	var.setInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE, elementalType); | |||
|  | 		 | |||
|  | 	if(elementalType != ENUM_ELEMENT_NONE) { | |||
|  | 		setCurrentAnimationFromCutomIndex(obj,elementalType);		 | |||
|  | 	} | |||
|  | 	 | |||
|  | 	// 檩楼暧 唳办 评煎 ?嫦桧 桡棻. | |||
|  | 	if(elementalType == ENUM_ELEMENT_DARK) { | |||
|  | 		local parentObj = obj.getTopCharacter(); | |||
|  | 		parentObj = sq_ObjectToSQRCharacter(parentObj); | |||
|  | 		 | |||
|  | 		if(!parentObj) | |||
|  | 			return;		 | |||
|  | 		 | |||
|  | 		local skill_level			= sq_GetSkillLevel(parentObj, SKILL_ELEMENTAL_CHANGE);	 | |||
|  | 		local changeStatusLevel		= sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 7, skill_level);// 7.荡舆 溯涟 | |||
|  | 		local changeStatusProb		= sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 8, skill_level);// 8.荡舆 ?睦(0.1%) | |||
|  | 		local changeStatusDuration	= sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 9, skill_level);// 9.荡舆 虽楼卫除 | |||
|  | 		local attackInfo			= sq_GetCurrentAttackInfo(obj); | |||
|  | 		sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, changeStatusProb, changeStatusLevel, changeStatusDuration);			 | |||
|  | 		 | |||
|  | 		local attackPower = 0;		 | |||
|  | 		attackPower = parentObj.sq_GetBonusRateWithPassive(SKILL_MAGIC_CANNON, STATE_MAGIC_CANNON, elementalType, 1.0); | |||
|  | 		sq_SetAddWeaponDamage(attackInfo, true); | |||
|  | 		sq_SetCurrentAttackBonusRate(attackInfo, attackPower); | |||
|  | 		 | |||
|  | 		// 棻艇 葆彻掘朝 ?嫦缣怃 等嘐虽蒂 籀葬?晦 阳侥缣 僭葬筒&?筒击 饵辨?釭 | |||
|  | 		// 檩楼擎 葆彻掘 濠羹缣怃 等嘐虽蒂 籀葬?晦 阳侥缣 葆彻筒戏煎 渗唳 | |||
|  | 		attackInfo.setAttackType(ATTACKTYPE_MAGICAL);  | |||
|  | 		 | |||
|  | 		//等嘐虽 赅暮娄 挡暮 扑姜 | |||
|  | 		//DAMAGEACT_NONE = 0,		/// 奁拟 桡挤 | |||
|  | 		//DAMAGEACT_DAMAGE = 1,	/// 等嘐虽 赅暮 | |||
|  | 		//DAMAGEACT_DOWN = 2,		/// 棻遴 | |||
|  | 		sq_SetCurrentAttackeDamageAct(attackInfo, 1); | |||
|  | 		attackInfo.setElement(ENUM_ELEMENT_DARK); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | function addMagicCannonEffect(obj,vangle) | |||
|  | {	 | |||
|  | 	if(!obj) | |||
|  | 		return; | |||
|  | 	local var = obj.getVar(); | |||
|  | 	local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); | |||
|  | 	local currentAni = obj.getCurrentAnimation(); | |||
|  | 	local typeName = "none"; | |||
|  | 	 | |||
|  | 	switch(elementalType)  | |||
|  | 	{ | |||
|  | 	case ENUM_ELEMENT_FIRE  : typeName = "fire"; break; | |||
|  | 	case ENUM_ELEMENT_WATER : typeName = "water"; break; | |||
|  | 	case ENUM_ELEMENT_DARK  : typeName = "dark"; break; | |||
|  | 	case ENUM_ELEMENT_LIGHT : typeName = "light"; break;	 | |||
|  | 	default : return; | |||
|  | 	} | |||
|  | 			 | |||
|  | 	local effect = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATMagicCannon/01_" + typeName + "_dodge.ani", 0 ,0 ,0);	 | |||
|  | 	effect.setCustomRotate(true, sq_ToRadian(vangle));	 | |||
|  | } | |||
|  | 
 | |||
|  | function onKeyFrameFlag_po_ATMagicCannon(obj, keyIndex) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return false; | |||
|  | 	if(keyIndex == 1) { | |||
|  | 		obj.sendStateOnlyPacket(PO_MAGIC_CANNON_STATE_SHOOT);		 | |||
|  | 	} | |||
|  | 	 | |||
|  | 	return true; | |||
|  | } | |||
|  | 
 | |||
|  | function onTimeEvent_po_ATMagicCannon(obj, timeEventIndex, timeEventCount) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return false; | |||
|  | 	if(obj.isMyControlObject()) | |||
|  | 	{ | |||
|  | 		sq_SendDestroyPacketPassiveObject(obj); | |||
|  | 	} | |||
|  | 	return true; // true贼 属寥 酝钦 | |||
|  | }  | |||
|  | 
 | |||
|  | function setState_po_ATMagicCannon(obj, state, datas) | |||
|  | { | |||
|  | 	if(!obj) return;	 | |||
|  | 	 | |||
|  | 	local var = obj.getVar();		 | |||
|  | 	local shootPosition = var.getInt(PO_MAGIC_CANNON_VAR_SHOOT_POSITION); | |||
|  | 	local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); | |||
|  | 
 | |||
|  | 	if (state == PO_MAGIC_CANNON_STATE_SHOOT) {			 | |||
|  | 		local vangle = 0.0;		// 热? | |||
|  | 		if(shootPosition == ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL) | |||
|  | 			vangle = -90.0;		// 热霜		 | |||
|  | 		else if(shootPosition == ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL) | |||
|  | 			vangle = -45.0;		 // 渠陕摹 | |||
|  | 			 | |||
|  | 		if(elementalType != ENUM_ELEMENT_NONE) { // 鼠楼撩擎 桧嘐虽 蛤?? 桧嘐虽 | |||
|  | 			setCurrentAnimationFromCutomIndex(obj,ENUM_ELEMENT_MAX + elementalType);			 | |||
|  | 			obj.setCustomRotate(true, sq_ToRadian(vangle)); | |||
|  | 		} | |||
|  | 		 | |||
|  | 		obj.sq_SetMoveParticle("Particle/ATMagicCannon.ptl", 0.0, vangle); | |||
|  | 		addMagicCannonEffect(obj,vangle); // ? ?朝 桧??		 | |||
|  | 		 | |||
|  | 		local fireSound = "MWSHOW_04"; | |||
|  | 		 | |||
|  | 		if (elementalType == ENUM_ELEMENT_FIRE) | |||
|  | 			fireSound = "MCANNON_FIRE"; | |||
|  | 		else if (elementalType == ENUM_ELEMENT_WATER) | |||
|  | 			fireSound = "MCANNON_ATK"; | |||
|  | 		else if (elementalType == ENUM_ELEMENT_DARK) | |||
|  | 			fireSound = "MCANNON_DARK"; | |||
|  | 		else if (elementalType == ENUM_ELEMENT_LIGHT) | |||
|  | 			fireSound = "MCANNON_LIGHT"; | |||
|  | 			 | |||
|  | 		obj.sq_PlaySound(fireSound);		 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | function createMagicCannonElementlalExplosion(obj) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return; | |||
|  | 	local var = obj.getVar(); | |||
|  | 	local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); | |||
|  | 	if(!obj.isMyControlObject()) | |||
|  | 		return; | |||
|  | 			 | |||
|  | 	if(elementalType == ENUM_ELEMENT_DARK) //檩楼暧 唳办 ?嫦?虽 强朝棻. | |||
|  | 		return; | |||
|  | 			 | |||
|  | 	local changeStatusType		= ACTIVESTATUS_MAX; | |||
|  | 	local parentObj				= sq_GetCNRDObjectToCharacter(obj.getParent()); | |||
|  | 	local skill_level			= sq_GetSkillLevel(parentObj, SKILL_ELEMENTAL_CHANGE);	 | |||
|  | 	local changeStatusDuration	= sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 0, skill_level);	 | |||
|  | 	local changeStatusProb		= 0.0; | |||
|  | 	local changeStatusLevel		= 0.0; | |||
|  | 	local changeStatusdamage	= 0; | |||
|  | 	 | |||
|  | 	// 衙霜议凯暧 ?嫦 觼晦(%) | |||
|  | 	local sizeRate				= sq_GetIntData(parentObj, SKILL_MAGIC_CANNON, 0); | |||
|  | 	 | |||
|  | 	 | |||
|  | 	switch (elementalType) | |||
|  | 	{ | |||
|  | 	case ENUM_ELEMENT_WATER :  | |||
|  | 		changeStatusType		= ACTIVESTATUS_FREEZE; | |||
|  | 		changeStatusLevel		=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 3, skill_level);// 3.彩念 溯涟 | |||
|  | 		changeStatusProb		=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 4, skill_level);// 4.彩念 ?睦(0.1%) | |||
|  | 		changeStatusDuration	=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 5, skill_level);// 5.彩念 虽楼卫除 | |||
|  | 		break; | |||
|  | 		 | |||
|  | 	case ENUM_ELEMENT_LIGHT :  | |||
|  | 		changeStatusType		= ACTIVESTATUS_LIGHTNING; | |||
|  | 		changeStatusLevel		=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 11, skill_level);// 11.马瞪 溯涟 | |||
|  | 		changeStatusProb		=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 12, skill_level);// 12.马瞪 ?睦(0.1%) | |||
|  | 		changeStatusDuration	=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 13, skill_level);// 13.马瞪 虽楼卫除 | |||
|  | 		changeStatusdamage		=	sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 14, skill_level);// 14.马瞪 等嘐虽 | |||
|  | 		break; | |||
|  | 	}			 | |||
|  | 		 | |||
|  | 	local explosionInfo = sq_getNewAttackInfoPacket(); | |||
|  | 	 | |||
|  | 	// 衙霜议凯暧 ?嫦 觼晦(%) | |||
|  | 	explosionInfo.sizeRate = sizeRate; | |||
|  | 	 | |||
|  | 	if (changeStatusType != ACTIVESTATUS_MAX) | |||
|  | 	{ | |||
|  | 		explosionInfo.changeStatusType		= changeStatusType;  | |||
|  | 		explosionInfo.changeStatusProb		= changeStatusProb.tofloat();  // ?睦 | |||
|  | 		explosionInfo.changeStatusLevel		= changeStatusLevel.tofloat(); // 溯涟	 | |||
|  | 		explosionInfo.changeStatusDuration	= changeStatusDuration; | |||
|  | 		explosionInfo.changeStatusdamage	= changeStatusdamage; | |||
|  | 	} | |||
|  | 	 | |||
|  | 	 | |||
|  | 	local parentObj = obj.getParent(); | |||
|  | 	parentObj = sq_ObjectToSQRCharacter(parentObj); | |||
|  | 	 | |||
|  | 	local attackPower = 0; | |||
|  | 	if(parentObj) { | |||
|  | 		attackPower = parentObj.sq_GetBonusRateWithPassive(SKILL_MAGIC_CANNON, STATE_MAGIC_CANNON, elementalType, 1.0); | |||
|  | 		sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower);		 | |||
|  | 	} | |||
|  | 	 | |||
|  | 	if(0 != attackPower) { | |||
|  | 		explosionInfo.powerRate	= attackPower; | |||
|  | 		explosionInfo.useWeapon	= true; | |||
|  | 	}	 | |||
|  | 		 | |||
|  | 	sq_createCommonElementalAttack(obj, elementalType, 0, 0, 0, explosionInfo);	 | |||
|  | } | |||
|  | 
 | |||
|  | function onAttack_po_ATMagicCannon(obj, damager, boundingBox, isStuck) | |||
|  | {	 | |||
|  | 	if(!obj) | |||
|  | 		return 0; | |||
|  | 
 | |||
|  | 	local var = obj.getVar(); | |||
|  | 	local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); | |||
|  | 	local state = obj.getState(); | |||
|  | 	if (state == PO_MAGIC_CANNON_STATE_SHOOT && elementalType != ENUM_ELEMENT_DARK) {		 | |||
|  | 		createMagicCannonElementlalExplosion(obj); | |||
|  | 		sq_SendDestroyPacketPassiveObject(obj); | |||
|  | 	} | |||
|  | 	 | |||
|  | 		 | |||
|  | 	 | |||
|  | 	local fireSound = "R_MWSHOT_HIT";	 | |||
|  | 	if (elementalType == ENUM_ELEMENT_FIRE) | |||
|  | 		fireSound = "R_FIRESHOT_HIT"; | |||
|  | 	else if (elementalType == ENUM_ELEMENT_WATER) | |||
|  | 		fireSound = "R_ICE_HIT"; | |||
|  | 	else if (elementalType == ENUM_ELEMENT_DARK) | |||
|  | 		fireSound = "R_DARKSHOT_HIT"; | |||
|  | 	else if (elementalType == ENUM_ELEMENT_LIGHT) | |||
|  | 		fireSound = "R_LIGHTSHOT_HIT"; | |||
|  | 	obj.sq_PlaySound(fireSound);	 | |||
|  | 			 | |||
|  | 	return 0; | |||
|  | } | |||
|  | 
 | |||
|  | function procAppend_po_ATMagicCannon(obj) | |||
|  | { | |||
|  | 	if(obj.getZPos() <= 0) | |||
|  | 	{ | |||
|  | 		createMagicCannonElementlalExplosion(obj); | |||
|  | 		sq_SendDestroyPacketPassiveObject(obj); | |||
|  | 		 | |||
|  | 		local var = obj.getVar(); | |||
|  | 		local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); | |||
|  | 		local fallSound = "MANTLE_TIGHTEN"; | |||
|  | 		 | |||
|  | 		if (elementalType == ENUM_ELEMENT_FIRE) | |||
|  | 			fallSound = "MCANNON_FIREFALL"; | |||
|  | 		else if (elementalType == ENUM_ELEMENT_WATER) | |||
|  | 			fallSound = "MCANNON_CRASH_02"; | |||
|  | 		else if (elementalType == ENUM_ELEMENT_DARK) | |||
|  | 			fallSound = "MCANNON_DARKFALL";		 | |||
|  | 		else if (elementalType == ENUM_ELEMENT_LIGHT) | |||
|  | 			fallSound = "MCANNON_LIGHTFALL";				 | |||
|  | 		 | |||
|  | 		obj.sq_PlaySound(fallSound);	 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onEndCurrentAni_po_ATMagicCannon(obj) | |||
|  | { | |||
|  | 	if(!obj) return; | |||
|  | } | |||
|  |  |