Exemplo n.º 1
0
        internal void UnequipItem(int wearType)
        {
            uint handle = this.Equip[wearType];

            if (handle == 0)
            {
                ConsoleUtils.Write(ConsoleMsgType.Error, "Trying to unequip inexistant item.");
                return;
            }
            this.Equip[wearType] = 0;

            ClientPacketHandler.send_WearChange(this, handle, -1, this.Inventory[handle].Enhance);

            if (Stats.PCCalculate(this))
            {
                ClientPacketHandler.send_UpdateStats(this, false);
                ClientPacketHandler.send_UpdateStats(this, true);
            }

            ClientPacketHandler.send_Property(this, "max_havoc", Globals.MaxHavoc);
            ClientPacketHandler.send_Property(this, "max_chaos", Globals.MaxChaos);
            ClientPacketHandler.send_Property(this, "max_stamina", Globals.MaxStamina);

            ClientPacketHandler.send_PacketResponse(this, 0x00C9);

            ClientPacketHandler.send_CharacterView(this);
        }
Exemplo n.º 2
0
        internal void EquipItem(int wearType, uint itemHandle)
        {
            if (!this.Inventory.ContainsKey(itemHandle))
            {
                ConsoleUtils.Write(ConsoleMsgType.Error, "Trying to access invalid handle in player inventory.\n");
                return;
            }
            Item i = this.Inventory[itemHandle];

            this.Equip[(int)i.WearInfo] = itemHandle;

            ClientPacketHandler.send_WearChange(this, itemHandle, (short)i.WearInfo, this.Inventory[itemHandle].Enhance);

            if (Stats.PCCalculate(this))
            {
                ClientPacketHandler.send_UpdateStats(this, false);
                ClientPacketHandler.send_UpdateStats(this, true);
            }

            ClientPacketHandler.send_Property(this, "max_havoc", Globals.MaxHavoc);
            ClientPacketHandler.send_Property(this, "max_chaos", Globals.MaxChaos);
            ClientPacketHandler.send_Property(this, "max_stamina", Globals.MaxStamina);

            ClientPacketHandler.send_PacketResponse(this, 0x00C8);

            ClientPacketHandler.send_CharacterView(this);
        }
