574 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			574 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | 
 | |||
|  | SUB_STATE_MGRAB_0	<- 0 | |||
|  | SUB_STATE_MGRAB_1	<- 1 | |||
|  | 
 | |||
|  | function setStateMouseGrab(obj) | |||
|  | { | |||
|  | 	if (!obj) return; | |||
|  | 	 | |||
|  | 	local posX = obj.getXPos(); | |||
|  | 	local posY = obj.getYPos(); | |||
|  | 	local posZ = obj.getZPos(); | |||
|  | 	//local grabNum = obj.sq_GetIntData(SKILL_MGRAB, 1); //1. 葆办蝶煎 濩击 热 毡朝 ?热 | |||
|  | 	 | |||
|  | 	//obj.getVar("MouseGrab").clear_vector(); | |||
|  | 	//obj.getVar("MouseGrab").push_vector(grabNum); | |||
|  | 	// 觼葬缣桧搅暧 蝶鉴樯策蝶蒂 撮??栖棻. | |||
|  | 	 | |||
|  | 	//setCreatorSkillStateSkillIndex(obj, SKILL_MGRAB); | |||
|  | 	//setCreatorSkillCount(obj, grabNum); | |||
|  | 	 | |||
|  | 	releaseOutLine(obj, "grabobj"); | |||
|  | 	 | |||
|  | 
 | |||
|  | 	obj.getVar("mgrab").clear_vector(); | |||
|  | 	obj.getVar("mgrab").push_vector(0); | |||
|  | 	obj.getVar("mgrab").push_vector(0); | |||
|  | 	 | |||
|  | 	obj.getVar("mgrab").clear_timer_vector(); | |||
|  | 	obj.getVar("mgrab").push_timer_vector(); | |||
|  | 	 | |||
|  | 	local t = obj.getVar("mgrab").get_timer_vector(0); | |||
|  | 	t.setParameter(100, -1); | |||
|  | 	t.resetInstant(0); | |||
|  | 	 | |||
|  | 	obj.getVar("mgrab").clear_ct_vector(); | |||
|  | 	obj.getVar("mgrab").push_ct_vector(); | |||
|  | 	local timer = obj.getVar("mgrab").get_ct_vector(0); | |||
|  | 	timer.Reset(); | |||
|  | 	timer.Start(10000,0); | |||
|  | } | |||
|  | 
 | |||
