343 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| // 塭桧?棚 错卫缣 当撩肾朝 维暧 潍虞
 | |
| PO_LIGHTNING_WALL_CREATE	<- 2; // ?卫粽 螃粽薛?朝 state陛 2睡搅 卫蒙?棻.
 | |
| PO_LIGHTNING_WALL_MOVE		<- 3;
 | |
| PO_LIGHTNING_WALL_DESTROY	<- 4;
 | |
| 
 | |
| PO_LIGHTNING_VAR_LIGHTNING_1 <- 0;
 | |
| PO_LIGHTNING_VAR_LIGHTNING_2 <- 1;
 | |
| PO_LIGHTNING_VAR_TARGET_X_POS <- 2;
 | |
| PO_LIGHTNING_VAR_DIRECTION	  <- 3; // 潍虞暧 寞?擎 ?鼻 伪晦 阳侥缣 蟾晦 寞?击 荡潍
 | |
| 
 | |
| 
 | |
| PO_LIGHTNING_1_DISTANCE_X <- 61;
 | |
| PO_LIGHTNING_1_DISTANCE_Y <- 32;
 | |
| PO_LIGHTNING_2_DISTANCE_X <- -76;
 | |
| PO_LIGHTNING_2_DISTANCE_Y <- -32;
 | |
| 
 | |
| PO_LIGHTNING_TIMER_BLACK_MARK_SMALL  <- 0; // 蒙擎 夥款 濠措 当撩 卫除		
 | |
| PO_LIGHTNING_TIMER_BLACK_MARK_BIG	 <- 1; // 赎 夥款 濠措 当撩 卫除
 | |
| PO_LIGHTNING_TIMER_ELEC_MARK_1		 <- 2; // 瞪晦 葆觼 1
 | |
| PO_LIGHTNING_TIMER_ELEC_MARK_2		 <- 3; // 瞪晦 葆觼 2		
 | |
| 		
 | |
| 		
 | |
| 
 | |
| // 蝶鹧? 等桧搅蒂 奁舱?罹 谆桧锷 亵瞰
 | |
| function lightingWallObjAniResizeing(parentObj, obj){
 | |
| 	local parentChr = parentObj.getTopCharacter();
 | |
| 	if(!parentChr)
 | |
| 		return;
 | |
| 		
 | |
| 	local size = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0);	
 | |
| 	size = size.tofloat()/100.0;
 | |
| 	
 | |
| 	local ani = sq_GetCurrentAnimation(obj);	
 | |
| 	if(ani)
 | |
| 		ani.resizeWithChild(size);	
 | |
| }
 | |
| 
 | |
| 
 | |
| // 饵桧锷 渗?缣 评艇 螃?掸 嫔纂蒂 葬欐.
 | |
| function getLightningWallPos(obj, offset) {
 | |
| 	local parentChr = obj.getTopCharacter();
 | |
| 	if(!parentChr)
 | |
| 		return offset;
 | |
| 			
 | |
| 	local walllGap = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0);		
 | |
| 	offset = offset.tofloat() * (walllGap.tofloat()/100.0);
 | |
| 	
 | |
| 	return offset.tointeger();	
 | |
| }
 | |
| 
 | |
| // 夥款 瞪晦 葆觼 当撩
 | |
| function lightningWallMakeElectMark(obj, x, y)
 | |
| {
 | |
| 	local randNum = sq_getRandom(0,1);
 | |
| 	local elecMark  = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/8_el-p2_dodge_" + randNum + ".ani", 0, 0, 0);
 | |
| 	local x = obj.getXPos() + getLightningWallPos(obj, x);
 | |
| 	local y = obj.getYPos() + getLightningWallPos(obj, y);
 | |
| 	elecMark.setCurrentPos(x, y, 0);
 | |
| 	lightingWallObjAniResizeing(obj, elecMark);
 | |
| 	local ani = sq_GetCurrentAnimation(obj);
 | |
| }
 | |
| 
 | |
| function setCustomData_po_ATLightningWall(obj, receiveData)
 | |
