Example #1
0
        public int GetStat(CharacterClassType type, byte level)
        {
            switch (type)
            {
            case CharacterClassType.Adventurer:
                return(11);

            case CharacterClassType.Swordman:
                return(11);

            case CharacterClassType.Archer:
                return(12);

            case CharacterClassType.Magician:
                return(10);

            case CharacterClassType.Wrestler:
                return(11);

            case CharacterClassType.Unknown:
                return(11);

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
Example #2
0
        public static void deserialize(byte[] data, ref Int32 offset, out CharacterClassType type)
        {
            UInt16 value = BitConverter.ToUInt16(data, offset);

            type    = (CharacterClassType)value;
            offset += sizeof(UInt16);
        }
Example #3
0
        private GameObject createPrefab(CharacterClassType characterClass)
        {
            switch (characterClass)
            {
            case CharacterClassType.Warrior:
                return(Instantiate(characterPrefabs[0], this.transform));

            case CharacterClassType.Crusader:
                return(Instantiate(characterPrefabs[1], this.transform));

            case CharacterClassType.Archer:
                return(Instantiate(characterPrefabs[2], this.transform));

            case CharacterClassType.Assassin:
                return(Instantiate(characterPrefabs[3], this.transform));

            case CharacterClassType.Wizard:
                return(Instantiate(characterPrefabs[4], this.transform));

            case CharacterClassType.Elementalist:
                return(Instantiate(characterPrefabs[5], this.transform));

            default:
                return(null);
            }
        }
Example #4
0
        private void updateSelectedCharacter(CharacterClassType type)
        {
            JToken info = parsedCharactersInfo[type.ToString()];

            selectedType                  = type;
            selectedClassName.text        = info["language"]["kr"].ToObject <string>();
            selectedClassDescription.text = info["description"].ToObject <string>();
        }
Example #5
0
 public void selectClass(CharacterClassType type)
 {
     this.updateSelectedCharacter(type);
     if (previewCharacter)
     {
         previewCharacter.SetActive(false);
     }
     previewCharacter = previewNode.Find(type.ToString())?.gameObject;
     previewCharacter.SetActive(true);
 }
Example #6
0
        // -------------------------------------------------------------------
        // Public
        // -------------------------------------------------------------------
        public GameDataId Get(CharacterClassType type)
        {
            GameDataId result;

            if (this.typeLookup.TryGetValue(type, out result))
            {
                return(result);
            }

            return(GameDataId.Invalid);
        }
 public static CharacterClass CharacterClassFactory(CharacterClassType characterType)
 {
     switch (characterType)
     {
         case CharacterClassType.Warrior:
             return new Warrior();
         case CharacterClassType.Mage:
             return new Mage();
         case CharacterClassType.Thief:
             return new Thief();
         default:
             throw new NotImplementedException();
     }
 }
Example #8
0
 public int GetJobLevelXp(CharacterClassType type, byte level) =>
 (int)(type == CharacterClassType.Adventurer
         ? _jobLevelBasedAlgorithm.FirstJobXpData[
           level - 1 > 0
                 ? level - 1 >= _jobLevelBasedAlgorithm.FirstJobXpData.Length
                     ? _jobLevelBasedAlgorithm.FirstJobXpData.Length - 1
                     : level - 1
                 : 0]
         : _jobLevelBasedAlgorithm.Data[
           level - 1 > 0
                 ? level - 1 >= _jobLevelBasedAlgorithm.Data.Length
                     ? _jobLevelBasedAlgorithm.Data.Length - 1
                     : level - 1
                 : 0]);
Example #9
0
        public async Task UserCantChangeClassLowJobLevelAsync(CharacterClassType characterClass)
        {
            _session !.Character.JobLevel = 20;
            await _nrRunService.NRunLaunchAsync(_session, new Tuple <IAliveEntity, NrunPacket>(_session.Character, (new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner = NrunRunnerType.ChangeClass,
                VisualId = 0,
                Type = (byte)characterClass
            })));

            var packet = (MsgiPacket?)_session.LastPackets.FirstOrDefault(s => s is MsgiPacket);

            Assert.IsTrue(packet?.Message == Game18NConstString.CanNotChangeJobAtThisLevel && packet.Type == MessageType.White);
        }
Example #10
0
        public async Task UserCanChangeClassAsync(CharacterClassType characterClass)
        {
            _session !.Character.Level  = 15;
            _session.Character.JobLevel = 20;
            await _nrRunService.NRunLaunchAsync(_session, new Tuple <IAliveEntity, NrunPacket>(_session.Character, (new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner = NrunRunnerType.ChangeClass,
                VisualId = 0,
                Type = (byte)characterClass
            })));

            Assert.IsTrue((_session.Character.Class == characterClass) && (_session.Character.Level == 15) &&
                          (_session.Character.JobLevel == 1));
        }
