private void OnTransform(TerrariaApi.Server.NpcTransformationEventArgs Args) { if (Args.Handled) { return; } Terraria.NPC abc = new Terraria.NPC(); }
public override void EvalTrigger(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing) { long finalPPU; if ((finalPPU = IncrementForUser(ref dataEventArgs)) > threshold) { PullTrigger(ref dataEventArgs, "Exceeded threshold of " + threshold, ref stopProcessing); } }
public override void EvalAction(ref TerrariaApi.Server.GetDataEventArgs dataArgs, ref bool stopProcessing) { Terraria.Player player = Terraria.Main.player.ElementAtOrDefault(dataArgs.Msg.whoAmI); if (player == null) { //TODO: Log error return; } Terraria.NetMessage.SendData((int)PacketTypes.Disconnect, player.whoAmi, text: ""); }
public static unsafe StrikeNPCHeldItem MarshalFromBuffer(ref TerrariaApi.Server.GetDataEventArgs args) { StrikeNPCHeldItem npc; fixed (byte* _buffer = args.Msg.readBuffer) { byte *bufferOffset = _buffer + args.Index; npc = *((StrikeNPCHeldItem*)bufferOffset); } return npc; }
/// <summary> /// Increments the packets per user counter and returns the result; /// </summary> long IncrementForUser(ref TerrariaApi.Server.GetDataEventArgs dataArgs) { int whoAmI = dataArgs.Msg.whoAmI; lock (packetsPerUserLock) { if (packetsPerUser.ContainsKey(whoAmI) == false) { packetsPerUser.Add(whoAmI, 0); } return ++packetsPerUser[whoAmI]; } }
bool GetRangeOfPacket(ref TerrariaApi.Server.GetDataEventArgs dataArgs) { Vector2 playerPosition = Terraria.Main.player[dataArgs.Msg.whoAmI].position; Vector2 destinationPosition = default(Vector2); if (dataArgs.MsgID == PacketTypes.NpcStrike) { Packets.StrikeNPC strikeNpc = Packets.StrikeNPC.MarshalFromBuffer(ref dataArgs); destinationPosition = Terraria.Main.npc[strikeNpc.NPCID].position; } return VectorIntersects(playerPosition, destinationPosition, thresholdRange); }
public override void EvalAction(ref TerrariaApi.Server.GetDataEventArgs dataArgs, ref bool stopProcessing) { Chain destinationChain = null; if (parentChain == null || string.IsNullOrEmpty(chainName) == true) { //TODO: Log error return; } if ((destinationChain = parentChain.Parent.GetChainByName(chainName)) == null) { return; } destinationChain.ProcessChain(ref dataArgs); }
private void Server_Join(TerrariaApi.Server.JoinEventArgs args) { Terraria.Player player = null; if ((player = Terraria.Main.player.ElementAtOrDefault(args.Who)) == null) { return; } if (invalidCharactersRegex.IsMatch(player.name) == true) { StringBuilder sb = new StringBuilder(); foreach (Match m in invalidCharactersRegex.Matches(player.name)) { sb.Append(m.Value); } Terraria.NetMessage.SendData((int)PacketTypes.Disconnect, player.whoAmI, text: "Your name cannot contain these characters: " + sb.ToString()); } }
/// <summary> /// Gets a flag indicating whether the chain is elegible to execute from it's specified /// filters. /// </summary> /// <returns><c>true</c>, if the chain can be processed, <c>false</c> otherwise.</returns> /// <param name="dataArgs">Data arguments.</param> public bool ChainCanProcess(ref TerrariaApi.Server.GetDataEventArgs dataArgs, bool ignoreFilters) { if (ignoreFilters == true) { return true; } if (this.Filters == null) { return false; } foreach (Filter f in this.Filters) { bool stopProcessing = false; THLog.Debug("Chain processor: {0}: Entering filter {1}", Name, f); if (f.EvalFilter(ref dataArgs, ref stopProcessing) == true) { THLog.Debug(ConsoleColor.Green, "Chain processor: {0}: Filter {1} eligible", Name, f); return true; } if (stopProcessing == true) { return false; } THLog.Debug("Chain processor: {0}: Filter {1} not eligible", Name, f); } return false; }
/// <summary> /// Processes the chain with the supplied data arguments, and optionally ignores all the filters on it. /// </summary> /// <param name="dataArgs">Data arguments.</param> /// <param name="ignoreFilters">If set to <c>true</c> ignore filters.</param> public void ProcessChain(ref TerrariaApi.Server.GetDataEventArgs dataArgs, bool ignoreFilters = false) { THLog.Debug("Chain processor: {0}: Entering chain", Name); if (ChainCanProcess(ref dataArgs, ignoreFilters) == false) { THLog.Debug("Chain processor: {0}: skipping", Name); return; } ProcessTriggers(ref dataArgs); }
/// <summary> /// Processes the actions on this chain. /// </summary> /// <param name="dataArgs">Data arguments.</param> protected void ProcessActions(ref TerrariaApi.Server.GetDataEventArgs dataArgs) { foreach (Action a in this.Actions) { bool stopProcessing = false; THLog.Debug("Chain processor: {0}: Entering action {1}", Name, a); a.EvalAction(ref dataArgs, ref stopProcessing); if (stopProcessing == true) { THLog.Debug("Chain processor: {0}: Breaking action {1}", Name, a); break; } THLog.Debug("Chain processor: {0}: Leaving action {1}", Name, a); } }
/// <summary> /// Occurs when a trigger pulls in this chain. From here the chains actions get invoked. /// </summary> internal void TriggerPulled(Trigger trigger, ref TerrariaApi.Server.GetDataEventArgs dataArgs, bool silentPull) { if (silentPull == false) { THLog.Log(LogLevel.Error, "Chain processor: {0}: Trigger {1} has been pulled!", this.Name, trigger); Interlocked.Increment(ref Parent.triggerPullCounter); } ProcessActions(ref dataArgs); }
public override bool EvalFilter(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing) { stopProcessing = true; return true; }
private void OnServerLeave(TerrariaApi.Server.LeaveEventArgs Args) { TShockAPI.TSPlayer aPlayer = TShockAPI.TShock.Players[Args.Who]; if (aPlayer != null && aPlayer.RealPlayer) { IBasicProperties ReplyProps = OverallInformations.channel.CreateBasicProperties(); Request01 RequestContent = new Request01() { RequestType = "APlayerLeave", Parameters = new List<string>() { aPlayer.Name } }; string RequestString = Newtonsoft.Json.JsonConvert.SerializeObject(RequestContent); byte[] RequestBytes = Encoding.UTF8.GetBytes(RequestString); OverallInformations.channel.BasicPublish(exchange: OverallInformations.LauncherServerTShockExchange, routingKey: OverallInformations.LauncherServerGetRequestFromTShockRouterKey, basicProperties: ReplyProps, body: RequestBytes); } }
private void OnSpawn(TerrariaApi.Server.NpcSpawnEventArgs Args) { if (Args.Handled) { return; } }
public void iniciar(TerrariaApi.Server.NpcStrikeEventArgs e) { if (e.Handled) { return; } if (e.Player == null || e.Npc.active == false || e.Npc.life <= 0 || e.Npc.SpawnedFromStatue == true || e.Npc.netID == 488) { return; } if (!(statsManager.loadDBInfo(e.Player.name))) { return; } if (cnf.BlockNPCs.ContainsKey(e.Npc.netID)) { return; } Color melee = new Color(255, 120, 0); Color ranged = new Color(0, 255, 0); Color magic = new Color(0, 255, 255); TClassCharacterInfo info = TClasesPlugin.statsmanager.GetUserByName(e.Player.name); AddNPCDamage(e.Npc, e.Player, e.Damage, e.Critical); #region Cuerpo a cuerpo if (TShock.Players[e.Player.whoAmI].SelectedItem.melee) { if (e.Damage >= e.Npc.life) { return; } int damage = (info.Str * 3); if (damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + damage, (int)melee.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + damage; return; } #endregion #region Rango if (TShock.Players[e.Player.whoAmI].SelectedItem.ranged) { if (e.Damage >= e.Npc.life) { return; } int damage = (info.Str * 3); if (damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + damage, (int)ranged.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + damage; return; } #endregion #region Magia if (TShock.Players[e.Player.whoAmI].SelectedItem.magic) { if (e.Damage >= e.Npc.life) { return; } int damage = (info._Int * 3); if (damage > 0) { NetMessage.SendData((int)PacketTypes.CreateCombatText, -1, -1, "+" + damage, (int)magic.PackedValue, e.Npc.position.X, e.Npc.position.Y, 0, 0, 0, 0); } e.Damage = e.Damage + damage; return; } #endregion }
private void OnServerCommand(TerrariaApi.Server.CommandEventArgs Args) { if (Args.Handled) { return; } IBasicProperties ReplyProps = OverallInformations.channel.CreateBasicProperties(); Request01 RequestContent = new Request01() { RequestType = "ServerCommand", Parameters = new List<string>() { Newtonsoft.Json.JsonConvert.SerializeObject(new TShockACommandInformations() { CommandText = Args.Command }) } }; string RequestString = Newtonsoft.Json.JsonConvert.SerializeObject(RequestContent); byte[] RequestBytes = Encoding.UTF8.GetBytes(RequestString); OverallInformations.channel.BasicPublish(exchange: OverallInformations.LauncherServerTShockExchange, routingKey: OverallInformations.LauncherServerGetRequestFromTShockRouterKey, basicProperties: ReplyProps, body: RequestBytes); }
public override bool EvalFilter(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing) { return (anyPacket == true) || dataEventArgs != null && msgId.HasValue == true && msgId.Value == (int)dataEventArgs.MsgID; }
private void onPlayerJoin(TerrariaApi.Server.JoinEventArgs e) { lock (players) players.Add(new Player(e.Who)); }
public override void EvalTrigger(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing) { if (GetRangeOfPacket(ref dataEventArgs) == false) { PullTrigger(ref dataEventArgs, "Packet was outside of allowable range.", ref stopProcessing); } }
/// <summary> /// Processes the triggers in this chain. If a trigger gets pulled then the TriggerPulled event will be /// raised and no further triggers will be processed for this loop. /// </summary> /// <param name="dataArgs">Data arguments.</param> protected void ProcessTriggers(ref TerrariaApi.Server.GetDataEventArgs dataArgs) { foreach (Trigger t in this.Triggers) { bool stopProcessing = false; THLog.Debug("Chain processor: {0}: Entering trigger {1}", Name, t); t.EvalTrigger(ref dataArgs, ref stopProcessing); THLog.Debug("Chain processor: {0}: Leaving trigger {1}", Name, t); if (stopProcessing == true) { THLog.Debug(ConsoleColor.Yellow, "Chain processor: {0}: Stopping processing {1}", this.Name, t); break; } } }
public override void EvalAction(ref TerrariaApi.Server.GetDataEventArgs dataArgs, ref bool stopProcessing) { dataArgs.Handled = true; }
/// <summary> /// Pulls the trigger. /// /// Pulling the trigger means that the trigger has exceeded its sanity check and the chain is to perform its actions. /// </summary> /// <param name="dataEventArgs">The ${ParameterType} instance containing the event data.</param> /// <param name="message">Message.</param> protected virtual void PullTrigger(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, string message, ref bool stopProcessing, bool silentPull = false) { parentChain.TriggerPulled(this, ref dataEventArgs, silentPull); //stopProcessing = true; }
/// <summary> /// Evals the trigger. /// /// Forces the trigger to evaluate the data. If the trigger is to pull, it must call PullTrigger(). /// </summary> /// <param name="dataEventArgs">The ${ParameterType} instance containing the event data.</param> /// <param name="stopProcessing">Stop processing.</param> public abstract void EvalTrigger(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing);
private void onPlayerLeave(TerrariaApi.Server.LeaveEventArgs e) { lock (players) for (int i = 0; i < players.Count; i++) { if (players[i].index == e.Who) { players.RemoveAt(i); break; } } }
private void OnServerChat(TerrariaApi.Server.ServerChatEventArgs Args) { if (Args.Handled) { return; } TShockAPI.TSPlayer aPlayer = TShockAPI.TShock.Players[Args.Who]; IBasicProperties ReplyProps = OverallInformations.channel.CreateBasicProperties(); TShockAChatInformations aChat = new TShockAChatInformations(); if (aPlayer != null) { aChat.PlayerName = aPlayer.Name; } if (aPlayer.User != null) { aChat.UserName = aPlayer.User.Name; } aChat.RawText = Args.Text; Request01 RequestContent = new Request01() { RequestType = "ServerChat", Parameters = new List<string>() { Newtonsoft.Json.JsonConvert.SerializeObject(aChat) } }; string RequestString = Newtonsoft.Json.JsonConvert.SerializeObject(RequestContent); byte[] RequestBytes = Encoding.UTF8.GetBytes(RequestString); OverallInformations.channel.BasicPublish(exchange: OverallInformations.LauncherServerTShockExchange, routingKey: OverallInformations.LauncherServerGetRequestFromTShockRouterKey, basicProperties: ReplyProps, body: RequestBytes); }
/// <summary> /// Evals the filter. Derived classes must implement this, and return true if the filter succeeded, /// false otherwise. /// </summary> /// <returns><c>true</c>, if filter was evaled, <c>false</c> otherwise.</returns> /// <param name="dataEventArgs">The ${ParameterType} instance containing the event data.</param> public abstract bool EvalFilter(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing);
public override void EvalTrigger(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing) { PullTrigger(ref dataEventArgs, "Always pulled", ref stopProcessing, true); }