667 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			667 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | 
 | |||
|  | SUB_STATE_BROKENARROW_0	<- 0 | |||
|  | SUB_STATE_BROKENARROW_1	<- 1 | |||
|  | SUB_STATE_BROKENARROW_2	<- 2 | |||
|  | SUB_STATE_BROKENARROW_3	<- 3 | |||
|  | SUB_STATE_BROKENARROW_4	<- 4 | |||
|  | 
 | |||
|  | BrokenArrow_state_0 <- 10 | |||
|  | BrokenArrow_state_1 <- 11 | |||
|  | BrokenArrow_state_2 <- 12 | |||
|  | 
 | |||
|  | function checkExecutableSkill_BrokenArrow(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return false; | |||
|  | 	 | |||
|  | 	//local targetObj = sq_GetObjectByObjectId(obj, BROKENARROW_UNIQUE_ID); | |||
|  | 	local flag = obj.getVar("brokenarrow").get_vector(VECTOR_FLAG_0); | |||
|  | 	local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250	`Character/Mage/ATBrokenArrow.obj`			// 陴彻饵 - 粽煎赎拥煎办 (?髦) | |||
|  | 
 | |||
|  | 	local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) | |||
|  | 	 | |||
|  | 	// 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) | |||
|  | 	// 0塭贼 渠莲蒂 ?虽 强朝棻.. | |||
|  | 		 | |||
|  | 	if(!targetObj || flag == 0 || expTime == 0) | |||
|  | 	{ | |||
|  | 		local b_useskill = obj.sq_IsUseSkill(SKILL_BROKENARROW); | |||
|  | 
 | |||
|  | 		if(b_useskill) { | |||
|  | 			obj.getVar("arrow").clear_vector(); | |||
|  | 			obj.getVar("arrow").push_vector(0); | |||
|  | 			obj.sq_IntVectClear(); | |||
|  | 			obj.sq_IntVectPush(SUB_STATE_BROKENARROW_0); // substate撮? | |||
|  | 			obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); | |||
|  | 			return true; | |||
|  | 		}	 | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		print( " checkExecutableSkill_BrokenArrow targetObj:" + targetObj); | |||
|  | 		obj.sq_IntVectClear(); | |||
|  | 		obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮? | |||
|  | 		 | |||
|  | 		local group = sq_GetGroup(targetObj); | |||
|  | 		local uniqueId = sq_GetUniqueId(targetObj); | |||
|  | 	 | |||
|  | 		obj.sq_IntVectPush(group); // substate撮? | |||
|  | 		obj.sq_IntVectPush(uniqueId); // substate撮? | |||
|  | 		obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); | |||
|  | 		return true; | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | 
 | |||
|  | 	return false; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | //local arr=["one","two","three"] | |||
|  | // | |||
|  | //::print("FOREACH\n"); | |||
|  | // | |||
|  | //foreach(i,val in arr) | |||
|  | //{ | |||
|  | 	//::print("index ["+i+"]="+val+"\n"); | |||
|  | //} | |||
|  | // | |||
|  | //::print("FOR\n"); | |||
|  | // | |||
|  | //for(local i=0;i<arr.len();i+=1) | |||
|  | //{ | |||
|  | 	//::print("index ["+i+"]="+arr[i]+"\n"); | |||
|  | //} | |||
|  | // | |||
|  | //::print("WHILE\n"); | |||
|  | // | |||
|  | //local i=0; | |||
|  | //while(i<arr.len()) | |||
|  | //{ | |||
|  | 	//::print("index ["+i+"]="+arr[i]+"\n"); | |||
|  | 	//i+=1; | |||
|  | //} | |||
|  | //::print("DO WHILE\n"); | |||
|  | // | |||
|  | //local i=0; | |||
|  | //do | |||
|  | //{ | |||
|  | 	//::print("index ["+i+"]="+arr[i]+"\n"); | |||
|  | 	//i+=1; | |||
|  | //}while(i<arr.len()); | |||
|  | 
 | |||