Example #11
0
        public void UserCanChangeClass(CharacterClassType characterClass)
        {
            _session.Character.Level    = 15;
            _session.Character.JobLevel = 20;
            _nRunHandler.Execute(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session);

            Assert.IsTrue((_session.Character.Class == characterClass) && (_session.Character.Level == 15) &&
                          (_session.Character.JobLevel == 1));
        }
Example #12
0
        public async Task UserCanChangeClassAsync(CharacterClassType characterClass)
        {
            _session !.Character.Level  = 15;
            _session.Character.JobLevel = 20;
            await _nRunHandler !.ExecuteAsync(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session).ConfigureAwait(false);

            Assert.IsTrue((_session.Character.Class == characterClass) && (_session.Character.Level == 15) &&
                          (_session.Character.JobLevel == 1));
        }
Example #13
0
        public async Task UserCantChangeClassLowJobLevelAsync(CharacterClassType characterClass)
        {
            _session !.Character.JobLevel = 20;
            await _nRunHandler !.ExecuteAsync(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session).ConfigureAwait(false);

            var packet = (MsgiPacket?)_session.LastPackets.FirstOrDefault(s => s is MsgiPacket);

            Assert.IsTrue(packet?.Message == Game18NConstString.CanNotChangeJobAtThisLevel && packet.Type == MessageType.White);
        }
Example #14
0
        public async Task <SaltyCommandResult> ChangeClassAsync(
            [Description("Class you want to change to")]
            CharacterClassType newClass,
            [Description("Character you want to change the class")]
            IPlayerEntity player = null)
        {
            if (player == null)
            {
                player = Context.Player;
            }

            await player.ChangeClass(newClass);

            return(new SaltyCommandResult(true, $"{player.Character.Name}'s class has been changed to {newClass.ToString()}."));
        }
Example #15
0
        public async Task UserCantChangeClassLowJobLevelAsync(CharacterClassType characterClass)
        {
            _session !.Character.JobLevel = 20;
            await _nRunHandler !.ExecuteAsync(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session).ConfigureAwait(false);

            var packet = (MsgPacket?)_session.LastPackets.FirstOrDefault(s => s is MsgPacket);

            Assert.IsTrue((packet?.Message == GameLanguage.Instance.GetMessageFromKey(LanguageKey.TOO_LOW_LEVEL,
                                                                                      _session.Account.Language)) && (packet.Type == MessageType.White));
        }
Example #16
0
        public async Task UserCantChangeBadClassAsync(CharacterClassType characterClass)
        {
            _session !.Character.Class = characterClass;
            await _nrRunService.NRunLaunchAsync(_session, new Tuple <IAliveEntity, NrunPacket>(_session.Character, (new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner = NrunRunnerType.ChangeClass,
                VisualId = 0,
                Type = (byte)CharacterClassType.Swordsman
            })));

            var packet = (MsgPacket?)_session.LastPackets.FirstOrDefault(s => s is MsgPacket);

            Assert.IsTrue((packet?.Message == GameLanguage.Instance.GetMessageFromKey(LanguageKey.NOT_ADVENTURER,
                                                                                      _session.Account.Language)) && (packet.Type == MessageType.White));
        }
Example #17
0
        public void UserCanChangeClass(CharacterClassType characterClass)
        {
            _session.Character.Level    = 15;
            _session.Character.JobLevel = 20;
            _handler.RegisterSession(_session);
            _handler.NRun(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            });

            Assert.IsTrue(_session.Character.Class == characterClass && _session.Character.Level == 15 &&
                          _session.Character.JobLevel == 1);
        }
