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)
 | ||
| 	{
 | ||
| 		
 | ||
| 	}
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
|  |