|  | 
 | |||
|  | function checkCommandEnable_BrokenArrow(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return false; | |||
|  | 
 | |||
|  | 	local state = obj.sq_GetState(); | |||
|  | 	 | |||
|  | 	if(state == STATE_ATTACK) | |||
|  | 	{ | |||
|  | 		// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] | |||
|  | 		return obj.sq_IsCommandEnable(SKILL_BROKENARROW); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | 	return true; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onChangeSkillEffect_BrokenArrow(obj, skillIndex, reciveData) | |||
|  | { | |||
|  | 	if(!obj) | |||
|  | 		return; | |||
|  | } | |||
|  | 
 | |||
|  | function onSetState_BrokenArrow(obj, state, datas, isResetTimer) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.sq_GetVectorData(datas, 0); | |||
|  | 	obj.setSkillSubState(substate); | |||
|  | 	obj.sq_StopMove(); | |||
|  | 
 | |||
|  | 	local arrowLauchNum = obj.sq_GetIntData(SKILL_BROKENARROW, 0); // 0. ?髦 偎热 | |||
|  | 	 | |||
|  | 	obj.getVar().clear_vector();	 | |||
|  | 	obj.getVar().push_vector(arrowLauchNum); | |||
|  | 	obj.getVar().push_vector(0); | |||
|  | 	obj.getVar().push_vector(0); | |||
|  | 	 | |||
|  | 	obj.getVar("flag").clear_vector(); | |||
|  | 	obj.getVar("flag").push_vector(0); | |||
|  | 	 | |||
|  | 	local posX = obj.getXPos(); | |||
|  | 	local posY = obj.getYPos(); | |||
|  | 	local posZ = obj.getZPos(); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0) { | |||
|  | 		if(obj.getVar("brokenarrow").size_vector() == 0) | |||
|  | 		{ | |||
|  | 			obj.sq_PlaySound("MW_BARROW"); | |||
|  | 			obj.getVar("brokenarrow").clear_vector(); | |||
|  | 			obj.getVar("brokenarrow").push_vector(1); | |||
|  | 		} | |||
|  | 		else | |||
|  | 			obj.getVar("brokenarrow").set_vector(VECTOR_FLAG_0, 1); | |||
|  | 		 | |||
|  | 		// 渠莲?楚斜 | |||
|  | 		obj.getVar("dash").clear_vector(); | |||
|  | 		obj.getVar("dash").push_vector(0); | |||
|  | 		 | |||
|  | 		obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW1); | |||
|  | 		local pAni = obj.sq_GetCurrentAni(); | |||
|  | 		pAni.setSpeedRate(200.0); | |||
|  | 
 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_1) { | |||
|  | 		obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_LOOP1); | |||
|  | 		local pAni = obj.sq_GetCurrentAni(); | |||
|  | 		pAni.setSpeedRate(200.0); | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 		// 渠莲1 | |||
|  | 		obj.getVar("brokenarrow").set_vector(VECTOR_FLAG_0, 0); // ?廓 ?溥耀棻贼..棻卫 葬掸桧 腌栖棻. | |||
|  | 		 | |||
|  | 		local group = obj.sq_GetVectorData(datas, 1); | |||
|  | 		local uniqueId = obj.sq_GetVectorData(datas, 2); | |||
|  | 		 | |||
|  | 		local targetObj = sq_GetObject(obj, group, uniqueId); | |||
|  | 
 | |||
