コード例 #1
0
        internal bool InvokeNetSendData(
            ref int msgType, ref int remoteClient, ref int ignoreClient, ref Terraria.Localization.NetworkText text,
            ref int number, ref float number2, ref float number3, ref float number4, ref int number5,
            ref int number6, ref int number7)
        {
            SendDataEventArgs args = new SendDataEventArgs
            {
                MsgId        = (PacketTypes)msgType,
                remoteClient = remoteClient,
                ignoreClient = ignoreClient,
                text         = text,
                number       = number,
                number2      = number2,
                number3      = number3,
                number4      = number4,
                number5      = number5,
                number6      = number6,
                number7      = number7
            };

            this.NetSendData.Invoke(args);

            msgType      = (int)args.MsgId;
            remoteClient = args.remoteClient;
            ignoreClient = args.ignoreClient;
            text         = args.text;
            number       = args.number;
            number2      = args.number2;
            number3      = args.number3;
            number4      = args.number4;
            number5      = args.number5;
            number6      = args.number6;
            number7      = args.number7;
            return(args.Handled);
        }
コード例 #2
0
ファイル: AxeGrenade.cs プロジェクト: GreatestAlly/Shekels
        public override void Kill(int timeLeft)
        {
            int range = 3;
            int left  = (int)(projectile.Center.X / 16f - (float)range);
            int up    = (int)(projectile.Center.Y / 16f - (float)range);
            int right = (int)(projectile.Center.X / 16f + (float)range);
            int down  = (int)(projectile.Center.Y / 16f + (float)range);

            if (left < 0)
            {
                left = 0;
            }
            if (up < 0)
            {
                up = 0;
            }
            if (right > Main.maxTilesX)
            {
                right = Main.maxTilesX;
            }
            if (down > Main.maxTilesY)
            {
                down = Main.maxTilesY;
            }
            for (int i = left; i <= right; i++)
            {
                for (int j = down; j >= up; j--)
                {
                    float  deltaX   = Math.Abs((float)i - projectile.Center.X / 16f);
                    float  deltaY   = Math.Abs((float)j - projectile.Center.Y / 16f);
                    double distance = Math.Sqrt((double)(deltaX * deltaX + deltaY * deltaY));
                    if (distance < (double)range)
                    {
                        if (Main.tile[i, j].type == TileID.Trees || Main.tile[i, j].type == TileID.PalmTree)
                        {
                            WorldGen.KillTile(i, j, false, false, false);
                            if (!Main.tile[i, j].active() && Main.netMode != 0)
                            {
                                Terraria.Localization.NetworkText text = Terraria.Localization.NetworkText.FromLiteral("");
                                NetMessage.SendData(17, -1, -1, text, 0, (float)i, (float)j, 0f, 0, 0, 0);
                            }
                        }
                    }
                }
            }
            base.Kill(timeLeft);
        }
コード例 #3
0
ファイル: HookManager.cs プロジェクト: Z0kc/TShockMobile
        internal bool InvokeServerBroadcast(ref Terraria.Localization.NetworkText message, ref float r, ref float g, ref float b)
        {
            ServerBroadcastEventArgs args = new ServerBroadcastEventArgs
            {
                Message = message,
                Color   = new Color((int)r, (int)g, (int)b)
            };

            ServerBroadcast.Invoke(args);

            message = args.Message;
            r       = args.Color.R;
            g       = args.Color.G;
            b       = args.Color.B;

            return(args.Handled);
        }
コード例 #4
0
        public override void Run()
        {
            int   tmpI = 0;
            float tmpF = 0;

            Terraria.Localization.NetworkText tmpS = null;

            var vanilla  = this.Method(() => Terraria.NetMessage.SendData(0, -1, -1, Terraria.Localization.NetworkText.Empty, 0, 0, 0, 0, 0, 0, 0));
            var callback = this.Method(() => OTAPI.Callbacks.Terraria.NetMessage.SendData(
                                           ref tmpI, ref tmpI, ref tmpI, ref tmpS, ref tmpI, ref tmpF, ref tmpF, ref tmpF, ref tmpI, ref tmpI, ref tmpI
                                           ));

            //Few stack issues arose trying to inject a callback before for lock, so i'll resort to
            //wrapping the method;

            vanilla.Wrap
            (
                beginCallback: callback,
                endCallback: null,
                beginIsCancellable: true,
                noEndHandling: false,
                allowCallbackInstance: false
            );
        }