| {
 | |
| 	if(!obj) return;
 | |
| 		
 | |
| 	local moveDistance = receiveData.readDword();	
 | |
| 	local attackPower  = receiveData.readDword();	
 | |
| 	local skill_level  = receiveData.readDword();	
 | |
| 	local prob		   = receiveData.readFloat();	
 | |
| 	local level		   = receiveData.readDword();	
 | |
| 	local duration	   = receiveData.readDword();	
 | |
| 	local lightDamage  = receiveData.readDword();	
 | |
| 	local attackInfo = sq_GetCurrentAttackInfo(obj);
 | |
| 	
 | |
| 	sq_SetCurrentAttackBonusRate(attackInfo, attackPower);	
 | |
| 	sq_SetChangeStatusIntoAttackInfoWithEtc(attackInfo, 0, ACTIVESTATUS_LIGHTNING ,prob.tointeger() ,level ,duration, lightDamage, 0);
 | |
| 	sq_SetCurrentAttackeHitStunTime(attackInfo, 0);
 | |
| 	
 | |
| 	// 谢办 塭桧?棚 偌羹 当撩
 | |
| 	local var = obj.getVar();	
 | |
| 	local lightningObj1 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/5_el-p_normal_1.ani", PO_LIGHTNING_1_DISTANCE_X, PO_LIGHTNING_1_DISTANCE_Y, 0);
 | |
| 	local lightningObj2 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/5_el-p_normal_2.ani", PO_LIGHTNING_2_DISTANCE_X, PO_LIGHTNING_2_DISTANCE_Y, 0);
 | |
| 	lightingWallObjAniResizeing(obj, lightningObj1);
 | |
| 	lightingWallObjAniResizeing(obj, lightningObj2);
 | |
| 	
 | |
| 	var.setObject(PO_LIGHTNING_VAR_LIGHTNING_1, lightningObj1);
 | |
| 	var.setObject(PO_LIGHTNING_VAR_LIGHTNING_2, lightningObj2);	
 | |
| 		
 | |
| 	local targetXPos = sq_GetDistancePos(50, sq_GetDirection(obj), moveDistance); // 譆谦迹瞳虽 x谢? 
 | |
| 	var.setInt(PO_LIGHTNING_VAR_TARGET_X_POS, targetXPos);	
 | |
| 	var.setInt(PO_LIGHTNING_VAR_DIRECTION,  sq_GetDirection(obj));	
 | |
| 		
 | |
| 	// 维暧 潍虞擎 卫薄鼻 ?鼻 螃艇薹桧横捡 ?棻.
 | |
| 	obj.setDirection(ENUM_DIRECTION_RIGHT);
 | |
| 	lightingWallObjAniResizeing(obj, obj);
 | |
| 	
 | |
| 	obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_CREATE);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| function onKeyFrameFlag_po_ATLightningWall(obj, keyIndex)
 | |
