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