コード例 #5
0
 /// <summary>
 /// Injected into the start of Terraria.NetMessage.BroadcastChatMessage.  Return HookResult.Cancelled to supress the broadcast message.
 /// </summary>
 /// <returns>True if the program is to run vanilla code, false otherwise.</returns>
 internal static void AfterBroadcastChatMessage(Terraria.Localization.NetworkText text, ref Color color, ref int ignorePlayer)
 {
     Hooks.BroadcastChatMessage.AfterBroadcastChatMessage?.Invoke(text, ref color, ref ignorePlayer);
 }
コード例 #6
0
        /// <summary>
        /// Injected into the start of Terraria.NetMessage.BroadcastChatMessage.  Return HookResult.Cancelled to supress the broadcast message.
        /// </summary>
        /// <returns>True if the program is to run vanilla code, false otherwise.</returns>
        internal static bool BeforeBroadcastChatMessage(Terraria.Localization.NetworkText text, ref Color color, ref int ignorePlayer)
        {
            var beforeChatMessageHook = Hooks.BroadcastChatMessage.BeforeBroadcastChatMessage;

            return((beforeChatMessageHook?.Invoke(text, ref color, ref ignorePlayer) ?? HookResult.Continue) == HookResult.Continue);
        }
コード例 #7
0
ファイル: Torcher.cs プロジェクト: GreatestAlly/Shekels
        public override void UpdateAccessory(Player player, bool hideVisual)
        {
            int  topX      = (int)(player.Center.X / 16f) - 5;
            int  topY      = (int)(player.Center.Y / 16f) - 5;
            bool torchable = false;
            Tile temp;

            if (!player.HasItem(ItemID.Torch))
            {
                return;
            }
            for (int i = 0; i < 5 * 2; i++)
            {
                for (int j = 0; j < 5 * 2; j++)
                {
                    temp = Main.tile[topX + i, topY + j];
                    if ((temp.collisionType == 0 || temp.type == TileID.Plants || temp.type == TileID.LongMoss) && temp.liquid == 0)
                    {
                        if (temp.wall != 0)
                        {
                            torchable = true;
                        }
                        if ((Main.tile[topX + i - 1, topY + j].collisionType == 1 && Main.tile[topX + i - 1, topY + j].type != 10) || Main.tile[topX + i - 1, topY + j].type == 124)
                        {
                            torchable = true;
                        }
                        if ((Main.tile[topX + i + 1, topY + j].collisionType == 1 && Main.tile[topX + i + 1, topY + j].type != 10) || Main.tile[topX + i + 1, topY + j].type == 124)
                        {
                            torchable = true;
                        }
                        if (Main.tile[topX + i, topY + j + 1].collisionType == 1)
                        {
                            torchable = true;
                        }
                        for (int k = -7; k <= 7; k++)
                        {
                            for (int l = -7; l <= 7; l++)
                            {
                                if (Main.tile[topX + i + k, topY + j + l].type == 4)
                                {
                                    torchable = false;
                                }
                            }
                        }
                        if (torchable)
                        {
                            player.inventory[player.FindItem(ItemID.Torch)].stack -= 1;
                            WorldGen.KillTile(topX + i, topY + j, false, false, false);
                            if (!Main.tile[topX + i, topY + j].active() && Main.netMode == 1)
                            {
                                Terraria.Localization.NetworkText text = Terraria.Localization.NetworkText.FromLiteral("");
                                NetMessage.SendData(17, -1, -1, text, 0, (float)(topX + i), (float)(topY + j), 0f, 0, 0, 0);
                            }
                            WorldGen.PlaceTile(topX + i, topY + j, 4);
                            torchable = false;
                            return;
                        }
                    }
                }
            }
        }
