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); }
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); }
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); }
/// <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); }
/// <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); } }
/// <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); } }
/// <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); }
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); } }