Esempio n. 1
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            int       characterId = packet.data.ReadInt32();
            Character character   = database.SelectCharacterById(characterId);

            if (character == null)
            {
                _Logger.Error(client, $"No character for CharacterId: {characterId}");
                client.Close();
                return;
            }

            server.instances.AssignInstance(character);

            client.character = character;
            client.character.criminalState = client.soul.criminalLevel;
            client.UpdateIdentity();
            client.character.CreateTask(server, client);

            _Logger.Debug(client, $"Selected Character: {character.name}");

            IBuffer res3 = BufferProvider.Provide();

            res3.WriteInt32(0); //ERR-CHARSELECT error check
            res3.WriteUInt32(client.character.instanceId);

            //sub_4E4210_2341
            res3.WriteInt32(client.character.mapId);
            res3.WriteInt32(client.character.mapId);
            res3.WriteInt32(client.character.mapId);
            res3.WriteByte(0);
            res3.WriteByte(0);                                       //Bool
            res3.WriteFixedString(settings.dataAreaIpAddress, 0x41); //IP
            res3.WriteUInt16(settings.areaPort);                     //Port

            res3.WriteFloat(client.character.x);
            res3.WriteFloat(client.character.y);
            res3.WriteFloat(client.character.z);
            res3.WriteByte(client.character.heading);
            router.Send(client, (ushort)MsgPacketId.recv_chara_select_r, res3, ServerType.Msg);

            /*
             * ERR_CHARSELECT	GENERIC	Failed to select a character (CODE:<errcode>)
             * ERR_CHARSELECT	-8	Maintenance
             * ERR_CHARSELECT	-13	You have selected an illegal character
             */


            //Logic to support your dead body //Make this static.  need a predictable deadbody instance ID to support disconnect/reconnet
            DeadBody deadBody = new DeadBody();

            deadBody.id = character.id;
            server.instances.AssignInstance(deadBody);
            character.deadBodyInstanceId = deadBody.instanceId;
            deadBody.characterInstanceId = character.instanceId;
            _Logger.Debug($"Dead Body Instance ID {deadBody.instanceId}   |  Character Instance ID {character.instanceId}");
        }
Esempio n. 2
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            client.Character.mapChange = false;
            int mapId = packet.Data.ReadInt32();
            Map map   = Server.Maps.Get(mapId);

            if (map == null)
            {
                Logger.Error(client, $"MapId: {mapId} not found in map lookup");
                client.Close();
                return;
            }
            map.Enter(client);
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            Router.Send(client, (ushort)AreaPacketId.recv_map_entry_r, res, ServerType.Area);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            string soulPassword = packet.Data.ReadCString();
            Soul   soul         = client.Soul;

            soul.Password = soulPassword;
            if (!Database.UpdateSoul(soul))
            {
                Logger.Error(client, $"Failed to save password for SoulId: {soul.Id}");
                client.Close();
                return;
            }

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteByte(0); // bool in JP client TODO what is it in US???
            Router.Send(client, (ushort)MsgPacketId.recv_soul_set_passwd_r, res, ServerType.Msg);
        }
Esempio n. 4
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            string soulPassword = packet.Data.ReadCString();

            IBuffer res = BufferProvider.Provide();

            if (Settings.RequirePin && client.Soul.Password != soulPassword)
            {
                res.WriteInt32(1); //  Error: 0 - Success, other vales (maybe) error code
                res.WriteByte(0);  // 0 = OK | 1 = need to change soul name (bool type) true = other values, false - 0
                Router.Send(client, (ushort)MsgPacketId.recv_soul_authenticate_passwd_r, res, ServerType.Msg);
                client.Close();
                return;
            }

            res.WriteInt32(0); //  Error: 0 - Success, other vales (maybe) error code
            res.WriteByte(0);  // 0 = OK | 1 = need to change soul name (bool type) true = other values, false - 0
            Router.Send(client, (ushort)MsgPacketId.recv_soul_authenticate_passwd_r, res, ServerType.Msg);
        }