|  | 		obj.getVar().push_vector(posX); // ?营 x : i: 3 | |||
|  | 		obj.getVar().push_vector(posY); // ?营 y : i: 4 | |||
|  | 		 | |||
|  | 		if(targetObj) { | |||
|  | 			local disX = sq_Abs(targetObj.getXPos() - posX); | |||
|  | 			local disY = targetObj.getYPos() - posY; | |||
|  | 			 | |||
|  | 			if(targetObj.getXPos() > posX) | |||
|  | 			{ | |||
|  | 				obj.setDirection(ENUM_DIRECTION_RIGHT); | |||
|  | 			} | |||
|  | 			else | |||
|  | 			{ | |||
|  | 				obj.setDirection(ENUM_DIRECTION_LEFT); | |||
|  | 			} | |||
|  | 			 | |||
|  | 			disX = disX - 60; | |||
|  | 			 | |||
|  | 			if(disX <= 0) | |||
|  | 				disX = 0; | |||
|  | 			 | |||
|  | 			obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 5 | |||
|  | 			obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 6 | |||
|  | 		} | |||
|  | 		else { // 蛤?? 桧翕剪葬 | |||
|  | 			local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~) | |||
|  | 			obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬  | |||
|  | 			obj.getVar().push_vector(0); // y蹴 桧翕剪葬 | |||
|  | 		} | |||
|  | 		 | |||
|  | 		obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH1); | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 		obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_AT_MAGE_BROKENARROW); | |||
|  | 		obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH2); | |||
|  | 		 | |||
|  | 		obj.sq_PlaySound("MW_BARROW_FIN"); | |||
|  | 		 | |||
|  | 		local atk = sq_GetCurrentAttackInfo(obj);		 | |||
|  | 		local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 1, 1.0); //1.?萃楝纂晦 奢问溘(%) | |||
|  | 		sq_SetCurrentAttackBonusRate(atk, attackRate); | |||
|  | 		 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | function prepareDraw_BrokenArrow(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0) { | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_1) { | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function getAngleArrow(obj, pTargetChr) | |||
|  | { | |||
|  | 	if(!obj) return; | |||
|  | 	if(!pTargetChr) return; | |||
|  | 	 | |||
|  | 	local offsetX = 58; // ?践朝 嫔纂 | |||
|  | 	local offsetZ = 75; // ?践朝 嫔纂 | |||
|  | 	 | |||
|  | 
 | |||
|  | 	local X = obj.getXPos() + sq_GetDistancePos(0, obj.getDirection(), offsetX); | |||
|  | 	local Y = obj.getYPos(); | |||
|  | 	local Z = obj.getZPos() + offsetZ; | |||
|  | 	 | |||
|  | 	local posX = pTargetChr.getXPos(); | |||
|  | 	local posY = pTargetChr.getYPos(); | |||
|  | 	local posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2); | |||
|  | 	 | |||
|  | 	local offset = posX - X; | |||
|  | 	 | |||
|  | 	local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); | |||
|  | 	 | |||
|  | 	local w = posX - X;		 | |||
|  | 	if(w < 0) w = -w; | |||
|  | 	//	?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻. | |||
|  | 	 | |||
|  | 	local h = (posY - posZ) - (Y - Z); | |||
|  | 	local width = sq_Abs(posX - X); | |||
|  | 	local angle = sq_Atan2( h.tofloat(), width.tofloat()); | |||
|  | 
 | |||
|  | 	//if((posY - posZ) < (Y - Z)) | |||
|  | 	{ | |||
|  | 		angle = -angle; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	local nRevision = distance; | |||
|  | 
 | |||
|  | 	local cos = nRevision.tofloat() * sq_Cos(angle); | |||
|  | 	local sin = nRevision.tofloat() * sq_Sin(angle); | |||
|  | 
 | |||
|  | 	local nX = sq_Abs( cos.tointeger() ); | |||
|  | 	local nY = sq_Abs( sin.tointeger() ); | |||
|  | 
 | |||
|  | 	return angle; | |||
|  | 	//sq_SetfRotateAngle(pAni, angle);		 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onProc_BrokenArrow(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 
 | |||
|  | 	local pAni = obj.sq_GetCurrentAni(); | |||
|  | 	local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); | |||
|  | 	local sq_var = obj.getVar(); | |||
|  | 	local currentT = sq_GetCurrentTime(pAni); | |||
|  | 
 | |||