| {
 | |
| 	// 当撩卫 霞翕
 | |
| 	if(keyIndex == 1) {
 | |
| 		sq_SetMyShake(obj,4,200);
 | |
| 		return false;		
 | |
| 	}
 | |
| 	
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| function onTimeEvent_po_ATLightningWall(obj, timeEventIndex, timeEventCount)
 | |
| {
 | |
| 	if(timeEventIndex == PO_LIGHTNING_TIMER_BLACK_MARK_SMALL) // 夥款缣 匐湮桧 濠措
 | |
| 	{
 | |
| 		if(obj.isCurrentAnimationIndex(0)) {			
 | |
| 			local var = obj.getVar();
 | |
| 			local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
 | |
| 			local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
 | |
| 						
 | |
| 			if(lightningObj1) {					
 | |
| 				local floorMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_1.ani", 0, 0, 0);
 | |
| 				floorMark.setCurrentPos(lightningObj1.getXPos(), lightningObj1.getYPos(), 0);				
 | |
| 				lightingWallObjAniResizeing(obj, floorMark);
 | |
| 				sq_ChangeDrawLayer(floorMark, ENUM_DRAWLAYER_BOTTOM);				
 | |
| 			}
 | |
| 			
 | |
| 			if(lightningObj2) {							
 | |
| 				local floorMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_1.ani", 0, 0, 0);
 | |
| 				floorMark.setCurrentPos(lightningObj2.getXPos(), lightningObj2.getYPos(), 0);					
 | |
| 				lightingWallObjAniResizeing(obj, floorMark);
 | |
| 				sq_ChangeDrawLayer(floorMark, ENUM_DRAWLAYER_BOTTOM);
 | |
| 			}
 | |
| 		
 | |
| 			return false;
 | |
| 		}
 | |
| 		else
 | |
| 			return true;
 | |
| 		
 | |
| 	}
 | |
| 	else if(timeEventIndex == PO_LIGHTNING_TIMER_BLACK_MARK_BIG)  // 夥款缣 匐湮桧 濠措
 | |
| 	{
 | |
| 		if(obj.isCurrentAnimationIndex(0)) {		
 | |
| 			local randNum = sq_getRandom(0,2);			
 | |
| 			local floorDark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_2.ani", 0, 0, 0);
 | |
| 			sq_ChangeDrawLayer(floorDark, ENUM_DRAWLAYER_BOTTOM);
 | |
| 			lightingWallObjAniResizeing(obj, floorDark);
 | |
| 			
 | |
| 			local floorElec = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/4_el-b_dodge_" + randNum+ ".ani", 0, 0, 0);			
 | |
| 			sq_ChangeDrawLayer(floorElec, ENUM_DRAWLAYER_BOTTOM);
 | |
| 			lightingWallObjAniResizeing(obj, floorElec);
 | |
| 			return false;
 | |
| 		}
 | |
| 		else 
 | |
| 			return true;
 | |
| 	}
 | |
| 	else if(timeEventIndex == PO_LIGHTNING_TIMER_ELEC_MARK_1)  // 瞪晦 涛鼻
 | |
| 	{
 | |
| 		if(obj.isCurrentAnimationIndex(0)) {
 | |
| 			lightningWallMakeElectMark(obj, PO_LIGHTNING_1_DISTANCE_X , PO_LIGHTNING_1_DISTANCE_Y);			
 | |
| 			return false;
 | |
| 		}
 | |
| 		else 
 | |
| 			return true;
 | |
| 	}
 | |
| 	else if(timeEventIndex == PO_LIGHTNING_TIMER_ELEC_MARK_2) // 瞪晦 涛鼻
 | |
| 	{
 | |
| 		if(obj.isCurrentAnimationIndex(0)) {
 | |
| 			lightningWallMakeElectMark(obj, PO_LIGHTNING_2_DISTANCE_X , PO_LIGHTNING_2_DISTANCE_Y);
 | |
| 			return false;
 | |
| 		}
 | |
| 		else 
 | |
| 			return true;
 | |
| 	}
 | |
| 				
 | |
| 				
 | |
| 				
 | |
| 	return true;	
 | |
| } 
 | |
| 
 | |
| function setState_po_ATLightningWall(obj, state, datas)
 | |
| {
 | |
| 	if(!obj) return;
 | |
| 	
 | |
| 	if(state == PO_LIGHTNING_WALL_MOVE) { //桧翕		
 | |
| 		setCurrentAnimationFromCutomIndex(obj, 0);			
 | |
| 		obj.sq_SetMoveParticle("Particle/ATLightningWall.ptl", 0.0, 0.0 );// 桧翕 ??赝 虽姜		
 | |
| 			
 | |
| 		local parentChr		= obj.getTopCharacter();
 | |
| 		local size = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0);	
 | |
| 		size = size.tofloat()/100.0; //谆桧锷. 谆桧锷陛 觼贼 夥款缣 桧嘐虽蒂 斜葬朝 除问紫 创?棻.
 | |
| 		
 | |
| 		local speed			= sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 1);
 | |
| 		local speedPerSec	= speed.tofloat()/1000.0;
 | |
| 		local calltime		= 55.0/speedPerSec  * size;
 | |
| 				
 | |
| 		if(parentChr) {	
 | |
| 			// 卫薄鼻 塭桧?棚 错擎 ?薹 寞?戏煎虏 尔樯棻. 评塭怃 奁渠寞?缣怃 陈莴唳办 寞?击 庵煎 ?棻.
 | |
| 			if(parentChr.getDirection() != obj.getDirection()) 
 | |
| 				speed = -speed;
 | |
| 							
 | |
| 			sq_SetSpeedToMoveParticle(obj,0,speed); // x蹴 蝶?萄 虽姜			
 | |
| 		}
 | |
| 
 | |
| 		obj.setTimeEvent(PO_LIGHTNING_TIMER_BLACK_MARK_SMALL, calltime.tointeger(),999,true); // 蒙擎 夥款 濠措 当撩 卫除		
 | |
| 		
 | |
| 		calltime = 100.0/speedPerSec * size;		
 | |
| 		obj.setTimeEvent(PO_LIGHTNING_TIMER_BLACK_MARK_BIG, calltime.tointeger(),999,true); // 赎 夥款 濠措 当撩 卫除
 | |
| 		
 | |
| 		calltime = 90.0/speedPerSec  * size;
 | |
| 		obj.setTimeEvent(PO_LIGHTNING_TIMER_ELEC_MARK_1, calltime.tointeger(),999,true); // 瞪晦 葆觼
 | |
| 		
 | |
| 		calltime = 110.0/speedPerSec  * size;
 | |
| 		obj.setTimeEvent(PO_LIGHTNING_TIMER_ELEC_MARK_2, calltime.tointeger(),999,true); // 瞪晦 葆觼
 | |
| 		
 | |
| 		local var = obj.getVar();
 | |
| 		local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
 | |
| 		local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);					
 | |
