274 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
 | ||
| S_PO_ATCLT_0 <- 10
 | ||
| S_PO_ATCLT_1 <- 11
 | ||
| 
 | ||
| function setCustomData_po_ATChainLightningTarget(obj, reciveData)
 | ||
| {
 | ||
| 
 | ||
| 	if(!obj) return;
 | ||
| 	
 | ||
| 	local id = reciveData.readDword();
 | ||
| 	
 | ||
| 	local attack_time = reciveData.readDword();
 | ||
| 	local attack_rate = reciveData.readDword();
 | ||
| 	local multi_hit_num = reciveData.readDword();
 | ||
| 	//local multi_hit_term = reciveData.readDword();
 | ||
| 	
 | ||
| 	local hitCnt = multi_hit_num;
 | ||
| 	
 | ||
| 	print( " hitCnt	:" + hitCnt);
 | ||
| 	
 | ||
| 	local object = sq_GetObjectByObjectId(obj, id);
 | ||
| 	obj.sq_var.clear_obj_vector();
 | ||
| 	obj.sq_var.push_obj_vector(object);
 | ||
| 	
 | ||
| 	
 | ||
| 	local pAni = obj.getCurrentAnimation();	
 | ||
| 	local initDelay = 0;
 | ||
| 
 | ||
| 	local term = attack_time / hitCnt;
 | ||
| 	
 | ||
| 	obj.timer_.setParameter(term, -1);
 | ||
| 	obj.timer_.resetInstant(initDelay);
 | ||
| 	
 | ||
| 	
 | ||
| 	obj.getVar("state").clear_vector(); // state vector
 | ||
| 	obj.getVar("state").push_vector(0);
 | ||
| 	
 | ||
| 	obj.getVar("hitCnt").clear_vector();
 | ||
| 	obj.getVar("hitCnt").push_vector(hitCnt);
 | ||
| 	obj.getVar("hitCnt").push_vector(1);
 | ||
| 	
 | ||
| 	obj.getVar("end").clear_vector();
 | ||
| 	obj.getVar("end").push_vector(0);
 | ||
| 	
 | ||
| 	local pAttack = sq_GetCurrentAttackInfo(obj);
 | ||
| 	sq_SetCurrentAttackBonusRate(pAttack, attack_rate);
 | ||
| 	
 | ||
| 	
 | ||
| 	obj.getVar("state").clear_ct_vector();
 | ||
| 	
 | ||
| 	obj.getVar("state").push_ct_vector();
 | ||
| 	local t = obj.getVar("state").get_ct_vector(0);
 | ||
| 	t.Reset();
 | ||
| 	t.Start(100000,0);
 | ||
| 	
 | ||
| 	if(obj.isMyControlObject())
 | ||
| 	{
 | ||
| 		sq_SendHitObjectPacket(obj,object,0,0,(sq_GetObjectHeight(object) / 2));
 | ||
| 	}
 | ||
| 	
 | ||
| 	local currentT = 0;
 | ||
| 	
 | ||
| 	local isMyControl = obj.isMyControlObject();
 | ||
| 	
 | ||
| 	
 | ||
| 
 | ||
| 	if(isMyControl) {
 | ||
| 		local pIntVec = sq_GetGlobalIntVector();
 | ||
| 		
 | ||
| 		sq_IntVectorClear(pIntVec);
 | ||
| 		sq_IntVectorPush(pIntVec, 0);
 | ||
| 		
 | ||
| 		obj.addSetStatePacket(S_PO_ATCLT_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
 | ||
| 	}
 | ||
| 	
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| function setState_po_ATChainLightningTarget(obj, state, datas)
 | ||
| {
 | ||
| 
 | ||
| 	if(!obj) return;
 | ||
| 
 | ||
| 	local passiveState = state;
 | ||
| 	
 | ||
| 	obj.getVar("state").set_vector(0, passiveState);
 | ||
| 	
 | ||
| 	if(passiveState == S_PO_ATCLT_0) {
 | ||
| 
 | ||
| 	}
 | ||
| 	else if(passiveState == S_PO_ATCLT_1) {
 | ||
| 		local pA = obj.getCustomAnimation(0);
 | ||
| 		obj.setCurrentAnimation(pA);
 | ||
| 	}
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function procAppend_po_ATChainLightningTarget(obj)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return;
 | ||
| 		
 | ||
| 	local pChr = obj.getTopCharacter();
 | ||
| 	
 | ||
| 	
 | ||
| 	local state = obj.getVar("state").get_vector(0);
 | ||
| 
 | ||
| 	//if(state != S_PO_ATCLT_0 ) {
 | ||
| 		//return;
 | ||
| 	//}
 | ||
| 	
 | ||
| 	if(state != S_PO_ATCLT_0 && state != S_PO_ATCLT_1)
 | ||
| 		return;
 | ||
| 	
 | ||
| 	
 | ||
| 	
 | ||
| 	if(!pChr || obj.sq_var.get_obj_vector_size() != 1)
 | ||
| 	{
 | ||
| 		if(obj.isMyControlObject()) {
 | ||
| 			if(state != S_PO_ATCLT_1)
 | ||
| 			{
 | ||
| 				local pIntVec = sq_GetGlobalIntVector();
 | ||
| 
 | ||
| 				sq_IntVectorClear(pIntVec);
 | ||
| 				sq_IntVectorPush(pIntVec, 0);
 | ||
| 
 | ||
| 				obj.addSetStatePacket(S_PO_ATCLT_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
 | ||
| 				return;
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 	
 | ||
| 	if(!pChr)
 | ||
| 	{
 | ||
| 		if(obj.isMyControlObject())
 | ||
| 			sq_SendDestroyPacketPassiveObject(obj);
 | ||
| 			
 | ||
| 		return;
 | ||
| 	}
 | ||
| 	
 | ||
| 	local pTargetChr = obj.sq_var.get_obj_vector(0);
 | ||
| 	
 | ||
| 	
 | ||
| 	if(pChr.getState() != STATE_CHAINLIGHTNING || !pTargetChr) {
 | ||
| 		if(obj.isMyControlObject()) {
 | ||
| 			if(state != S_PO_ATCLT_1)
 | ||
| 			{
 | ||
| 				local pIntVec = sq_GetGlobalIntVector();
 | ||
| 
 | ||
| 				sq_IntVectorClear(pIntVec);
 | ||
| 				sq_IntVectorPush(pIntVec, 0);
 | ||
| 
 | ||
| 				obj.addSetStatePacket(S_PO_ATCLT_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
 | ||
| 				return;
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}	
 | ||
| 	
 | ||
| 	
 | ||
| 	
 | ||
| 	if(pTargetChr) 
 | ||
| 	{
 | ||
| 		local posX = pTargetChr.getXPos();
 | ||
| 		local posY = pTargetChr.getYPos();
 | ||
| 		local posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2) - 25;
 | ||
| 		
 | ||
| 		sq_SetCurrentPos(obj, posX, posY, posZ);
 | ||
| 	}
 | ||
| 	
 | ||
| 	
 | ||
| 	local pObjAni = obj.getCurrentAnimation();
 | ||
| 	
 | ||
| 	/////////////////////////////////////////////////
 | ||
| 	// 
 | ||
| 	local substate = pChr.getSkillSubState();
 | ||
| 	
 | ||
| 	if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
 | ||
| 		if(state == S_PO_ATCLT_0) {
 | ||
| 			if(obj.isMyControlObject()) {
 | ||
| 				local pIntVec = sq_GetGlobalIntVector();
 | ||
| 
 | ||
| 				sq_IntVectorClear(pIntVec);
 | ||
| 				sq_IntVectorPush(pIntVec, 0);
 | ||
| 
 | ||
| 				obj.addSetStatePacket(S_PO_ATCLT_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
 | ||
| 				
 | ||
| 				//print(" obj.addSetStatePacket(S_PO_ATCL_1 ");
 | ||
| 			}
 | ||
| 			return;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	////////////////////////////////////////////
 | ||
| 	
 | ||
| 	if(pTargetChr)
 | ||
| 	{
 | ||
| 		local multiHitCnt = obj.getVar("hitCnt").get_vector(VECTOR_FLAG_0);
 | ||
| 		local cnt = obj.getVar("hitCnt").get_vector(VECTOR_FLAG_1);
 | ||
| 		
 | ||
| 		
 | ||
| 		if(cnt < multiHitCnt)
 | ||
| 		{		
 | ||
| 			local t = obj.getVar("state").get_ct_vector(0);
 | ||
| 			local time = 0;
 | ||
| 			
 | ||
| 			if(t)
 | ||
| 				time = t.Get();
 | ||
| 			
 | ||
| 			print( " multiHitCnt:" + multiHitCnt + " cnt:" + cnt);
 | ||
| 			if (obj.timer_.isOnEvent(time) == true)
 | ||
| 			{
 | ||
| 				local value = obj.getVar("hitCnt").get_vector(VECTOR_FLAG_1);
 | ||
| 				value = value + 1;		
 | ||
| 				obj.getVar("hitCnt").set_vector(VECTOR_FLAG_1, value);
 | ||
| 				if(obj.isMyControlObject())
 | ||
| 				{
 | ||
| 					sq_SendHitObjectPacket(obj,pTargetChr,0,0,(sq_GetObjectHeight(pTargetChr) / 2));
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 	
 | ||
| 	if(state == S_PO_ATCLT_1)
 | ||
| 	{
 | ||
| 		if(obj.isMyControlObject())
 | ||
| 		{
 | ||
| 			local isend = obj.getVar("end").get_vector(0);
 | ||
| 			if(obj.getVar("end").get_vector(0))
 | ||
| 			{
 | ||
| 				local multiHitCnt = obj.getVar("hitCnt").get_vector(VECTOR_FLAG_0);
 | ||
| 				local cnt = obj.getVar("hitCnt").get_vector(VECTOR_FLAG_1);
 | ||
| 				//print(" multiHitCnt:" + multiHitCnt + " cnt:" + cnt);
 | ||
| 			
 | ||
| 				if(multiHitCnt <= cnt || obj.sq_var.get_obj_vector_size(0) == 0)
 | ||
| 				{
 | ||
| 					print(" destroy lightning target");
 | ||
| 					if(obj.isMyControlObject())
 | ||
| 					{
 | ||
| 						sq_SendDestroyPacketPassiveObject(obj);
 | ||
| 					}
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 	
 | ||
| 	
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function onDestroyObject_po_ATChainLightningTarget(obj, object)
 | ||
| {
 | ||
| 
 | ||
| 	if(!obj) return;
 | ||
| 	
 | ||
| 	obj.sq_var.remove_obj_vector(object);
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| function onKeyFrameFlag_po_ATChainLightningTarget(obj, flagIndex)
 | ||
| {
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| function onEndCurrentAni_po_ATChainLightningTarget(obj)
 | ||
| {
 | ||
| 	if(!obj) return;
 | ||
| 	
 | ||
| 	local state = obj.getVar("state").get_vector(0);
 | ||
| 	
 | ||
| 	if(state == S_PO_ATCLT_1) {
 | ||
| 		obj.getVar("end").set_vector(0, 1);
 | ||
| 	}
 | ||
| }
 | ||
|  |