|  | 	local posX = sq_GetXPos(obj); | |||
|  | 	local posY = sq_GetYPos(obj); | |||
|  | 	local posZ = sq_GetZPos(obj); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0) { | |||
|  | 		// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_1) { | |||
|  | 		// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 		local dash_t = pAni.getDelaySum(false); // | |||
|  | 		//obj.getVar().push_vector(posX); // ?营 x : i: 3 | |||
|  | 		//obj.getVar().push_vector(posY); // ?营 y : i: 4 | |||
|  |     	 | |||
|  | 		local srcX = obj.getVar().get_vector(3); // 卫蒙x | |||
|  | 		local srcY = obj.getVar().get_vector(4); // 卫蒙y | |||
|  |     	    	 | |||
|  |     	local dis_x_len = sq_var.get_vector(5); // 识 桧翕剪葬 | |||
|  | 		local dis_y_len = obj.getVar().get_vector(6) + 1; // y蹴 桧翕剪葬 | |||
|  | 		 | |||
|  | 		local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true); | |||
|  | 		 | |||
|  | 		local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); | |||
|  | 		 | |||
|  | 		local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); | |||
|  | 		local dstY = srcY + my; | |||
|  | 		  | |||
|  | 		if(sq_var.get_vector(1)) | |||
|  | 		{ // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼.. | |||
|  | 			if(sq_var.get_vector(2) != posY) | |||
|  | 			{ // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼.. | |||
|  | 				sq_var.set_vector(1, 0); // 桧翕?楚斜蒂 off?鄹栖棻.. | |||
|  | 				sq_var.set_vector(2, posY); | |||
|  | 			} | |||
|  | 		} | |||
|  | 		  | |||
|  | 		if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(1)) | |||
|  | 		{ // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕 | |||
|  | 			sq_setCurrentAxisPos(obj, 0, dstX); | |||
|  | 			sq_setCurrentAxisPos(obj, 1, dstY); | |||
|  | 		} | |||
|  | 		else | |||
|  | 		{ // 桧翕? 热 桡朝 虽羲击 虏陬棻.. | |||
|  | 			sq_var.set_vector(1,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. | |||
|  | 			local offset = dstX - posX; | |||
|  | 			 | |||
|  | 			if(offset != 0) {				 | |||
|  | 				if(offset < 0)  | |||
|  | 					offset = -offset; | |||
|  | 				 | |||
|  | 				local totalLen = sq_var.get_vector(5); // 识桧翕剪葬 | |||
|  | 				sq_var.set_vector(5, totalLen - offset); | |||
|  | 			} | |||
|  | 		} | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 		// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onProcCon_BrokenArrow(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1) | |||
|  | 	{ | |||
|  | 		local pAni = obj.getCurrentAnimation(); | |||
|  | 		local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); | |||
|  | 
 | |||
|  | 		//local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除 | |||
|  | 		//local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除 | |||
|  | 		//local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除 | |||
|  | 	 | |||
|  | 		if(frmIndex >= 3) | |||
|  | 		{ | |||
|  | 			if(obj.getVar("flag").get_vector(0) == 0) | |||
|  | 			{ | |||
|  | 				local x_range = 400; // 匐仪彰嫔 x | |||
|  | 				local y_range = 200; // 匐仪彰嫔 y | |||
|  | 				local z_range = 50; // 匐仪彰嫔 z | |||
|  | 				 | |||
|  | 				x_range = obj.sq_GetIntData(SKILL_BROKENARROW, 3); // 3. x彰嫔 | |||
|  | 				y_range = obj.sq_GetIntData(SKILL_BROKENARROW, 4); // 4. y彰嫔 | |||
|  | 				z_range = obj.sq_GetIntData(SKILL_BROKENARROW, 5); // 5. z彰嫔 | |||
|  | 				 | |||
|  | 				local x = sq_GetXPos(obj); | |||
|  | 				local y = sq_GetYPos(obj); | |||
|  | 				local z = sq_GetZPos(obj); | |||
|  | 
 | |||
|  | 				local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 0, 1.0); //2.奢问溘(%) | |||
|  | 
 | |||
|  | 				local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) | |||
|  | 				local stunTime = obj.sq_GetIntData(SKILL_BROKENARROW, 2); // 2. 瞳 唳霜卫除 | |||
|  | 				 | |||
|  | 				local targetObj = sq_FindTarget(obj, 80, x_range, y_range, z_range); | |||
|  | 				 | |||
|  | 				 | |||
|  | 				//local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); | |||
|  | 				local xLen = 400; | |||
|  | 				local yLen = 0; | |||
|  | 				local zLen = 75; | |||
|  | 				local angle = -1.0; | |||
|  | 				 | |||
|  | 				if(targetObj) | |||
|  | 				{ | |||
|  | 					 xLen = obj.getXDistance(targetObj); | |||
|  | 					 yLen = sq_GetYPos(targetObj) - sq_GetYPos(obj); | |||
|  | 					 zLen = sq_GetZPos(targetObj) + (sq_GetObjectHeight(targetObj) / 2); | |||
|  | 					  | |||
|  | 					 angle = getAngleArrow(obj, targetObj); | |||
|  | 					  | |||
|  | 					 print(" angle:" + angle); | |||
|  | 				} | |||
|  | 				 | |||
|  | 				//local fireOffsetX = 56; | |||
|  | 				 | |||
|  | 				if(obj.isMyControlObject()) | |||
|  | 				{ | |||
|  | 					local fireOffsetX = 65; | |||
|  | 					local fireOffsetY = 0; | |||
|  | 					local fireOffsetZ = 73; | |||
|  | 					 | |||
|  | 					sq_BinaryStartWrite(); | |||
|  | 					sq_BinaryWriteDword(xLen); //  | |||
|  | 					sq_BinaryWriteDword(yLen); //  | |||
|  | 					sq_BinaryWriteDword(zLen); //  | |||
|  | 					sq_BinaryWriteDword(attackRate); // 		 | |||
|  | 					sq_BinaryWriteDword(expTime); // 		 | |||
|  | 					sq_BinaryWriteDword(stunTime); // 		 | |||
|  | 					sq_BinaryWriteFloat(angle); // 		 | |||
|  | 					obj.sq_SendCreatePassiveObjectPacket(24250, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // ?髦 | |||
|  | 				} | |||
|  | 				 | |||
|  | 				obj.getVar("flag").set_vector(0, 1); | |||
|  | 			} | |||
|  | 		} | |||
|  | 		 | |||
|  | 		if(obj.getVar("dash").get_vector(0) == 0) | |||
|  | 		{ | |||
|  | 			obj.setSkillCommandEnable(SKILL_BROKENARROW, true); | |||
|  |     		 | |||
|  | 			local iEnterSkill = obj.sq_IsEnterSkill(SKILL_BROKENARROW); | |||
|  |     		 | |||
|  | 			if(iEnterSkill != -1) | |||
|  | 			{ | |||
|  | 				obj.getVar("dash").set_vector(0, 1); | |||
|  | 			} | |||
|  | 		} | |||
|  | 
 | |||
