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