コード例 #1
0
    public void ReadySkillCheck(ReadySkillCheckInfo info)
    {
        Skill skillOrAttackById = this.self.getSkillOrAttackById(info.skillId);
        Units units             = null;

        if (info.targetUnits != null && info.targetUnits.Count > 0)
        {
            units = MapManager.Instance.GetUnit((int)info.targetUnits[0]);
        }
        if (null == units && ((skillOrAttackById.needTarget && skillOrAttackById.IsSkill) || skillOrAttackById.IsAttack))
        {
            ClientLogger.Error("Recv ReadySkillCheck target null: " + info);
            return;
        }
        if (info.checkSuccess)
        {
            if (skillOrAttackById.IsAttack)
            {
                this.ComboAttack_Impl(skillOrAttackById.skillIndex, units, false);
            }
            else if (info.targetPosition == null)
            {
                this.Conjure_Impl(info.skillId, units, null, false);
            }
            else
            {
                this.Conjure_Impl(info.skillId, units, new Vector3?(MoveController.SVectgor3ToVector3(info.targetPosition)), false);
            }
        }
        else if (info.targetPosition != null && units != null)
        {
            units.transform.position = MoveController.SVectgor3ToVector3(info.targetPosition);
        }
    }
コード例 #2
0
 public static void SendReadySkillCheckEvent(ReadySkillCheckInfo info)
 {
     byte[] args = SerializeHelper.Serialize <ReadySkillCheckInfo>(info);
     SendMsgManager.Instance.SendPvpMsg(PvpCode.C2P_ReadySkillCheck, args);
 }
コード例 #3
0
 public void ComboAttack(int index, Units target)
 {
     if (Singleton <PvpManager> .Instance.IsInPvp)
     {
         if (this.self.CanAttack && !this.isComboAttack)
         {
             Skill attackByIndex = this.self.getAttackByIndex(index);
             if (attackByIndex == null)
             {
                 ClientLogger.Error(" ComboAttack Error : attack " + index + " is NULL !");
                 base.OnAttackFailedBeforeStart(null);
                 return;
             }
             if (!this.sendUseSkillTicks.ContainsKey(attackByIndex.skillMainId))
             {
                 this.sendUseSkillTicks.Add(attackByIndex.skillMainId, 0L);
             }
             if (!this.sendUseSkills.ContainsKey(attackByIndex.skillMainId))
             {
                 this.sendUseSkills.Add(attackByIndex.skillMainId, false);
             }
             if (DateTime.Now.Ticks - this.sendUseSkillTicks[attackByIndex.skillMainId] > 5000000L)
             {
                 this.sendUseSkills[attackByIndex.skillMainId] = false;
             }
             if (this.sendUseSkills[attackByIndex.skillMainId])
             {
                 return;
             }
             if (target == null)
             {
                 target = this.self.GetAttackTarget();
             }
             if (PvpServerStartSkillHeroList.IsStartByServer(this.self.npc_id))
             {
                 this.ComboAttack_Impl(index, target, true);
             }
             else
             {
                 ReadySkillCheckInfo readySkillCheckInfo = new ReadySkillCheckInfo();
                 readySkillCheckInfo.unitId  = this.self.unique_id;
                 readySkillCheckInfo.skillId = attackByIndex.skillMainId;
                 List <short> list = new List <short>();
                 if (null != target)
                 {
                     list.Add((short)target.unique_id);
                 }
                 readySkillCheckInfo.targetUnits = list;
                 PvpEvent.SendReadySkillCheckEvent(readySkillCheckInfo);
             }
         }
         else
         {
             base.OnAttackFailedBeforeStart(this.self.getAttackByIndex(0));
         }
     }
     else
     {
         this.ComboAttack_Impl(index, target, false);
     }
 }
コード例 #4
0
    public override void Conjure(string skillId, Units target = null, Vector3?targetPos = null)
    {
        this.self.InterruptConjure(SkillInterruptType.Initiative);
        Skill skillById = this.self.getSkillById(skillId);

        if (!skillById.CheckCD(false))
        {
            Singleton <TriggerManager> .Instance.SendUnitSkillStateEvent(UnitEvent.UnitSkillCmdFailed, this.self, skillById);

            return;
        }
        if (!this.sendUseSkillTicks.ContainsKey(skillId))
        {
            this.sendUseSkillTicks.Add(skillId, 0L);
        }
        if (!this.sendUseSkills.ContainsKey(skillId))
        {
            this.sendUseSkills.Add(skillId, false);
        }
        if (DateTime.Now.Ticks - this.sendUseSkillTicks[skillId] > 5000000L)
        {
            this.sendUseSkills[skillId] = false;
        }
        if (this.sendUseSkills[skillId])
        {
            Singleton <TriggerManager> .Instance.SendUnitSkillStateEvent(UnitEvent.UnitSkillCmdFailed, this.self, skillById);

            return;
        }
        if (targetPos.HasValue)
        {
            float y = AstarPath.active.GetPosHeight(targetPos.Value) + 0.05f;
            targetPos = new Vector3?(new Vector3(targetPos.Value.x, y, targetPos.Value.z));
        }
        if (this.self.CanSkill || skillById.CheckSkillCanUseSpecial)
        {
            if (target == null && !targetPos.HasValue)
            {
                target = this.self.GetAttackTarget();
            }
            skillById.attackTarget    = target;
            skillById.attackPosition  = targetPos;
            skillById.externalPostion = targetPos;
            if (Singleton <PvpManager> .Instance.IsInPvp && this.self.isPlayer)
            {
                if (PvpServerStartSkillHeroList.IsStartByServer(this.self.npc_id))
                {
                    this.Conjure_Impl(skillId, target, targetPos, true);
                }
                else if (UnitsSnapReporter.Instance.NetworkDelayInMs > 400L || UnityEngine.Random.Range(0, 100) > 90)
                {
                    ReadySkillCheckInfo readySkillCheckInfo = new ReadySkillCheckInfo();
                    readySkillCheckInfo.unitId  = this.self.unique_id;
                    readySkillCheckInfo.skillId = skillId;
                    List <Units> skillTargets = skillById.GetSkillTargets();
                    if (targetPos.HasValue)
                    {
                        readySkillCheckInfo.targetPosition = MoveController.Vector3ToSVector3(targetPos.Value);
                    }
                    List <short> list = new List <short>();
                    foreach (Units current in skillTargets)
                    {
                        list.Add((short)current.unique_id);
                    }
                    readySkillCheckInfo.targetUnits = list;
                    PvpEvent.SendReadySkillCheckEvent(readySkillCheckInfo);
                    this.sendUseSkills[skillId]     = true;
                    this.sendUseSkillTicks[skillId] = DateTime.Now.Ticks;
                }
                else
                {
                    this.Conjure_Impl(skillId, target, targetPos, false);
                }
            }
            else
            {
                this.Conjure_Impl(skillId, target, targetPos, false);
            }
        }
        else
        {
            Singleton <TriggerManager> .Instance.SendUnitSkillStateEvent(UnitEvent.UnitSkillCmdFailed, this.self, skillById);
        }
    }