|  | 		 | |||
|  | 		 | |||
|  | 		 | |||
|  | 		//local particleCreater = null; | |||
|  | 		 | |||
|  | 		//particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowDownAttack", "Character/Mage/Particle/BrokenArrowDownAttack.ptl", obj); | |||
|  | 		// | |||
|  | 		//particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowUpAttack", "Character/Mage/Particle/BrokenArrowUpAttack.ptl", obj); | |||
|  | 			// | |||
|  | 		//particleCreater.Restart(0); | |||
|  | 		//particleCreater.SetPos(x + dx, y + dy, z + dz);	 | |||
|  | 		// | |||
|  | 		//sq_AddParticleObject(obj, particleCreater); | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 		// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 		// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onEndCurrentAni_BrokenArrow(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 	 | |||
|  | 	if(!obj.isMyControlObject()) { | |||
|  | 		return; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	local arrowNum = obj.getVar().get_vector(0); | |||
|  | 		 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1) | |||
|  | 	{ | |||
|  | 
 | |||
|  | 		local arrowIndex = obj.getVar("arrow").get_vector(0); | |||
|  | 		 | |||
|  | 		arrowIndex = arrowIndex + 1; | |||
|  | 		 | |||
|  | 		obj.getVar("arrow").set_vector(0, arrowIndex); | |||
|  | 		 | |||
|  | 		if(arrowIndex < arrowNum) | |||
|  | 		{ | |||
|  | 			obj.sq_IntVectClear(); | |||
|  | 			obj.sq_IntVectPush(SUB_STATE_BROKENARROW_1); // substate撮? | |||
|  | 			obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); | |||
|  | 		} | |||
|  | 		else | |||
|  | 		{ | |||
|  | 			local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) | |||
|  | 			 | |||
|  | 			// 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) | |||
|  | 			// 0塭贼 渠莲蒂 ?虽 强朝棻.. | |||
|  | 		 | |||
|  | 			if(obj.getVar("dash").get_vector(0) == 1 && expTime > 0) | |||
|  | 			{ | |||
|  | 				local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250	`Character/Mage/ATBrokenArrow.obj`			// 陴彻饵 - 粽煎赎拥煎办 (?髦)				 | |||
|  | 				 | |||
|  | 				 | |||
|  | 				if(!targetObj) | |||
|  | 				{ | |||
|  | 					obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); | |||
|  | 				} | |||
|  | 				else | |||
|  | 				{ | |||
|  | 					local group = sq_GetGroup(targetObj); | |||
|  | 					local uniqueId = sq_GetUniqueId(targetObj); | |||
|  | 				 | |||
|  | 					obj.sq_IntVectClear(); | |||
|  | 					obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮? | |||
|  | 					obj.sq_IntVectPush(group); // substate撮? | |||
|  | 					obj.sq_IntVectPush(uniqueId); // substate撮? | |||
|  | 					 | |||
|  | 					obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); | |||
|  | 				} | |||
|  | 				 | |||
|  | 			} | |||
|  | 			else | |||
|  | 			{ | |||
|  | 				obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); | |||
|  | 			} | |||
|  | 			 | |||
|  | 			//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); | |||
|  | 		} | |||
|  | 
 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) | |||
