581 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			581 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:Sawblade.nut | ||
|  | 路径:character/ATGunner/Ranger/Sawblade.nut | ||
|  | 创建日期:2022-09-09	19:17 | ||
|  | 文件用途:技能-枪刃改良(女漫游二觉被动) | ||
|  | */ | ||
|  | if (!getroottable().rawin("ATGunner_Sawblade_Skill")) ATGunner_Sawblade_Skill <- {} | ||
|  | 
 | ||
|  | 
 | ||
|  | function Sawblade_PassiveSkill(obj, Index, Level) { | ||
|  |     //Sout("被动技能触发"); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | if (getroottable().rawin("ProcPassiveSkill_ATGunner_Table")) | ||
|  |     ProcPassiveSkill_ATGunner_Table.rawset(235, Sawblade_PassiveSkill); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | { | ||
|  |     function ProcAppend_Sawblade_6(obj) { | ||
|  |         if (sq_GetSkillLevel(obj, 235) < 1) return; | ||
|  |         local CoolTime = obj.sq_GetIntData(235, 0); | ||
|  |         local CoolTimer = TimeSTL("SawbladeCoolTime_DC", CoolTime); | ||
|  |         //   按键C  高度小于100 高度大于10(判断是否已经跳起来了)   冷却未开始计算 或者 不处于冷却状态 | ||
|  |         if (KeyPress.isKeyPress(5) && obj.getZPos() <= 100 && obj.getZPos() >= 10 && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { | ||
|  |             local pIntVec = sq_GetGlobalIntVector(); | ||
|  |             sq_IntVectorClear(pIntVec); | ||
|  |             sq_IntVectorPush(pIntVec, 67); | ||
|  |             sq_IntVectorPush(pIntVec, 67); | ||
|  |             obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             CoolTimer.Reset(); | ||
|  |             CoolTimer.Start(); | ||
|  |         } | ||
|  |         CoolTime = obj.sq_GetIntData(235, 1); | ||
|  |         CoolTimer = TimeSTL("SawbladeCoolTime_KZ", CoolTime); | ||
|  |         //  空中Z | ||
|  |         if (KeyPress.isKeyPress(6) && obj.getZPos() >= 20 && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { | ||
|  |             local pIntVec = sq_GetGlobalIntVector(); | ||
|  |             sq_IntVectorClear(pIntVec); | ||
|  |             sq_IntVectorPush(pIntVec, 69); | ||
|  |             sq_IntVectorPush(pIntVec, 69); | ||
|  |             obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             CoolTimer.Reset(); | ||
|  |             CoolTimer.Start(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //6号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("procAppend_ATGunner_Table")) | ||
|  |         System.InsertArrayInTable(procAppend_ATGunner_Table, 6, "Sawblade", ProcAppend_Sawblade_6); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | { | ||
|  |     function ProcAppend_Sawblade_15(obj) { | ||
|  |         if (sq_GetSkillLevel(obj, 235) < 1) return; | ||
|  |         local CoolTime = obj.sq_GetIntData(235, 2); | ||
|  |         local CoolTimer = TimeSTL("SawbladeCoolTime_HC", CoolTime); | ||
|  |         //   按键C  高度小于100 高度大于10(判断是否已经跳起来了)   冷却未开始计算 或者 不处于冷却状态 | ||
|  |         if (KeyPress.isKeyPress(6) && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { | ||
|  |             local pIntVec = sq_GetGlobalIntVector(); | ||
|  |             sq_IntVectorClear(pIntVec); | ||
|  |             sq_IntVectorPush(pIntVec, 68); | ||
|  |             sq_IntVectorPush(pIntVec, 68); | ||
|  |             obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             CoolTimer.Reset(); | ||
|  |             CoolTimer.Start(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //15号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("procAppend_ATGunner_Table")) | ||
|  |         System.InsertArrayInTable(procAppend_ATGunner_Table, 15, "Sawblade", ProcAppend_Sawblade_15); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | { | ||
|  |     function ProcAppend_Sawblade_19(obj) { | ||
|  |         if (sq_GetSkillLevel(obj, 235) < 1) return; | ||
|  |         local CoolTime = obj.sq_GetIntData(235, 3); | ||
|  |         local CoolTimer = TimeSTL("SawbladeCoolTime_LQ", CoolTime); | ||
|  |         //   按键C  高度小于100 高度大于10(判断是否已经跳起来了)   冷却未开始计算 或者 不处于冷却状态 | ||
|  |         if (KeyPress.isKeyPress(6) && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { | ||
|  |             local pIntVec = sq_GetGlobalIntVector(); | ||
|  |             sq_IntVectorClear(pIntVec); | ||
|  |             sq_IntVectorPush(pIntVec, 70); | ||
|  |             sq_IntVectorPush(pIntVec, 70); | ||
|  |             obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             CoolTimer.Reset(); | ||
|  |             CoolTimer.Start(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //19号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("procAppend_ATGunner_Table")) | ||
|  |         System.InsertArrayInTable(procAppend_ATGunner_Table, 19, "Sawblade", ProcAppend_Sawblade_19); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | { | ||
|  |     function ProcAppend_Sawblade_13(obj) { | ||
|  | 
 | ||
|  |         local pAni = obj.sq_GetCurrentAni(); //当前播放的Ani | ||
|  |         local currentT = sq_GetCurrentTime(pAni); //Ani的当前时间 | ||
|  |         local fireT = pAni.getDelaySum(false); //总时间 | ||
|  |         local srcX = ATGunner_Sawblade_Skill["Xpos"]; // X的起始位置 | ||
|  |         local srcZ = ATGunner_Sawblade_Skill["Zpos"]; // Z的起始位置 | ||
|  | 
 | ||
|  |         { //双C | ||
|  |             if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) { | ||
|  |                 local vz = sq_GetAccel(0, 100, currentT, 300, true); | ||
|  |                 local vx = GameC.getQuadraticFunction(obj, 0 + sq_GetAccel(0, 36, currentT, 300, true), 240, 100).tointeger(); | ||
|  |                 //local vz = getQuadraticFunction(obj, 0 + ccz, 40, 100).tointeger(); | ||
|  |                 local dstX = srcX + sq_GetDistancePos(0, obj.getDirection(), vx); //这是要 X 位移随时变动的值 | ||
|  |                 if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //这是判断这个值能不能到达 也就是会不会卡墙里  不会 在进行位移 | ||
|  |                 sq_setCurrentAxisPos(obj, 2, srcZ + vz); //这是位移Z轴 | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //空Z | ||
|  |             if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691 /*&& ccc.getInt(0) == 1*/ ) { | ||
|  |                 local Zpos = srcZ; | ||
|  |                 local MoveX = Zpos; //移动多少x距离 | ||
|  |                 local MoveZ = Zpos; //移动多少Z距离 | ||
|  |                 local v = sq_GetUniformVelocity(0, MoveX, currentT, Zpos); | ||
|  |                 local v2 = sq_GetUniformVelocity(0, MoveZ, currentT, Zpos); | ||
|  |                 local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); | ||
|  |                 local dstZ = sq_GetDistancePos(Zpos, 0, v2); | ||
|  |                 if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标 | ||
|  |                 sq_setCurrentAxisPos(obj, 2, dstZ); //设置当前z坐标 | ||
|  |                 if (obj.getZPos() <= 1) { | ||
|  |                     local frame = sq_GetAnimationFrameIndex(pAni); | ||
|  |                     switch (frame) { | ||
|  |                         case 0: | ||
|  |                             pAni.setCurrentFrameWithChildLayer(1); | ||
|  |                             break; | ||
|  |                         case 1: | ||
|  |                             return; | ||
|  |                             break; | ||
|  |                         default: | ||
|  |                             return; | ||
|  |                             break; | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //滑铲 | ||
|  |             local MoveXPos = 50; | ||
|  |             //滑铲抬手 | ||
|  |             if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) { | ||
|  |                 local MoveX = MoveXPos; //移动多少x距离 | ||
|  |                 local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); //计算平均移动值 | ||
|  |                 local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); //计算出的X坐标 | ||
|  |                 if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标 | ||
|  |             } | ||
|  |             //滑铲冲刺 | ||
|  |             if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) { | ||
|  |                 local MoveX = MoveXPos * 4; //移动多少x距离 | ||
|  |                 local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); //计算平均移动值 | ||
|  |                 local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); //计算出的X坐标 | ||
|  |                 if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标 | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //拉起 | ||
|  |             if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) { | ||
|  | 
 | ||
|  |                 local MoveZ = 80; //移动多少Z距离 | ||
|  |                 local v2 = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); | ||
|  |                 //local dstZ = sq_GetDistancePos(srcZ, 0, v2); | ||
|  |                 sq_setCurrentAxisPos(obj, 2, v2); //设置当前z坐标 | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //13号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("procAppend_ATGunner_Table")) | ||
|  |         System.InsertArrayInTable(procAppend_ATGunner_Table, 13, "Sawblade", ProcAppend_Sawblade_13); | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | { | ||
|  |     //设置状态时 | ||
|  |     function onSetState_Sawblade(obj, state, datas, isResetTimer) { | ||
|  |         ATGunner_Sawblade_Skill.rawset("Zpos", obj.getZPos()); | ||
|  |         ATGunner_Sawblade_Skill.rawset("Xpos", obj.getXPos()); | ||
|  | 
 | ||
|  |         //双C | ||
|  |         { | ||
|  |             if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) { | ||
|  |                 obj.sq_SetCurrentAnimation(104); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); | ||
|  | 
 | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         //空Z | ||
|  |         { | ||
|  |             //如果子状态为设定的69号状态 空中z抬手 | ||
|  |             if (Chr_State_Table[0] == 69 && Chr_State_Table[1] == 69) { | ||
|  |                 //设定ani | ||
|  |                 obj.sq_SetCurrentAnimation(109); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 6.0, 6.0); | ||
|  |             } | ||
|  |             //空中z 下落 | ||
|  |             if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691) { | ||
|  |                 //设定ani | ||
|  |                 obj.sq_SetCurrentAnimation(110); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); | ||
|  |                 obj.sq_SetCurrentAttackInfo(27); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //滑铲 | ||
|  |             //滑铲起手 | ||
|  |             if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) { | ||
|  | 
 | ||
|  |                 obj.sq_SetCurrentAnimation(105); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); | ||
|  | 
 | ||
|  |             } | ||
|  |             //滑铲冲刺 | ||
|  |             if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) { | ||
|  |                 obj.sq_SetCurrentAnimation(106); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_MOVE_SPEED, SPEED_TYPE_MOVE_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 2.1, 2.1); | ||
|  |                 obj.sq_SetCurrentAttackInfo(26); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //拉起 | ||
|  |             //拉起第一段 | ||
|  |             if (Chr_State_Table[0] == 70 && Chr_State_Table[1] == 70) { | ||
|  |                 //设定ani | ||
|  |                 obj.sq_SetCurrentAnimation(107); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); | ||
|  |             } | ||
|  |             //拉起第二段 | ||
|  |             if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) { | ||
|  |                 //设定ani | ||
|  |                 obj.sq_SetCurrentAnimation(108); | ||
|  |                 obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); | ||
|  |                 obj.sq_SetCurrentAttackInfo(28); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //13号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("onSetState_ATGunner13State_Table")) | ||
|  |         onSetState_ATGunner13State_Table.rawset("Sawblade", onSetState_Sawblade); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | //多重爆头 | ||
|  | { | ||
|  |     function setState_Sawblade_multiheadshot(obj, state, datas, isResetTimer) { | ||
|  | 
 | ||
|  | 
 | ||
|  |         if (Chr_State_Table[1] == 1) { | ||
|  |             local ShootDct = Chr_State_Table[2]; | ||
|  |             if (obj.getDirection() == 0) { | ||
|  |                 if (ShootDct == 0) ShootDct = 1; | ||
|  |                 else if (ShootDct == 1) ShootDct = 0; | ||
|  |             } | ||
|  |             local montab = GameC.findRoundNearAllEnemyRect(obj, 340, 80, ShootDct); | ||
|  |             if (montab.len() > 0) { | ||
|  |                 local AtkRate = obj.sq_GetLevelData(72, 0, sq_GetSkillLevel(obj, 72)); | ||
|  |                 local ap = sq_getNewAttackInfoPacket(); | ||
|  |                 ap.hitStunTimeAttackerDamager = 600; //僵直时间 | ||
|  |                 ap.powerRate = AtkRate; //百分比 | ||
|  |                 ap.useWeapon = true; //是否吃武器伤害 | ||
|  |                 ap.eType = ATTACKTYPE_PHYSICAL; //攻击类型 魔法还是物理 | ||
|  |                 ap.backForce = 50; //推开距离 | ||
|  |                 ap.upForce = 50; //打击高度 | ||
|  | 
 | ||
|  |                 //local ballCount = obj.getMyPassiveObjectCount(24233); | ||
|  |                 //local magicBall = obj.getMyPassiveObject(24233, i) | ||
|  |                 foreach(Object in montab) { | ||
|  |                     sq_SendHitObjectPacketByAttackInfo(obj, Object, ap); //以新的攻击包发送攻击 | ||
|  |                     //sq_SendHitObjectPacket(obj, Object, 0, 0, sq_GetObjectHeight(Object) / 2); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     //13号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("setState_ATGunner_Table")) | ||
|  |         System.InsertArrayInTable(setState_ATGunner_Table, 37, "Sawblade", setState_Sawblade_multiheadshot); | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | //走射 | ||
|  | { | ||
|  |     //ATGunner_Sawblade_Skill.rawset("shoot", 0); | ||
|  | 
 | ||
|  |     function ProcAppend_Sawblade_walkshoot(obj) { | ||
|  |         //GameC.DestroyPassiveObject(obj,22001); | ||
|  |         /* | ||
|  |         if ((obj.isCurrentCutomAniIndex(28) || obj.isCurrentCutomAniIndex(29) || obj.isCurrentCutomAniIndex(30))) { | ||
|  |             if (ATGunner_Sawblade_Skill["shoot"] == 0) { | ||
|  |                 local DamageRate = obj.sq_GetBonusRateWithPassive(15, 27, 0, 1.0); | ||
|  |                 obj.sq_StartWrite(); //开始写入 | ||
|  |                 obj.sq_WriteDword(671); //写入  4  字节数                            技能ID | ||
|  |                 //obj.sq_WriteDword(WeaponType); //写入  4  字节数                            武器类型 | ||
|  |                 //obj.sq_WriteDword(flagIndex); //写入  4  字节数                            关键帧 | ||
|  |                 obj.sq_WriteDword(DamageRate); //写入  4  字节数                            伤害率 | ||
|  |                 obj.sq_SendCreatePassiveObjectPacket(24371, 0, 0, -10, 20); | ||
|  | 
 | ||
|  |                 ATGunner_Sawblade_Skill.rawset("shoot", 1); | ||
|  |             } | ||
|  |         } else if ((obj.isCurrentCutomAniIndex(31) || obj.isCurrentCutomAniIndex(32) || obj.isCurrentCutomAniIndex(33))) { | ||
|  |             if (ATGunner_Sawblade_Skill["shoot"] == 0) { | ||
|  |                 local DamageRate = obj.sq_GetBonusRateWithPassive(15, 27, 0, 1.0); | ||
|  |                 obj.sq_StartWrite(); //开始写入 | ||
|  |                 obj.sq_WriteDword(671); //写入  4  字节数                            技能ID | ||
|  |                 //obj.sq_WriteDword(WeaponType); //写入  4  字节数                            武器类型 | ||
|  |                 //obj.sq_WriteDword(flagIndex); //写入  4  字节数                            关键帧 | ||
|  |                 obj.sq_WriteDword(DamageRate); //写入  4  字节数                            伤害率 | ||
|  |                 obj.sq_SendCreatePassiveObjectPacket(24371, 0, 0, 10, 20); | ||
|  | 
 | ||
|  |                 ATGunner_Sawblade_Skill.rawset("shoot", 1); | ||
|  |             } | ||
|  |         } else { | ||
|  |             ATGunner_Sawblade_Skill.rawset("shoot", 0); | ||
|  |         } | ||
|  |         */ | ||
|  |     } | ||
|  |     //27号状态 枪刃改良proc声明 | ||
|  |     if (getroottable().rawin("procAppend_ATGunner_Table")) | ||
|  |         System.InsertArrayInTable(procAppend_ATGunner_Table, 27, "Sawblade", ProcAppend_Sawblade_walkshoot); | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | //动画结束时 | ||
|  | { | ||
|  |     function onEndCurrentAni_Sawblade(obj) { | ||
|  | 
 | ||
|  |         { //双C的结束 | ||
|  |             if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 1); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 sq_IntVectorPush(pIntVec, 1); | ||
|  |                 obj.addSetStatePacket(6, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //空Z | ||
|  |             if (Chr_State_Table[0] == 69 && Chr_State_Table[1] == 69) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 691); | ||
|  |                 sq_IntVectorPush(pIntVec, 691); | ||
|  |                 obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  | 
 | ||
|  |             if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 obj.addSetStatePacket(0, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //滑铲 | ||
|  |             if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 681); | ||
|  |                 sq_IntVectorPush(pIntVec, 681); | ||
|  |                 obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  | 
 | ||
|  |             if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 obj.addSetStatePacket(0, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         { //拉起 | ||
|  |             if (Chr_State_Table[0] == 70 && Chr_State_Table[1] == 70) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 701); | ||
|  |                 sq_IntVectorPush(pIntVec, 701); | ||
|  |                 obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  | 
 | ||
|  |             if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) { | ||
|  |                 local pIntVec = sq_GetGlobalIntVector(); | ||
|  |                 sq_IntVectorClear(pIntVec); | ||
|  |                 sq_IntVectorPush(pIntVec, 1); | ||
|  |                 sq_IntVectorPush(pIntVec, 0); | ||
|  |                 sq_IntVectorPush(pIntVec, 200); | ||
|  |                 obj.addSetStatePacket(6, pIntVec, STATE_PRIORITY_USER, false, ""); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     if (getroottable().rawin("onEndCurrentAni_ATGunner13State_Table")) | ||
|  |         onEndCurrentAni_ATGunner13State_Table.rawset("Sawblade", onEndCurrentAni_Sawblade); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //关键帧时 | ||
|  | { | ||
|  |     function onKeyFrameFlag_Sawblade(obj, flagIndex) { | ||
|  |         local WeaponType = obj.getWeaponSubType(); | ||
|  |         local DamageRate = obj.sq_GetBonusRateWithPassive(235, 13, 0, 3.0); | ||
|  |         //0左轮 1自动手枪 2步枪 3手炮 4手弩 | ||
|  |         obj.sq_StartWrite(); //开始写入 | ||
|  |         obj.sq_WriteDword(670); //写入  4  字节数                            技能ID | ||
|  |         obj.sq_WriteDword(WeaponType); //写入  4  字节数                            武器类型 | ||
|  |         obj.sq_WriteDword(flagIndex); //写入  4  字节数                            关键帧 | ||
|  |         obj.sq_WriteDword(DamageRate); //写入  4  字节数                            伤害率 | ||
|  |         obj.sq_SendCreatePassiveObjectPacket(24371, 0, 40, 0, 20); | ||
|  | 
 | ||
|  |         obj.sq_StartWrite(); //开始写入 | ||
|  |         obj.sq_WriteDword(670); //写入  4  字节数                            技能ID | ||
|  |         obj.sq_WriteDword(WeaponType); //写入  4  字节数                            武器类型 | ||
|  |         obj.sq_WriteDword(flagIndex); //写入  4  字节数                            关键帧 | ||
|  |         obj.sq_WriteDword(DamageRate); //写入  4  字节数                            伤害率 | ||
|  |         obj.sq_SendCreatePassiveObjectPacket(24371, 0, 70, 0, 40); | ||
|  | 
 | ||
|  |         if (WeaponType != 3 && WeaponType != 4) { | ||
|  |             obj.sq_StartWrite(); //开始写入 | ||
|  |             obj.sq_WriteDword(670); //写入  4  字节数                            技能ID | ||
|  |             obj.sq_WriteDword(8); //写入  4  字节数                            武器类型 | ||
|  |             obj.sq_WriteDword(flagIndex); //写入  4  字节数                            关键帧 | ||
|  |             obj.sq_WriteDword(DamageRate); //写入  4  字节数                            伤害率 | ||
|  |             obj.sq_SendCreatePassiveObjectPacket(24371, 0, 40, 0, 50); | ||
|  | 
 | ||
|  |             obj.sq_StartWrite(); //开始写入 | ||
|  |             obj.sq_WriteDword(670); //写入  4  字节数                            技能ID | ||
|  |             obj.sq_WriteDword(8); //写入  4  字节数                            武器类型 | ||
|  |             obj.sq_WriteDword(flagIndex); //写入  4  字节数                            关键帧 | ||
|  |             obj.sq_WriteDword(DamageRate); //写入  4  字节数                            伤害率 | ||
|  |             obj.sq_SendCreatePassiveObjectPacket(24371, 0, 70, 0, 70); | ||
|  |         } | ||
|  |     } | ||
|  |     if (getroottable().rawin("onKeyFrameFlag_ATGunner13State_Table")) | ||
|  |         onKeyFrameFlag_ATGunner13State_Table.rawset("Sawblade", onKeyFrameFlag_Sawblade); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //特效 设置自定义特效时 | ||
|  | { | ||
|  |     function setCustomData_po_atgunner_Sawblade(obj, receiveData) { | ||
|  |         local WeaponType = receiveData.readDword(); | ||
|  |         obj.getVar("Type").clear_vector(); | ||
|  |         obj.getVar("Type").push_vector(WeaponType); | ||
|  | 
 | ||
|  |         local flagIndex = receiveData.readDword(); | ||
|  |         local DamageRate = receiveData.readDword(); | ||
|  | 
 | ||
|  |         local ani; | ||
|  |         switch (WeaponType) { | ||
|  |             case 0: | ||
|  |                 ani = obj.getVar().GetAnimationMap("zuolun", "passiveobject/sqr_po/atgunner/animation/suncha/bulletpistol.ani"); | ||
|  |                 break; | ||
|  |             case 1: | ||
|  |                 ani = obj.getVar().GetAnimationMap("buqiang", "passiveobject/sqr_po/atgunner/animation/suncha/bulletmusket.ani"); | ||
|  |                 break; | ||
|  |             case 2: | ||
|  |                 ani = obj.getVar().GetAnimationMap("zidong", "passiveobject/sqr_po/atgunner/animation/suncha/bulletautomatic_31439.ani"); | ||
|  |                 break; | ||
|  |             case 3: | ||
|  |                 ani = obj.getVar().GetAnimationMap("cannon", "passiveobject/sqr_po/atgunner/animation/suncha/cannon/attack.ani"); | ||
|  |                 break; | ||
|  |             case 4: | ||
|  |                 ani = obj.getVar().GetAnimationMap("shounu", "passiveobject/sqr_po/atgunner/animation/suncha/bulletbowgun.ani"); | ||
|  |                 break; | ||
|  |             case 8: | ||
|  |                 ani = obj.getVar().GetAnimationMap("EFFCT", "passiveobject/sqr_po/atgunner/animation/suncha/headshotgunner.ani"); | ||
|  |                 break; | ||
|  |             default: | ||
|  |                 return; | ||
|  |                 break; | ||
|  |         } | ||
|  | 
 | ||
|  |         switch (flagIndex) { | ||
|  |             case 111: | ||
|  |                 sq_SetCustomRotate(obj, sq_ToRadian(-80.0)); | ||
|  |                 break; | ||
|  |             case 222: | ||
|  |                 sq_SetCustomRotate(obj, sq_ToRadian(-85.0)); | ||
|  |                 break; | ||
|  |             case 333: | ||
|  |                 sq_SetCustomRotate(obj, sq_ToRadian(-100.0)); | ||
|  |                 break; | ||
|  |         } | ||
|  | 
 | ||
|  |         obj.setCurrentAnimation(ani); | ||
|  |         local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置  特效  使用0号位atk | ||
|  |         sq_SetCurrentAttackBonusRate(attackInfo, DamageRate); //给攻击信息设置百分比值 | ||
|  |         sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息 | ||
|  | 
 | ||
|  |     } | ||
|  |     if (getroottable().rawin("setCustomData_po_atgunner_po_Table")) | ||
|  |         setCustomData_po_atgunner_po_Table.rawset(670, setCustomData_po_atgunner_Sawblade); | ||
|  | 
 | ||
|  | 
 | ||
|  |     function setCustomData_po_atgunner_Sawblade_walkshoot(obj, receiveData) { | ||
|  |         local DamageRate = receiveData.readDword(); | ||
|  |         local ani = obj.getVar().GetAnimationMap("Sawblade_walkshoot", "passiveobject/sqr_po/atgunner/animation/suncha/walkshootgun.ani"); | ||
|  | 
 | ||
|  |         obj.setCurrentAnimation(ani); | ||
|  |         local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置  特效  使用0号位atk | ||
|  |         sq_SetCurrentAttackBonusRate(attackInfo, DamageRate); //给攻击信息设置百分比值 | ||
|  |         sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息 | ||
|  | 
 | ||
|  |     } | ||
|  |     if (getroottable().rawin("setCustomData_po_atgunner_po_Table")) | ||
|  |         setCustomData_po_atgunner_po_Table.rawset(671, setCustomData_po_atgunner_Sawblade_walkshoot); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | //特效 Ani播放完成时 | ||
|  | { | ||
|  |     function onEndCurrentAni_po_atgunner_Sawblade(obj) { | ||
|  |         sq_SendDestroyPacketPassiveObject(obj); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table")) | ||
|  |         onEndCurrentAni_po_atgunner_po_Table.rawset(670, onEndCurrentAni_po_atgunner_Sawblade); | ||
|  | 
 | ||
|  |     if (getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table")) | ||
|  |         onEndCurrentAni_po_atgunner_po_Table.rawset(671, onEndCurrentAni_po_atgunner_Sawblade); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //特效 Proc中 | ||
|  | { | ||
|  |     function procAppend_po_atgunner_Sawblade(obj) { | ||
|  |         local Type = obj.getVar("Type").get_vector(0); | ||
|  | 
 | ||
|  |         if (Type == 3 || Type == 8) return; | ||
|  | 
 | ||
|  |         local pAni = obj.getCurrentAnimation(); | ||
|  |         local index = sq_GetAnimationFrameIndex(pAni); | ||
|  | 
 | ||
|  |         local currentT = sq_GetCurrentTime(pAni); | ||
|  |         local fireT = pAni.getDelaySum(false); //总时间 | ||
|  | 
 | ||
|  |         local MoveZ = obj.getZPos(); //移动多少Z距离 | ||
|  | 
 | ||
|  |         if (MoveZ <= 3) { | ||
|  |             sq_SendDestroyPacketPassiveObject(obj); | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         local v2 = sq_GetUniformVelocity(MoveZ, 0, currentT, MoveZ * 10); | ||
|  |         local dstZ = sq_GetDistancePos(0, -MoveZ, v2); | ||
|  | 
 | ||
|  |         sq_setCurrentAxisPos(obj, 2, dstZ); //设置当前z坐标 | ||
|  | 
 | ||
|  |     } | ||
|  |     if (getroottable().rawin("procAppend_po_atgunner_po_Table")) | ||
|  |         procAppend_po_atgunner_po_Table.rawset(670, procAppend_po_atgunner_Sawblade); | ||
|  | } |