private static void RecycleItems(Session Session, ClientMessage Message) { if (!mEnabled) { Session.SendData(NotificationMessageComposer.Compose("The recycler is temporarily disabled. Please check back later.")); return; } int Amount = Message.PopWiredInt32(); RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId); if (Instance == null || Amount != 5) { return; } ItemDefinition Reward = ItemDefinitionManager.GetDefinition(GetRandomReward()); if (Reward == null) { return; } List <Item> ItemsToRecycle = new List <Item>(); for (int i = 0; i < 5; i++) { Item Item = Session.InventoryCache.GetItem(Message.PopWiredUInt32()); if (Item == null || !Item.Definition.AllowRecycle || ItemsToRecycle.Contains(Item)) { return; } ItemsToRecycle.Add(Item); } Item NewItem = null; using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { foreach (Item Item in ItemsToRecycle) { Session.InventoryCache.RemoveItem(Item.Id); Item.RemovePermanently(MySqlClient); Session.SendData(InventoryItemRemovedComposer.Compose(Item.Id)); } NewItem = ItemFactory.CreateItem(MySqlClient, Reward.Id, Session.CharacterId, string.Empty, string.Empty, 0); } Session.InventoryCache.Add(NewItem); Session.SendData(RecyclerResultComposer.Compose(true, NewItem.Id)); Session.SendData(InventoryItemAddedComposer.Compose(NewItem)); }
public static ServerMessage Compose(Dictionary <int, List <uint> > Rewards) { ServerMessage Message = new ServerMessage(OpcodesOut.CATALOG_RECYCLER_REWARDS); Message.AppendInt32(Rewards.Count); foreach (KeyValuePair <int, List <uint> > Level in Rewards) { int ChanceDisplay = 0; switch (Level.Key) { case 5: ChanceDisplay = 2000; break; case 4: ChanceDisplay = 200; break; case 3: ChanceDisplay = 40; break; case 2: ChanceDisplay = 4; break; } Message.AppendInt32(Level.Key); Message.AppendInt32(ChanceDisplay); Message.AppendInt32(Level.Value.Count); foreach (uint ItemId in Level.Value) { ItemDefinition Definition = ItemDefinitionManager.GetDefinition(ItemId); Message.AppendStringWithBreak(Definition.TypeLetter); Message.AppendUInt32(Definition.SpriteId); } } return(Message); }
public static void Main(string[] args) { mAlive = true; DateTime InitStart = DateTime.Now; // Set up basic output, configuration, etc Output.InitializeStream(true, OutputLevel.DebugInformation); Output.WriteLine("Initializing Snowlight..."); ConfigManager.Initialize(Constants.DataFileDirectory + "\\server-main.cfg"); Output.SetVerbosityLevel((OutputLevel)ConfigManager.GetValue("output.verbositylevel")); // Load Lang LangManager.Initialize(Constants.LangFileDirectory + "\\lang_" + ConfigManager.GetValue("lang") + ".lang"); // Process args foreach (string arg in args) { Output.WriteLine("Command line argument: " + arg); Input.ProcessInput(arg.Split(' ')); } try { // Initialize and test database Output.WriteLine("Initializing MySQL manager..."); SqlDatabaseManager.Initialize(); // Initialize network components Output.WriteLine("Setting up server listener on port " + (int)ConfigManager.GetValue("net.bind.port") + "..."); mServer = new SnowTcpListener(new IPEndPoint(IPAddress.Any, (int)ConfigManager.GetValue("net.bind.port")), (int)ConfigManager.GetValue("net.backlog"), new OnNewConnectionCallback( SessionManager.HandleIncomingConnection)); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Output.WriteLine("Resetting database counters and statistics..."); PerformDatabaseCleanup(MySqlClient); Output.WriteLine("Initializing game components and workers..."); // Core DataRouter.Initialize(); // Sessions, characters Handshake.Initialize(); GlobalHandler.Initialize(); SessionManager.Initialize(); CharacterInfoLoader.Initialize(); RightsManager.Initialize(MySqlClient); SingleSignOnAuthenticator.Initialize(); // Room management and navigator RoomManager.Initialize(MySqlClient); RoomInfoLoader.Initialize(); RoomHandler.Initialize(); RoomItemHandler.Initialize(); Navigator.Initialize(MySqlClient); // Help and moderation HelpTool.Initialize(MySqlClient); ModerationPresets.Initialize(MySqlClient); ModerationTicketManager.Initialize(MySqlClient); ModerationHandler.Initialize(); ModerationBanManager.Initialize(MySqlClient); // Catalog, pets and items ItemDefinitionManager.Initialize(MySqlClient); CatalogManager.Initialize(MySqlClient); CatalogPurchaseHandler.Initialize(); Inventory.Initialize(); ItemEventDispatcher.Initialize(); PetDataManager.Initialize(MySqlClient); // Messenger MessengerHandler.Initialize(); // Achievements and quests AchievementManager.Initialize(MySqlClient); QuestManager.Initialize(MySqlClient); // Misc/extras CrossdomainPolicy.Initialize("Data\\crossdomain.xml"); InfobusManager.Initialize(); ActivityPointsWorker.Initialize(); BotManager.Initialize(MySqlClient); InterstitialManager.Initialize(MySqlClient); ChatEmotions.Initialize(); EffectsCacheWorker.Initialize(); RecyclerManager.Initialize(MySqlClient); DrinkSetManager.Initialize(MySqlClient); SongManager.Initialize(); TradeHandler.Initialize(); RandomGenerator.Initialize(); StatisticsSyncUtil.Initialize(); // Polish WarningSurpressors.Initialize(); } } catch (Exception e) { HandleFatalError("Could not initialize Snowlight: " + e.Message + "\n" + e.StackTrace); return; } // Init complete TimeSpan TimeSpent = DateTime.Now - InitStart; Output.WriteLine("The server has initialized successfully (" + Math.Round(TimeSpent.TotalSeconds, 2) + " seconds). Ready for connections.", OutputLevel.Notification); Output.WriteLine((string)LangManager.GetValue("initialized.info.cmd"), OutputLevel.Notification); Console.Beep(); Input.Listen(); // This will make the main thread process console while Program.Alive. }
private void ProcessData(byte[] Data) { if (Data.Length == 0) { return; } ASCIIEncoding enc = new ASCIIEncoding(); String command = enc.GetString(Data); command = command.Replace("\r\n", "").Trim(); String[] bits = command.Split(Convert.ToChar(1)); command = bits[0]; Session Target = null; switch (command) { case "status": SendData("1"); break; case "human": is_human = true; SendData("Welcome. To get a list of commands type commands."); break; case "close": case "exit": SendData("Bye"); stop(mId); break; case "ha": if (bits.Length < 2) { SendData("Command must be ha <message>"); break; } string Alert = UserInputFilter.FilterString(bits[1]); SessionManager.BroadcastPacket(UserAlertModernComposer.Compose("Important notice from Hotel Management", Alert)); break; case "update_catalog": using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { CatalogManager.RefreshCatalogData(MySqlClient); } break; case "update_items": using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { ItemDefinitionManager.Initialize(MySqlClient); } break; case "premium": if (bits.Length < 3 || (bits[1] != "enable" && bits[1] != "disable")) { SendData("Command must be premium (enable|disable) <userid>"); break; } Target = SessionManager.GetSessionByCharacterId(Convert.ToUInt32(bits[2])); if (Target == null) { SendData("User not online"); break; } if (bits[1] == "enable" && !Target.CharacterInfo.IsPremium) { Target.CharacterInfo.IsPremium = true; Target.SendData(UserAlertModernComposer.Compose("Premium", "Your premium was activated")); ServerMessage Welcome = new ServerMessage(575); Welcome.AppendInt32(1); Welcome.AppendInt32(0); Welcome.AppendInt32(1); Target.SendData(Welcome); } else if (bits[1] == "disable" && Target.CharacterInfo.IsPremium) { ServerMessage Welcome = new ServerMessage(575); Welcome.AppendInt32(0); Welcome.AppendInt32(1); Welcome.AppendInt32(0); Target.SendData(Welcome); Target.CharacterInfo.IsPremium = false; Target.SendData(UserAlertModernComposer.Compose("Premium", "Your premium was deactivated")); } Target.SendData(CatalogUpdatedNotificationComposer.Compose()); SendData("OK"); break; case "update_badges": if (bits.Length < 2) { SendData("Command must be update_badges <userid>"); break; } Target = SessionManager.GetSessionByCharacterId(Convert.ToUInt32(bits[1])); if (Target == null) { SendData("User not online"); break; } using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Target.AchievementCache.ReloadCache(MySqlClient); Target.BadgeCache.ReloadCache(MySqlClient, Target.AchievementCache); RoomInstance Instance = RoomManager.GetInstanceByRoomId(Target.CurrentRoomId); if (Instance != null) { Instance.BroadcastMessage(RoomUserBadgesComposer.Compose(Target.CharacterId, Target.BadgeCache.EquippedBadges)); } } SendData("OK"); break; case "": break; default: SendData("Unknown Command."); break; } if (!is_human) { stop(mId); } }
public static void Main(string[] args) { mAlive = true; DateTime InitStart = DateTime.Now; // Set up basic output Console.WriteLine("Initializing Snowlight..."); // Cannot be localized before config+lang is loaded // Load configuration, translation, and re-configure output from config data ConfigManager.Initialize(Constants.DataFileDirectory + "server-main.cfg"); Output.InitializeStream(true, (OutputLevel)ConfigManager.GetValue("output.verbositylevel")); Output.WriteLine("Initializing Snowlight..."); Localization.Initialize(Constants.LangFileDirectory + "lang_" + ConfigManager.GetValue("lang") + ".lang"); // Process args foreach (string arg in args) { Output.WriteLine(Localization.GetValue("core.init.cmdarg", arg)); Input.ProcessInput(arg.Split(' ')); } try { // Initialize and test database Output.WriteLine(Localization.GetValue("core.init.mysql")); SqlDatabaseManager.Initialize(); // Initialize network components Output.WriteLine(Localization.GetValue("core.init.net", ConfigManager.GetValue("net.bind.port").ToString())); mServer = new SnowTcpListener(new IPEndPoint((IPAddress)ConfigManager.GetValue("net.bind.ip"), (int)ConfigManager.GetValue("net.bind.port")), (int)ConfigManager.GetValue("net.backlog"), new OnNewConnectionCallback( SessionManager.HandleIncomingConnection)); Output.WriteLine(Localization.GetValue("core.init.net", ConfigManager.GetValue("net.cmd.bind.port").ToString())); musServer = new SnowTcpListener(new IPEndPoint((IPAddress)ConfigManager.GetValue("net.cmd.bind.ip"), (int)ConfigManager.GetValue("net.cmd.bind.port")), (int)ConfigManager.GetValue("net.backlog"), new OnNewConnectionCallback( CommandListener.parse)); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Output.WriteLine(Localization.GetValue("core.init.dbcleanup")); PerformDatabaseCleanup(MySqlClient); Output.WriteLine(Localization.GetValue("core.init.game")); // Core DataRouter.Initialize(); // Sessions, characters Handshake.Initialize(); GlobalHandler.Initialize(); SessionManager.Initialize(); CharacterInfoLoader.Initialize(); RightsManager.Initialize(MySqlClient); SingleSignOnAuthenticator.Initialize(); // Room management and navigator RoomManager.Initialize(MySqlClient); RoomInfoLoader.Initialize(); RoomHandler.Initialize(); RoomItemHandler.Initialize(); Navigator.Initialize(MySqlClient); // Help and moderation HelpTool.Initialize(MySqlClient); ModerationPresets.Initialize(MySqlClient); ModerationTicketManager.Initialize(MySqlClient); ModerationHandler.Initialize(); ModerationBanManager.Initialize(MySqlClient); // Catalog, pets and items ItemDefinitionManager.Initialize(MySqlClient); CatalogManager.Initialize(MySqlClient); CatalogPurchaseHandler.Initialize(); Inventory.Initialize(); ItemEventDispatcher.Initialize(); PetDataManager.Initialize(MySqlClient); // Messenger MessengerHandler.Initialize(); // Achievements and quests AchievementManager.Initialize(MySqlClient); QuestManager.Initialize(MySqlClient); // Misc/extras CrossdomainPolicy.Initialize("Data\\crossdomain.xml"); InfobusManager.Initialize(); ActivityPointsWorker.Initialize(); BotManager.Initialize(MySqlClient); InterstitialManager.Initialize(MySqlClient); ChatEmotions.Initialize(); EffectsCacheWorker.Initialize(); RecyclerManager.Initialize(MySqlClient); DrinkSetManager.Initialize(MySqlClient); SongManager.Initialize(); TradeHandler.Initialize(); RandomGenerator.Initialize(); StatisticsSyncUtil.Initialize(); Wordfilter.Initialize(MySqlClient); // Polish WarningSurpressors.Initialize(); } } catch (Exception e) { HandleFatalError(Localization.GetValue("core.init.error.details", new string[] { e.Message, e.StackTrace })); return; } // Init complete TimeSpan TimeSpent = DateTime.Now - InitStart; Output.WriteLine(Localization.GetValue("core.init.ok", Math.Round(TimeSpent.TotalSeconds, 2).ToString()), OutputLevel.Notification); Output.WriteLine((string)Localization.GetValue("core.init.ok.cmdinfo"), OutputLevel.Notification); Console.Write("$" + Environment.UserName.ToLower() + "@snowlight> "); Console.Beep(); Input.Listen(); // This will make the main thread process console while Program.Alive. }