|  | function grabThrowObject(obj) | |||
|  | { | |||
|  | 	local hoverEnemyObject = getOverClickableEnemyObject(obj, IMouse.GetXPos(), IMouse.GetYPos()); | |||
|  | 		 | |||
|  | 	if (hoverEnemyObject) | |||
|  | 	{ | |||
|  | 		local grabable = sq_IsGrabable(obj, hoverEnemyObject); | |||
|  | 			 | |||
|  | 		print(" grab:" + grabable + " holdable:" + sq_IsHoldable(obj, hoverEnemyObject)); | |||
|  | 		if (sq_IsHoldable(obj, hoverEnemyObject) == true && sq_IsGrabable(obj, hoverEnemyObject) == true) | |||
|  | 		{ // 濩晦陛栋瞳桧塭贼 ?卫?栖棻. | |||
|  | 			 | |||
|  | 			// 濩擎匙桧 毡朝 唳办缣虏 啪桧虽蒂 还罹鄹栖棻. | |||
|  | 			local consumeValue = getCreatorSkillConsumeValue(obj, SKILL_MGRAB); | |||
|  | 				 | |||
|  | 			if (!useCreatorSkill(obj, SKILL_MGRAB, 0, 0, consumeValue)) | |||
|  | 				return; | |||
|  | 			// | |||
|  | 				 | |||
|  | 											 | |||
|  | 			obj.getVar("grabobj").push_obj_vector(hoverEnemyObject); // grabobj 				 | |||
|  | 				 | |||
|  | 			local activeobj = sq_GetCNRDObjectToActiveObject(hoverEnemyObject); | |||
|  | 				 | |||
|  | 			if (activeobj) | |||
|  | 			{ | |||
|  | 				// ?葆葬虏 濩朝棻. | |||
|  | 				local objListSize = obj.getVar("grabobj").get_obj_vector_size(); | |||
|  | 					 | |||
|  | 				print(" objListSize:" + objListSize); | |||
|  | 					 | |||
|  | 				for (local i =0;i<objListSize;++i) | |||
|  | 				{				 | |||
|  | 					local vObj = obj.getVar("grabobj").get_obj_vector(i); | |||
|  | 						 | |||
|  | 					local act = sq_GetCNRDObjectToActiveObject(vObj); | |||
|  | 						 | |||
|  | 					if (act == null) | |||
|  | 						continue;							 | |||
|  | 						 | |||
|  | 					sq_IntVectorClear(sq_GetGlobalIntVector()); | |||
|  | 					sq_IntVectorPush(sq_GetGlobalIntVector(),0); | |||
|  | 					sq_AddSetStatePacketActiveObject(act,STATE_HOLD, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); | |||
|  | 				} | |||
|  | 			} | |||
|  | 		} //if (sq_IsHoldable(obj, hoverEnemyObject) == false && sq_IsGrabable(obj, hoverEnemyObject) == true) | |||
|  | 			 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onSetState_Mgrab(obj,state,datas,isResetTimer) | |||
|  | { | |||
|  | } | |||
|  | 
 | |||
|  | function onChangeSkillEffect_Mgrab(obj, skillIndex, reciveData) | |||
|  | { | |||
|  | 	if (!obj) | |||
|  | 		return; | |||
|  | 		 | |||
|  | 	local size = 8; // ?釭 涡 跷陛?捡? | |||
|  | 	local data_l =[]; | |||
|  | 	 | |||
|  | 	data_l.resize(size); | |||
|  | 	 | |||
|  | 	for (local i = 0; i < 8; i++) | |||
|  | 	{ | |||
|  | 		data_l[i] = -1; | |||
|  | 		 | |||
|  | 		if (reciveData.getSize() > 0) | |||
|  | 		{ | |||
|  | 			data_l[i] = reciveData.readDword(); | |||
|  | 		} | |||
|  | 	} | |||
|  | 		 | |||
|  | 	local targetObj = sq_GetObject(obj, data_l[0], data_l[1]); | |||
|  | 	 | |||
|  | 	if (targetObj) | |||
|  | 	{ | |||
|  | 		local xPos = data_l[2]; | |||
|  | 		local zPos = data_l[3]; | |||
|  | 		 | |||
|  | 		if (zPos < 0) | |||
|  | 			zPos = 0; | |||
|  | 		 | |||
|  | 		local stateTimer = obj.sq_GetStateTimer(); | |||
|  | 		 | |||
|  | 		if (!obj.getVar("mgrab").get_vector(0)) | |||
|  | 		{ | |||
|  | 			obj.getVar("mgrab").set_vector(0, xPos); | |||
|  | 			obj.getVar("mgrab").set_vector(1, zPos); | |||
|  | 		} | |||
|  | 		 | |||
|  | 		local state = data_l[4]; | |||
|  | 		print(" on change state:" + state); | |||
|  | 		 | |||
|  | 		//if (obj.isMyControlObject()) | |||
|  | 		{ | |||
|  | 			if (state == 0) | |||
|  | 			{ | |||
|  | 				if (targetObj.getState() != STATE_HOLD && targetObj.getState() != STATE_DOWN) | |||
|  | 				{ | |||
|  | 					local act = sq_GetCNRDObjectToActiveObject(targetObj); | |||
|  | 					 | |||
|  | 					if (act) | |||
|  | 					{ | |||
|  | 						sq_IntVectorClear(sq_GetGlobalIntVector()); | |||
|  | 						sq_IntVectorPush(sq_GetGlobalIntVector(),0); | |||
|  | 						sq_AddSetStatePacketActiveObject(act, STATE_HOLD, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); | |||
|  | 						print(" onchange setstate hold");					 | |||
|  | 					} | |||
|  | 				} | |||
|  | 			} | |||
|  | 			else if (state == 1) | |||
|  | 			{ | |||
|  | 				local act = sq_GetCNRDObjectToActiveObject(targetObj); | |||
|  | 				 | |||
|  | 				if (act) | |||
|  | 				{				 | |||
|  | 					local direction = data_l[5]; | |||
|  | 					local nX = data_l[6]; | |||
|  | 					local nY = data_l[7]; | |||
|  | 					 | |||
|  | 					sq_IntVectorClear(sq_GetGlobalIntVector()); | |||
|  | 					sq_IntVectorPush(sq_GetGlobalIntVector(),direction); | |||
|  | 					sq_IntVectorPush(sq_GetGlobalIntVector(),0); | |||
|  | 					sq_IntVectorPush(sq_GetGlobalIntVector(),1); | |||
|  | 					sq_IntVectorPush(sq_GetGlobalIntVector(),nX); | |||
|  | 					sq_IntVectorPush(sq_GetGlobalIntVector(),nY); | |||
|  | 					sq_AddSetStatePacketActiveObject(act,STATE_DOWN, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); | |||
|  | 					print(" onchange setstate down:"); | |||
|  | 				} | |||
|  | 			} | |||
|  | 		} | |||
|  | 		 | |||
|  | 		 | |||
|  | 		sq_SetCurrentPos(targetObj, xPos, targetObj.getYPos(), zPos); | |||
|  | 	} | |||
|  | 		 | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function prepareDraw_Mgrab(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | // 剪葬 桧? 颤啃击 琼嬴顶横 葬欐?朝 ?热殓栖棻. | |||
|  | function pushTargetDistanceMinObject(obj, targetObj, distance) | |||
|  | { | |||
|  | 	if (!obj) | |||
|  | 		return; | |||
|  | 		 | |||
|  | 	local objectManager = obj.getObjectManager(); | |||
|  | 
 | |||
|  | 	if (objectManager == null) | |||
|  | 		return; | |||
|  | 		 | |||
|  | 	if (!targetObj) | |||
|  | 		return; | |||
|  | 
 | |||
|  | 	obj.getVar("mgrab").clear_obj_vector(); | |||
|  | 	 | |||
|  | 	local grabObj = null; | |||
|  | 	for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) | |||
|  | 	{ | |||
|  | 		local object = objectManager.getCollisionObject(i); | |||
|  | 		if (sq_IsHoldable(obj, object) == true && sq_IsGrabable(obj, object) == true) | |||
|  | 		{ // 濩晦陛栋瞳桧塭贼 ?卫?栖棻.					 | |||
|  | 			if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE)) | |||
|  | 			{ | |||
|  | 				local isSame = isSameObject(targetObj, object); | |||
|  | 				if (isSame) | |||
|  | 					continue; | |||
|  | 				 | |||
|  | 				 | |||
|  | 				local activeObj = sq_GetCNRDObjectToActiveObject(object); | |||
|  | 				//	舱羲 顶缣怃 陛潍 陛梱遴 瞳击 坚艇棻 | |||
|  | 				 | |||
|  | 				if (activeObj) | |||
|  | 				{ | |||
|  | 					if (!activeObj.isDead()) | |||
|  | 					{ | |||
|  | 						local dis = sq_GetDistanceObject(targetObj, object, false); | |||
|  | 						 | |||
|  | 						if (dis < distance) | |||
|  | 						{ | |||
|  | 							distance = dis; | |||
|  | 							grabObj = activeObj; | |||
|  | 							//obj.getVar("mgrab").push_obj_vector(object); | |||
|  | 						} | |||
|  | 					} | |||
|  | 				} | |||
|  | 			} | |||
|  | 		} //if (sq_IsHoldable(obj, hoverEnemyObject) == false && sq_IsGrabable(obj, hoverEnemyObject) == true) | |||
|  | 	} | |||
|  | 	 | |||
|  | 	if (grabObj) | |||
|  | 	{ | |||
|  | 		obj.getVar("mgrab").push_obj_vector(grabObj); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onProc_Mgrab(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 	 | |||
|  | 	if (!obj.isMyControlObject()) | |||
|  | 		return; | |||
|  | 
 | |||
|  | 	local objListSize = obj.getVar("grabobj").get_obj_vector_size(); | |||
|  | 
 | |||
|  | 	if (objListSize <= 0) | |||
|  | 		return; | |||
|  | 
 | |||
|  | 	local stage = sq_GetObjectManagerStage(obj); | |||
|  | 	 | |||
|  | 	if (!stage) | |||
|  | 		return; | |||
|  | 
 | |||
|  | 	local control = stage.getMainControl();	 | |||
|  | 	 | |||
|  | 	if (control.IsRBDown()) | |||
|  | 	{ | |||
|  | 		onMouseMoveButtonDown_Mgrab(obj); | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		onMouseButtonUp_Mgrab(obj); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | // 葆办蝶 帼?击 机卫俪击 阳 籀葬?捡肾朝 睡碟殓栖棻. | |||
|  | function onMouseButtonUp_Mgrab(obj) | |||
|  | { | |||
|  | 	local objListSize = obj.getVar("grabobj").get_obj_vector_size(); | |||
|  | 	 | |||
|  | 	print(" onMouseButtonUp_Mgrab:" + objListSize); | |||
|  | 	for (local i = 0; i < objListSize;++i) | |||
|  | 	{ | |||
|  | 
 | |||
|  | 		local hoverEnemy = obj.getVar("grabobj").get_obj_vector(i); | |||
|  | 		if (hoverEnemy) | |||
|  | 		{ | |||
|  | 			local activeobj = sq_GetCNRDObjectToActiveObject(hoverEnemy); | |||
|  | 			if (activeobj) | |||
|  | 			{ | |||
|  | 				local srcX = obj.getVar("mgrab").get_vector(0); | |||
|  | 				local srcY = sq_GetYPos(activeobj); | |||
|  | 				local srcZ = obj.getVar("mgrab").get_vector(1); | |||
|  | 				 | |||
|  | 				if (srcZ < 0) | |||
|  | 					srcZ = 0; | |||
|  | 
 | |||
|  | 				local dstX = sq_GetXPos(activeobj); | |||
|  | 				local dstY = sq_GetYPos(activeobj); | |||
|  | 				local dstZ = sq_GetZPos(activeobj); | |||
|  | 				 | |||
|  | 				if (dstZ < 0) | |||
|  | 					dstZ = 0; | |||
|  | 				 | |||
|  | 				print(" sx:" + srcX + " sy:" + srcY + " sz:" + srcZ);				 | |||
|  | 				print(" dx:" + dstX + " dy:" + dstY + " dz:" + dstZ); | |||
|  | 				 | |||
|  | 				local distance = sq_GetDistance( srcX, srcZ, dstX, dstZ, true); | |||
|  | 				 | |||
|  | 				local width = sq_Abs(dstX - srcX); | |||
|  | 				local h = sq_Abs((dstZ) - (srcZ)); | |||
|  | 				 | |||
|  | 				print(" h:" + h); | |||
|  | 				 | |||
|  | 				if (h <= 0) | |||
|  | 					h = 10; | |||
|  | 				 | |||
|  | 				local angle = sq_Atan2( h.tofloat(), width.tofloat()); | |||
|  | 				 | |||
|  | 				local nRevision = distance; | |||
|  | 
 | |||
|  | 				local cos = nRevision.tofloat() * sq_Cos(angle); | |||
|  | 				local sin = nRevision.tofloat() * sq_Sin(angle); | |||
|  | 
 | |||
|  | 				local nX = sq_Abs( cos.tointeger() ) * 2; | |||
|  | 				local nY = sq_Abs( sin.tointeger() ) * 2; | |||
|  | 				 | |||
|  | 				 | |||
|  | 				local direction = sq_GetDirection(activeobj); | |||
|  | 				 | |||
|  | 				if ((dstX - srcX) < 0) | |||
|  | 				{ | |||
|  | 					nX = -nX; | |||
|  | 				} | |||
|  | 
 | |||
|  | 
 | |||
|  | 				direction = 0; | |||
|  | 				print(" nX:" + nX + " nY:" + nY + " offset:" + (dstX - srcX) + " direction:" + direction + " activeobj:" + activeobj); | |||
|  | 				sq_IntVectorClear(sq_GetGlobalIntVector()); | |||
|  | 				sq_IntVectorPush(sq_GetGlobalIntVector(),direction); | |||
|  | 				sq_IntVectorPush(sq_GetGlobalIntVector(),0); | |||
|  | 				sq_IntVectorPush(sq_GetGlobalIntVector(),1); | |||
|  | 				sq_IntVectorPush(sq_GetGlobalIntVector(),nX); | |||
|  | 				sq_IntVectorPush(sq_GetGlobalIntVector(),nY); | |||
|  | 				sq_AddSetStatePacketActiveObject(activeobj,STATE_DOWN, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); | |||
|  | 				print(" activeobj:" + activeobj + " setstate down:"); | |||
|  | 				 | |||
|  | 				 | |||
|  | 				local group = sq_GetGroup(activeobj); | |||
|  | 				local uniqueId = sq_GetUniqueId(activeobj);			 | |||
|  | 			 | |||
|  | 				sq_BinaryStartWrite(); | |||
|  | 				 | |||
|  | 				sq_BinaryWriteDword(group); // 0 | |||
|  | 				sq_BinaryWriteDword(uniqueId); // 1 | |||
|  | 				sq_BinaryWriteDword(dstX); // 2 | |||
|  | 				sq_BinaryWriteDword(dstZ); // 3 | |||
|  | 				// 1廓擎 state_down鼻鹧殓栖棻. | |||
|  | 				sq_BinaryWriteDword(1); // 4 | |||
|  | 				sq_BinaryWriteDword(direction); // 5 | |||
|  | 				sq_BinaryWriteDword(nX); // 6 | |||
|  | 				sq_BinaryWriteDword(nY); // 7 | |||
|  | 				sq_SendChangeSkillEffectPacket(obj, SKILL_MGRAB); | |||
|  | 				print(" sq_SendChangeSkillEffectPacket down"); | |||
|  | 			} | |||
|  | 		} | |||
|  | 	} | |||
|  | 
 | |||
|  | 	obj.getVar("mgrab").clear_vector(); | |||
|  | 	obj.getVar("mgrab").push_vector(0); | |||
|  | 	obj.getVar("mgrab").push_vector(0); | |||
|  | 
 | |||
|  | 	releaseOutLine(obj, "grabobj"); | |||
|  | 	 | |||
|  | 	if (objListSize) | |||
|  | 	{ | |||
|  | 		obj.sq_PlaySound("R_THROW_MONSTER"); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | // 葆办蝶 帼?击 棻遴卫俪击 阳 籀葬?捡肾朝 睡碟殓栖棻.  | |||
|  | function onMouseMoveCharacter_Mgrab(obj) | |||
|  | { | |||
|  | 	onMouseMoveButtonDown_Mgrab(obj); | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onMouseMoveButtonDown_Mgrab(obj) | |||
|  | { | |||
|  | 	local hoverEnemy = obj.getVar("grabobj").get_obj_vector(0); | |||
|  | 
 | |||
|  | 	if (!hoverEnemy) | |||
|  | 	{ | |||
|  | 		return; | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		local objectManager = obj.getObjectManager(); | |||
|  | 		 | |||
|  | 		local objListSize = obj.getVar("grabobj").get_obj_vector_size(); | |||
|  | 		 | |||
|  | 		local t = obj.getVar("mgrab").get_ct_vector(0); | |||
|  | 		local time = 0; | |||
|  | 	 | |||
|  | 		if(t) | |||
|  | 			time = t.Get(); | |||
|  | 
 | |||
|  | 		local skill_level = obj.sq_GetSkillLevel(SKILL_MGRAB); | |||
|  | 
 | |||
|  | 
 | |||
|  | 		local activeObj = sq_GetCNRDObjectToActiveObject(hoverEnemy); | |||
|  | 
 | |||
|  | 		if (!activeObj) | |||
|  | 		{ | |||
|  | 			onMouseButtonUp_Mgrab(obj); | |||
|  | 			return; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		// 跪 颤殓涤煎 濩坚毡朝 譆渠卫除桧 殖塭喂栖棻. | |||
|  | 		// 0. 橾奁跪 濩坚 毡击阳 譆渠卫除 | |||
|  | 		// 1. 啻歜萄 濩坚 毡击阳 譆渠卫除 | |||
|  | 		// 2. 尔蝶跪 濩坚 毡击阳 譆渠卫除 | |||
|  | 		// 3. ?跨蝶搅 濩坚 毡击阳 譆渠卫除 | |||
|  | 		// 4. apc 濩坚 毡击阳 譆渠卫除 | |||
|  | 
 | |||
|  | 		// 橾奁橾隆 蚝岁0 | |||
|  | 		local columnIndex = SKL_LV_0; | |||
|  | 		if (sq_IsNamed(activeObj)) | |||
|  | 		{	 | |||
|  | 			// 啻歜萄 橾隆 蚝岁1 | |||
|  | 			columnIndex = SKL_LV_1; | |||
|  | 		} | |||
|  | 		else if (sq_IsBoss(activeObj)) | |||
|  | 		{ | |||
|  | 			// 尔蝶 橾隆 蚝岁2 | |||
|  | 			columnIndex = SKL_LV_2; | |||
|  | 		} | |||
|  | 		else if (sq_IsHellMonster(activeObj)) | |||
|  | 		{ | |||
|  | 			// ?跨蝶搅 橾隆 蚝岁3 | |||
|  | 			columnIndex = SKL_LV_3; | |||
|  | 		} | |||
|  | 		else if (sq_IsAiCharacter(activeObj)) | |||
|  | 		{ | |||
|  | 			// apc橾隆 | |||
|  | 			columnIndex = SKL_LV_4; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		// 濩坚毡击 热 毡朝 譆渠卫除 | |||
|  | 		local maxTime = obj.sq_GetLevelData(SKILL_MGRAB, columnIndex, skill_level);  | |||
|  | 
 | |||
|  | 		print(" maxTime:" + maxTime + " time:" + time); | |||
|  | 
 | |||
|  | 		if (time > maxTime) | |||
|  | 		{ | |||
|  | 			onMouseButtonUp_Mgrab(obj); | |||
|  | 		} | |||
|  | 		else | |||
|  | 		{ | |||
|  | 			for (local i =0;i<objListSize;++i) | |||
|  | 			{ | |||
|  | 				local vObj = obj.getVar("grabobj").get_obj_vector(i); | |||
|  | 			 | |||
|  | 				if (!vObj) | |||
|  | 					continue; | |||
|  | 			 | |||
|  | 				local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL); | |||
|  | 				local zPos = objectManager.getFieldZPos(IMouse.GetYPos(), vObj.getYPos(), ENUM_DRAWLAYER_NORMAL) - (sq_GetObjectHeight(hoverEnemy) / 2); | |||
|  | 			 | |||
|  | 				local group = sq_GetGroup(vObj); | |||
|  | 				local uniqueId = sq_GetUniqueId(vObj);			 | |||
|  | 		 | |||
|  | 				sq_BinaryStartWrite(); | |||
|  | 			 | |||
|  | 				sq_BinaryWriteDword(group); //  | |||
|  | 				sq_BinaryWriteDword(uniqueId); // | |||
|  | 				sq_BinaryWriteDword(xPos); | |||
|  | 				sq_BinaryWriteDword(zPos); | |||
|  | 				// 0廓擎 state_hold鼻鹧殓栖棻. | |||
|  | 				sq_BinaryWriteDword(0);  | |||
|  | 				sq_BinaryWriteDword(0);  | |||
|  | 				sq_BinaryWriteDword(0);  | |||
|  | 				sq_BinaryWriteDword(0);  | |||
|  | 				sq_SendChangeSkillEffectPacket(obj, SKILL_MGRAB); | |||
|  | 			} | |||
|  | 		} | |||
|  | 	} | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | function onProcCon_Mgrab(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onEndCurrentAni_Mgrab(obj) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onKeyFrameFlag_Mgrab(obj,flagIndex) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return false; | |||
|  | 
 | |||
|  | 	return true; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onEndState_Mgrab(obj,new_state) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onAfterSetState_Mgrab(obj,state,datas,isResetTimer) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onBeforeAttack_Mgrab(obj,damager,boundingBox,isStuck) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onAttack_Mgrab(obj,damager,boundingBox,isStuck) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onAfterAttack_Mgrab(obj,damager,boundingBox,isStuck) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return 0; | |||
|  | 
 | |||
|  | 	return 1; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onBeforeDamage_Mgrab(obj,attacker,boundingBox,isStuck) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onDamage_Mgrab(obj,attacker,boundingBox) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | function onAfterDamage_Mgrab(obj,attacker,boundingBox) | |||
|  | { | |||
|  | 
 | |||
|  | 	if (!obj) return; | |||
|  | 
 | |||
|  | } | |||
|  |  |