Example #18
0
        public void UserCantChangeToBadClass(CharacterClassType characterClass)
        {
            _session !.Character.Level  = 15;
            _session.Character.JobLevel = 20;
            _nRunHandler !.ExecuteAsync(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session);

            Assert.IsTrue((_session.Character.Class == CharacterClassType.Adventurer) &&
                          (_session.Character.Level == 15) &&
                          (_session.Character.JobLevel == 20));
        }
Example #19
0
        public ResourceKey GetIcon(CharacterClassType type, bool getLargeIcon = false)
        {
            ResourceKey result;

            if (getLargeIcon && this.iconLargeLookup.TryGetValue(type, out result))
            {
                return(result);
            }

            if (this.iconSmallLookup.TryGetValue(type, out result))
            {
                return(result);
            }

            return(ResourceKey.Invalid);
        }
Example #20
0
        public async Task UserCantChangeBadClassAsync(CharacterClassType characterClass)
        {
            _session !.Character.Class = characterClass;
            await _nRunHandler !.ExecuteAsync(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)CharacterClassType.Swordsman
            }, _session).ConfigureAwait(false);

            var packet = (MsgPacket?)_session.LastPackets.FirstOrDefault(s => s is MsgPacket);

            Assert.IsTrue((packet?.Message == GameLanguage.Instance.GetMessageFromKey(LanguageKey.NOT_ADVENTURER,
                                                                                      _session.Account.Language)) && (packet.Type == MessageType.White));
        }
Example #21
0
        public void UserCantChangeClassLowJobLevel(CharacterClassType characterClass)
        {
            _session.Character.JobLevel = 20;
            _nRunHandler.Execute(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session);

            var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket);

            Assert.IsTrue((packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.TOO_LOW_LEVEL,
                                                                                 _session.Account.Language)) && (packet.Type == MessageType.White));
        }
Example #22
0
        public void UserCantChangeBadClass(CharacterClassType characterClass)
        {
            _session.Character.Class = characterClass;
            _nRunHandler.Execute(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)CharacterClassType.Swordman
            }, _session);

            var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket);

            Assert.IsTrue((packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.NOT_ADVENTURER,
                                                                                 _session.Account.Language)) && (packet.Type == MessageType.White));
        }
Example #23
0
        public void UserCantChangeClassLowJobLevel(CharacterClassType characterClass)
        {
            _session.Character.JobLevel = 20;
            _handler.RegisterSession(_session);
            _handler.NRun(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            });

            var packet = (MsgPacket)_session.LastPacket;

            Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.TOO_LOW_LEVEL,
                                                                                _session.Account.Language) && packet.Type == MessageType.White);
        }
Example #24
0
        public void UserCantChangeBadClass(CharacterClassType characterClass)
        {
            _session.Character.Class = characterClass;
            _handler.RegisterSession(_session);
            _handler.NRun(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)CharacterClassType.Swordman
            });

            var packet = (MsgPacket)_session.LastPacket;

            Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.NOT_ADVENTURER,
                                                                                _session.Account.Language) && packet.Type == MessageType.White);
        }