Esempio n. 5
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            if (!server.maps.TryGet(client.character.mapId, out Map map))
            {
                _Logger.Error(client, $"No map found for MapId: {client.character.mapId}");
                client.Close();
                return;
            }

            int channelId = packet.data.ReadInt32();

            client.character.channel = channelId;

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0); //Error Check

            //sub_4E4210_2341  // impacts map spawn ID (old Comment)
            res.WriteInt32(map.id);                                 //MapSerialID
            res.WriteInt32(channelId);                              //channel??????
            res.WriteFixedString(settings.dataAreaIpAddress, 0x41); //IP?
            res.WriteUInt16(settings.areaPort);                     //Port

            //sub_484420   //  does not impact map spawn coord (old Comment)
            res.WriteFloat(client.character.x);      //X Pos
            res.WriteFloat(client.character.y);      //Y Pos
            res.WriteFloat(client.character.z);      //Z Pos
            res.WriteByte(client.character.heading); //View offset
            //

            router.Send(client, (ushort)MsgPacketId.recv_channel_select_r, res, ServerType.Msg);

            map.EnterForce(client);
            SendEventEnd(client);

            IBuffer res2 = BufferProvider.Provide();

            res2.WriteUInt32(client.character.instanceId);
            res2.WriteCString("IsThisMyChannel?????"); //Length to be Found
            router.Send(server.clients.GetAll(), (ushort)AreaPacketId.recv_channel_notify, res2, ServerType.Area);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            string      soulName = packet.data.ReadCString();
            List <Soul> souls    = database.SelectSoulsByAccountId(client.account.id);

            foreach (Soul soul in souls)
            {
                if (soul.name == soulName)
                {
                    client.soul = soul;
                    break;
                }
            }

            IBuffer res = BufferProvider.Provide();

            if (client.soul == null)
            {
                _Logger.Error(client, $"Soul with name: '{soulName}' not found");
                res.WriteInt32(1); // 0 = OK | 1 = Failed to return to soul selection
                router.Send(client, (ushort)MsgPacketId.recv_soul_select_r, res, ServerType.Msg);
                client.Close();
                return;
            }

            res.WriteInt32(0); // 0 = OK | 1 = Failed to return to soul selection
            if (client.soul.password == null)
            {
                _Logger.Info(client, "Password not set, initiating set password");
                res.WriteByte(0); // bool - 0 = Set New Password | 1 = Enter Password
            }
            else
            {
                res.WriteByte(1); // bool - 0 = Set New Password | 1 = Enter Password
            }


            router.Send(client, (ushort)MsgPacketId.recv_soul_select_r, res, ServerType.Msg);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            byte   unknown  = packet.Data.ReadByte();
            string soulName = packet.Data.ReadCString();

            Soul soul = new Soul();

            soul.Name      = soulName;
            soul.AccountId = client.Account.Id;
            if (!Database.InsertSoul(soul))
            {
                Logger.Error(client, $"Failed to create SoulName: {soulName}");
                client.Close();
                return;
            }

            client.Soul = soul;
            Logger.Info($"Created SoulName: {soulName}");

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            Router.Send(client, (ushort)MsgPacketId.recv_soul_create_r, res, ServerType.Msg);
        }
