public static bool OnGreetPlayer(int playerId) { #if Full_API var player = Main.player[playerId]; var ctx = new HookContext { Connection = player.Connection.Socket, Player = player, Sender = player }; var args = new HookArgs.PlayerPreGreeting { Slot = playerId, Motd = String.IsNullOrEmpty(Main.motd) ? (Lang.mp[18] + " " + Main.worldName) : Main.motd, MotdColour = new Microsoft.Xna.Framework.Color(255, 240, 20) }; HookPoints.PlayerPreGreeting.Invoke(ref ctx, ref args); if (ctx.CheckForKick()) { return false; } if (ctx.Result == HookResult.DEFAULT) { player.SendMessage(args.Motd, 255, args.MotdColour.R, args.MotdColour.G, args.MotdColour.B); string list = ""; for (int i = 0; i < 255; i++) { if (Main.player[i].active) { if (list == "") list += Main.player[i].name; else list = list + ", " + Main.player[i].Name; } } player.SendMessage("Current players: " + list + ".", 255, 255, 240, 20); } ProgramLog.Users.Log("{0} @ {1}: ENTER {2}", Netplay.Clients[playerId].Socket.GetRemoteAddress(), playerId, player.name); var args2 = new HookArgs.PlayerEnteredGame { Slot = playerId }; ctx.SetResult(HookResult.DEFAULT, false); HookPoints.PlayerEnteredGame.Invoke(ref ctx, ref args2); ctx.CheckForKick(); #endif return false; //We implemented our own, so do not continue on with vanilla }
// [Hook] void OnNetMessageReceived(ref HookContext ctx, ref HookArgs.ReceiveNetMessage args) { if (Terraria.Main.ServerSideCharacter) { switch ((Packet)args.PacketId) { case Packet.INVENTORY_DATA: if (!AllowSSCGuestInfo && !ctx.Player.IsAuthenticated) ctx.SetResult(HookResult.IGNORE); break; case Packet.PLAYER_MANA_UPDATE: if (!AllowSSCGuestInfo && !ctx.Player.IsAuthenticated) ctx.SetResult(HookResult.IGNORE); break; case Packet.PLAYER_HEALTH_UPDATE: if (!AllowSSCGuestInfo && !ctx.Player.IsAuthenticated) ctx.SetResult(HookResult.IGNORE); break; } } }
void OnGreetPlayer(ref HookContext ctx, ref HookArgs.PlayerPreGreeting args) { ctx.SetResult(HookResult.IGNORE); var lines = args.Motd.Split(new string[]{ "\\0" }, StringSplitOptions.None); foreach (var line in lines) ctx.Player.SendMessage(line, 255, 0, 0, 255); string list = ""; for (int i = 0; i < 255; i++) { if (Main.player[i].active) { if (list == "") list += Main.player[i].name; else list = list + ", " + Main.player[i].Name; } } ctx.Player.SendMessage("Current players: " + list + ".", 255, 255, 240, 20); }
void OnChat(ref HookContext ctx, ref HookArgs.PlayerChat args) { if (args.Message.Length > 0 && args.Message.Substring(0, 1).Equals("/")) { ProgramLog.Log(ctx.Player.Name + " sent command: " + args.Message); ctx.SetResult(HookResult.IGNORE); UserInput.CommandParser.ParsePlayerCommand(ctx.Player, args.Message); } }
void OnDefaultServerStart(ref HookContext ctx, ref HookArgs.StartDefaultServer args) { if (RunServerCore) { ProgramLog.Log("Starting TDSM's slot server..."); ctx.SetResult(HookResult.IGNORE); ServerCore.Server.StartServer(); } else ProgramLog.Log("Vanilla only specified, continuing on with Re-Logic code..."); }
void OnStartCommandProcessing(ref HookContext ctx, ref HookArgs.StartCommandProcessing args) { ctx.SetResult(HookResult.IGNORE); (new TDSM.API.Misc.ProgramThread("Command", ListenForCommands)).Start(); }
void OnServerStateChange(ref HookContext ctx, ref HookArgs.ServerStateChange args) { ProgramLog.Log("Server state changed to: " + args.ServerChangeState.ToString()); if (args.ServerChangeState == ServerState.Initialising) { if (!String.IsNullOrEmpty(RConBindAddress)) { ProgramLog.Log("Starting RCON Server"); RemoteConsole.RConServer.Start(Path.Combine(Globals.DataPath, "rcon_logins.properties")); } if (Terraria.Main.ServerSideCharacter) { CharacterManager.Init(); } } if (args.ServerChangeState == ServerState.Stopping) { RemoteConsole.RConServer.Stop(); } if (args.ServerChangeState == ServerState.Starting) { Heartbeat.Begin(CoreBuild); } //if (args.ServerChangeState == ServerState.Initialising) #if TDSMServer if (!Server.IsInitialised) { Server.Init(); if (!String.IsNullOrEmpty(RConBindAddress)) { ProgramLog.Log("Starting RCON Server"); RemoteConsole.RConServer.Start(Path.Combine(Globals.DataPath, "rcon_logins.properties")); } if (!String.IsNullOrEmpty(_webServerAddress)) { ProgramLog.Log("Starting Web Server"); WebInterface.WebServer.Begin(_webServerAddress, _webServerProvider); AddCommand("webauth") .WithAccessLevel(AccessLevel.OP) .Calls(WebInterface.WebServer.WebAuthCommand); } } if (args.ServerChangeState == ServerState.Stopping) { RemoteConsole.RConServer.Stop(); WebInterface.WebServer.End(); //if (properties != null && File.Exists(properties.PIDFile.Trim())) //File.Delete(properties.PIDFile.Trim()); } ctx.SetResult(HookResult.IGNORE); //Don't continue on with vanilla code #endif }
void OnNPCSpawned(ref HookContext ctx, ref HookArgs.NPCSpawn args) { if (StopNPCSpawning) ctx.SetResult(HookResult.IGNORE); }
void OnNetMessageSend(ref HookContext ctx, ref HookArgs.SendNetMessage args) { if (Terraria.Main.ServerSideCharacter) { switch ((Packet)args.MsgType) { case Packet.WORLD_DATA: ctx.SetResult(HookResult.IGNORE); var writer = NetMessage.buffer[args.BufferId].writer; writer.Write((int)Main.time); byte value; value = 0; if (Main.dayTime) value += 1; if (Main.bloodMoon) value += 2; if (Main.bloodMoon) value += 4; writer.Write(value); writer.Write((byte)Main.moonPhase); writer.Write((short)Main.maxTilesX); writer.Write((short)Main.maxTilesY); writer.Write((short)Main.spawnTileX); writer.Write((short)Main.spawnTileY); writer.Write((short)Main.worldSurface); writer.Write((short)Main.rockLayer); writer.Write(Main.worldID); writer.Write(Main.worldName); writer.Write((byte)Main.moonType); writer.Write((byte)WorldGen.treeBG); writer.Write((byte)WorldGen.corruptBG); writer.Write((byte)WorldGen.jungleBG); writer.Write((byte)WorldGen.snowBG); writer.Write((byte)WorldGen.hallowBG); writer.Write((byte)WorldGen.crimsonBG); writer.Write((byte)WorldGen.desertBG); writer.Write((byte)WorldGen.oceanBG); writer.Write((byte)Main.iceBackStyle); writer.Write((byte)Main.jungleBackStyle); writer.Write((byte)Main.hellBackStyle); writer.Write(Main.windSpeedSet); writer.Write((byte)Main.numClouds); for (int k = 0; k < 3; k++) writer.Write(Main.treeX[k]); for (int l = 0; l < 4; l++) writer.Write((byte)Main.treeStyle[l]); for (int m = 0; m < 3; m++) writer.Write(Main.caveBackX[m]); for (int n = 0; n < 4; n++) writer.Write((byte)Main.caveBackStyle[n]); if (!Main.raining) Main.maxRaining = 0; writer.Write(Main.maxRaining); value = 0; if (WorldGen.shadowOrbSmashed) value += 1; if (NPC.downedBoss1) value += 2; if (NPC.downedBoss2) value += 4; if (NPC.downedBoss3) value += 8; if (Main.hardMode) value += 16; if (NPC.downedClown) value += 32; if (Main.ServerSideCharacter) value += 64; if (NPC.downedPlantBoss) value += 128; writer.Write(value); value = 0; if (NPC.downedMechBoss1) value += 1; if (NPC.downedMechBoss2) value += 2; if (NPC.downedMechBoss3) value += 4; if (NPC.downedMechBossAny) value += 8; if (Main.cloudBGActive >= 1) value += 16; if (WorldGen.crimson) value += 32; if (Main.pumpkinMoon) value += 64; if (Main.snowMoon) value += 128; writer.Write(value); value = 0; if (Main.expertMode) value += 1; if (Main.fastForwardTime) value += 2; if (Main.slimeRain) value += 4; if (NPC.downedSlimeKing) value += 8; if (NPC.downedQueenBee) value += 16; if (NPC.downedFishron) value += 32; if (NPC.downedMartians) value += 64; if (NPC.downedAncientCultist) value += 128; writer.Write(value); value = 0; if (NPC.downedMoonlord) value += 1; if (NPC.downedHalloweenKing) value += 2; if (NPC.downedHalloweenTree) value += 4; if (NPC.downedChristmasIceQueen) value += 8; if (NPC.downedChristmasSantank) value += 16; if (NPC.downedChristmasTree) value += 32; if (NPC.downedGolemBoss) value += 64; writer.Write(value); writer.Write((sbyte)Main.invasionType); if (SocialAPI.Network != null) writer.Write(SocialAPI.Network.GetLobbyId()); else writer.Write(0); break; } } }
public static void OnPlayerEntering(Player player) { #if Full_API var ctx = new HookContext { Player = player, Sender = player }; var args = new HookArgs.PlayerEnteringGame { Slot = player.whoAmI }; ctx.SetResult(HookResult.DEFAULT, false); HookPoints.PlayerEnteringGame.Invoke(ref ctx, ref args); if (!ctx.CheckForKick()) { NetMessage.SendData(4, -1, player.whoAmI, player.name, player.whoAmI, 0f, 0f, 0f, 0, 0, 0); } #endif }
public static void OnPlayerLeave(Player player) { #if Full_API var ctx = new HookContext { Player = player, Sender = player }; var args = new HookArgs.PlayerLeftGame { Slot = player.whoAmI }; ctx.SetResult(HookResult.DEFAULT, false); HookPoints.PlayerLeftGame.Invoke(ref ctx, ref args); #endif }
void OnInvasionWarning(ref HookContext ctx, ref HookArgs.InvasionWarning args) { if (Main.invasionType == _assignedInvasionType && _invasion != null) { if (Main.invasionSize > 0) { string message = null; if (Main.invasionX < (double)Main.spawnTileX) { //West if (!_notfInbound) { _notfInbound = true; message = "An invasion is approaching from the west!"; } } else if (Main.invasionX > (double)Main.spawnTileX) { //East if (!_notfInbound) { _notfInbound = true; message = "An invasion is approaching from the east!"; } } else { //Arrived message = "The invasion has arrived!"; } if (null != message) NetMessage.SendData(25, -1, -1, message, 255, 175f, 75f, 255f); } ctx.SetResult(HookResult.IGNORE); } }