Example #25
0
        public async Task Test_Wear_Put_Item_BadClassAsync(CharacterClassType classToTest)
        {
            _session !.Character.Class = classToTest;
            var items = new List <ItemDto>
            {
                new Item
                {
                    Type  = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.MainWeapon,
                    Class = (byte)(31 - Math.Pow(2, (byte)classToTest))
                }
            };

            _item = new ItemProvider(items,
                                     new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > >
            {
                new WearEventHandler(Logger)
            });

            _session.Character.InventoryService !.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1),
                                                                                               _session.Character.CharacterId));
            await _wearPacketHandler !.ExecuteAsync(new WearPacket {
                InventorySlot = 0, Type = PocketType.Equipment
            }, _session).ConfigureAwait(false);

            Assert.IsTrue(_session.Character.InventoryService.All(s => s.Value.Type == NoscorePocketType.Equipment));
            var packet = (SayPacket?)_session.LastPackets.FirstOrDefault(s => s is SayPacket);

            Assert.IsTrue((packet?.Message == GameLanguage.Instance.GetMessageFromKey(LanguageKey.BAD_EQUIPMENT,
                                                                                      _session.Account.Language)) && (packet.Type == SayColorType.Yellow));

            foreach (var validClass in Enum.GetValues(typeof(CharacterClassType)).OfType <CharacterClassType>()
                     .Where(s => s != classToTest).ToList())
            {
                _session.Character.Class = validClass;
                var item = _session.Character.InventoryService.First();
                await _wearPacketHandler.ExecuteAsync(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session).ConfigureAwait(false);

                Assert.IsTrue(item.Value.Type == NoscorePocketType.Wear);
                item.Value.Type = NoscorePocketType.Equipment;
                item.Value.Slot = 0;
            }
        }
        private static CharacterClassType DetermineCharacterClassType(CharacterObject character)
        {
            CharacterClassType characterByDefaultFormationGroup = GetCharacterClassTypeByDefaultFormationGroup(character);

            if (characterByDefaultFormationGroup != CharacterClassType.UNKNOWN)
            {
                return(characterByDefaultFormationGroup);
            }

            if (character.IsInfantry)
            {
                return(CharacterClassType.INFANTRY);
            }

            if (character.IsArcher)
            {
                return(character.IsMounted ? CharacterClassType.HORSE_ARCHER : CharacterClassType.RANGED);
            }

            return(character.IsMounted ? CharacterClassType.CAVALRY : CharacterClassType.UNKNOWN);
        }
Example #27
0
        public async Task UserCanNotChangeClassWhenEquipmentAsync(CharacterClassType characterClass)
        {
            _session !.Character.Level  = 15;
            _session.Character.JobLevel = 20;
            _session.Character.InventoryService !.AddItemToPocket(InventoryItemInstance.Create(_item !.Create(1, 1), 0));
            var item = _session.Character.InventoryService.First();

            item.Value.Type = NoscorePocketType.Wear;
            await _nRunHandler !.ExecuteAsync(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            }, _session).ConfigureAwait(false);

            var packet = (MsgPacket?)_session.LastPackets.FirstOrDefault(s => s is MsgPacket);

            Assert.IsTrue((packet?.Message == GameLanguage.Instance.GetMessageFromKey(LanguageKey.EQ_NOT_EMPTY,
                                                                                      _session.Account.Language)) && (packet.Type == MessageType.White));
        }
Example #28
0
        public void UserCanNotChangeClassWhenEquipment(CharacterClassType characterClass)
        {
            _session.Character.Level    = 15;
            _session.Character.JobLevel = 20;
            _session.Character.Inventory.AddItemToPocket(_item.Create(1, 1));
            var item = _session.Character.Inventory.First();

            item.Value.Type = PocketType.Wear;
            _handler.RegisterSession(_session);
            _handler.NRun(new NrunPacket
            {
                VisualType = VisualType.Npc,
                Runner     = NrunRunnerType.ChangeClass,
                VisualId   = 0,
                Type       = (byte)characterClass
            });

            var packet = (MsgPacket)_session.LastPacket;

            Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.EQ_NOT_EMPTY,
                                                                                _session.Account.Language) && packet.Type == MessageType.White);
        }
Example #29
0
        public void Test_Wear_Put_Item_BadClass(CharacterClassType classToTest)
        {
            _session.Character.Class = classToTest;
            var items = new List <Item>
            {
                new Item {
                    Type  = PocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.MainWeapon,
                    Class = (byte)(31 - Math.Pow(2, (byte)classToTest))
                },
            };

            _itemBuilder = new ItemBuilderService(items, new List <IHandler <Item, Tuple <IItemInstance, UseItemPacket> > > {
                new WearHandler()
            });

            _session.Character.Inventory.AddItemToPocket(_itemBuilder.Create(1, 1));
            _handler.Wear(new WearPacket {
                InventorySlot = 0, Type = PocketType.Equipment
            });
            Assert.IsTrue(_session.Character.Inventory.All(s => s.Value.Type == PocketType.Equipment));
            var packet = (SayPacket)_session.LastPacket;

            Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.BAD_EQUIPMENT,
                                                                                _session.Account.Language) && packet.Type == SayColorType.Yellow);

            foreach (var validClass in Enum.GetValues(typeof(CharacterClassType)).OfType <CharacterClassType>().Where(s => s != classToTest).ToList())
            {
                _session.Character.Class = validClass;
                var item = _session.Character.Inventory.First();
                _handler.Wear(new WearPacket {
                    InventorySlot = 0, Type = PocketType.Equipment
                });
                Assert.IsTrue(item.Value.Type == PocketType.Wear);
                item.Value.Type = PocketType.Equipment;
                item.Value.Slot = 0;
            }
        }