Exemplo n.º 3
0
        internal static void OnUserJoin(Player player, string userId, byte[] key)
        {
            if (!UserJoinPool.ContainsKey(userId) || !UserJoinPool[userId].Key.SequenceEqual(key))
            {
                // TODO : Invalid User - disconect
                Console.Write("User Authentication Failed\n");
                return;
            }
            player.UserId     = userId;
            player.AccountId  = UserJoinPool[userId].AccountId;
            player.Permission = UserJoinPool[userId].Permission;

            UserJoinPool.Remove(userId);

            ClientPacketHandler.send_PacketResponse(player, 0x07D5);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Tries to Level UP character Job
        /// </summary>
        internal void JobLevelUp()
        {
            int reqJp = 0;

            switch (JobId2Depth(this.Job))
            {
            case Db.JobDepth.Basic:
                reqJp = Jp0Table[this.JobLevel];
                break;

            case Db.JobDepth.First:
                reqJp = Jp1Table[this.JobLevel];
                break;

            case Db.JobDepth.Second:
                reqJp = Jp2Table[this.JobLevel];
                break;

            case Db.JobDepth.Master:
                reqJp = Jp3Table[this.JobLevel];
                break;
            }

            if (reqJp <= 0)             // Max level reached
            {
                return;
            }
            else if (this.JP < reqJp)             // Not enough JP
            {
                return;
            }

            this.JP -= reqJp;
            this.JobLevel++;

            ClientPacketHandler.send_Property(this, "jp", this.JP);
            ClientPacketHandler.send_Property(this, "job_level", this.JobLevel);
            ClientPacketHandler.send_UpdateStats(this, false);
            ClientPacketHandler.send_UpdateStats(this, true);
            ClientPacketHandler.send_Property(this, "max_havoc", this.MaxHavoc);
            ClientPacketHandler.send_Property(this, "max_chaos", this.MaxChaos);
            ClientPacketHandler.send_Property(this, "max_stamina", this.MaxStamina);
            ClientPacketHandler.send_PacketResponse(this, 0x019A, 0, this.Handle);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Deletes a character form an account
        /// </summary>
        /// <param name="charName">the name of the character to delete</param>
        internal void DeleteCharacter(string charName)
        {
            Database db = new Database(Server.UserDbConString);

            int r = db.DeleteQuery(
                "DELETE FROM `char` WHERE `account_id` = @accId AND `name` = @charName",
                new string[] { "accId", "charName" },
                new object[] { this.AccountId, charName }
                );

            if (r > 0)
            {
                ClientPacketHandler.send_PacketResponse(this, 0x07D3, 0);
            }
            else
            {
                ClientPacketHandler.send_PacketResponse(this, 0x07D3, 1);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Checks if a character name is already in use
        /// </summary>
        /// <param name="name">the name to be checked</param>
        internal void CharNameExists(string name)
        {
            Database        db     = new Database(Server.UserDbConString);
            MySqlDataReader reader =
                db.ReaderQuery(
                    "SELECT `char_id` " +
                    "FROM `char` " +
                    "WHERE `name` = @name " +
                    "LIMIT 0,1",
                    new string[] { "@name" },
                    new object[] { name }
                    );

            if (reader.Read())
            {
                // Character exists
                ClientPacketHandler.send_PacketResponse(this, (short)0x07D6, 1);
            }
            else
            {
                // Character doesn't exists
                ClientPacketHandler.send_PacketResponse(this, (short)0x07D6);
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creates a new character
        /// </summary>
        /// <param name="name">char name</param>
        /// <param name="sex">sex</param>
        /// <param name="race">race</param>
        /// <param name="hairId">hair ID</param>
        /// <param name="faceId">Face ID</param>
        /// <param name="bodyId">Body ID</param>
        /// <param name="handsId">Hands ID</param>
        /// <param name="feetId">Feet ID</param>
        /// <param name="hairColor">Hair Color</param>
        /// <param name="faceDetail">Face Detail</param>
        /// <param name="clothesId">Clothers ID (601/602)</param>
        /// <param name="skinColor">Skin Color</param>
        internal void CreateCharacter(string name, int sex, int race, int hairId, int faceId, int bodyId, int handsId, int feetId, int hairColor, int faceDetail, int clothesId, int skinColor)
        {
            Database db = new Database(Server.UserDbConString);
            float    x = 0; float y = 0;
            short    job         = 0;
            int      startWeapon = 0;
            int      startBag    = 480001;
            int      startOutfit = 0;

            // Defines start job and position
            switch (race)
            {
            case (int)Races.Asura:
                x           = 168356; y = 55399;
                job         = 300;
                startWeapon = 103100;                         // Beginner's Dirk

                if (clothesId == 601)
                {
                    startOutfit = 230100;
                }
                else
                {
                    startOutfit = 230109;
                }
                break;

            case (int)Races.Deva:
                x           = 164335; y = 49510;
                job         = 100;
                startWeapon = 106100;                         // Beginner's Mace

                if (clothesId == 601)
                {
                    startOutfit = 240100;
                }
                else
                {
                    startOutfit = 240109;
                }
                break;

            case (int)Races.Gaia:
                x           = 164474; y = 52932;
                job         = 200;
                startWeapon = 112100;                         //Trainee's Small Axe

                if (clothesId == 601)
                {
                    startOutfit = 220100;
                }
                else
                {
                    startOutfit = 220109;
                }
                break;
            }

            int charId =
                (int)db.WriteQuery(
                    "INSERT INTO `char`(" +
                    "`account_id`,`slot`," +
                    "`name`,`sex`,`race`," +
                    "`hair_id`, `face_id`, `body_id`, `hands_id`," +
                    "`feet_id`, `face_detail_id`, `hair_color`," +
                    "`skin_color`, `x`, `y`, `layer`," +
                    "`save_x`, `save_y`," +
                    "`level`, `exp`," +
                    "`job`, `job_level`, `job_exp`,`jp`," +
                    "`job_0`, `job0_level`," +
                    "`job_1`, `job1_level`," +
                    "`job_2`, `job2_level`," +
                    "`create_date`, `delete_date`," +
                    "`client_info`" +
                    ") VALUES (" +
                    "@accId,0," +
                    "@name,@sex,@race," +
                    "@hairId,@faceId,@bodyId,@handId," +
                    "@feetId,@faceDetailId,@hairColor," +
                    "@skinColor,@x,@y,0," +
                    "0,0," +
                    "1,0," +
                    "@job,1,0,0," +
                    "0,0," +
                    "0,0," +
                    "0,0," +
                    "@createDate,0," +
                    "@clientInfo" +
                    ")",
                    new string[] {
                "accId", "name", "sex", "race",
                "hairId", "faceId", "bodyId",
                "handId", "feetId", "faceDetailId",
                "hairColor", "skinColor", "x", "y",
                "job", "createDate", "clientInfo"
            },
                    new object[] {
                this.AccountId, name, sex, race,
                hairId, faceId, bodyId,
                handsId, feetId, faceDetail,
                hairColor, skinColor, x, y,
                job, TimeUtils.GetTimeStamp(DateTime.Now),
                "QS2=0,2,0|QS2=1,2,2|QS2=11,2,1|QS2=24,2,7|QS2=25,2,8|QS2=35,2,28"
            }
                    );

            Item startItem = new Item();

            startItem.Code     = startBag;
            startItem.WearInfo = Item.WearType.BagSlot;
            startItem.Count    = 1;
            Item.CharacterGetItem(charId, startItem);

            startItem.Code     = startWeapon;
            startItem.WearInfo = Item.WearType.RightHand;
            Item.CharacterGetItem(charId, startItem);

            startItem.Code     = startOutfit;
            startItem.WearInfo = Item.WearType.Armor;
            Item.CharacterGetItem(charId, startItem);

            ClientPacketHandler.send_PacketResponse(this, (short)0x07D2);
        }
Exemplo n.º 8
0
        public static void LevelUp(GameObject obj, int skillId, byte targetLv)
        {
            if (!SkillDb.DB.ContainsKey(skillId))             // Skill doesn't exists
            {
                return;
            }

            if (obj.Type == GameObjectType.Player)
            {
                Player player = (Player)obj;

                short curLevel  = 0;
                bool  haveSkill = false;

                if (player.SkillList.ContainsKey(skillId))
                {
                    curLevel  = player.SkillList[skillId].Level;
                    haveSkill = true;
                }

                int jpCost = SkillDb.DB[skillId].RequiredJp[targetLv];

                if (jpCost > player.JP)
                {
                    return;
                }

                player.JP -= jpCost;
                if (haveSkill)
                {
                    Database db = new Database(Server.UserDbConString);
                    player.SkillList[skillId].Level = targetLv;

                    db.WriteQuery(
                        "UPDATE `skill` SET `level` = @level WHERE `char_id` = @cid AND `id` = @skid",
                        new string[] { "level", "cid", "skid" },
                        new object[] { player.SkillList[skillId].Level, player.CharId, skillId }
                        );
                }
                else
                {
                    Skill skill = new Skill()
                    {
                        Id = skillId, Level = targetLv, TotalCooldown = SkillDb.DB[skillId].CooldownTime
                    };
                    Database db = new Database(Server.UserDbConString);

                    player.SkillList.Add(skillId, skill);

                    db.WriteQuery(
                        "INSERT INTO `skill` (`char_id`, `id`, `level`) VALUES (@cid, @skid, @level)",
                        new string[] { "level", "cid", "skid" },
                        new object[] { player.SkillList[skillId].Level, player.CharId, skillId }
                        );
                }

                ClientPacketHandler.send_Property(player, "tp", player.TP);
                ClientPacketHandler.send_UpdateExp(player);
                //ClientPacketHandler.send_UpdateStats(this, false);
                //ClientPacketHandler.send_UpdateStats(this, true);
                //ClientPacketHandler.send_Property(this, "max_havoc", this.MaxHavoc);
                //ClientPacketHandler.send_Property(this, "max_chaos", this.MaxChaos);
                //ClientPacketHandler.send_Property(this, "max_stamina", this.MaxStamina);
                ClientPacketHandler.send_SkillList(player, new Skill[] { player.SkillList[skillId] });
                ClientPacketHandler.send_PacketResponse(player, 0x0192, 0, (uint)skillId);
            }
        }