|  | 	{ | |||
|  | 		obj.sq_IntVectClear(); | |||
|  | 		obj.sq_IntVectPush(SUB_STATE_BROKENARROW_3); // substate撮? | |||
|  | 		obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) | |||
|  | 	{ | |||
|  | 		obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onKeyFrameFlag_BrokenArrow(obj, flagIndex) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return false; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0) { | |||
|  | 		// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_1) { | |||
|  | 		// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 		// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 		// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | 	return false; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onEndState_BrokenArrow(obj, new_state) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0) { | |||
|  | 		// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_1) { | |||
|  | 		// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 		// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 		// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onAfterSetState_BrokenArrow(obj, state, datas, isResetTimer) | |||
|  | { | |||
|  | 
 | |||
|  | 	if(!obj) return; | |||
|  | 
 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 
 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_0) { | |||
|  | 		// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_1) { | |||
|  | 		// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_2) { | |||
|  | 		// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_3) { | |||
|  | 		// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	else if(substate == SUB_STATE_BROKENARROW_4) { | |||
|  | 		// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 | |||
|  | 	} | |||
|  | 	 | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onAttack_BrokenArrow(obj, damager, boundingBox, isStuck) | |||
|  | { | |||
|  | 	if(!obj) return; | |||
|  | 	 | |||
|  | 	local substate = obj.getSkillSubState(); | |||
|  | 	 | |||
|  | 	if(substate == SUB_STATE_BROKENARROW_3) | |||
|  | 	{ | |||
|  | 		 | |||
|  | 	} | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  |  |