//TODO: Simplify method body public override async Task RunImpl() { if (!await IsValidChar()) { return; } PcTemplate template = CharTemplateTable.GetTemplate(_classId); L2Player player = new L2Player(template, _idFactory.NextId()) { Name = _name, Account = _client.Account, Sex = (Gender)_sex, HairStyleId = (HairStyleId)_hairStyle, HairColor = (HairColor)_hairColor, Face = (Face)_face, CharacterSlot = _client.AccountCharacters.Count }; _characterService.CreatePlayer(player); _client.AccountCharacters.Add(player); _client.SendPacketAsync(new CharCreateOk()); _client.SendPacketAsync(new CharList(_client, _client.SessionKey.PlayOkId1)); }
public L2Player(int objectId, PcTemplate template) : base(objectId, template) { Template = template; CharacterStat = new CharacterStat(this); InitializeCharacterStatus(); Calculators = new Models.Stats.Calculator[Models.Stats.Stats.Values.Count()]; AddFuncsToNewCharacter(); }
public void Initialize() { XmlDocument doc = new XmlDocument(); string[] xmlFilesArray = Directory.GetFiles(@"data\xml\classes\"); foreach (string i in xmlFilesArray) { doc.Load(i); XmlNodeList nodes = doc.DocumentElement?.SelectNodes("/list/class"); if (nodes == null) { continue; } foreach (XmlNode node in nodes) { XmlElement ownerElement = node.Attributes?[0].OwnerElement; if ((ownerElement == null) || (node.Attributes == null) || !"class".Equals(ownerElement.Name)) { continue; } XmlNamedNodeMap attrs = node.Attributes; ClassId classId = ClassId.Values.FirstOrDefault(x => ((int)x.Id).Equals(Convert.ToInt32(attrs.Item(0).Value))); StatsSet set = new StatsSet(); for (XmlNode cd = node.FirstChild; cd != null; cd = cd.NextSibling) { if ((cd.NextSibling != null) && "set".Equals(cd.NextSibling.Name) && (cd.NextSibling != null)) { attrs = cd.NextSibling.Attributes; if (attrs == null) { continue; } string name = attrs.GetNamedItem("name").Value; string value = attrs.GetNamedItem("val").Value; set.Set(name, value); } else { break; } } PcTemplate pcTempl = new PcTemplate(classId, set); Templates.Add((int)pcTempl.ClassId.Id, pcTempl); } } Log.Info($"CharTemplateTable: Loaded {Templates.Count} character templates."); }
public void Initialize() { XmlDocument doc = new XmlDocument(); string[] xmlFilesArray = Directory.GetFiles(@"data\xml\classes\"); for (int i = 0; i < xmlFilesArray.Length; i++) { doc.Load(xmlFilesArray[i]); XmlNodeList nodes = doc.DocumentElement.SelectNodes("/list/class"); foreach (XmlNode node in nodes) { if ("class".Equals(node.Attributes[0].OwnerElement.Name)) { XmlNamedNodeMap attrs = node.Attributes; ClassId classId = ClassId.Values.FirstOrDefault(x => ((int)x.Id).Equals(Convert.ToInt32(attrs.Item(0).Value))); StatsSet set = new StatsSet(); for (XmlNode cd = node.FirstChild; cd != null; cd = cd.NextSibling) { if ("set".Equals(cd.NextSibling.Name) && cd.NextSibling != null) { attrs = cd.NextSibling.Attributes; string name = attrs.GetNamedItem("name").Value; string value = attrs.GetNamedItem("val").Value; set.Set(name, value); } else { break; } } PcTemplate pcTempl = new PcTemplate(classId, set); templates.Add((int)pcTempl.ClassId.Id, pcTempl); } } } Log.Info($"Loaded { templates.Count } character templates."); }
public void setTemplate(PcTemplate template) { addTemplate(TEffectType.p_physical_attack, template.BasePAtk); addTemplate(TEffectType.p_physical_defense, template.BasePDef); addTemplate(TEffectType.p_magical_attack, template.BaseMAtk); addTemplate(TEffectType.p_magical_defense, template.BaseMDef); addTemplate(TEffectType.p_speed, 700);//template.runspd); addTemplate(TEffectType.b_max_weight, 2500000.0); addTemplate(TEffectType.b_accuracy, 50); addTemplate(TEffectType.b_critical_rate, 100); addTemplate(TEffectType.b_evasion, 50); //addTemplate(TEffectType.b_breath, template.B); addTemplate(TEffectType.b_attack_spd, template.BasePAtkSpd); addTemplate(TEffectType.b_casting_spd, 333); addTemplate(TEffectType.b_max_hp, template.HpTable[owner.Level]); addTemplate(TEffectType.b_reg_hp, template.BaseHpReg); addTemplate(TEffectType.b_max_mp, template.MpTable[owner.Level]); addTemplate(TEffectType.b_reg_mp, template.BaseMpReg); addTemplate(TEffectType.b_max_cp, template.CpTable[owner.Level]); addTemplate(TEffectType.b_reg_cp, 50); }
public void SetTemplate(PcTemplate template) { AddTemplate(EffectType.PPhysicalAttack, template.BasePAtk); AddTemplate(EffectType.PPhysicalDefense, template.BasePDef); AddTemplate(EffectType.PMagicalAttack, template.BaseMAtk); AddTemplate(EffectType.PMagicalDefense, template.BaseMDef); AddTemplate(EffectType.PSpeed, 700); //template.runspd); AddTemplate(EffectType.BMaxWeight, 2500000.0); AddTemplate(EffectType.BAccuracy, 50); AddTemplate(EffectType.BCriticalRate, 100); AddTemplate(EffectType.BEvasion, 50); //addTemplate(TEffectType.b_breath, template.B); AddTemplate(EffectType.BAttackSpd, template.BasePAtkSpd); AddTemplate(EffectType.BCastingSpd, 333); AddTemplate(EffectType.BMaxHp, template.HpTable[_owner.Level]); AddTemplate(EffectType.BRegHp, template.BaseHpReg); AddTemplate(EffectType.BMaxMp, template.MpTable[_owner.Level]); AddTemplate(EffectType.BRegMp, template.BaseMpReg); AddTemplate(EffectType.BMaxCp, template.CpTable[_owner.Level]); AddTemplate(EffectType.BRegCp, 50); }
//TODO: Simplify method body public override void RunImpl() { if (!IsValidChar()) { return; } PcTemplate template = CharTemplateTable.Instance.GetTemplate(_classId); L2Player player = new L2Player(_playerService, _idFactory.NextId(), template); player.Inventory = new PcInventory(_itemService, _idFactory, _itemTable, player); player.Name = _name; player.AccountName = _client.AccountName; player.Title = string.Empty; player.Sex = (Gender)_sex; player.HairStyleId = (HairStyleId)_hairStyle; player.HairColor = (HairColor)_hairColor; player.Face = (Face)_face; player.Exp = 0; player.Level = 1; player.Gameclient = _client; //player.Stats = new CharacterStat(player); player.ClassId = template.ClassId; player.BaseClass = template; player.ActiveClass = template; player.CharStatus.CurrentCp = player.MaxCp; player.CharStatus.SetCurrentHp(player.MaxHp); player.CharStatus.SetCurrentHp(player.MaxMp); //player.MaxMp = player.Stats.MaxMp;//;(int)player.CharacterStat.GetStat(EffectType.BMaxMp); //player.MaxCp = player.Stats.MaxCp; //player.MaxHp = player.Stats.MaxHp; player.X = template.SpawnX; player.Y = template.SpawnY; player.Z = template.SpawnZ; player.CharSlot = player.Gameclient.AccountChars.Count; if (template.Items != null) { player.Inventory = new PcInventory(_itemService, _idFactory, _itemTable, player); //foreach (PC_item i in template._items) //{ // if (!i.item.isStackable()) // { // for (long s = 0; s < i.count; s++) // { // L2Item item = new L2Item(i.item); // item.Enchant = i.enchant; // if (i.lifetime != -1) // item.AddLimitedHour(i.lifetime); // item.Location = L2Item.L2ItemLocation.inventory; // player.Inventory.addItem(item, false, false); // if (i.equip) // { // int pdollId = player.Inventory.getPaperdollId(item.Template); // player.setPaperdoll(pdollId, item, false); // } // } // } // else // player.addItem(i.item.ItemID, i.count); //} } _playerService.CreatePlayer(player); //player = PlayerService.RestorePlayer(player.ObjId, _client); player.Gameclient.AccountChars.Add(player); _client.SendPacket(new CharCreateOk()); L2World.Instance.AddPlayer(player); _client.SendPacket(new CharacterSelectionInfo(_client.AccountName, _client.AccountChars, _client.SessionKey.PlayOkId1) { CharId = player.ObjId }); }
//TODO: Simplify method body public override void RunImpl() { if (_name.Length > 16) { _client.SendPacket(new CharCreateFail(CharCreateFail.CharCreateFailReason.TooLong16Chars)); return; } if (_client.AccountChars.Count > 7) { _client.SendPacket(new CharCreateFail(CharCreateFail.CharCreateFailReason.TooManyCharsOnAccount)); return; } if (PlayerService.CheckIfPlayerNameExists(_name)) { _client.SendPacket(new CharCreateFail(CharCreateFail.CharCreateFailReason.NameExists)); return; } PcTemplate template = CharTemplateTable.Instance.GetTemplate((byte)_classId); if (template == null) { _client.SendPacket(new CharCreateFail(CharCreateFail.CharCreateFailReason.CreationRestriction)); return; } L2Player player = L2Player.Create(); player.Name = _name; player.AccountName = _client.AccountName; player.Title = string.Empty; player.Sex = _sex; player.HairStyle = _hairStyle; player.HairColor = _hairColor; player.Face = _face; player.Level = 1; player.Gameclient = _client; player.Exp = 0; player.CStatsInit(); player.CharacterStat.SetTemplate(template); player.BaseClass = template; player.ActiveClass = template; player.CurHp = template.HpTable[player.Level]; player.CurMp = template.MpTable[player.Level]; player.CurCp = template.CpTable[player.Level]; player.MaxMp = (int)player.CharacterStat.GetStat(EffectType.BMaxMp); player.MaxCp = (int)player.CharacterStat.GetStat(EffectType.BMaxCp); player.MaxHp = (int)player.CharacterStat.GetStat(EffectType.BMaxHp); player.X = template.SpawnX; player.Y = template.SpawnY; player.Z = template.SpawnZ; if (template.Items != null) { player.Inventory = new PcInventory(player); //foreach (PC_item i in template._items) //{ // if (!i.item.isStackable()) // { // for (long s = 0; s < i.count; s++) // { // L2Item item = new L2Item(i.item); // item.Enchant = i.enchant; // if (i.lifetime != -1) // item.AddLimitedHour(i.lifetime); // item.Location = L2Item.L2ItemLocation.inventory; // player.Inventory.addItem(item, false, false); // if (i.equip) // { // int pdollId = player.Inventory.getPaperdollId(item.Template); // player.setPaperdoll(pdollId, item, false); // } // } // } // else // player.addItem(i.item.ItemID, i.count); //} } player.CharSlot = player.Gameclient.AccountChars.Count; PlayerModel playerModel = new PlayerModel { AccountName = player.AccountName, ObjectId = player.ObjId, Name = player.Name, Level = player.Level, MaxHp = player.MaxHp, CurHp = (int)player.CurHp, MaxCp = player.MaxCp, CurCp = (int)player.CurCp, MaxMp = player.MaxMp, CurMp = (int)player.CurMp, Face = player.Face, HairStyle = player.HairStyle, HairColor = player.HairColor, Sex = player.Sex, Heading = player.Heading, X = player.X, Y = player.Y, Z = player.Z, Exp = player.Exp, ExpBeforeDeath = player.ExpOnDeath, Sp = player.Sp, Karma = player.Karma, PvpKills = player.PvpKills, PkKills = player.PkKills, ClanId = player.ClanId, Race = (int)player.BaseClass.ClassId.ClassRace, ClassId = (int)player.ActiveClass.ClassId.Id, BaseClass = (int)player.BaseClass.ClassId.Id, DeleteTime = player.DeleteTime, CanCraft = player.CanCraft, Title = player.Title, RecHave = player.RecHave, RecLeft = player.RecLeft, AccessLevel = player.AccessLevel, Online = player.Online, OnlineTime = player.OnlineTime, CharSlot = player.CharSlot, LastAccess = player.LastAccess, ClanPrivs = player.ClanPrivs, WantsPeace = player.WantsPeace, IsIn7SDungeon = player.IsIn7SDungeon, PunishLevel = player.PunishLevel, PunishTimer = player.PunishTimer, PowerGrade = player.PowerGrade, Nobless = player.Nobless, Hero = player.Hero, Subpledge = player.Subpledge, LastRecomDate = player.LastRecomDate, LevelJoinedAcademy = player.LevelJoinedAcademy, Apprentice = player.Apprentice, Sponsor = player.Sponsor, VarkaKetraAlly = player.VarkaKetraAlly, ClanJoinExpiryTime = player.ClanJoinExpiryTime, ClanCreateExpiryTime = player.ClanCreateExpiryTime, DeathPenaltyLevel = player.DeathPenaltyLevel }; PlayerService.CreatePlayer(playerModel); player.Gameclient.AccountChars.Add(player); _client.SendPacket(new CharCreateOk()); L2World.Instance.AddPlayer(player); _client.SendPacket(new CharacterSelectionInfo(_client.AccountName, _client.AccountChars, _client.SessionId) { CharId = player.ObjId }); }
public static void Initialize() { _templates = new Dictionary <int, PcTemplate>(); XmlDocument doc = new XmlDocument(); string[] xmlFilesArray = Directory.GetFiles(@"data\xml\classes\"); foreach (string i in xmlFilesArray) { doc.Load(i); XmlNodeList nodes = doc.DocumentElement?.SelectNodes("/list/class"); if (nodes == null) { continue; } foreach (XmlNode node in nodes) { XmlElement ownerElement = node.Attributes?[0].OwnerElement; if (ownerElement == null || node.Attributes == null || ownerElement.Name != "class") { continue; } XmlNamedNodeMap attrs = node.Attributes; ClassId classId = ClassId.Values.FirstOrDefault(x => (int)x.Id == Convert.ToInt32(attrs.Item(0).Value)); StatsSet set = new StatsSet(); for (XmlNode cd = node.FirstChild; cd?.NextSibling != null; cd = cd.NextSibling) { if (cd.NextSibling.Name == "set") { attrs = cd.NextSibling.Attributes; if (attrs == null) { continue; } string name = attrs.GetNamedItem("name").Value; string value = attrs.GetNamedItem("val").Value; set.Set(name, value); } else if (cd.NextSibling.Name == "items") { attrs = cd.NextSibling.Attributes; if (attrs == null) { continue; } string value = attrs.GetNamedItem("val").Value; set.Set("items", value); } } PcTemplate pcTempl = new PcTemplate(classId, set); _templates.Add((int)pcTempl.ClassId.Id, pcTempl); } } Log.Info($"Loaded {_templates.Count} character templates."); }
public override void run() { if (_name.Length < 2 || _name.Length > 16) { getClient().sendPacket(new CharCreateFail(getClient(), CharCreateFail.CharCreateFailReason.TOO_LONG_16_CHARS)); return; } if (getClient()._accountChars.Count > 7) { getClient().sendPacket(new CharCreateFail(getClient(), CharCreateFail.CharCreateFailReason.TOO_MANY_CHARS_ON_ACCOUNT)); return; } bool exists = playerService.CheckIfPlayerNameExists(_name); if (exists) { getClient().sendPacket(new CharCreateFail(getClient(), CharCreateFail.CharCreateFailReason.NAME_EXISTS)); return; } PcTemplate template = CharTemplateTable.Instance.GetTemplate((byte)_classId); if (template == null) { getClient().sendPacket(new CharCreateFail(getClient(), CharCreateFail.CharCreateFailReason.CREATION_RESTRICTION)); return; } L2Player player = L2Player.create(); player.Name = _name; player.AccountName = getClient().AccountName; player.Title = ""; player.Sex = _sex; player.HairStyle = _hairStyle; player.HairColor = _hairColor; player.Face = _face; player.Level = 1; player.Gameclient = getClient(); player.Exp = 0; //player.MaximumHp = template._hp[player.Level]; player.CStatsInit(); player.CharacterStat.setTemplate(template); player.BaseClass = template; player.ActiveClass = template; player.CurHP = template.HpTable[player.Level]; player.CurMP = template.MpTable[player.Level]; player.CurCP = template.CpTable[player.Level]; player.MaxMp = (int)player.CharacterStat.getStat(TEffectType.b_max_mp); player.MaxCp = (int)player.CharacterStat.getStat(TEffectType.b_max_cp); player.X = -71338; player.Y = 258271; player.Z = -3104; if (template.Items != null) { player.Inventory = new InvPC(); player.Inventory._owner = player; //foreach (PC_item i in template._items) //{ // if (!i.item.isStackable()) // { // for (long s = 0; s < i.count; s++) // { // L2Item item = new L2Item(i.item); // item.Enchant = i.enchant; // if (i.lifetime != -1) // item.AddLimitedHour(i.lifetime); // item.Location = L2Item.L2ItemLocation.inventory; // player.Inventory.addItem(item, false, false); // if (i.equip) // { // int pdollId = player.Inventory.getPaperdollId(item.Template); // player.setPaperdoll(pdollId, item, false); // } // } // } // else // player.addItem(i.item.ItemID, i.count); //} } player.CharSlot = player.Gameclient._accountChars.Count + 1; PlayerModel playerModel = new PlayerModel() { AccountName = player.AccountName, ObjectId = player.ObjID, Name = player.Name, Level = player.Level, MaxHp = (int)player.MaximumHp, CurHp = (int)player.MaximumHp, MaxCp = player.MaxCp, CurCp = player.MaxCp, MaxMp = player.MaxMp, CurMp = (int)player.CurMp, Face = player.Face, HairStyle = player.HairStyle, HairColor = player.HairColor, Sex = player.Sex, Heading = player.Heading, X = player.X, Y = player.Y, Z = player.Z, Exp = player.Exp, ExpBeforeDeath = player.ExpOnDeath, Sp = player.SP, Karma = player.Karma, PvpKills = player.PvpKills, PkKills = player.PkKills, ClanId = player.ClanId, Race = (int)player.BaseClass.ClassId.ClassRace, ClassId = (int)player.ActiveClass.ClassId.Id, BaseClass = (int)player.BaseClass.ClassId.Id, DeleteTime = player.DeleteTime, CanCraft = player.CanCraft, Title = player.Title, RecHave = player.RecHave, RecLeft = player.RecLeft, AccessLevel = player.AccessLevel, Online = player.Online, OnlineTime = player.OnlineTime, CharSlot = player.CharSlot, LastAccess = player.LastAccess, ClanPrivs = player.ClanPrivs, WantsPeace = player.WantsPeace, IsIn7sDungeon = player.IsIn7sDungeon, PunishLevel = player.PunishLevel, PunishTimer = player.PunishTimer, PowerGrade = player.PowerGrade, Nobless = player.Nobless, Hero = player.Hero, Subpledge = player.Subpledge, LastRecomDate = player.LastRecomDate, LevelJoinedAcademy = player.LevelJoinedAcademy, Apprentice = player.Apprentice, Sponsor = player.Sponsor, VarkaKetraAlly = player.VarkaKetraAlly, ClanJoinExpiryTime = player.ClanJoinExpiryTime, ClanCreateExpiryTime = player.ClanCreateExpiryTime, DeathPenaltyLevel = player.DeathPenaltyLevel }; playerService.CreatePlayer(playerModel); player.Gameclient._accountChars.Add(player); getClient().sendPacket(new CharCreateOk()); CharacterSelectionInfo csl = new CharacterSelectionInfo(getClient().AccountName, getClient()._accountChars, getClient()._sessionId); csl.charId = player.ObjID; getClient().sendPacket(csl); }