private void OnTransform(TerrariaApi.Server.NpcTransformationEventArgs Args)
 {
     if (Args.Handled)
     {
         return;
     }
     Terraria.NPC abc = new Terraria.NPC();
 }
        public ResponseStruct SpawnBoss(string BossName, string BossAmount, string TargetPlayer)
        {
            ResponseStruct Result;
            List<TShockAPI.TSPlayer> Players = TShockAPI.TShock.Utils.FindPlayer(TargetPlayer);
            int Amount = -1;

            if (!Int32.TryParse(BossAmount, out Amount))
            {
                Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Số lượng Boss không hợp lệ." }, Broadcast = new List<string>() { "Số lượng Boss phải là số nguyên dương và nên nhỏ hơn 200." } };
            }
            else if (!(Amount >= 1 && Amount <= Terraria.Main.maxNPCs))
            {
                Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Số lượng Boss không hợp lệ." }, Broadcast = new List<string>() { "Số lượng Boss phải là số nguyên dương và nên nhỏ hơn 200." } };
            }
            else if (Players.Count == 0)
            {
                Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Không tìm thấy Player Name trong Server." }, Broadcast = new List<string>() { "Chỉ có thể summon Boss nếu Player có mặt trong Server." } };
            }
            else if (Players.Count > 1)
            {
                Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { String.Format("Có {0} Player có tên phù hợp với tên Player được cung cấp.") }, Broadcast = new List<string>() { "Cung cấp Player Name đầy đủ." } };
            }
            else
            {
                int CurrentNpcCount = CountNPC();
                if (Amount > Terraria.Main.maxNPCs - CurrentNpcCount)
                    Amount = Terraria.Main.maxNPCs - CurrentNpcCount;

                TShockAPI.TSPlayer Player = Players[0];
                Terraria.NPC Npc = new Terraria.NPC();

                switch (BossName)
                {
                    case "Brain of Cthulhu":
                        Npc.SetDefaults(266);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Brain of Cthulhu {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "The Destroyer":
                        if (Terraria.Main.dayTime)
                        {
                            Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "The Destroyer phải được gọi vào ban đêm (trong game)." } };
                        }
                        else
                        {
                            Npc.SetDefaults(134);
                            TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                            TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Destroyer {1} time(s).", Player.Name, Amount);
                            Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        }
                        break;
                    case "Duke Fishron":
                        Npc.SetDefaults(370);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned Duke Fishron {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Eater of Worlds":
                        Npc.SetDefaults(13);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Eater of Worlds {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Eye of Cthulhu":
                        Npc.SetDefaults(4);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Eye of Cthulhu {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Golem":
                        Npc.SetDefaults(245);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned Golem {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "King Slime":
                        Npc.SetDefaults(50);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned King Slime {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Plantera":
                        Npc.SetDefaults(262);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned Plantera {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Skeletron Prime":
                        Npc.SetDefaults(127);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned Skeletron Prime {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Queen Bee":
                        Npc.SetDefaults(222);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned Queen Bee {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Skeletron":
                        Npc.SetDefaults(35);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned Skeletron {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "The Twins":
                        if (Terraria.Main.dayTime)
                        {
                            Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "The Twins phải gọi vào ban đêm (trong game)." } };
                        }
                        else
                        {
                            Npc.SetDefaults(125);
                            TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                            Npc.SetDefaults(126);
                            TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                            TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Twins {1} time(s).", Player.Name, Amount);
                            Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        }
                        break;
                    case "Wall of Flesh":
                        if (Terraria.Main.wof > 0)
                        {
                            Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Wall of Flesh đang tồn tại trong World." } };
                        }
                        else if (Player.Y / 16f < Terraria.Main.maxTilesY - 205)
                        {
                            Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Nhân vật phải đứng tại \"hell\" để có thể gọi Wall of Flesh." } };
                        }
                        else
                        {
                            Terraria.NPC.SpawnWOF(new Vector2(Player.X, Player.Y));
                            TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Wall of Flesh.", Player.Name);
                            Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = "1" };
                        }
                        break;
                    case "Lunatic Cultist":
                        Npc.SetDefaults(439);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Lunatic Cultist {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    case "Moon Lord":
                        Npc.SetDefaults(398);
                        TShockAPI.TSPlayer.Server.SpawnNPC(type: Npc.type, name: Npc.name, amount: Amount, startTileX: Player.TileX, startTileY: Player.TileY);
                        TShockAPI.TSPlayer.All.SendSuccessMessage("{0} has spawned the Moon Lord {1} time(s).", Player.Name, Amount);
                        Result = new ResponseStruct() { Status = ResponseStatusType.Done, Content = Convert.ToString(Amount) };
                        break;
                    default:
                        Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tên Boss không hợp lệ." }, Broadcast = new List<string>() { "Cần đúng tên Boss hợp lệ để summon." } };
                        break;
                }
            }

            return Result;
        }
        // =============================================================================================================
        // OTAPI hooks
        //

        private OTAPI.HookResult PreSetDefaultsByIdHandler(
            Terraria.NPC terrariaNpc, ref int npcId, ref Terraria.NPCSpawnParams spawnParams)
        {
            Debug.Assert(terrariaNpc != null);

            // Check `_setDefaultsToIgnore` to ignore spurious calls if `SetDefaultsById` is called with a negative ID.
            if (_setDefaultsToIgnore.Value > 0)
            {
                --_setDefaultsToIgnore.Value;
                return(OTAPI.HookResult.Continue);
            }

            var npc = GetNpc(terrariaNpc);
            var evt = new NpcDefaultsEvent(npc)
            {
                Id = (NpcId)npcId
            };

            _events.Raise(evt, _log);
            if (evt.IsCanceled)
            {
                return(OTAPI.HookResult.Cancel);
            }

            npcId = (int)evt.Id;
            if (npcId < 0)
            {
                _setDefaultsToIgnore.Value = 2;
            }
            return(OTAPI.HookResult.Continue);
        }
        private OTAPI.HookResult PreDropLootHandler(
            Terraria.NPC terrariaNpc, ref int itemIndex, ref int x, ref int y, ref int width, ref int height,
            ref int itemId, ref int stackSize, ref bool noBroadcast, ref int prefix, ref bool noGrabDelay,
            ref bool reverseIndex)
        {
            Debug.Assert(terrariaNpc != null);

            var npc  = GetNpc(terrariaNpc);
            var item = new ItemStack((ItemId)itemId, (ItemPrefix)prefix, (short)stackSize);
            var evt  = new NpcLootEvent(npc)
            {
                Item = item
            };

            _events.Raise(evt, _log);
            if (evt.IsCanceled)
            {
                return(OTAPI.HookResult.Cancel);
            }

            itemId    = (int)evt.Item.Id;
            stackSize = evt.Item.StackSize;
            prefix    = (int)evt.Item.Prefix;
            return(OTAPI.HookResult.Continue);
        }
Beispiel #5
0
        public void Name_SetNullValue_ThrowsArgumentNullException()
        {
            var terrariaNpc = new Terraria.NPC();
            var npc         = new OrionNpc(terrariaNpc);

            Assert.Throws <ArgumentNullException>(() => npc.Name = null !);
        }
 private void InitializeLookups()
 {
     Terraria.NPC npc = new Terraria.NPC();
     for (var i = -17; i < Terraria.Main.maxNPCTypes; ++i)
     {
         npc.SetDefaults(i);
         _npcLookup[Terraria.Lang.GetNPCNameValue(i)] = (NpcId)i;
     }
 }
Beispiel #7
0
        public void Health_Set()
        {
            var terrariaNpc = new Terraria.NPC();
            var npc         = new OrionNpc(terrariaNpc);

            npc.Health = 100;

            Assert.Equal(100, terrariaNpc.life);
        }
        private void KilledHandler(Terraria.NPC terrariaNpc)
        {
            Debug.Assert(terrariaNpc != null);

            var npc = GetNpc(terrariaNpc);
            var evt = new NpcKilledEvent(npc);

            _events.Raise(evt, _log);
        }
Beispiel #9
0
        public void SetId()
        {
            var terrariaNpc = new Terraria.NPC();
            var npc         = new OrionNpc(terrariaNpc);

            npc.SetId(NpcId.BlueSlime);

            Assert.Equal(NpcId.BlueSlime, (NpcId)terrariaNpc.netID);
        }
Beispiel #10
0
        public void MaxHealth_Get()
        {
            var terrariaNpc = new Terraria.NPC {
                lifeMax = 200
            };
            var npc = new OrionNpc(terrariaNpc);

            Assert.Equal(200, npc.MaxHealth);
        }
Beispiel #11
0
        public void Name_Get()
        {
            var terrariaNpc = new Terraria.NPC {
                _givenName = "test"
            };
            var npc = new OrionNpc(terrariaNpc);

            Assert.Equal("test", npc.Name);
        }
Beispiel #12
0
        public void Name_Set()
        {
            var terrariaNpc = new Terraria.NPC();
            var npc         = new OrionNpc(terrariaNpc);

            npc.Name = "test";

            Assert.Equal("test", terrariaNpc.GivenOrTypeName);
        }
Beispiel #13
0
        public void Id_Get()
        {
            var terrariaNpc = new Terraria.NPC {
                netID = (int)NpcId.BlueSlime
            };
            var npc = new OrionNpc(terrariaNpc);

            Assert.Equal(NpcId.BlueSlime, npc.Id);
        }
Beispiel #14
0
        public void Health_Get()
        {
            var terrariaNpc = new Terraria.NPC {
                life = 100
            };
            var npc = new OrionNpc(terrariaNpc);

            Assert.Equal(100, npc.Health);
        }
Beispiel #15
0
        public void MaxHealth_Set()
        {
            var terrariaNpc = new Terraria.NPC();
            var npc         = new OrionNpc(terrariaNpc);

            npc.MaxHealth = 200;

            Assert.Equal(200, terrariaNpc.lifeMax);
        }
        // Gets an `INpc` instance corresponding to the given Terraria NPC, avoiding extra allocations if possible.
        private INpc GetNpc(Terraria.NPC terrariaNpc)
        {
            var npcIndex = terrariaNpc.whoAmI;

            Debug.Assert(npcIndex >= 0 && npcIndex < Count);

            var isConcrete = terrariaNpc == Terraria.Main.npc[npcIndex];

            return(isConcrete ? this[npcIndex] : new OrionNpc(terrariaNpc));
        }
 // We hit the NPC
 public override void OnHitNPC(Terraria.Player player, Terraria.NPC target, int damage, float knockBack, bool crit)
 {
     // Is the NPC a town NPC? (friendly)
     if (target.friendly == false)
     {
         // It's an enemy, apply debuffs to it
         target.AddBuff(mod.BuffType("Plagueblight"), 300);
         target.GetGlobalNPC <NPCsGlobal>().plagueDamage += damage;
     }
 }
        private OTAPI.HookResult PreUpdateHandler(Terraria.NPC terrariaNpc, ref int npcIndex)
        {
            Debug.Assert(npcIndex >= 0 && npcIndex < Count);

            var npc = this[npcIndex];
            var evt = new NpcTickEvent(npc);

            _events.Raise(evt, _log);
            return(evt.IsCanceled ? OTAPI.HookResult.Cancel : OTAPI.HookResult.Continue);
        }
Beispiel #19
0
        public static void OnNPCKilled(Terraria.NPC npc)
        {
            var ctx  = new HookContext();
            var args = new HookArgs.NPCKilled()
            {
                Type  = npc.type,
                NetId = npc.netID
            };

            HookPoints.NPCKilled.Invoke(ref ctx, ref args);
        }
Beispiel #20
0
 public void OnHitNPC(Terraria.Player player, SkillData data, Terraria.NPC target, int damage)
 {
     if (data.Level > 5 && player.HeldItem.axe > 0 && Terraria.Main.rand.Next(3) == 0)
     {
         int ToRestore = (int)(damage * 0.07f);
         if (ToRestore < 1)
         {
             ToRestore = 1;
         }
         Terraria.CombatText.NewText(player.getRect(), Terraria.CombatText.HealLife, ToRestore, false, true);
         player.statLife += ToRestore;
     }
 }
Beispiel #21
0
        public void AiValues_Set()
        {
            var terrariaNpc = new Terraria.NPC();
            var npc         = new OrionNpc(terrariaNpc);

            npc.AiValues[0] = 1f;
            npc.AiValues[1] = 2f;
            npc.AiValues[2] = 3f;
            npc.AiValues[3] = 4f;

            Assert.Equal(1f, terrariaNpc.ai[0]);
            Assert.Equal(2f, terrariaNpc.ai[1]);
            Assert.Equal(3f, terrariaNpc.ai[2]);
            Assert.Equal(4f, terrariaNpc.ai[3]);
        }
Beispiel #22
0
        public void NpcSetDefaults_AbstractItem_EventTriggered(NpcId id)
        {
            var terrariaNpc = new Terraria.NPC();

            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            using var npcService = new OrionNpcService(events, log);

            Mock.Get(events)
            .Setup(em => em.Raise(
                       It.Is <NpcDefaultsEvent>(evt => ((OrionNpc)evt.Npc).Wrapped == terrariaNpc && evt.Id == id),
                       log));

            terrariaNpc.SetDefaults((int)id);

            Assert.Equal(id, (NpcId)terrariaNpc.netID);

            Mock.Get(events).VerifyAll();
        }
Beispiel #23
0
 public override void OnHitByNPC(Terraria.Player player, SkillData data, Terraria.NPC npc, int damage, bool crit)
 {
     data.ChangeFloat(DamageStackVar, damage);
 }
Beispiel #24
0
 public override void ModifyHitNPCWithProj(Terraria.Player player, SkillData data, Terraria.Projectile proj, Terraria.NPC target, ref int damage, ref float knockback, ref bool crit, ref int hitDirection)
 {
     if (target.velocity.Y != 0 && proj.type == Terraria.ID.ProjectileID.BulletHighVelocity)
     {
         damage     = (int)(damage * (1.6f + 0.2f * data.Level));
         knockback += 2f;
         data.EndUse();
     }
 }
Beispiel #25
0
 public override void OnHitNPC(Terraria.Player player, SkillData data, Terraria.Item item, Terraria.NPC target, int damage, float knockback, bool crit)
 {
     OnHitNPC(player, data, target, damage);
 }
Beispiel #26
0
 public override void OnHitNPCWithProj(Terraria.Player player, SkillData data, Terraria.Projectile proj, Terraria.NPC target, int damage, float knockback, bool crit)
 {
     OnHitNPC(player, data, target, damage);
 }
Beispiel #27
0
 public override void OnHitNPC(Terraria.Player player, Terraria.NPC target, int damage, float KnockBack, bool crit)
 {
     target.AddBuff(BuffID.Frozen, 350);           //Adds the debuff,second argument = amount of frames
 }
        public static void SerializeNPC(Terraria.NPC npc, XmlDictionaryWriter writer, bool SetDefaults_Int32 = true)
        {
            writer.WriteString("\n\t");
            writer.WriteStartElement("NPC");

            foreach (var feild in Feilds)
            {
                switch (feild)
                {
                case "ConfusionImmunity":
                    writer.WriteCustomObject(npc.buffImmune[31], feild);
                    break;

                case "PoisonImmunity":
                    writer.WriteCustomObject(npc.buffImmune[20], feild);
                    break;

                case "BurningImmunity":
                    writer.WriteCustomObject(npc.buffImmune[24], feild);
                    break;

                case "CurseImmunity":
                    writer.WriteCustomObject(npc.buffImmune[39], feild);
                    break;

                case "Name":
                    writer.WriteCustomObject(npc.name, feild);
                    break;

                case "Type":
                    if (SetDefaults_Int32)
                    {
                        writer.WriteCustomObject(npc.type, feild);
                    }
                    else
                    {
                        writer.WriteCustomObject(npc.type, "Inherits");
                    }
                    break;

                case "aiStyle":
                    writer.WriteCustomObject(npc.aiStyle, feild);
                    break;

                case "scale":
                    writer.WriteCustomObject(npc.scale, feild);
                    break;

                case "damage":
                    writer.WriteCustomObject(npc.damage, feild);
                    break;

                case "defense":
                    writer.WriteCustomObject(npc.defense, feild);
                    break;

                case "lifeMax":
                    writer.WriteCustomObject(npc.lifeMax, feild);
                    break;

                case "value":
                    writer.WriteCustomObject(npc.value, feild);
                    break;

                case "knockBackResist":
                    writer.WriteCustomObject(npc.knockBackResist, feild);
                    break;

                case "Width":
                    writer.WriteCustomObject(npc.width, feild);
                    break;

                case "Height":
                    writer.WriteCustomObject(npc.height, feild);
                    break;

                case "slots":
                    writer.WriteCustomObject(npc.npcSlots, feild);
                    break;

                case "noTileCollide":
                    writer.WriteCustomObject(npc.noTileCollide, feild);
                    break;

                case "noGravity":
                    writer.WriteCustomObject(npc.noGravity, feild);
                    break;

                case "behindTiles":
                    writer.WriteCustomObject(npc.behindTiles, feild);
                    break;

                case "DisplayName":
                    if (npc.displayName != npc.name)
                    {
                        writer.WriteCustomObject(npc.displayName, feild);
                    }
                    break;

                case "NetAlways":
                    writer.WriteCustomObject(npc.netAlways, feild);
                    break;

                case "netSkip":
                    writer.WriteCustomObject(npc.netSkip, feild);
                    break;

                case "NetID":
                    writer.WriteCustomObject(npc.netID, feild);
                    break;

                default:
                    throw new Exception("This class is feild specific! Please add the relative feild above [" + feild + "]");
                }
            }

            writer.WriteString("\n\t");
            writer.WriteEndElement();
        }