Esempio n. 8
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            int characterId = packet.Data.ReadInt32();
            //Character character = Database.SelectCharacterById(characterId);
            Character character = Server.Characters.GetByCharacterId(characterId);

            if (character == null)
            {
                Logger.Error(client, $"No character for CharacterId: {characterId}");
                client.Close();
                return;
            }

            //Server.Instances.AssignInstance(character); //moved to database load.

            client.Character = character;
            client.UpdateIdentity();
            client.Character.CreateTask(Server, client);

            Logger.Debug(client, $"Selected Character: {character.Name}");

            IBuffer res3 = BufferProvider.Provide();

            res3.WriteInt32(0); //ERR-CHARSELECT error check
            res3.WriteUInt32(client.Character.InstanceId);

            //sub_4E4210_2341  //
            res3.WriteInt32(client.Character.MapId);                 //MapSerialID //passeed to Send_Map_Entry
            res3.WriteInt32(client.Character.MapId);                 //MapID
            res3.WriteFixedString(Settings.DataAreaIpAddress, 0x41); //IP
            res3.WriteUInt16(Settings.AreaPort);                     //Port

            res3.WriteFloat(client.Character.X);
            res3.WriteFloat(client.Character.Y);
            res3.WriteFloat(client.Character.Z);
            res3.WriteByte(client.Character.Heading);
            Router.Send(client, (ushort)MsgPacketId.recv_chara_select_r, res3, ServerType.Msg);

            /*
             * ERR_CHARSELECT	GENERIC	Failed to select a character (CODE:<errcode>)
             * ERR_CHARSELECT	-8	Maintenance
             * ERR_CHARSELECT	-13	You have selected an illegal character
             */


            //Logic to support your dead body //Do Dead Body IDs need to be persistant, or can they change at each login?  TODO...
            DeadBody deadBody = new DeadBody();

            Server.Instances.AssignInstance(deadBody);
            character.DeadBodyInstanceId = deadBody.InstanceId;
            deadBody.CharacterInstanceId = character.InstanceId;
            character.movementId         = character.InstanceId;
            Logger.Debug(
                $"Dead Body Instance ID {deadBody.InstanceId}   |  Character Instance ID {character.InstanceId}");
            deadBody.CharaName = character.Name;
            deadBody.MapId     = character.MapId;
            deadBody.X         = character.X;
            deadBody.Y         = character.Y;
            deadBody.Z         = character.Z;
            deadBody.Heading   = character.Heading;
            deadBody.RaceId    = character.Raceid;
            deadBody.SexId     = character.Sexid;
            deadBody.HairStyle = character.HairId;
            deadBody.HairColor = character.HairColorId;
            deadBody.FaceId    = character.FaceId;
        }
Esempio n. 9
0
        private void CreateShortcutBars(NecClient client, Character character, uint class_id)
        {
            ShortcutBar shortcutBar0 = new ShortcutBar();

            if (class_id == 0) // Fighter
            {
                shortcutBar0.Slot0   = 11101;
                shortcutBar0.Action0 = 3;
                shortcutBar0.Slot1   = 11201;
                shortcutBar0.Action1 = 3;
            }
            else if (class_id == 1) // Thief
            {
                shortcutBar0.Slot0   = 14101;
                shortcutBar0.Action0 = 3;
                shortcutBar0.Slot1   = 14302;
                shortcutBar0.Action1 = 3;
                shortcutBar0.Slot2   = 14803;
                shortcutBar0.Action2 = 3;
            }
            else if (class_id == 2) // Mage
            {
                shortcutBar0.Slot0   = 13101;
                shortcutBar0.Action0 = 3;
                shortcutBar0.Slot1   = 13404;
                shortcutBar0.Action1 = 3;
            }
            else if (class_id == 3) // Priest
            {
                shortcutBar0.Slot0   = 12501;
                shortcutBar0.Action0 = 3;
                shortcutBar0.Slot1   = 12601;
                shortcutBar0.Action1 = 3;
            }

            shortcutBar0.Slot4   = 11;
            shortcutBar0.Action4 = 4;
            shortcutBar0.Slot6   = 18;
            shortcutBar0.Action6 = 4;
            shortcutBar0.Slot7   = 22;
            shortcutBar0.Action7 = 4;
            shortcutBar0.Slot9   = 2;
            shortcutBar0.Action9 = 4;
            if (!Database.InsertShortcutBar(shortcutBar0))
            {
                Logger.Error(client, $"Failed to create ShortcutBar0");
                client.Close();
                character.shortcutBar0Id = -1;
                return;
            }

            character.shortcutBar0Id = shortcutBar0.Id;

            ShortcutBar shortcutBar1 = new ShortcutBar();

            shortcutBar1.Slot0   = 1;
            shortcutBar1.Action0 = 5;
            shortcutBar1.Slot1   = 2;
            shortcutBar1.Action1 = 5;
            shortcutBar1.Slot2   = 4;
            shortcutBar1.Action2 = 5;
            shortcutBar1.Slot3   = 5;
            shortcutBar1.Action3 = 5;
            shortcutBar1.Slot4   = 6;
            shortcutBar1.Action4 = 5;
            shortcutBar1.Slot5   = 7;
            shortcutBar1.Action5 = 5;
            shortcutBar1.Slot6   = 11;
            shortcutBar1.Action6 = 5;
            shortcutBar1.Slot7   = 14;
            shortcutBar1.Action7 = 5;
            shortcutBar1.Slot8   = 15;
            shortcutBar1.Action8 = 5;
            shortcutBar1.Slot9   = 16;
            shortcutBar1.Action9 = 5;
            if (!Database.InsertShortcutBar(shortcutBar1))
            {
                Logger.Error(client, $"Failed to create ShortcutBar1");
                client.Close();
                character.shortcutBar1Id = -1;
                return;
            }

            character.shortcutBar1Id = shortcutBar1.Id;

            ShortcutBar shortcutBar2 = new ShortcutBar();

            if (!Database.InsertShortcutBar(shortcutBar2))
            {
                Logger.Error(client, $"Failed to create ShortcutBar2");
                client.Close();
                character.shortcutBar2Id = -1;
                return;
            }

            character.shortcutBar2Id = shortcutBar2.Id;

            ShortcutBar shortcutBar3 = new ShortcutBar();

            if (!Database.InsertShortcutBar(shortcutBar3))
            {
                Logger.Error(client, $"Failed to create ShortcutBar3");
                client.Close();
                character.shortcutBar3Id = -1;
                return;
            }

            character.shortcutBar3Id = shortcutBar3.Id;

            ShortcutBar shortcutBar4 = new ShortcutBar();

            if (!Database.InsertShortcutBar(shortcutBar4))
            {
                Logger.Error(client, $"Failed to create ShortcutBar4");
                client.Close();
                character.shortcutBar4Id = -1;
                return;
            }

            character.shortcutBar4Id = shortcutBar4.Id;
        }
