/// <summary> /// Loads all the revive spots. /// </summary> /// <returns>Returns true if the revive spots were loaded.</returns> public static bool LoadReviveSpots() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading Revive Spots..."); using (var revive = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(revive, SqlCommandType.SELECT, false)) { cmd.Finish("DB_ReviveSpots"); } while (revive.Read()) { Maps.MapPoint revivepoint = new ProjectX_V3_Game.Maps.MapPoint(revive.ReadUInt16("ReviveTargetMapID"), revive.ReadUInt16("ReviveX"), revive.ReadUInt16("ReviveY")); ushort frommap = revive.ReadUInt16("ReviveMapID"); if (!Core.Kernel.Maps.Contains(frommap)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load revive spots. Failed at map: {0}, perhaps the map is not existing.", revivepoint.MapID); Console.ResetColor(); return false; } Core.Kernel.Maps[frommap].RevivePoint = revivepoint; } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded Revive Spots..."); return true; }
public static void LoadBots() { #if SPAWN_BOTS #region AfkBots using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_BotInfo"); } while (sql.Read()) { Entities.AIBot bot = new ProjectX_V3_Game.Entities.AIBot(); bot.LoadBot(Enums.BotType.AFKBot, sql.ReadInt32("BotRefID"), new Maps.MapPoint( sql.ReadUInt16("BotMapID"), sql.ReadUInt16("BotX"), sql.ReadUInt16("BotY")), null); } } #endregion #endif }
public static void AddNewArenaInfo(Data.ArenaInfo arena) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.INSERT, false)) { cmd.AddInsertValue("PlayerID", arena.DatabaseID); cmd.AddInsertValue("PlayerName", arena.Name); cmd.AddInsertValue("ArenaLevel", arena.Level); cmd.AddInsertValue("ArenaClass", arena.Class); cmd.AddInsertValue("Mesh", arena.Mesh); cmd.AddInsertValue("HonorPoints", arena.DatabaseID); cmd.AddInsertValue("ArenaPoints", arena.ArenaPoints); cmd.AddInsertValue("TotalWins", arena.ArenaTotalWins); cmd.AddInsertValue("TotalWinsToday", arena.ArenaWinsToday); cmd.AddInsertValue("TotalLoss", arena.ArenaTotalLoss); cmd.AddInsertValue("TotalLossToday", arena.ArenaLossToday); cmd.AddInsertValue("TodayUpdate", DateTime.Now); cmd.Finish("DB_ArenaQualifier"); } sql.Execute(); } SetRecordID(arena); }
public static bool LoadNobilityBoard() { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_NobilityBoard"); } while (sql.Read()) { Data.NobilityDonation donation = new ProjectX_V3_Game.Data.NobilityDonation(); donation.DatabaseID = sql.ReadInt32("PlayerID"); donation.Name = sql.ReadString("PlayerName"); donation.Donation = sql.ReadInt64("NobilityDonation"); donation.Rank = Enums.NobilityRank.Serf; donation.OldRank = donation.Rank; donation.RecordID = sql.ReadInt32("NobilityID"); if (!Data.NobilityBoard.AddNobility(donation)) { return false; } } } Data.NobilityBoard.GetTop50(); return true; }
public static void UpdateNobilityDonation(int Identifier, string Column, object Value) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", Identifier); cmd.AddUpdateValue(Column, Value); cmd.Finish("DB_NobilityBoard"); } sql.Execute(); } }
/// <summary> /// Loads all the drop data. /// </summary> /// <returns>Returns true if the drops were loaded.</returns> public static bool LoadDropData() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading Drops..."); using (var drop = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(drop, SqlCommandType.SELECT, false)) { cmd.Finish("DB_MapDrops"); } while (drop.Read()) { int dropid = drop.ReadInt32("MapID"); Data.DropData data = new ProjectX_V3_Game.Data.DropData(); data.MinGoldDrop = drop.ReadUInt32("MinMoney"); data.MaxGoldDrop = drop.ReadUInt32("MaxMoney"); data.CPsDropChance = drop.ReadByte("CPsChance"); data.MinCPsDrop = drop.ReadUInt32("MinCPs"); data.MaxCPsDrop = drop.ReadUInt32("MaxCPs"); data.DragonballChance = drop.ReadByte("DragonballChance"); data.MeteorChance = drop.ReadByte("MeteorChance"); data.FirstSocketChance = drop.ReadByte("FirstSocketChance"); data.SecondSocketChance = drop.ReadByte("SecondSocketChance"); data.PlusChance = drop.ReadByte("PlusChance"); data.QualityChance = drop.ReadByte("QualityChance"); data.MinPlus = drop.ReadByte("MinPlus"); data.MaxPlus = drop.ReadByte("MaxPlus"); data.BlessChance = drop.ReadByte("BlessChance"); foreach (string item in drop.ReadString("ItemList").Split('-')) { if (!string.IsNullOrWhiteSpace(item)) { data.ItemDrops.Add(uint.Parse(item)); } } if (!Core.Kernel.DropData.TryAdd(dropid, data)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load drops. Failed at ID: {0}", dropid); Console.ResetColor(); return false; } } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} Drops...", Core.Kernel.DropData.Count); return true; }
public static void AddNewNobility(int Identifier, string Name, long Donation) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.INSERT, false)) { cmd.AddInsertValue("PlayerID", Identifier); cmd.AddInsertValue("PlayerName", Name); cmd.AddInsertValue("NobilityDonation", Donation); cmd.Finish("DB_NobilityBoard"); } sql.Execute(); } }
public static Enums.AccountStatus Authenticate(Client.AuthClient client, string Account, string Password) { try { using (var sql = new SqlHandler(Program.Config.ReadString("AuthConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, true)) { cmd.AddWhereValue("AccountName", Account); cmd.AddWhereValue("AccountPassword", Password); cmd.Finish("DB_Accounts"); } if (!sql.Read()) return Enums.AccountStatus.Invalid_AccountID_Or_Password; client.DatabaseUID = sql.ReadInt32("AccountID"); client.Server = sql.ReadByte("AccountServer"); client.Account = Account; client.Password = Password; using (var sql2 = new SqlHandler(Program.Config.ReadString("AuthConnectionString"))) { using (var cmd2 = new SqlCommandBuilder(sql2, SqlCommandType.UPDATE, true)) { cmd2.AddWhereValue("AccountID", client.DatabaseUID); if (sql.ReadBoolean("AccountBanned")) { DateTime banexpire = sql.ReadDateTime("AccountBanExpire"); if (DateTime.Now < banexpire) return Enums.AccountStatus.Account_Banned; cmd2.AddUpdateValue("AccountBanned", false); } cmd2.AddUpdateValue("AccountLastLoginIP", client.NetworkClient.IP); cmd2.Finish("DB_Accounts"); } sql2.Execute(); } } return Enums.AccountStatus.Ready; } catch (Exception e) { Console.WriteLine(e.ToString()); return Enums.AccountStatus.Datebase_Error; } }
public static void AddNewMonsterSpawn(ushort mapid, ushort x, ushort y, int monsterid, int count, int drop, int range, bool guard) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.INSERT, false)) { cmd.AddInsertValue("MonsterID", monsterid); cmd.AddInsertValue("CenterX", x); cmd.AddInsertValue("CenterY", y); cmd.AddInsertValue("Drop", drop); cmd.AddInsertValue("Count", count); if (guard) cmd.AddInsertValue("Range", (int)1); else cmd.AddInsertValue("Range", range); cmd.Finish("DB_MobSpawns"); } sql.Execute(); } for (int i = 0; i < count; i++) { Entities.Monster spawnmob = Core.Kernel.Monsters[monsterid].Copy(); spawnmob.Direction = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(0, 8); if (Core.Kernel.Maps[mapid].EnterMap(spawnmob)) { Maps.MapPoint Location = spawnmob.Map.CreateAvailableLocation<Entities.Monster>(x, y, range); if (Location != null) { spawnmob.X = Location.X; spawnmob.Y = Location.Y; spawnmob.OriginalRange = range; spawnmob.OriginalX = x; spawnmob.OriginalY = y; //if (drop > 0) //{ // spawnmob.DropData = Core.Kernel.DropData[drop].Copy(); //} Threads.MonsterThread.AddToMonsterThread(spawnmob, !(((byte)spawnmob.Behaviour) < 3 || spawnmob.Behaviour == Enums.MonsterBehaviour.PhysicalGuard)); spawnmob.Screen.UpdateScreen(null); } } } }
public static bool LoadSystemVariables() { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_SystemVariables"); } while (sql.Read()) { if (!Core.SystemVariables.Variables.TryAdd(sql.ReadString("SystemVariableName"), sql.ReadString("SystemVariableValue"))) { return false; } } } return true; }
public static void SetRecordID(Entities.GameClient client) { if (client.Nobility == null) return; using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, true)) { cmd.AddWhereValue("PlayerID", client.DatabaseUID); cmd.Finish("DB_NobilityBoard"); } if (sql.Read()) { client.Nobility.RecordID = sql.ReadInt32("NobilityID"); } } }
public SqlCommandBuilder(SqlHandler sqlHandler, SqlCommandType commandType, bool UseWhere) { if (commandType == SqlCommandType.WHERE_HANDLE) { throw new Exception("This command type is only allowed by the core handler."); } this.CommandType = commandType; InsertValues = new ConcurrentDictionary <string, object>(); UpdateValues = new ConcurrentDictionary <string, object>(); WhereValues = new ConcurrentDictionary <string, object>(); this.Handler = sqlHandler; this.UseWhere = UseWhere; int WhereFormatCount = 1; switch (commandType) { case SqlCommandType.SELECT: CommandString = "SELECT * FROM {0}"; goto case SqlCommandType.WHERE_HANDLE; case SqlCommandType.INSERT: CommandString = "INSERT INTO {0} ({1}) VALUES ({2})"; break; case SqlCommandType.UPDATE: CommandString = "UPDATE {0} SET {1}"; WhereFormatCount = 2; goto case SqlCommandType.WHERE_HANDLE; case SqlCommandType.DELETE: CommandString = "DELETE {0}"; goto case SqlCommandType.WHERE_HANDLE; case SqlCommandType.WHERE_HANDLE: if (this.UseWhere) { CommandString = string.Format("{0} WHERE {{{1}}}", CommandString, WhereFormatCount); } break; } }
public static bool LoadArenaQualifiers() { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_ArenaQualifier"); } while (sql.Read()) { Data.ArenaInfo arena = new ProjectX_V3_Game.Data.ArenaInfo(); arena.ArenaID = sql.ReadInt32("ArenaID"); arena.DatabaseID = sql.ReadInt32("PlayerID"); arena.Level = sql.ReadUInt32("ArenaLevel"); arena.Class = sql.ReadUInt32("ArenaClass"); arena.Name = sql.ReadString("PlayerName"); arena.Mesh = sql.ReadUInt32("Mesh"); arena.ArenaTotalWins = sql.ReadUInt32("TotalWins"); arena.ArenaWinsToday = sql.ReadUInt32("TotalWinsToday"); arena.ArenaTotalLoss = sql.ReadUInt32("TotalLoss"); arena.ArenaLossToday = sql.ReadUInt32("TotalLossToday"); arena.ArenaPoints = sql.ReadUInt32("ArenaPoints"); arena.ArenaHonorPoints = sql.ReadUInt32("HonorPoints"); DateTime dailyupdate = sql.ReadDateTime("TodayUpdate"); if (DateTime.Now >= dailyupdate.AddHours(24)) { UpdateArenaInfo(arena.DatabaseID, "TodayUpdate", DateTime.Now); arena.ArenaLossToday = 0; arena.ArenaWinsToday = 0; arena.Save(); } if (!Data.ArenaQualifier.AddArenaInfo(arena)) { return false; } } } Data.ArenaQualifier.GetTop10(); Data.ArenaQualifier.GetTop10(); return true; }
public static bool LoadPortals() { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_Portals"); } while (sql.Read()) { if (!Core.Kernel.Portals.TryAdd( new Core.PortalPoint(sql.ReadUInt16("StartMap"), sql.ReadUInt16("StartX"), sql.ReadUInt16("StartY")), new Core.PortalPoint(sql.ReadUInt16("EndMap"), sql.ReadUInt16("EndX"), sql.ReadUInt16("EndY")))) { return false; } } } return true; }
public SqlCommandBuilder(SqlHandler sqlHandler, SqlCommandType commandType, bool UseWhere) { if (commandType == SqlCommandType.WHERE_HANDLE) throw new Exception("This command type is only allowed by the core handler."); this.CommandType = commandType; InsertValues = new ConcurrentDictionary<string, object>(); UpdateValues = new ConcurrentDictionary<string, object>(); WhereValues = new ConcurrentDictionary<string, object>(); this.Handler = sqlHandler; this.UseWhere = UseWhere; int WhereFormatCount = 1; switch (commandType) { case SqlCommandType.SELECT: CommandString = "SELECT * FROM {0}"; goto case SqlCommandType.WHERE_HANDLE; case SqlCommandType.INSERT: CommandString = "INSERT INTO {0} ({1}) VALUES ({2})"; break; case SqlCommandType.UPDATE: CommandString = "UPDATE {0} SET {1}"; WhereFormatCount = 2; goto case SqlCommandType.WHERE_HANDLE; case SqlCommandType.DELETE: CommandString = "DELETE {0}"; goto case SqlCommandType.WHERE_HANDLE; case SqlCommandType.WHERE_HANDLE: if (this.UseWhere) CommandString = string.Format("{0} WHERE {{{1}}}", CommandString, WhereFormatCount); break; } }
public static void AddSpouse(Entities.GameClient client1, Entities.GameClient client2) { client1.SpouseDatabaseUID = client2.DatabaseUID; client2.SpouseDatabaseUID = client1.DatabaseUID; using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", client1.DatabaseUID); cmd.AddUpdateValue("PlayerSpouseID", client2.DatabaseUID); cmd.Finish("DB_Players"); } sql.Execute(); sql.Forward(Program.Config.ReadString("GameConnectionString"), ""); using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", client2.DatabaseUID); cmd.AddUpdateValue("PlayerSpouseID", client1.DatabaseUID); cmd.Finish("DB_Players"); } sql.Execute(); } }
public static void SaveGuildRank(int UID, Enums.GuildRank rank) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", UID); cmd.AddUpdateValue("PlayerGuildRank", rank.ToString()); cmd.Finish("DB_Players"); } sql.Execute(); } }
/// <summary> /// Loads all the shopflag informations and spawns. /// </summary> /// <returns>Returns true if the the infos/spawns were loaded.</returns> public static bool LoadShopFlags() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading ShopFlags..."); int NpcCount = Core.Kernel.NPCs.Count; using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_ShopFlags"); } while (sql.Read()) { Entities.NPC npc = new ProjectX_V3_Game.Entities.NPC(); npc.EntityUID = sql.ReadUInt32("ShopFlagID"); ushort mapid = sql.ReadUInt16("ShopFlagMapID"); if (mapid == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load shopflags. [MAPID]"); Console.ResetColor(); return false; } Maps.Map map; Core.Kernel.Maps.TrySelect(mapid, out map); npc.Map = map; if (!npc.Map.EnterMap(npc)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load shopflags. [MAP]"); Console.ResetColor(); return false; } npc.Mesh = sql.ReadUInt16("ShopFlagMesh"); npc.Flag = sql.ReadUInt32("ShopFlagFlag"); npc.Name = ""; npc.X = sql.ReadUInt16("ShopFlagX"); npc.Y = sql.ReadUInt16("ShopFlagY"); npc.NPCType = Enums.NPCType.ShopFlag; npc.Avatar = 0; if (!Core.Kernel.NPCs.TryAdd(npc.EntityUID, npc)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load shopflags. [ADD]"); Console.ResetColor(); return false; } } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} ShopFlags...", (Core.Kernel.NPCs.Count - NpcCount)); return true; }
// -1 = finished public static void SaveQuest(Entities.GameClient client, string Name, int Progress, string InfoString) { bool Exists = false; using (var existsql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var existcmd = new SqlCommandBuilder(existsql, SqlCommandType.SELECT, true)) { existcmd.AddWhereValue("PlayerID", client.DatabaseUID); existcmd.AddWhereValue("QuestName", Name); existcmd.Finish("DB_Quests"); } Exists = existsql.Read(); } using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { if (Exists) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", client.DatabaseUID); cmd.AddWhereValue("QuestName", Name); cmd.AddUpdateValue("QuestProgress", Progress.ToString()); cmd.AddUpdateValue("QuestInfo", InfoString); cmd.Finish("DB_Quests"); } } else { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.INSERT, false)) { cmd.AddInsertValue("PlayerID", client.DatabaseUID); cmd.AddInsertValue("QuestName", Name); cmd.AddInsertValue("QuestProgress", Progress.ToString()); cmd.AddInsertValue("QuestInfo", InfoString); cmd.Finish("DB_Quests"); } } sql.Execute(); } }
/// <summary> /// Saves profs. /// </summary> /// <param name="client">The client.</param> /// <param name="prof">The prof.</param> public static void SaveProf(Entities.GameClient client, Data.SpellInfo prof) { if (!client.LoggedIn || client.IsAIBot) return; bool Exists = false; using (var existsql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var existcmd = new SqlCommandBuilder(existsql, SqlCommandType.SELECT, true)) { existcmd.AddWhereValue("PlayerID", client.DatabaseUID); existcmd.AddWhereValue("Prof", prof.ID); existcmd.Finish("DB_PlayerProfs"); } Exists = existsql.Read(); } using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { if (Exists) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", client.DatabaseUID); cmd.AddWhereValue("Prof", prof.ID); cmd.AddUpdateValue("ProfLevel", prof.Level); cmd.AddUpdateValue("ProfExperience", prof.Experience); cmd.Finish("DB_PlayerProfs"); } } else { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.INSERT, false)) { cmd.AddInsertValue("PlayerID", client.DatabaseUID); cmd.AddInsertValue("Prof", prof.ID); cmd.AddInsertValue("ProfLevel", prof.Level); cmd.AddInsertValue("ProfExperience", prof.Experience); cmd.Finish("DB_PlayerProfs"); } } sql.Execute(); } }
public static void SaveArenaInfo(Data.ArenaInfo arena) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", arena.DatabaseID); cmd.AddUpdateValue("PlayerName", arena.Name); cmd.AddUpdateValue("ArenaLevel", arena.Level); cmd.AddUpdateValue("ArenaClass", arena.Class); cmd.AddUpdateValue("Mesh", arena.Mesh); cmd.AddUpdateValue("HonorPoints", arena.DatabaseID); cmd.AddUpdateValue("ArenaPoints", arena.ArenaPoints); cmd.AddUpdateValue("TotalWins", arena.ArenaTotalWins); cmd.AddUpdateValue("TotalWinsToday", arena.ArenaWinsToday); cmd.AddUpdateValue("TotalLoss", arena.ArenaTotalLoss); cmd.AddUpdateValue("TotalLossToday", arena.ArenaLossToday); cmd.Finish("DB_ArenaQualifier"); } sql.Execute(); } }
public static bool LoadMonsterSpawns() { Console.ForegroundColor = ConsoleColor.Yellow; string wrt = "\tLoading Monster Spawns..."; Console.WriteLine(wrt); int SpawnCount = 0; int GuardSpawnCount = 0; using (var spawn = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(spawn, SqlCommandType.SELECT, false)) { cmd.Finish("DB_MobSpawns"); } while (spawn.Read()) { ushort mapid = spawn.ReadUInt16("MapID"); Maps.Map map; if (!Core.Kernel.Maps.TrySelect(mapid, out map)) { return false; } ushort CenterX = spawn.ReadUInt16("CenterX"); ushort CenterY = spawn.ReadUInt16("CenterY"); int Range = spawn.ReadUInt16("Range"); // int DropData = spawn.ReadInt32("DropID"); int Monster = spawn.ReadInt32("MonsterID"); int MobCount = spawn.ReadInt32("Count"); if (CenterX > 0 && CenterY > 0 && Range > 0 && Monster > 0 && MobCount > 0) { for (int j = 0; j < MobCount; j++) { Entities.Monster spawnmob = Core.Kernel.Monsters[Monster].Copy(); spawnmob.MobID = Monster; spawnmob.Direction = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(0, 8); if (!map.EnterMap(spawnmob)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("[MAP] Failed to load spawns. Failed at Map: {0} and MobID: {1}", mapid, Monster); Console.ResetColor(); return false; } Maps.MapPoint Location = spawnmob.Map.CreateAvailableLocation<Entities.Monster>(CenterX, CenterY, Range); if (Location != null) { spawnmob.X = Location.X; spawnmob.Y = Location.Y; spawnmob.OriginalRange = Range; spawnmob.OriginalX = CenterX; spawnmob.OriginalY = CenterY; spawnmob.DropData = Core.Kernel.DropData[map.MapID].Copy(); if (((byte)spawnmob.Behaviour) < 3 || spawnmob.Behaviour == Enums.MonsterBehaviour.PhysicalGuard) // physical guards should walk around { #if SPAWN_MOBS Threads.MonsterThread.AddToMonsterThread(spawnmob, false); SpawnCount++; #endif } else { Threads.MonsterThread.AddToMonsterThread(spawnmob, true); GuardSpawnCount++; } } else spawnmob.Map.LeaveMap(spawnmob); // there was no location available Console.Clear(); Console.WriteLine(wrt); Console.WriteLine("\tLoaded {0} Monster Spawns and {1} Guard Spawns...", SpawnCount, GuardSpawnCount); } } } } return true; }
/// <summary> /// Loads the map info. /// </summary> /// <returns>Returns true if the maps were loaded.</returns> public static bool LoadMaps() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading Maps..."); using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_MapInfo"); } while (sql.Read()) { Maps.Map map = new ProjectX_V3_Game.Maps.Map( sql.ReadUInt16("MapID"), sql.ReadString("Name")); if (map.MapID == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load maps. [MAPID]"); Console.ResetColor(); return false; } map.MapType = (Enums.MapType)Enum.Parse(typeof(Enums.MapType), sql.ReadString("MapType")); ushort dmap = sql.ReadUInt16("DMapInfo"); if (dmap > 0) map.DMapInfo = dmap; map.InheritanceMap = sql.ReadUInt16("InheritanceMap"); using (var sqlflags = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd2 = new SqlCommandBuilder(sqlflags, SqlCommandType.SELECT, true)) { cmd2.AddWhereValue("MapID", map.MapID); cmd2.Finish("DB_MapFlags"); } while (sqlflags.Read()) { Enums.MapTypeFlags flag = (Enums.MapTypeFlags)Enum.Parse(typeof(Enums.MapTypeFlags), sqlflags.ReadString("Flag")); if (!map.Flags.TryAdd((ulong)flag, flag)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load maps. [FLAGS] Failed at ID: {0}", map.MapID); Console.ResetColor(); return false; } } } if (!Core.Kernel.Maps.TryAdd(map.MapID, map.Name, map)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load maps. [MAP] Failed at ID: {0}", map.MapID); Console.ResetColor(); return false; } } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} Maps...", Core.Kernel.Maps.Count); return true; }
public static bool LoadMonsterInfo() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading Monsters..."); using (var mob = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(mob, SqlCommandType.SELECT, false)) { cmd.Finish("DB_MobInfo"); } while (mob.Read()) { int mobid = mob.ReadInt32("MobID"); Entities.Monster monster = new Entities.Monster(); monster.Name = mob.ReadString("Name"); monster.Level = mob.ReadByte("MobLevel"); monster.Mesh = mob.ReadUInt32("Lookface"); monster.MinAttack = mob.ReadUInt32("MinAttack"); monster.MaxAttack = mob.ReadUInt32("MaxAttack"); monster.Defense = mob.ReadUInt32("Defense"); monster.Dexterity = mob.ReadByte("Dexterity"); monster.Dodge = mob.ReadByte("Dodge"); monster.AttackRange = mob.ReadInt32("AttackRange"); monster.ViewRange = mob.ReadInt32("ViewRange"); monster.AttackSpeed = mob.ReadInt32("AttackSpeed"); monster.MoveSpeed = mob.ReadInt32("MoveSpeed"); if (monster.MoveSpeed < 100) monster.MoveSpeed = 100; if (monster.MoveSpeed > 5000) monster.MoveSpeed = 5000; monster.AttackType = mob.ReadInt32("AttackType"); monster.Behaviour = (Enums.MonsterBehaviour)Enum.Parse(typeof(Enums.MonsterBehaviour), mob.ReadString("Behaviour")); monster.MagicType = mob.ReadInt32("MagicType"); monster.MagicDefense = mob.ReadInt32("MagicDefense"); monster.MagicHitRate = mob.ReadInt32("MagicHitRate"); monster.ExtraExperience = mob.ReadUInt64("ExtraExp"); monster.ExtraDamage = mob.ReadUInt32("ExtraDamage"); monster.Boss = (mob.ReadByte("Boss") != 0); monster.Action = mob.ReadUInt32("Action"); monster.MaxHP = mob.ReadInt32("Life"); monster.HP = monster.MaxHP; monster.MaxMP = mob.ReadInt32("Mana"); monster.MP = monster.MaxMP; if (monster.Boss) { monster.AttackRange = 20; } string skillstring = mob.ReadString("Skills"); if (!string.IsNullOrWhiteSpace(skillstring)) { int[] ids = new int[0]; skillstring.Split(',').ConverToInt32(out ids); if (ids[0] != 0) { foreach (int skillid in ids) monster.Skills.Add((ushort)skillid); } } if (!Core.Kernel.Monsters.TryAdd(mobid, monster)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load monster. Failed at ID: {0}", mobid); Console.ResetColor(); return false; } } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} Monsters...", Core.Kernel.Monsters.Count); return true; }
public static void SetRecordID(Data.ArenaInfo arena) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, true)) { cmd.AddWhereValue("PlayerID", arena.DatabaseID); cmd.Finish("DB_ArenaQualifier"); } if (sql.Read()) { arena.ArenaID = sql.ReadInt32("ArenaID"); } } }
/// <summary> /// Loads all the items. /// </summary> /// <returns>Returns true if the items were loaded.</returns> public static bool LoadItemInfos() { Console.ForegroundColor = ConsoleColor.Yellow; string wrt = "\tLoading Items..."; /*using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_ItemInfo"); } //int count = 0; while (sql.Read()) { count++; Console.WriteLine("\tLoaded {0} item additions...", count); Console.Clear(); } } */ //Console.WriteLine("SWAG"); //return true; Console.WriteLine(wrt); System.Threading.Thread.Sleep(2000); int nameduplicates = 0; int loaded = 0; using (var item = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(item, SqlCommandType.SELECT, false)) { cmd.Finish("DB_ItemInfo"); } while (item.Read()) { Data.ItemInfo info = new ProjectX_V3_Game.Data.ItemInfo(); info.ItemID = item.ReadUInt32("ItemID"); info.Name = item.ReadString("Name"); byte prof = item.ReadByte("Profession"); if (prof == 190) info.Profession = Enums.Class.InternTaoist; info.RequiredProf = item.ReadByte("WeaponSkill"); info.RequiredLevel = item.ReadByte("RequiredLevel"); info.Sex = (Enums.Sex)Enum.Parse(typeof(Enums.Sex), item.ReadString("Sex")); info.RequiredStrength = item.ReadUInt16("RequiredStrength"); info.RequiredAgility = item.ReadUInt16("RequiredAgility"); info.RequiredVitality = item.ReadUInt16("RequiredVitality"); info.RequiredSpirit = item.ReadUInt16("RequiredSpirit"); info.Monopoly = item.ReadByte("Monopoly"); info.Weight = item.ReadUInt16("Weight"); info.Price = item.ReadUInt32("Price"); info.ActionID = item.ReadUInt32("ActionID"); info.MaxAttack = item.ReadUInt16("MaxAttack"); info.MinAttack = item.ReadUInt16("MinAttack"); info.Defense = item.ReadUInt16("Defense"); info.Dexterity = item.ReadUInt16("Dexterity"); info.Dodge = item.ReadUInt16("Dodge"); info.HP = item.ReadUInt16("Life"); info.MP = item.ReadUInt16("Mana"); info.AmountLimit = item.ReadUInt16("Amount"); if (info.IsArrow()) { info.MaxDura = (short)info.AmountLimit; info.CurrentDura = info.MaxDura; } info.Ident = item.ReadByte("Ident"); info.StGem1 = item.ReadByte("Gem1"); info.StGem2 = item.ReadByte("Gem2"); info.Magic1 = item.ReadUInt16("Magic1"); info.Magic2 = item.ReadByte("Magic2"); info.Magic3 = item.ReadByte("Magic3"); info.Data = item.ReadInt32("Data"); info.MagicAttack = item.ReadUInt16("MagicAttack"); info.MagicDefense = item.ReadUInt16("MagicDefense"); info.AttackRange = item.ReadUInt16("AttackRange"); info.AttackSpeed = item.ReadUInt16("AttackSpeed"); info.FrayMode = item.ReadByte("FrayMode"); info.RepairMode = item.ReadByte("RepairMode"); info.TypeMask = item.ReadByte("TypeMask"); info.CPPrice = item.ReadUInt32("EMoneyPrice"); info.Unknown1 = item.ReadUInt32("Unknown1"); info.Unknown2 = item.ReadUInt32("Unknown2"); info.CriticalStrike = item.ReadUInt32("CriticalStrike"); info.SkillCriticalStrike = item.ReadUInt32("SkillCriticalStrike"); info.Immunity = item.ReadUInt32("Immunity"); info.Penetration = item.ReadUInt32("Penetration"); info.Block = item.ReadUInt32("Block"); info.BreakThrough = item.ReadUInt32("BreakThrough"); info.CounterAction = item.ReadUInt32("CounterAction"); info.StackLimit = item.ReadUInt32("StackLimit"); info.ResistMetal = item.ReadUInt32("ResistMetal"); info.ResistWood = item.ReadUInt32("ResistWood"); info.ResistWater = item.ReadUInt32("ResistWater"); info.ResistFire = item.ReadUInt32("ResistFire"); info.ResistEarth = item.ReadUInt32("ResistEarth"); info.TypeName = item.ReadString("TypeName"); info.Description = item.ReadString("Description"); info.NameColor = item.ReadUInt32("NameColor"); info.DragonSoulPhase = item.ReadUInt32("DragonSoulPhase"); info.DragonSoulRequirements = item.ReadUInt32("DragonSoulRequirements"); info.Plus = item.ReadByte("StaticPlus"); if (info.IsShield()) info.ItemType = Enums.ItemType.Shield; else if (info.IsArmor()) info.ItemType = Enums.ItemType.Armor; else if (info.IsHeadgear()) info.ItemType = Enums.ItemType.Head; else if (info.IsOneHand()) info.ItemType = Enums.ItemType.OneHand; else if (info.IsTwoHand()) info.ItemType = Enums.ItemType.TwoHand; else if (info.IsArrow()) info.ItemType = Enums.ItemType.Arrow; else if (info.IsBow()) info.ItemType = Enums.ItemType.Bow; else if (info.IsNecklace()) info.ItemType = Enums.ItemType.Necklace; else if (info.IsRing()) info.ItemType = Enums.ItemType.Ring; else if (info.IsBoots()) info.ItemType = Enums.ItemType.Boots; else if (info.IsGarment()) info.ItemType = Enums.ItemType.Garment; else if (info.IsFan()) info.ItemType = Enums.ItemType.Fan; else if (info.IsTower()) info.ItemType = Enums.ItemType.Tower; else if (info.IsSteed()) info.ItemType = Enums.ItemType.Steed; else if (info.IsBottle()) info.ItemType = Enums.ItemType.Bottle; else if (info.IsMountArmor()) info.ItemType = Enums.ItemType.SteedArmor; else info.ItemType = Enums.ItemType.Misc; if (Core.Kernel.ItemInfos.Contains(info.Name)) { nameduplicates++; } if (!Core.Kernel.ItemInfos.TryAddAndDismiss(info.ItemID, info.Name, info)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\tFailed to load items. [ADD]" + Core.Kernel.ItemInfos.Count); Console.ResetColor(); return false; } /*if (!Core.Kernel.SortedItemInfos.Contains(info.ItemID)) { if (!Core.Kernel.SortedItemInfos.TryAdd(info.ItemID, info.Name, new System.Collections.Concurrent.ConcurrentDictionary<byte, Data.ItemInfo>())) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\tFailed to load items. [SORTED]" + Core.Kernel.ItemInfos.Count); Console.ResetColor(); return false; } } if (!Core.Kernel.SortedItemInfos.selectorCollection2[info.Name].TryAdd(info.Quality, info)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\tFailed to load items. [SORTED : NAME]" + Core.Kernel.ItemInfos.Count); Console.ResetColor(); return false; }*/ Console.Clear(); Console.WriteLine("{0}{1}\tLoaded {2} items... Duplicates so far: {3}", wrt, Environment.NewLine, loaded++, nameduplicates); } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} Items... Duplicate names: {1}", Core.Kernel.ItemInfos.Count, nameduplicates); return true; }
private static bool PlayerExists(int DatabaseID) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, true)) { cmd.AddWhereValue("PlayerID", DatabaseID); cmd.Finish("DB_Players"); } return sql.Read(); } }
public static void UpdateAuthentication(Client.AuthClient client) { if (PlayerExists(client.DatabaseUID)) { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.UPDATE, true)) { cmd.AddWhereValue("PlayerID", client.DatabaseUID); cmd.AddUpdateValue("PlayerLastEntityUID", client.EntityUID); cmd.AddUpdateValue("PlayerLoginOK", true); cmd.Finish("DB_Players"); } sql.Execute(); } } else { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.INSERT, false)) { cmd.AddInsertValue("PlayerID", client.DatabaseUID); cmd.AddInsertValue("PlayerNew", true); cmd.AddInsertValue("PlayerAccount", client.Account); cmd.AddInsertValue("PlayerLastEntityUID", client.EntityUID); cmd.AddInsertValue("PlayerLoginOK", true); cmd.AddInsertValue("PlayerServer", client.Server); cmd.Finish("DB_Players"); } sql.Execute(); } } }
public static bool CharacterExists(string Name) { try { using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, true)) { cmd.AddWhereValue("PlayerName", Name); cmd.Finish("DB_Players"); } return sql.Read(); } } catch { return false; } }
/// <summary> /// Loads all the spells. /// </summary> /// <returns></returns> public static bool LoadSpells() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading Spells..."); using (var spellinfo = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(spellinfo, SqlCommandType.SELECT, false)) { cmd.Finish("DB_SpellInfo"); } while (spellinfo.Read()) { Data.Spell spell = new ProjectX_V3_Game.Data.Spell(); spell.ID = spellinfo.ReadUInt16("SpellID"); if (spell.ID == 0) { return false; } spell.SpellID = spellinfo.ReadUInt16("Type"); if (spell.SpellID == 0) { return false; } spell.Sort = spellinfo.ReadByte("Sort"); spell.Crime = spellinfo.ReadBoolean("Crime"); spell.Ground = spellinfo.ReadBoolean("Ground"); spell.Multi = spellinfo.ReadBoolean("Multi"); spell.Target = spellinfo.ReadByte("Target"); spell.Level = spellinfo.ReadByte("SpellLevel"); spell.UseMP = spellinfo.ReadUInt16("UseMP"); spell.Power = spellinfo.ReadUInt16("Power"); if (spell.Power == 0) spell.PowerPercentage = 1; else spell.PowerPercentage = (float)(spell.Power % 1000) / 100; spell.IntoneSpeed = spellinfo.ReadUInt16("IntoneSpeed"); spell.Percentage = spellinfo.ReadByte("SpellPercent"); spell.Duration = spellinfo.ReadByte("StepSecs"); spell.Range = spellinfo.ReadUInt16("Range"); spell.Sector = spell.Range * 20; spell.Distance = spellinfo.ReadUInt16("Distance"); if (spell.Distance >= 4) spell.Distance--; if (spell.Distance > 17) spell.Distance = 17; spell.Status = spellinfo.ReadUInt64("Status"); spell.NeedExp = spellinfo.ReadUInt32("NeedExp"); spell.NeedLevel = spellinfo.ReadByte("NeedLevel"); spell.UseXP = spellinfo.ReadByte("UseXP"); spell.WeaponSubtype = spellinfo.ReadUInt16("WeaponSubtype"); spell.UseEP = spellinfo.ReadByte("UseEP"); spell.NextMagic = spellinfo.ReadUInt16("NextMagic"); spell.UseItem = spellinfo.ReadByte("UseItem"); spell.UseItemNum = spellinfo.ReadByte("UseItemNum"); if (Core.Kernel.SpellInfos.ContainsKey(spell.SpellID)) { Core.Kernel.SpellInfos[spell.SpellID].TryAdd(spell.Level, spell); } else { if (!Core.Kernel.SpellInfos.TryAdd(spell.SpellID)) return false; if (!Core.Kernel.SpellInfos[spell.SpellID].TryAdd(spell.Level, spell)) return false; } switch (spell.SpellID) { case 5010: case 7020: case 1290: case 1260: case 5030: case 5040: case 7000: case 7010: case 7030: case 7040: case 1250: case 5050: case 5020: case 10490: case 1300: if (spell.Distance >= 3) spell.Distance = 3; if (spell.Range > 3) spell.Range = 3; if (!Core.Kernel.WeaponSpells.ContainsKey(spell.WeaponSubtype)) { if (!Core.Kernel.WeaponSpells.TryAdd(spell.WeaponSubtype, spell.SpellID)) { return false; } } break; } } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} Spells...", Core.Kernel.SpellInfos.Count); return true; }
/// <summary> /// Loads all the npc informations and spawns. /// </summary> /// <returns>Returns true if the the infos/spawns were loaded.</returns> public static bool LoadNPCInfo() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\tLoading NPCs..."); using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString"))) { using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, false)) { cmd.Finish("DB_NPCInfo"); } while (sql.Read()) { Entities.NPC npc = new ProjectX_V3_Game.Entities.NPC(); npc.EntityUID = sql.ReadUInt32("NPCID"); ushort mapid = sql.ReadUInt16("MapID"); if (mapid == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load npcs. [MAPID]"); Console.ResetColor(); return false; } Maps.Map map; Core.Kernel.Maps.TrySelect(mapid, out map); npc.Map = map; if (!npc.Map.EnterMap(npc)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load npcs. [MAP]"); Console.ResetColor(); return false; } npc.Mesh = sql.ReadUInt16("Mesh"); npc.Flag = sql.ReadUInt32("Flag"); npc.Name = sql.ReadString("NPCName"); npc.X = sql.ReadUInt16("X"); npc.Y = sql.ReadUInt16("Y"); npc.NPCType = (Enums.NPCType)Enum.Parse(typeof(Enums.NPCType), sql.ReadString("Type")); npc.Avatar = sql.ReadByte("Avatar"); if (!Core.Kernel.NPCs.TryAdd(npc.EntityUID, npc)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load npcs. [ADD]"); Console.ResetColor(); return false; } } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tLoaded {0} NPCs...", Core.Kernel.NPCs.Count); return true; }