コード例 #8
0
        /// <summary>
        /// Injected into the start of Terraria.NetMessage.BroadcastChatMessage.  Return HookResult.Cancelled to supress the broadcast message.
        /// </summary>
        /// <returns>True if the program is to run vanilla code, false otherwise.</returns>
        internal static void AfterSendChatMessageToClient(Terraria.Localization.NetworkText text, ref Color color, ref int ignorePlayer)
        {
            var beforeChatMessageHook = Hooks.SendChatMessageToClient.AfterSendChatMessageToClient;

            beforeChatMessageHook?.Invoke(text, ref color, ref ignorePlayer);
        }
コード例 #9
0
        /// <summary>
        /// Injected into the start of Terraria.NetMessage.BroadcastChatMessage.  Return HookResult.Cancelled to supress the broadcast message.
        /// </summary>
        /// <returns>True if the program is to run vanilla code, false otherwise.</returns>
        internal static bool BeforeSendChatMessageToClient(Terraria.Localization.NetworkText text, ref Color color, ref int ignorePlayer)
        {
            var beforeChatMessageHook = Hooks.SendChatMessageToClient.BeforeSendChatMessageToClient;

            return((beforeChatMessageHook?.Invoke(text, ref color, ref ignorePlayer) ?? HookResult.Continue) == HookResult.Continue);
        }
コード例 #10
0
 private void Player_DropTombstone(On.Terraria.Player.orig_DropTombstone orig, Terraria.Player self, int coinsOwned, Terraria.Localization.NetworkText deathText, int hitDirection)
 {
     if (!PboneUtilsConfig.Instance.NoMoreGraves)
     {
         orig(self, coinsOwned, deathText, hitDirection);
     }
 }
コード例 #11
0
        private static void OnDraw(DrawArgs args)
        {
            HashSet <int> players;

            if (args.PlayerIndex == -1)
            {
                players = (args.Node.GetRoot() as RootVisualObject).Players;
            }
            else
            {
                players = new HashSet <int>()
                {
                    args.PlayerIndex
                }
            };
            players.Remove(args.ExceptPlayerIndex);
            if (players.Count == 0)
            {
                return;
            }

            // Yes, we are converting HashSet<int> to NetworkText to pass it to NetMessage.SendData for FakeManager...
            Terraria.Localization.NetworkText playerList = FakesEnabled
                ? Terraria.Localization.NetworkText.FromLiteral(String.Concat(players.Select(p => (char)p)))
                : null;

            int size = Math.Max(args.Width, args.Height);

            if (size >= 50 || args.ForcedSection)
            {
                if (FakesEnabled)
                {
                    NetMessage.SendData(10, -1, -1, playerList, args.X, args.Y, args.Width, args.Height);
                }
                else
                {
                    foreach (int i in players)
                    {
                        NetMessage.SendData(10, i, -1, null, args.X, args.Y, args.Width, args.Height);
                    }
                }
                if (args.Frame)
                {
                    int lowX  = Netplay.GetSectionX(args.X);
                    int highX = Netplay.GetSectionX(args.X + args.Width - 1);
                    int lowY  = Netplay.GetSectionY(args.Y);
                    int highY = Netplay.GetSectionY(args.Y + args.Height - 1);
                    if (FakesEnabled)
                    {
                        NetMessage.SendData(11, -1, -1, playerList, lowX, lowY, highX, highY);
                    }
                    else
                    {
                        foreach (int i in players)
                        {
                            NetMessage.SendData(11, i, -1, null, lowX, lowY, highX, highY);
                        }
                    }
                }
            }
            else
            {
                if (FakesEnabled)
                {
                    NetMessage.SendData(20, -1, -1, playerList, size, args.X, args.Y);
                }
                else
                {
                    foreach (int i in players)
                    {
                        NetMessage.SendData(20, i, -1, null, size, args.X, args.Y);
                    }
                }
            }
        }