Esempio n. 10
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            byte   character_slot_id = packet.Data.ReadByte();
            string character_name    = packet.Data.ReadCString();
            uint   race_id           = packet.Data.ReadUInt32();
            uint   sex_id            = packet.Data.ReadUInt32();

            byte hair_id       = packet.Data.ReadByte();
            byte hair_color_id = packet.Data.ReadByte();
            byte face_id       = packet.Data.ReadByte();

            uint alignment_id = packet.Data.ReadUInt32();

            ushort strength     = packet.Data.ReadUInt16();
            ushort vitality     = packet.Data.ReadUInt16();
            ushort dexterity    = packet.Data.ReadUInt16();
            ushort agility      = packet.Data.ReadUInt16();
            ushort intelligence = packet.Data.ReadUInt16();
            ushort piety        = packet.Data.ReadUInt16();
            ushort luck         = packet.Data.ReadUInt16();

            uint class_id  = packet.Data.ReadUInt32();
            uint unknown_a = packet.Data.ReadUInt32();


            //-------------------------------------
            // Send Character Creation packets to Database for laster use.

            if (!Maps.TryGet(Map.NewCharacterMapId, out Map map))
            {
                Logger.Error($"New character map not found MapId: {Map.NewCharacterMapId}");
                client.Close();
            }

            Character character = new Character();

            Server.Instances.AssignInstance(character);
            character.MapId   = map.Id;
            character.X       = map.X;
            character.Y       = map.Y;
            character.Z       = map.Z;
            character.Heading = (byte)map.Orientation;

            character.AccountId = client.Account.Id;
            character.SoulId    = client.Soul.Id;
            character.Slot      = character_slot_id;
            character.Name      = character_name;

            character.Raceid       = race_id;
            character.Sexid        = sex_id;
            character.HairId       = hair_id;
            character.HairColorId  = hair_color_id;
            character.FaceId       = face_id;
            character.Alignmentid  = alignment_id;
            character.Strength     = strength;
            character.vitality     = vitality;
            character.dexterity    = dexterity;
            character.agility      = agility;
            character.intelligence = intelligence;
            character.piety        = piety;
            character.luck         = luck;
            character.ClassId      = class_id;
            CreateShortcutBars(client, character, class_id);

            //----------------------------------------------------------
            // Character Slot ID

            if (!Database.InsertCharacter(character))
            {
                Logger.Error(client, $"Failed to create CharacterSlot: {character_slot_id}");
                client.Close();
                return;
            }

            CreateSkillTreeItems(client, character, class_id);

            client.Character = character;
            Logger.Info($"Created CharacterSlot: {character_slot_id}");
            Logger.Info($"Created CharacterName: {character_name}");
            Logger.Info($"Created race: {race_id}");
            Logger.Info($"Created sex: {sex_id}");
            Logger.Info($"Created hair: {hair_id}");
            Logger.Info($"Created hair color: {hair_color_id}");
            Logger.Info($"Created faceid: {face_id}");
            Logger.Info($"Created alignment_id: {alignment_id}");
            Logger.Info($"Created strength: {strength}");
            Logger.Info($"Created vitality: {vitality}");
            Logger.Info($"Created dexterity: {dexterity}");
            Logger.Info($"Created agility: {agility}");
            Logger.Info($"Created intelligence: {intelligence}");
            Logger.Info($"Created piety: {piety}");
            Logger.Info($"Created luck: {luck}");
            Logger.Info($"Created class_id: {class_id}");

            //-------------------------------------------------------------------------------
            Server.Characters.Add(character);
            //-------------------------------------------------------------------------------


            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteInt32(character.Id); //CharacterId

            Router.Send(client, (ushort)MsgPacketId.recv_chara_create_r, res, ServerType.Msg);
        }