| 			
 | |
| 		// 桧?? 称桧晦    /|/|/|   <- 蹂楛 窒葬 伪擎 桧??
 | |
| 		local currentAni = sq_GetCurrentAnimation(lightningObj1);
 | |
| 		if(currentAni) {
 | |
| 			currentAni.addLayerAnimation(6,sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATLightningWall/7_el-p1_dodge_1.ani"),true);
 | |
| 			
 | |
| 			currentAni = sq_GetCurrentAnimation(lightningObj2);
 | |
| 			currentAni.addLayerAnimation(6,sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATLightningWall/7_el-p1_dodge_2.ani"),true);
 | |
| 		}
 | |
| 		lightingWallObjAniResizeing(obj, obj);
 | |
| 	}
 | |
| 	else if(state == PO_LIGHTNING_WALL_DESTROY) {
 | |
| 		obj.sq_RemoveMoveParticle(); // 桧翕部		
 | |
| 		setCurrentAnimationFromCutomIndex(obj, 1); // ?惚 拥栖		
 | |
| 		lightingWallObjAniResizeing(obj, obj);
 | |
| 		
 | |
| 		local var = obj.getVar();
 | |
| 		local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
 | |
| 		local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
 | |
| 		if(lightningObj1 && lightningObj2) {
 | |
| 			lightningObj1.setValid(false);
 | |
| 			lightningObj2.setValid(false);
 | |
| 			
 | |
| 			lightningObj1 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/d5_el-p_normal_1.ani", PO_LIGHTNING_1_DISTANCE_X, PO_LIGHTNING_1_DISTANCE_Y, 0);
 | |
| 			lightningObj2 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/d5_el-p_normal_2.ani", PO_LIGHTNING_2_DISTANCE_X, PO_LIGHTNING_2_DISTANCE_Y, 0);
 | |
| 			
 | |
| 			var.setObject(PO_LIGHTNING_VAR_LIGHTNING_1, lightningObj1);
 | |
| 			var.setObject(PO_LIGHTNING_VAR_LIGHTNING_2, lightningObj2);		
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function onAttack_po_ATLightningWall(obj, damager, boundingBox, isStuck)
 | |
| {	
 | |
| 	if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)) {	
 | |
| 		local parentChr = obj.getTopCharacter();
 | |
| 		local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_LIGHTNING_WALL, false, "Character/ATMage/LightningWall/ap_LightningWall.nut", true);				 
 | |
| 		if(parentChr && masterAppendage) {			
 | |
| 			sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , masterAppendage);			
 | |
| 	
 | |
| 			local time = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 3); // 虽虽霜 唳霜卫除
 | |
| 			local appendageInfo = masterAppendage.getAppendageInfo();
 | |
| 			appendageInfo.setValidTime(time);
 | |
| 		}
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| function procAppend_po_ATLightningWall(obj)
 | |
