275 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			275 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | TIMER_MULTI_SHOT_CREATE_MAGIC_BALL	<- 0; // 翱颤 | |||
|  | TIMER_MULTI_SHOT_INPUT_COUNT		<- 1; // 蟾渡 郦殓溘 ?热 ?钦. | |||
|  | TIMER_MULTI_SHOT_WATING_STAND		<- 2; // 虞颤桧? 蝶鼹萄 梱虽暧 裁溯桧 | |||
|  | 
 | |||
|  | VAR_MULTI_SHOT_CURRENT_COUNT <- 0; | |||
|  | 
 | |||
|  | ENUM_MULTI_SHOT_SUBSTATE_CHARGE   <- 0; // 薄? 酝 遽绿 | |||
|  | ENUM_MULTI_SHOT_SUBSTATE_HORIZON  <- 1; // 薄? 酝 热? | |||
|  | ENUM_MULTI_SHOT_SUBSTATE_VERTICAL <- 2; // 薄? 酝 热霜 | |||
|  | ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL <- 3; // 薄? 酝 渠陕摹 | |||
|  | ENUM_MULTI_SHOT_SUBSTATE_FLOOR	  <- 4; // 夥款缣怃 ?颤 | |||
|  | 
 | |||
|  | function checkExecutableSkill_MultiShot(obj) | |||
|  | { | |||
|  | 	if(!obj) return false; | |||
|  | 
 | |||
|  | 	local b_useskill = obj.sq_IsUseSkill(SKILL_MULTI_SHOT); | |||
|  | 	if(b_useskill) {		 | |||
|  | 		obj.sq_IntVectClear(); | |||
|  | 				 | |||
|  | 		if(obj.getState() == STATE_JUMP) | |||
|  | 			obj.sq_IntVectPush(ENUM_MULTI_SHOT_SUBSTATE_CHARGE);  | |||
|  | 		else | |||
|  | 			obj.sq_IntVectPush(ENUM_MULTI_SHOT_SUBSTATE_FLOOR);  | |||
|  | 		obj.sq_IntVectPush(obj.getXPos());  | |||
|  | 		obj.sq_IntVectPush(obj.getYPos());  | |||
|  | 		obj.sq_IntVectPush(obj.getZPos());  | |||
|  | 		obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true); | |||
|  | 		return true; | |||
|  | 	}	 | |||
|  | 	return false; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function checkCommandEnable_MultiShot(obj) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return false; | |||
|  | 
 | |||
|  | 	local state = obj.sq_GetState(); | |||
|  | 	 | |||
|  | 	if(state == STATE_ATTACK) { | |||
|  | 		// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] | |||
|  | 		return obj.sq_IsCommandEnable(SKILL_MULTI_SHOT); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_MULTI_SHOT); | |||
|  | 	} | |||
|  | 	 | |||
|  | 	return true; | |||
|  | } | |||
|  | 
 | |||
|  | function sendMultiShotEnd(obj) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return; | |||
|  | 
 | |||
|  | 	if(obj.isMyControlObject()) { | |||
|  | 		local subState = obj.getSkillSubState(); | |||
|  | 		if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR) | |||
|  | 			obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); | |||
|  | 		else { | |||
|  | 			obj.sq_IntVectClear(); | |||
|  | 			obj.sq_IntVectPush(1); | |||
|  | 			obj.sq_IntVectPush(0); | |||
|  | 			obj.sq_IntVectPush(0); | |||
|  | 			obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); | |||
|  | 		}	 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | function onProc_MultiShot(obj) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return; | |||
|  | 
 | |||
