public bool WeaponLoaded(CharacterSkill ski) { if (ski != null) { switch (Class) { default: return false; case ClassType.Adventurer: if (ski.Skill.Type == 1) { if (Inventory != null) { WearableInstance wearable = Inventory.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.SecondaryWeapon, InventoryType.Wear); if (wearable != null) { if (wearable.Ammo > 0) { wearable.Ammo--; return true; } else { if (Inventory.CountItem(2081) < 1) { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("NO_AMMO_ADVENTURER"), 10)); return false; } Inventory.RemoveItemAmount(2081); wearable.Ammo = 100; Session.SendPacket(GenerateSay(Language.Instance.GetMessageFromKey("AMMO_LOADED_ADVENTURER"), 10)); return true; } } else { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("NO_WEAPON"), 10)); return false; } } else return true; } else return true; case ClassType.Swordman: if (ski.Skill.Type == 1) { if (Inventory != null) { WearableInstance inv = Inventory.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.SecondaryWeapon, InventoryType.Wear); if (inv != null) { if (inv.Ammo > 0) { inv.Ammo--; return true; } else { if (Inventory.CountItem(2082) < 1) { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("NO_AMMO_SWORDSMAN"), 10)); return false; } Inventory.RemoveItemAmount(2082); inv.Ammo = 100; Session.SendPacket(GenerateSay(Language.Instance.GetMessageFromKey("AMMO_LOADED_SWORDSMAN"), 10)); return true; } } else { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("NO_WEAPON"), 10)); return false; } } else return true; } else return true; case ClassType.Archer: if (ski.Skill.Type == 1) { if (Inventory != null) { WearableInstance inv = Inventory.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.MainWeapon, InventoryType.Wear); if (inv != null) { if (inv.Ammo > 0) { inv.Ammo--; return true; } else { if (Inventory.CountItem(2083) < 1) { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("NO_AMMO_ARCHER"), 10)); return false; } Inventory.RemoveItemAmount(2083); inv.Ammo = 100; Session.SendPacket(GenerateSay(Language.Instance.GetMessageFromKey("AMMO_LOADED_ARCHER"), 10)); return true; } } else { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("NO_WEAPON"), 10)); return false; } } else return true; } else return true; case ClassType.Magician: return true; } } return false; }
public void ChangeClass(ClassType characterClass) { JobLevel = 1; JobLevelXp = 0; Session.SendPacket("npinfo 0"); Session.SendPacket("p_clear"); if (characterClass == (byte)ClassType.Adventurer) { HairStyle = (byte)HairStyle > 1 ? 0 : HairStyle; } LoadSpeed(); Class = characterClass; Hp = (int)HPLoad(); Mp = (int)MPLoad(); Session.SendPacket(GenerateTit()); Session.SendPacket(GenerateStat()); Session.CurrentMap?.Broadcast(Session, GenerateEq()); Session.CurrentMap?.Broadcast(GenerateEff(8), MapX, MapY); Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("CLASS_CHANGED"), 0)); Session.CurrentMap?.Broadcast(GenerateEff(196), MapX, MapY); int faction = 1 + _random.Next(0, 2); Faction = faction; Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey($"GET_PROTECTION_POWER_{faction}"), 0)); Session.SendPacket("scr 0 0 0 0 0 0"); Session.SendPacket(GenerateFaction()); Session.SendPacket(GenerateStatChar()); Session.SendPacket(GenerateEff(4799 + faction)); Session.SendPacket(GenerateCond()); Session.SendPacket(GenerateLev()); Session.CurrentMap?.Broadcast(Session, GenerateCMode()); Session.CurrentMap?.Broadcast(Session, GenerateIn(), ReceiverType.AllExceptMe); Session.CurrentMap?.Broadcast(GenerateEff(6), MapX, MapY); Session.CurrentMap?.Broadcast(GenerateEff(198), MapX, MapY); foreach (CharacterSkill skill in Skills.GetAllItems()) { if (skill.SkillVNum >= 200) { Skills.Remove(skill.SkillVNum); } } Skills[(short)(200 + 20 * (byte)Class)] = new CharacterSkill { SkillVNum = (short)(200 + 20 * (byte)Class), CharacterId = CharacterId }; Skills[(short)(201 + 20 * (byte)Class)] = new CharacterSkill { SkillVNum = (short)(201 + 20 * (byte)Class), CharacterId = CharacterId }; Skills[236] = new CharacterSkill { SkillVNum = 236, CharacterId = CharacterId }; Session.SendPacket(GenerateSki()); 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))) { Session.CurrentMap?.Broadcast(Session, $"pidx 1 1.{CharacterId}", ReceiverType.AllExceptMe); } }
public void LearnAdventurerSkill() { if (Class == 0) { byte NewSkill = 0; for (int i = 200; i <= 210; i++) { if (i == 209) { i++; } Skill skinfo = ServerManager.GetSkill((short)i); if (skinfo.Class == 0 && JobLevel >= skinfo.LevelMinimum) { if (Skills.GetAllItems().All(s => s.SkillVNum != i)) { NewSkill = 1; Skills[i] = new CharacterSkill { SkillVNum = (short)i, CharacterId = CharacterId }; } } } if (NewSkill > 0) { Session.SendPacket(GenerateMsg(Language.Instance.GetMessageFromKey("SKILL_LEARNED"), 0)); Session.SendPacket(GenerateSki()); Session.SendPackets(GenerateQuicklist()); } } }