Example #30
0
        public static async Task ChangeClass(this IPlayerEntity player, CharacterClassType type)
        {
            player.JobLevel   = 1;
            player.JobLevelXp = 0;
            await player.SendPacketAsync(new NpInfoPacket { UnKnow = 0 });

            await player.SendPacketAsync(new PClearPacket());

            if (type == CharacterClassType.Adventurer)
            {
                player.Character.HairStyle = player.Character.HairStyle > HairStyleType.HairStyleB ? HairStyleType.HairStyleA : player.Character.HairStyle;
            }

            player.Character.Class = type;
            player.HpMax           = Algorithm.GetHpMax(type, player.Level);
            player.MpMax           = Algorithm.GetMpMax(type, player.Level);
            player.Hp = player.HpMax;
            player.Mp = player.MpMax;
            await player.SendPacketAsync(player.GenerateTitPacket());

            await player.ActualizeUiHpBar();

            await player.SendPacketAsync(player.GenerateEqPacket());

            await player.SendPacketAsync(player.GenerateEffectPacket(8));

            await player.SendPacketAsync(player.GenerateEffectPacket(196));

            await player.SendPacketAsync(player.GenerateScrPacket());

            await player.SendChatMessageFormat(PlayerMessages.CHARACTER_YOUR_CLASS_CHANGED_TO_X, SayColorType.Blue, type);

            player.Character.Faction = player.Family?.FamilyFaction ?? (FactionType)(1 + _randomGenerator.Next(0, 2));
            await player.SendChatMessageFormat(PlayerMessages.CHARACTER_YOUR_FACTION_CHANGED_TO_X, SayColorType.Blue, player.Character.Faction);

            await player.ActualizeUiFaction();

            await player.ActualizeUiStatChar();

            await player.SendPacketAsync(player.GenerateEffectPacket(4799 + (byte)player.Character.Faction));

            await player.ActualizePlayerCondition();

            await player.ActualizeUiExpBar();

            await player.BroadcastAsync(player.GenerateCModePacket());

            await player.BroadcastAsync(player.GenerateInPacket());

            await player.BroadcastAsync(player.GenerateGidxPacket());

            await player.BroadcastAsync(player.GenerateEffectPacket(6));

            await player.BroadcastAsync(player.GenerateEffectPacket(196));

            SkillComponent component = player.SkillComponent;

            foreach (SkillDto skill in component.Skills.Values)
            {
                if (skill.Id >= 200)
                {
                    component.Skills.Remove(skill.Id);
                }
            }

            // TODO : LATER ADD SKILL
            await player.ActualizeUiSkillList();

            // Later too

            /* foreach (QuicklistEntryDTO quicklists in DAOFactory.QuicklistEntryDAO.LoadByCharacterId(CharacterId).Where(quicklists => QuicklistEntries.Any(qle => qle.Id == quicklists.Id)))
             * {
             *   DAOFactory.QuicklistEntryDAO.Delete(quicklists.Id);
             * }
             *
             * QuicklistEntries = new List<QuicklistEntryDTO>
             * {
             *   new QuicklistEntryDTO
             *   {
             *       CharacterId = CharacterId,
             *       Q1 = 0,
             *       Q2 = 9,
             *       Type = 1,
             *       Slot = 3,
             *       Pos = 1
             *   }
             * };
             * if (ServerManager.Instance.Groups.Any(s => s.IsMemberOfGroup(Session) && s.GroupType == GroupType.Group))
             * {
             *   Session.CurrentMapInstance?.Broadcast(Session, $"pidx 1 1.{CharacterId}", ReceiverType.AllExceptMe);
             * }*/
        }
Example #31
0
 public int GetStat(CharacterClassType type, byte level) => _minDist[(int)type, level - 1 > 0 ? level - 1 : 0];