|  | 	local var = obj.getVar(); | |||
|  | 	local currentInputCount = var.getInt(VAR_MULTI_SHOT_CURRENT_COUNT); | |||
|  | 					 | |||
|  | 	if(obj.isMyControlObject()) | |||
|  | 	{ | |||
|  | 		obj.setSkillCommandEnable(SKILL_MULTI_SHOT,true);		 | |||
|  | 		local b_useskill = obj.sq_IsEnterSkill(SKILL_MULTI_SHOT);	 | |||
|  | 
 | |||
|  | 		sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); //奢问郦 ?撩? | |||
|  | 		if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) //蝶鉴嬴桧夔桧釭 奢问帼? 援蒂卫 | |||
|  | 			obj.addRapidInput(); // 翱颤 殓溘 籀葬 | |||
|  | 	} | |||
|  | 	 | |||
|  | 	sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); //薄?郦 ?撩? | |||
|  | 	if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)) { // 薄?郦 殓溘卫 镞模 | |||
|  | 		sendMultiShotEnd(obj); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onSetState_MultiShot(obj, state, datas, isResetTimer) | |||
|  | { | |||
|  | 	if(!obj) return; | |||
|  | 	 | |||
|  | 	local subState = sq_GetVectorData(datas, 0); | |||
|  | 	obj.setSkillSubState(subState);	 | |||
|  | 	 | |||
|  | 	if(subState != ENUM_MULTI_SHOT_SUBSTATE_FLOOR) { | |||
|  | 			 | |||
|  | 		if(subState == ENUM_MULTI_SHOT_SUBSTATE_CHARGE) { | |||
|  | 			obj.sq_SetStaticMoveInfo(0, 0, 0, false);	 | |||
|  | 			obj.sq_SetStaticMoveInfo(1, 0, 0, false);	 | |||
|  | 			sq_SetZVelocity(obj,1,0); | |||
|  | 			obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_READY);		 | |||
|  | 		} | |||
|  | 		else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) { | |||
|  | 			obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_1);		 | |||
|  | 		} | |||
|  | 		else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) { | |||
|  | 			obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_3); | |||
|  | 		} | |||
|  | 		else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) { | |||
|  | 			obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_2); | |||
|  | 		} | |||
|  | 	} | |||
|  | 	else { | |||
|  | 		obj.sq_StopMove(); | |||
|  | 		obj.sq_SetCurrentAnimation(CUSTOM_ANI_MULTI_SHOT); | |||
|  | 	} | |||
|  | 	 | |||
|  | 	//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, | |||
|  | 	//		SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); | |||
|  | 		 | |||
|  | 	local x = sq_GetVectorData(datas, 1); | |||
|  | 	local y = sq_GetVectorData(datas, 2); | |||
|  | 	local z = sq_GetVectorData(datas, 3); | |||
|  | 	sq_SetCurrentPos(obj,x,y,z);	 | |||
|  | 
 | |||
|  | 	local var = obj.getVar(); | |||
|  | 	var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT,0);	 | |||
|  | 	 | |||
|  | 	if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR || subState == ENUM_MULTI_SHOT_SUBSTATE_CHARGE) // 嫦饵?阳 尔桧蝶 | |||
|  | 		obj.sq_PlaySound("MW_TAKE"); | |||
|  | 	 | |||
|  | 	local element = obj.getThrowElement(); | |||
|  | 	addElementalChain_ATMage(obj, element); | |||
|  | } | |||
|  | 
 | |||
|  | function onTimeEvent_MultiShot(obj, timeEventIndex, timeEventCount) | |||
|  | {		 | |||
|  | 	if(!obj) | |||
|  | 		return false; | |||
|  | 
 | |||
|  | 	if(timeEventIndex == TIMER_MULTI_SHOT_CREATE_MAGIC_BALL) {		 | |||
|  | 		local var = obj.getVar(); | |||
|  | 		local count = var.getInt(VAR_MULTI_SHOT_CURRENT_COUNT);	 | |||
|  | 		local level	= sq_GetSkillLevel(obj, SKILL_MULTI_SHOT); | |||
|  | 		local max   = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 0, level); | |||
|  | 
 | |||
|  | 		if(count < max) { | |||
|  | 			local inputConut = obj.getRapidInputFrequency(); | |||
|  | 			inputConut = inputConut.tointeger(); | |||
|  | 				 | |||
|  | 			local inputMax		= sq_GetIntData(obj, SKILL_MULTI_SHOT, 0); // 0:蟾渡 翱颤 缀紫 譆渠纂  | |||
|  | 			local gapByInputMin = sq_GetIntData(obj, SKILL_MULTI_SHOT, 1); // 1:嫦饵 除问 ms (翱颤 譆模卫)  | |||
|  | 			local gapByInputMax = sq_GetIntData(obj, SKILL_MULTI_SHOT, 2); // 2:嫦饵 除问 ms (翱颤 譆渠卫) | |||
|  | 			local gap = 300; | |||
|  | 			 | |||
|  | 			if(inputConut > inputMax) | |||
|  | 				inputConut = inputMax;			 | |||
|  | 			 | |||
|  | 			// 翱颤陛 桡戏贼 gapByInputMin 高戏煎. | |||
|  | 			// 翱颤陛 号击 热烟 gapByInputMax缣 陛梱遴 高戏煎. | |||
|  | 			local upValue = gapByInputMax - gapByInputMin; | |||
|  | 			upValue = upValue.tofloat() * (inputConut.tofloat()/inputMax.tofloat());			 | |||
|  | 			gap = gapByInputMin + upValue.tointeger();									 | |||
|  | 			obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, gap, 1,false);  | |||
|  | 			 | |||
|  | 			count = count+1; | |||
|  | 			var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT, count);	 | |||
|  | 			 | |||
|  | 			local currentElementalType = obj.getThrowElement();			 | |||
|  | 			local subState = obj.getSkillSubState(); | |||
|  | 			local bonusDamage = 0;	 | |||
|  | 			 | |||
|  | 			if(currentElementalType == ENUM_ELEMENT_NONE) | |||
|  | 			{ | |||
|  | 				local basicState = STATE_ATTACK; | |||
|  | 				 | |||
|  | 				if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL || subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 渠陕摹,热霜 | |||
|  | 					basicState = STATE_JUMP_ATTACK; | |||
|  | 				 | |||
|  | 				sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),0); | |||
|  | 				obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),basicState);				 | |||
|  | 				bonusDamage = sq_GetCurrentAttackBonusRate(obj);				 | |||
|  | 			} | |||
|  | 			 | |||
|  | 			local addMultiShotDamage = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 1, level); | |||
|  | 			 | |||
|  | 			if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR) | |||
|  | 				createMiniMagicCircle(obj, 30, 65, 0, bonusDamage + addMultiShotDamage); | |||
|  | 			else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) // 姜贼 | |||
|  | 				createMiniMagicCircle(obj, 30, 82, 0, bonusDamage + addMultiShotDamage); | |||
|  | 			else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) // 渠陕摹 | |||
|  | 				createMiniMagicCircle(obj, 20, 55, 1, bonusDamage + addMultiShotDamage); | |||
|  | 			else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 热霜 | |||
|  | 				createMiniMagicCircle(obj, 0, 45, 2, bonusDamage + addMultiShotDamage); | |||
|  | 				 | |||
|  | 
 | |||
