using System; using System.Collections.Generic; using System.Linq; using System.Text; using SnowLight.Game.Sessions; using SnowLight.Game.Rooms; using SnowLight.Specialized; using SnowLight.Storage; using SnowLight.Game.Misc; using SnowLight.Communication.Outgoing; using SnowLight.Game.Items; using SnowLight.Util; using System.IO; namespace SnowLight.Game.Items.DefaultBehaviorHandlers { public static class BattleHandler { public static bool stado = true; public static void Register() { ItemEventDispatcher.RegisterEventHandler(ItemBehavior.BlueBBGate, new ItemEventHandler(HandleBattleBlue)); ItemEventDispatcher.RegisterEventHandler(ItemBehavior.GreenBBGate, new ItemEventHandler(HandleBattleGreen)); ItemEventDispatcher.RegisterEventHandler(ItemBehavior.RedBBGate, new ItemEventHandler(HandleBattleRed)); ItemEventDispatcher.RegisterEventHandler(ItemBehavior.YellowBBGate, new ItemEventHandler(HandleBattleYellow)); ItemEventDispatcher.RegisterEventHandler(ItemBehavior.BBBaldosa, new ItemEventHandler(HandleBattleBaldosa)); } private static bool HandleBattleBlue(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { try { switch (Event) { case ItemEventType.UpdateTick: List ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List ItemsToMove = new List(); foreach (RoomActor Actor in ActorsToMove) { Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Actor.Name)); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { string ts = MySqlClient.ReadString("SELECT bb_color FROM characters WHERE username LIKE '" + Actor.Name + "'"); if (ts != "0") { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = '0' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } else { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = 'b' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } Actor.ApplyEffect(Actor.BattleDoor ? 0 : 35); Actor.BattleDoor = !Actor.BattleDoor; } } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(1); break; } } catch (Exception e) { Output.WriteLine("Error crítico deectado: " + e.Message + "\n\n" + e.StackTrace, OutputLevel.CriticalError); FileStream errWriter = new System.IO.FileStream(@"Logs\Critical_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes(Output.FormatTimestamp() + "Error detectado:" + e.Message + "\r\n" + e.StackTrace + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Error crítico guardado entre los Logs", OutputLevel.Warning); } return true; } private static bool HandleBattleYellow(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { try { switch (Event) { case ItemEventType.UpdateTick: List ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List ItemsToMove = new List(); foreach (RoomActor Actor in ActorsToMove) { Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Actor.Name)); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { string ts = MySqlClient.ReadString("SELECT bb_color FROM characters WHERE username LIKE '" + Actor.Name + "'"); if (ts != "0") { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = '0' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } else { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = 'y' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } Actor.ApplyEffect(Actor.BattleDoor ? 0 : 36); Actor.BattleDoor = !Actor.BattleDoor; } } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(1); break; } } catch (Exception e) { Output.WriteLine("Error crítico deectado: " + e.Message + "\n\n" + e.StackTrace, OutputLevel.CriticalError); FileStream errWriter = new System.IO.FileStream(@"Logs\Critical_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes(Output.FormatTimestamp() + "Error detectado:" + e.Message + "\r\n" + e.StackTrace + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Error crítico guardado entre los Logs", OutputLevel.Warning); } return true; } private static bool HandleBattleRed(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { try { switch (Event) { case ItemEventType.UpdateTick: List ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List ItemsToMove = new List(); foreach (RoomActor Actor in ActorsToMove) { Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Actor.Name)); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { string ts = MySqlClient.ReadString("SELECT bb_color FROM characters WHERE username LIKE '" + Actor.Name + "'"); if (ts != "0") { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = '0' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } else { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = 'r' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } Actor.ApplyEffect(Actor.BattleDoor ? 0 : 33); Actor.BattleDoor = !Actor.BattleDoor; } } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(1); break; } } catch (Exception e) { Output.WriteLine("Error crítico deectado: " + e.Message + "\n\n" + e.StackTrace, OutputLevel.CriticalError); FileStream errWriter = new System.IO.FileStream(@"Logs\Critical_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes(Output.FormatTimestamp() + "Error detectado:" + e.Message + "\r\n" + e.StackTrace + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Error crítico guardado entre los Logs", OutputLevel.Warning); } return true; } private static bool HandleBattleGreen(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { try { switch (Event) { case ItemEventType.UpdateTick: List ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List ItemsToMove = new List(); { foreach (RoomActor Actor in ActorsToMove) { Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Actor.Name)); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { string ts = MySqlClient.ReadString("SELECT bb_color FROM characters WHERE username LIKE '" + Actor.Name + "'"); if (ts != "0") { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = '0' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } else { MySqlClient.ExecuteNonQuery("UPDATE characters SET bb_color = 'g' WHERE id = '" + TargetSession.CharacterId + "' LIMIT 1"); } Actor.ApplyEffect(Actor.BattleDoor ? 0 : 34); Actor.BattleDoor = !Actor.BattleDoor; } } } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(1); break; } } catch (Exception e) { Output.WriteLine("Error crítico deectado: " + e.Message + "\n\n" + e.StackTrace, OutputLevel.CriticalError); FileStream errWriter = new System.IO.FileStream(@"Logs\Critical_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes(Output.FormatTimestamp() + "Error detectado:" + e.Message + "\r\n" + e.StackTrace + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Error crítico guardado entre los Logs", OutputLevel.Warning); } return true; } private static bool HandleBattleBaldosa(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { try { switch (Event) { case ItemEventType.UpdateTick: List ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List ItemsToMove = new List(); foreach (RoomActor Actor in ActorsToMove) { Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Actor.Name)); Instance.BroadcastMessage(BattleBaldosaEventComposer.Compose(Item.Id, TargetSession.CharacterId)); } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(1); break; } } catch (Exception e) { Output.WriteLine("Error crítico deectado: " + e.Message + "\n\n" + e.StackTrace, OutputLevel.CriticalError); FileStream errWriter = new System.IO.FileStream(@"Logs\Critical_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes(Output.FormatTimestamp() + "Error detectado:" + e.Message + "\r\n" + e.StackTrace + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Error crítico guardado entre los Logs", OutputLevel.Warning); } return true; } } }