Esempio n. 11
0
 private void CreateSkillTreeItems(NecClient client, Character character, uint class_id)
 {
     if (class_id == 0) // Fighter
     {
         for (int i = 0; i < fighterSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.Level   = 1;
             skillTreeItem.SkillId = fighterSkills[i];
             skillTreeItem.CharId  = character.Id;
             if (!Database.InsertSkillTreeItem(skillTreeItem))
             {
                 Logger.Error(client, $"Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
     else if (class_id == 1) // Thief
     {
         for (int i = 0; i < thiefSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.Level   = 1;
             skillTreeItem.SkillId = thiefSkills[i];
             skillTreeItem.CharId  = character.Id;
             if (!Database.InsertSkillTreeItem(skillTreeItem))
             {
                 Logger.Error(client, $"Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
     else if (class_id == 2) // Mage
     {
         for (int i = 0; i < mageSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.Level   = 1;
             skillTreeItem.SkillId = mageSkills[i];
             skillTreeItem.CharId  = character.Id;
             if (!Database.InsertSkillTreeItem(skillTreeItem))
             {
                 Logger.Error(client, $"Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
     else if (class_id == 3) // Priest
     {
         for (int i = 0; i < priestSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.Level   = 1;
             skillTreeItem.SkillId = priestSkills[i];
             skillTreeItem.CharId  = character.Id;
             if (!Database.InsertSkillTreeItem(skillTreeItem))
             {
                 Logger.Error(client, $"Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
 }
Esempio n. 12
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            byte   characterSlotId = packet.data.ReadByte();
            string characterName   = packet.data.ReadCString();
            uint   raceId          = packet.data.ReadUInt32();
            uint   sexId           = packet.data.ReadUInt32();

            byte hairId        = packet.data.ReadByte();
            byte hairColorId   = packet.data.ReadByte();
            byte faceId        = packet.data.ReadByte();
            byte faceArrangeId = packet.data.ReadByte();
            byte voiceId       = packet.data.ReadByte();

            uint alignmentId = packet.data.ReadUInt32();

            ushort strength     = packet.data.ReadUInt16(); //bonus stat, not base
            ushort vitality     = packet.data.ReadUInt16(); //bonus stat, not base
            ushort dexterity    = packet.data.ReadUInt16(); //bonus stat, not base
            ushort agility      = packet.data.ReadUInt16(); //bonus stat, not base
            ushort intelligence = packet.data.ReadUInt16(); //bonus stat, not base
            ushort piety        = packet.data.ReadUInt16(); //bonus stat, not base
            ushort luck         = packet.data.ReadUInt16(); //bonus stat, not base

            uint classId    = packet.data.ReadUInt32();
            int  errorCheck = packet.data.ReadInt32();
            byte unknown    = packet.data.ReadByte();


            //-------------------------------------
            // Send Character Creation packets to Database for laster use.

            if (!maps.TryGet(Map.NEW_CHARACTER_MAP_ID, out Map map))
            {
                _Logger.Error($"New character map not found MapId: {Map.NEW_CHARACTER_MAP_ID}");
                client.Close();
            }

            Character character = new Character();
            Attribute attribute = new Attribute();

            attribute.DefaultClassAtributes(raceId);

            character.mapId   = map.id;
            character.x       = map.x;
            character.y       = map.y;
            character.z       = map.z;
            character.heading = map.orientation;

            character.accountId = client.account.id;
            character.soulId    = client.soul.id;
            character.slot      = characterSlotId;
            character.name      = characterName;

            character.raceId        = raceId;
            character.sexId         = sexId;
            character.hairId        = hairId;
            character.hairColorId   = hairColorId;
            character.faceId        = faceId;
            character.faceArrangeId = faceArrangeId;
            character.voiceId       = voiceId;
            character.hp.SetMax(attribute.hp);
            character.hp.SetCurrent(attribute.hp);
            character.mp.SetMax(attribute.mp);
            character.mp.SetCurrent(attribute.mp);
            character.strength     = (ushort)(strength + attribute.str);
            character.vitality     = (ushort)(vitality + attribute.vit);
            character.dexterity    = (ushort)(dexterity + attribute.dex);
            character.agility      = (ushort)(agility + attribute.agi);
            character.intelligence = (ushort)(intelligence + attribute.@int);
            character.piety        = (ushort)(piety + attribute.pie);
            character.luck         = (ushort)(luck + attribute.luck);
            character.classId      = classId;
            character.level        = 1;

            //----------------------------------------------------------
            // Character Slot ID

            if (!database.InsertCharacter(character))
            {
                _Logger.Error(client, $"Failed to create CharacterSlot: {characterSlotId}");
                client.Close();
                return;
            }

            //after the DB instert, so Character has a valid ID.
            server.instances.AssignInstance(character);
            client.character = character;


            CreateSkillTreeItems(client, character, classId);
            CreateShortcutBars(client, character, classId);
            CreateEquipmentItems(client, character, classId);

            _Logger.Info($"Created CharacterSlot: {characterSlotId}");
            _Logger.Info($"Created CharacterName: {characterName}");
            _Logger.Info($"Created race: {raceId}");
            _Logger.Info($"Created sex: {sexId}");
            _Logger.Info($"Created hair: {hairId}");
            _Logger.Info($"Created hair color: {hairColorId}");
            _Logger.Info($"Created faceid: {faceId}");
            _Logger.Info($"Created alignment_id: {alignmentId}");
            _Logger.Info($"Created strength: {strength}");
            _Logger.Info($"Created vitality: {vitality}");
            _Logger.Info($"Created dexterity: {dexterity}");
            _Logger.Info($"Created agility: {agility}");
            _Logger.Info($"Created intelligence: {intelligence}");
            _Logger.Info($"Created piety: {piety}");
            _Logger.Info($"Created luck: {luck}");
            _Logger.Info($"Created class_id: {classId}");

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(errorCheck);
            res.WriteInt32(character.id); //CharacterId

            router.Send(client, (ushort)MsgPacketId.recv_chara_create_r, res, ServerType.Msg);
        }
Esempio n. 13
0
 private void CreateSkillTreeItems(NecClient client, Character character, uint classId)
 {
     if (classId == 0) // Fighter
     {
         for (int i = 0; i < _fighterSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.level   = 1;
             skillTreeItem.skillId = _fighterSkills[i];
             skillTreeItem.charId  = character.id;
             if (!database.InsertSkillTreeItem(skillTreeItem))
             {
                 _Logger.Error(client, "Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
     else if (classId == 1) // Thief
     {
         for (int i = 0; i < _thiefSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.level   = 1;
             skillTreeItem.skillId = _thiefSkills[i];
             skillTreeItem.charId  = character.id;
             if (!database.InsertSkillTreeItem(skillTreeItem))
             {
                 _Logger.Error(client, "Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
     else if (classId == 2) // Mage
     {
         for (int i = 0; i < _mageSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.level   = 1;
             skillTreeItem.skillId = _mageSkills[i];
             skillTreeItem.charId  = character.id;
             if (!database.InsertSkillTreeItem(skillTreeItem))
             {
                 _Logger.Error(client, "Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
     else if (classId == 3) // Priest
     {
         for (int i = 0; i < _priestSkills.Length; i++)
         {
             SkillTreeItem skillTreeItem = new SkillTreeItem();
             skillTreeItem.level   = 1;
             skillTreeItem.skillId = _priestSkills[i];
             skillTreeItem.charId  = character.id;
             if (!database.InsertSkillTreeItem(skillTreeItem))
             {
                 _Logger.Error(client, "Failed to create SkillTreeItem");
                 client.Close();
                 return;
             }
         }
     }
 }