|  | 			local typeName = "none";			 | |||
|  | 			switch(currentElementalType)  | |||
|  | 			{ | |||
|  | 			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;			 | |||
|  | 			} | |||
|  | 						 | |||
|  | 			local path = "Character/Mage/Effect/Animation/ATMultiShot/attack" + subState + "_" + typeName + "_dodge.ani"; | |||
|  | 			sq_CreateDrawOnlyObject(obj,path, ENUM_DRAWLAYER_NORMAL, true); | |||
|  | 						 | |||
|  | 			local element = obj.getThrowElement(); | |||
|  | 			local attackIndex = obj.getAttackIndex(); | |||
|  | 			playSoundForAtmageAttack(obj, element, attackIndex); | |||
|  | 		} | |||
|  | 		else { | |||
|  | 			local endDelay = 50; | |||
|  | 			obj.setTimeEvent(TIMER_MULTI_SHOT_WATING_STAND, endDelay, 1,false);  | |||
|  | 		}		 | |||
|  | 	} | |||
|  | 	else if(timeEventIndex == TIMER_MULTI_SHOT_INPUT_COUNT) { | |||
|  | 		 | |||
|  | 	} | |||
|  | 	else if(timeEventIndex == TIMER_MULTI_SHOT_WATING_STAND) { | |||
|  | 		// 谦猿 颤桧该 | |||
|  | 		sendMultiShotEnd(obj); | |||
|  | 		return true; | |||
|  | 	} | |||
|  | 	return false; | |||
|  | } | |||
|  | function onEndCurrentAni_MultiShot(obj) | |||
|  | { | |||
|  | 	if(!obj) return; | |||
|  | 	 | |||
|  | 	local subState = obj.getSkillSubState(); | |||
|  | 	 | |||
|  | 	 | |||
|  | 	if(subState == ENUM_MAGIC_CANNON_SUBSTATE_CHARGE) { | |||
|  | 		local isHorizon = sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL); | |||
|  | 		local isVertical = sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL); | |||
|  | 		local subState = ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL; // 渠陕摹桧 晦狱 | |||
|  | 		 | |||
|  | 		if(isHorizon && !isVertical) | |||
|  | 			subState = ENUM_MAGIC_CANNON_SUBSTATE_HORIZON; | |||
|  | 		else if(!isHorizon && isVertical) | |||
|  | 			subState = ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL;	 | |||
|  | 			 | |||
|  | 		obj.sq_IntVectClear(); | |||
|  | 		obj.sq_IntVectPush(subState);  | |||
|  | 		obj.sq_IntVectPush(obj.getXPos());  | |||
|  | 		obj.sq_IntVectPush(obj.getYPos());  | |||
|  | 		obj.sq_IntVectPush(obj.getZPos());  | |||
|  | 		obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true);		 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onKeyFrameFlag_MultiShot(obj, flagIndex) | |||
|  | { | |||
|  | 	if(!obj) return true; | |||
|  | 	 | |||
|  | 	local subState = obj.getSkillSubState(); | |||
|  | 	if(flagIndex == 1) {	 | |||
|  | 		obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, 50, 1,true);  // 嫦饵		 | |||
|  | 		obj.setTimeEvent(TIMER_MULTI_SHOT_INPUT_COUNT, 1000, 1,false); // 蟾渡 郦殓溘 ?热 ?钦. | |||
|  | 		 | |||
|  | 		obj.startRapidInput(); | |||
|  | 	} | |||
|  | 	return true; | |||
|  | 
 | |||
|  | } | |||
|  |  |