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);
     }
 }
Пример #3
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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());
            }
        }
Пример #9
0
        /// <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;
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        /// <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);
            }
        }
Пример #12
0
 /// <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);
 }
Пример #13
0
 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;
     }
 }
Пример #16
0
        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);
        }
Пример #18
0
 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;
 }
Пример #19
0
 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);
     }
 }
Пример #21
0
        /// <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;
 }
Пример #23
0
        /// <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;
        }
Пример #24
0
 /// <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);
Пример #25
0
 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);
        }
Пример #27
0
 /// <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);
Пример #28
0
 public override void EvalTrigger(ref TerrariaApi.Server.GetDataEventArgs dataEventArgs, ref bool stopProcessing)
 {
     PullTrigger(ref dataEventArgs, "Always pulled", ref stopProcessing, true);
 }