| {
 | |
| 	if(!obj) return;
 | |
| 	local var = obj.getVar();
 | |
| 	
 | |
| 	if(!var) return;
 | |
| 	
 | |
| 	local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
 | |
| 	local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
 | |
| 	
 | |
| 	local pos1X = getLightningWallPos(obj, PO_LIGHTNING_1_DISTANCE_X);	
 | |
| 	local pos1Y = getLightningWallPos(obj, PO_LIGHTNING_1_DISTANCE_Y);
 | |
| 	local pos2X = getLightningWallPos(obj, PO_LIGHTNING_2_DISTANCE_X);
 | |
| 	local pos2Y = getLightningWallPos(obj, PO_LIGHTNING_2_DISTANCE_Y);
 | |
| 			
 | |
| 	if(lightningObj1)
 | |
| 		lightningObj1.setCurrentPos(obj.getXPos() + pos1X.tointeger(), obj.getYPos()+ pos1Y.tointeger(), obj.getZPos()); // ?惚陛 嬴栖塭 ?惚 拥栖煎 掖羹.
 | |
| 	if(lightningObj2)
 | |
| 		lightningObj2.setCurrentPos(obj.getXPos() + pos2X.tointeger(), obj.getYPos()+ pos2Y.tointeger(), obj.getZPos());	
 | |
| 	
 | |
| 	local targetXPos = var.getInt(PO_LIGHTNING_VAR_TARGET_X_POS);
 | |
| 	local direction = var.getInt(PO_LIGHTNING_VAR_DIRECTION);
 | |
| 	
 | |
| 	if(direction == ENUM_DIRECTION_RIGHT) {
 | |
| 		if(obj.getXPos() > targetXPos)
 | |
| 		{	
 | |
| 			sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos());
 | |
| 			obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY);
 | |
| 		}
 | |
| 	}
 | |
| 	else if(direction == ENUM_DIRECTION_LEFT) {
 | |
| 		if(obj.getXPos() < targetXPos)
 | |
| 		{	
 | |
| 			sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos());
 | |
| 			obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY);
 | |
| 		}
 | |
| 	}
 | |
| 	else {
 | |
| 		obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY);	 // 寞?桧 桡戏贼 饵塭虽虽 强挤戏煎 ?惚
 | |
| 	}
 | |
| 	
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| function onEndCurrentAni_po_ATLightningWall(obj)
 | |
| {
 | |
| 	if(!obj) return;
 | |
| 	
 | |
| 	if(obj.isCurrentAnimationIndex(1)) {
 | |
| 		if(obj.isMyControlObject())
 | |
| 			sq_SendDestroyPacketPassiveObject(obj); // 饵塭虽朝 赅暮? ?惚
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function onDestroyObject_po_ATLightningWall(obj, destroyObj)
 | |
| {
 | |
| 	if(!obj || isSameObject(obj,destroyObj)) {
 | |
| 		local var = obj.getVar();
 | |
| 		local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
 | |
| 		local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
 | |
| 		if(lightningObj1)
 | |
| 			lightningObj1.setValid(false); // ?惚陛 嬴栖塭 ?惚 拥栖煎 掖羹.
 | |
| 		if(lightningObj2)
 | |
| 			lightningObj2.setValid(false);
 | |
| 	}
 | |
| 	
 | |
| 	local parentChr = obj.getTopCharacter();
 | |
| 	if(isSameObject(obj,parentChr)) {
 | |
| 		if(obj.isMyControlObject())
 | |
| 			sq_SendDestroyPacketPassiveObject(obj); 		
 | |
| 	}		
 | |
| } |