예제 #1
0
        private void Trap(NecClient client, int skillId, SkillBaseSetting skillBaseSetting)
        {
            Logger.Debug($"skillId : {skillId}");
            if (!int.TryParse($"{skillId}".Substring(1, 5), out int skillBase))
            {
                Logger.Error($"Creating skillBase from skillid [{skillId}]");
                int            errorCode = -1;
                RecvSkillExecR execFail  = new RecvSkillExecR(errorCode, 0, 0);
                Router.Send(execFail, client);
                return;
            }

            if (!int.TryParse($"{skillId}".Substring(1, 7), out int effectBase))
            {
                Logger.Error($"Creating skillBase from skillid [{skillId}]");
                int            errorCode = -1;
                RecvSkillExecR execFail  = new RecvSkillExecR(errorCode, 0, 0);
                Router.Send(execFail, client);
                return;
            }

            bool isBaseTrap = TrapTask.baseTrap(skillBase);

            effectBase += 1;
            if (!_server.SettingRepository.EoBase.TryGetValue(effectBase, out EoBaseSetting eoBaseSetting))
            {
                Logger.Error($"Getting EoBaseSetting from effectBase [{effectBase}]");
                int            errorCode = -1;
                RecvSkillExecR execFail  = new RecvSkillExecR(errorCode, 0, 0);
                Router.Send(execFail, client);
                return;
            }

            if (!_server.SettingRepository.EoBase.TryGetValue(effectBase + 1, out EoBaseSetting eoBaseSettingTriggered))
            {
                Logger.Error($"Getting EoBaseSetting from effectBase+1 [{effectBase + 1}]");
                int            errorCode = -1;
                RecvSkillExecR execFail  = new RecvSkillExecR(errorCode, 0, 0);
                Router.Send(execFail, client);
                return;
            }

            RecvSkillExecR execSuccess =
                new RecvSkillExecR(0, skillBaseSetting.CastingCooldown, skillBaseSetting.RigidityTime);

            Router.Send(execSuccess, client);

            // ToDo  verify trap parts available and remove correct number from inventory
            TrapStack trapStack = (TrapStack)Server.Instances.GetInstance((uint)client.Character.activeSkillInstance);
            Trap      trap      = new Trap(skillBase, skillBaseSetting, eoBaseSetting, eoBaseSettingTriggered);

            _server.Instances.AssignInstance(trap);
            Logger.Debug($"trap.InstanceId [{trap.InstanceId}]  trap.Name [{trap._name}]  skillId[{skillId}]");
            trapStack.SkillExec(trap, isBaseTrap);
            Vector3 trapPos = new Vector3(client.Character.X, client.Character.Y, client.Character.Z);
        }
예제 #2
0
 public Trap(int skillBase, SkillBaseSetting skillBaseSetting, EoBaseSetting eoBaseSetting, EoBaseSetting eoBaseSettingTriggered)
 {
     _skillBaseId     = skillBase;
     _skillId         = skillBaseSetting.Id;
     _name            = skillBaseSetting.Name;
     _triggerRadius   = eoBaseSetting.EffectRadius;
     _effectRadius    = eoBaseSettingTriggered.EffectRadius;
     _itemType        = skillBaseSetting.Item1Id;
     _itemCount       = skillBaseSetting.Item1Count;
     _castTime        = skillBaseSetting.CastingTime;
     _trapTime        = skillBaseSetting.EffectTime;
     _skillEffectId   = eoBaseSetting.Id;
     _triggerEffectId = eoBaseSettingTriggered.Id;
     _coolTime        = skillBaseSetting.CastingCooldown;
 }
예제 #3
0
 public Trap(int skillBase, SkillBaseSetting skillBaseSetting, EoBaseSetting eoBaseSetting, EoBaseSetting eoBaseSettingTriggered)
 {
     skillBaseId     = skillBase;
     skillId         = skillBaseSetting.id;
     name            = skillBaseSetting.name;
     triggerRadius   = eoBaseSetting.effectRadius;
     effectRadius    = eoBaseSettingTriggered.effectRadius;
     itemType        = skillBaseSetting.item1Id;
     itemCount       = skillBaseSetting.item1Count;
     castTime        = skillBaseSetting.castingTime;
     trapTime        = skillBaseSetting.effectTime;
     skillEffectId   = eoBaseSetting.id;
     triggerEffectId = eoBaseSettingTriggered.id;
     coolTime        = skillBaseSetting.castingCooldown;
 }
예제 #4
0
        private void Stealth(NecClient client, int skillId, SkillBaseSetting skillBaseSetting)
        {
            float cooldown = 0.0F;

            Logger.Debug($"IsStealthed [{client.Character.IsStealthed()}]");
            if (client.Character.IsStealthed())
            {
                cooldown = skillBaseSetting.CastingCooldown;
            }
            RecvSkillExecR execSuccess = new RecvSkillExecR(0, cooldown, skillBaseSetting.RigidityTime);

            Router.Send(execSuccess, client);

            Stealth stealth = (Stealth)Server.Instances.GetInstance((uint)client.Character.activeSkillInstance);

            stealth.SkillExec();
        }
예제 #5
0
        public void StartCast(SkillBaseSetting skillBase)
        {
            Logger.Debug(
                $"Trap StartCast skillBase.Id [{skillBase.Id}] skillBase.CastingTime [{skillBase.CastingTime}]");
            RecvSkillStartCastSelf startCast = new RecvSkillStartCastSelf(skillBase.Id, skillBase.CastingTime);

            _server.Router.Send(startCast, _client);
            List <PacketResponse>                brList      = new List <PacketResponse>();
            RecvBattleReportStartNotify          brStart     = new RecvBattleReportStartNotify(_client.Character.InstanceId);
            RecvBattleReportEndNotify            brEnd       = new RecvBattleReportEndNotify();
            RecvBattleReportActionSkillStartCast brStartCast = new RecvBattleReportActionSkillStartCast(skillBase.Id);

            brList.Add(brStart);
            brList.Add(brStartCast);
            brList.Add(brEnd);
            _server.Router.Send(_client.Map, brList);
        }