TModLoader v1.4.4.9
TModLoader source code documentation
Loading...
Searching...
No Matches

◆ AI_120_StardustGuardian()

void Terraria.Projectile.AI_120_StardustGuardian ( )
inlineprivate

Definition at line 46704 of file Projectile.cs.

46705 {
46706 //IL_002c: Unknown result type (might be due to invalid IL or missing references)
46707 //IL_0031: Unknown result type (might be due to invalid IL or missing references)
46708 //IL_0292: Unknown result type (might be due to invalid IL or missing references)
46709 //IL_0297: Unknown result type (might be due to invalid IL or missing references)
46710 //IL_029d: Unknown result type (might be due to invalid IL or missing references)
46711 //IL_02a9: Unknown result type (might be due to invalid IL or missing references)
46712 //IL_02b3: Unknown result type (might be due to invalid IL or missing references)
46713 //IL_02b8: Unknown result type (might be due to invalid IL or missing references)
46714 //IL_00a8: Unknown result type (might be due to invalid IL or missing references)
46715 //IL_0555: Unknown result type (might be due to invalid IL or missing references)
46716 //IL_055a: Unknown result type (might be due to invalid IL or missing references)
46717 //IL_0323: Unknown result type (might be due to invalid IL or missing references)
46718 //IL_032d: Unknown result type (might be due to invalid IL or missing references)
46719 //IL_09ec: Unknown result type (might be due to invalid IL or missing references)
46720 //IL_057f: Unknown result type (might be due to invalid IL or missing references)
46721 //IL_0589: Unknown result type (might be due to invalid IL or missing references)
46722 //IL_036b: Unknown result type (might be due to invalid IL or missing references)
46723 //IL_0376: Unknown result type (might be due to invalid IL or missing references)
46724 //IL_0396: Unknown result type (might be due to invalid IL or missing references)
46725 //IL_039d: Unknown result type (might be due to invalid IL or missing references)
46726 //IL_03b1: Unknown result type (might be due to invalid IL or missing references)
46727 //IL_03bc: Unknown result type (might be due to invalid IL or missing references)
46728 //IL_03ce: Unknown result type (might be due to invalid IL or missing references)
46729 //IL_03d5: Unknown result type (might be due to invalid IL or missing references)
46730 //IL_03e9: Unknown result type (might be due to invalid IL or missing references)
46731 //IL_03f4: Unknown result type (might be due to invalid IL or missing references)
46732 //IL_0408: Unknown result type (might be due to invalid IL or missing references)
46733 //IL_0413: Unknown result type (might be due to invalid IL or missing references)
46734 //IL_00f3: Unknown result type (might be due to invalid IL or missing references)
46735 //IL_011a: Unknown result type (might be due to invalid IL or missing references)
46736 //IL_0120: Unknown result type (might be due to invalid IL or missing references)
46737 //IL_0145: Unknown result type (might be due to invalid IL or missing references)
46738 //IL_014f: Unknown result type (might be due to invalid IL or missing references)
46739 //IL_0154: Unknown result type (might be due to invalid IL or missing references)
46740 //IL_018e: Unknown result type (might be due to invalid IL or missing references)
46741 //IL_01b2: Unknown result type (might be due to invalid IL or missing references)
46742 //IL_01b8: Unknown result type (might be due to invalid IL or missing references)
46743 //IL_01cf: Unknown result type (might be due to invalid IL or missing references)
46744 //IL_01d9: Unknown result type (might be due to invalid IL or missing references)
46745 //IL_01de: Unknown result type (might be due to invalid IL or missing references)
46746 //IL_0bca: Unknown result type (might be due to invalid IL or missing references)
46747 //IL_0bcf: Unknown result type (might be due to invalid IL or missing references)
46748 //IL_042c: Unknown result type (might be due to invalid IL or missing references)
46749 //IL_0433: Unknown result type (might be due to invalid IL or missing references)
46750 //IL_0a30: Unknown result type (might be due to invalid IL or missing references)
46751 //IL_0796: Unknown result type (might be due to invalid IL or missing references)
46752 //IL_079d: Unknown result type (might be due to invalid IL or missing references)
46753 //IL_05c7: Unknown result type (might be due to invalid IL or missing references)
46754 //IL_05d2: Unknown result type (might be due to invalid IL or missing references)
46755 //IL_05f2: Unknown result type (might be due to invalid IL or missing references)
46756 //IL_05f9: Unknown result type (might be due to invalid IL or missing references)
46757 //IL_060d: Unknown result type (might be due to invalid IL or missing references)
46758 //IL_0618: Unknown result type (might be due to invalid IL or missing references)
46759 //IL_062a: Unknown result type (might be due to invalid IL or missing references)
46760 //IL_0631: Unknown result type (might be due to invalid IL or missing references)
46761 //IL_0645: Unknown result type (might be due to invalid IL or missing references)
46762 //IL_0650: Unknown result type (might be due to invalid IL or missing references)
46763 //IL_0664: Unknown result type (might be due to invalid IL or missing references)
46764 //IL_066f: Unknown result type (might be due to invalid IL or missing references)
46765 //IL_0a86: Unknown result type (might be due to invalid IL or missing references)
46766 //IL_0a8c: Unknown result type (might be due to invalid IL or missing references)
46767 //IL_0a91: Unknown result type (might be due to invalid IL or missing references)
46768 //IL_07cf: Unknown result type (might be due to invalid IL or missing references)
46769 //IL_07d6: Unknown result type (might be due to invalid IL or missing references)
46770 //IL_0688: Unknown result type (might be due to invalid IL or missing references)
46771 //IL_068f: Unknown result type (might be due to invalid IL or missing references)
46772 //IL_084b: Unknown result type (might be due to invalid IL or missing references)
46773 //IL_0856: Unknown result type (might be due to invalid IL or missing references)
46774 //IL_07ef: Unknown result type (might be due to invalid IL or missing references)
46775 //IL_07f6: Unknown result type (might be due to invalid IL or missing references)
46776 //IL_0876: Unknown result type (might be due to invalid IL or missing references)
46777 //IL_087d: Unknown result type (might be due to invalid IL or missing references)
46778 //IL_049c: Unknown result type (might be due to invalid IL or missing references)
46779 //IL_04a3: Unknown result type (might be due to invalid IL or missing references)
46780 //IL_0d66: Unknown result type (might be due to invalid IL or missing references)
46781 //IL_0d8d: Unknown result type (might be due to invalid IL or missing references)
46782 //IL_0d93: Unknown result type (might be due to invalid IL or missing references)
46783 //IL_0db8: Unknown result type (might be due to invalid IL or missing references)
46784 //IL_0dc2: Unknown result type (might be due to invalid IL or missing references)
46785 //IL_0dc7: Unknown result type (might be due to invalid IL or missing references)
46786 //IL_0e0f: Unknown result type (might be due to invalid IL or missing references)
46787 //IL_0e33: Unknown result type (might be due to invalid IL or missing references)
46788 //IL_0e39: Unknown result type (might be due to invalid IL or missing references)
46789 //IL_0e50: Unknown result type (might be due to invalid IL or missing references)
46790 //IL_0e5a: Unknown result type (might be due to invalid IL or missing references)
46791 //IL_0e5f: Unknown result type (might be due to invalid IL or missing references)
46792 //IL_0ed6: Unknown result type (might be due to invalid IL or missing references)
46793 //IL_0ee0: Unknown result type (might be due to invalid IL or missing references)
46794 //IL_0ee5: Unknown result type (might be due to invalid IL or missing references)
46795 //IL_0eec: Unknown result type (might be due to invalid IL or missing references)
46796 //IL_0ef1: Unknown result type (might be due to invalid IL or missing references)
46797 //IL_0ef7: Unknown result type (might be due to invalid IL or missing references)
46798 //IL_0f02: Unknown result type (might be due to invalid IL or missing references)
46799 //IL_0c05: Unknown result type (might be due to invalid IL or missing references)
46800 //IL_0c2c: Unknown result type (might be due to invalid IL or missing references)
46801 //IL_0c32: Unknown result type (might be due to invalid IL or missing references)
46802 //IL_0c57: Unknown result type (might be due to invalid IL or missing references)
46803 //IL_0c61: Unknown result type (might be due to invalid IL or missing references)
46804 //IL_0c66: Unknown result type (might be due to invalid IL or missing references)
46805 //IL_0ca0: Unknown result type (might be due to invalid IL or missing references)
46806 //IL_0cc4: Unknown result type (might be due to invalid IL or missing references)
46807 //IL_0cca: Unknown result type (might be due to invalid IL or missing references)
46808 //IL_0ce1: Unknown result type (might be due to invalid IL or missing references)
46809 //IL_0ceb: Unknown result type (might be due to invalid IL or missing references)
46810 //IL_0cf0: Unknown result type (might be due to invalid IL or missing references)
46811 //IL_0aaa: Unknown result type (might be due to invalid IL or missing references)
46812 //IL_0acd: Unknown result type (might be due to invalid IL or missing references)
46813 //IL_0ad2: Unknown result type (might be due to invalid IL or missing references)
46814 //IL_0ad8: Unknown result type (might be due to invalid IL or missing references)
46815 //IL_0add: Unknown result type (might be due to invalid IL or missing references)
46816 //IL_0ae2: Unknown result type (might be due to invalid IL or missing references)
46817 //IL_0b11: Unknown result type (might be due to invalid IL or missing references)
46818 //IL_0b16: Unknown result type (might be due to invalid IL or missing references)
46819 //IL_0b1a: Unknown result type (might be due to invalid IL or missing references)
46820 //IL_0b1f: Unknown result type (might be due to invalid IL or missing references)
46821 //IL_0b23: Unknown result type (might be due to invalid IL or missing references)
46822 //IL_0b28: Unknown result type (might be due to invalid IL or missing references)
46823 //IL_0b2d: Unknown result type (might be due to invalid IL or missing references)
46824 //IL_0b32: Unknown result type (might be due to invalid IL or missing references)
46825 //IL_08a7: Unknown result type (might be due to invalid IL or missing references)
46826 //IL_08ae: Unknown result type (might be due to invalid IL or missing references)
46827 //IL_08d7: Unknown result type (might be due to invalid IL or missing references)
46828 //IL_08de: Unknown result type (might be due to invalid IL or missing references)
46829 //IL_06f8: Unknown result type (might be due to invalid IL or missing references)
46830 //IL_06ff: Unknown result type (might be due to invalid IL or missing references)
46831 Player player = Main.player[owner];
46832 if (!player.active)
46833 {
46834 active = false;
46835 return;
46836 }
46837 bool flag = type == 623;
46838 Vector2 vector = player.Center;
46839 float num = 100f;
46840 float num12 = 500f;
46841 float num15 = 500f;
46842 float num16 = 100f;
46843 bool flag2 = true;
46844 if (flag)
46845 {
46846 if (player.dead)
46847 {
46848 player.stardustGuardian = false;
46849 }
46850 if (player.stardustGuardian)
46851 {
46852 timeLeft = 2;
46853 }
46854 num = 150f;
46855 vector.X -= (5 + player.width / 2) * player.direction;
46856 vector.Y -= 25f;
46857 Lighting.AddLight(base.Center, 0.9f, 0.9f, 0.7f);
46858 if (ai[0] != 3f && alpha == 255)
46859 {
46860 alpha = 0;
46861 for (int i = 0; i < 30; i++)
46862 {
46863 int num17 = Dust.NewDust(position, width, height, 135, 0f, 0f, 200, default(Color), 1.7f);
46864 Main.dust[num17].noGravity = true;
46865 Dust obj = Main.dust[num17];
46866 obj.velocity *= 3f;
46867 Main.dust[num17].shader = GameShaders.Armor.GetSecondaryShader(Main.player[owner].cPet, Main.player[owner]);
46868 num17 = Dust.NewDust(position, width, height, 135, 0f, 0f, 100);
46869 Dust obj2 = Main.dust[num17];
46870 obj2.velocity *= 2f;
46871 Main.dust[num17].noGravity = true;
46872 Main.dust[num17].fadeIn = 2.5f;
46873 Main.dust[num17].shader = GameShaders.Armor.GetSecondaryShader(Main.player[owner].cPet, Main.player[owner]);
46874 }
46875 }
46876 }
46877 if (ai[0] != 0f)
46878 {
46879 Main.player[owner].tankPet = whoAmI;
46880 Main.player[owner].tankPetReset = false;
46881 }
46882 if (ai[0] == 0f)
46883 {
46884 base.Center = Vector2.Lerp(base.Center, vector, 0.05f);
46885 velocity *= 0.5f;
46886 direction = (spriteDirection = player.direction);
46887 if (flag && ++frameCounter >= 9)
46888 {
46889 frameCounter = 0;
46890 if (++frame >= 8)
46891 {
46892 frame = 0;
46893 }
46894 }
46895 int targetNPCIndex = -1;
46897 bool flag3 = flag2;
46898 if (flag && Math.Abs(base.Center.X - vector.X) > num + 20f)
46899 {
46900 flag3 = false;
46901 }
46902 if (flag3)
46903 {
46905 }
46906 if (targetNPCIndex != -1)
46907 {
46908 NPC nPC = Main.npc[targetNPCIndex];
46909 direction = (spriteDirection = (nPC.Center.X > base.Center.X).ToDirectionInt());
46910 float num18 = Math.Abs(vector.X - base.Center.X);
46911 float num19 = Math.Abs(nPC.Center.X - base.Center.X);
46912 float num20 = Math.Abs(vector.Y - base.Center.Y);
46913 float num21 = Math.Abs(nPC.Center.Y - base.Bottom.Y);
46914 float num2 = (nPC.Center.Y > base.Bottom.Y).ToDirectionInt();
46915 if ((num18 < num || (vector.X - base.Center.X) * (float)direction < 0f) && num19 > 20f && num19 < num - num18 + 100f)
46916 {
46917 velocity.X += 0.1f * (float)direction;
46918 }
46919 else
46920 {
46921 velocity.X *= 0.7f;
46922 }
46923 if ((num20 < num16 || (vector.Y - base.Bottom.Y) * num2 < 0f) && num21 > 10f && num21 < num16 - num20 + 10f)
46924 {
46925 velocity.Y += 0.1f * num2;
46926 }
46927 else
46928 {
46929 velocity.Y *= 0.7f;
46930 }
46931 if (owner == Main.myPlayer && num19 < num15)
46932 {
46933 ai[0] = 2f;
46934 ai[1] = targetNPCIndex;
46935 netUpdate = true;
46936 }
46937 }
46938 }
46939 else if (ai[0] == 1f)
46940 {
46941 if (player.HasMinionRestTarget)
46942 {
46943 vector = player.MinionRestTargetPoint;
46944 }
46945 else
46946 {
46947 ai[0] = 0f;
46948 netUpdate = true;
46949 }
46950 int targetNPCIndex2 = -1;
46952 bool flag4 = true;
46953 if (flag && Math.Abs(base.Center.X - vector.X) > num + 20f)
46954 {
46955 flag4 = false;
46956 }
46957 if (flag4)
46958 {
46960 }
46961 if (targetNPCIndex2 != -1)
46962 {
46963 NPC nPC2 = Main.npc[targetNPCIndex2];
46964 direction = (spriteDirection = (nPC2.Center.X > base.Center.X).ToDirectionInt());
46965 float num3 = Math.Abs(vector.X - base.Center.X);
46966 float num4 = Math.Abs(nPC2.Center.X - base.Center.X);
46967 float num5 = Math.Abs(vector.Y - base.Center.Y);
46968 float num6 = Math.Abs(nPC2.Center.Y - base.Bottom.Y);
46969 float num7 = (nPC2.Center.Y > base.Bottom.Y).ToDirectionInt();
46970 if ((num3 < num || (vector.X - base.Center.X) * (float)direction < 0f) && num4 > 20f && num4 < num - num3 + 100f)
46971 {
46972 velocity.X += 0.1f * (float)direction;
46973 }
46974 else
46975 {
46976 velocity.X *= 0.7f;
46977 }
46978 if ((num5 < num16 || (vector.Y - base.Bottom.Y) * num7 < 0f) && num6 > 10f && num6 < num16 - num5 + 10f)
46979 {
46980 velocity.Y += 0.1f * num7;
46981 }
46982 else
46983 {
46984 velocity.Y *= 0.7f;
46985 }
46986 if (owner == Main.myPlayer && num4 < num15)
46987 {
46988 ai[0] = 2f;
46989 ai[1] = targetNPCIndex2;
46990 netUpdate = true;
46991 }
46992 }
46993 else
46994 {
46995 if (Math.Abs(vector.X - base.Center.X) > num + 40f)
46996 {
46997 ai[0] = 3f;
46998 netUpdate = true;
46999 }
47000 else if (Math.Abs(vector.X - base.Center.X) > 20f)
47001 {
47002 direction = (spriteDirection = (vector.X > base.Center.X).ToDirectionInt());
47003 velocity.X += 0.06f * (float)direction;
47004 }
47005 else
47006 {
47007 velocity.X *= 0.8f;
47008 direction = (spriteDirection = (player.Center.X < base.Center.X).ToDirectionInt());
47009 }
47010 if (Math.Abs(vector.Y - base.Center.Y) > num16)
47011 {
47012 ai[0] = 3f;
47013 netUpdate = true;
47014 }
47015 else if (Math.Abs(vector.Y - base.Center.Y) > 10f)
47016 {
47017 velocity.Y += 0.06f * (float)Math.Sign(vector.Y - base.Center.Y);
47018 }
47019 else
47020 {
47021 velocity.Y *= 0.8f;
47022 }
47023 }
47024 if (flag && ++frameCounter >= 9)
47025 {
47026 frameCounter = 0;
47027 if (++frame >= Main.projFrames[type] - 4)
47028 {
47029 frame = 0;
47030 }
47031 }
47032 }
47033 else if (ai[0] == 2f)
47034 {
47035 if (flag)
47036 {
47037 int num8 = 3;
47038 if (frame < 12)
47039 {
47040 frame = 12;
47041 }
47042 if (frame == 12 || frame == 13)
47043 {
47044 num8 = 8;
47045 }
47046 if (++frameCounter >= num8)
47047 {
47048 frameCounter = 0;
47049 if (++frame >= 19)
47050 {
47051 frame = 14;
47052 }
47053 }
47054 }
47055 bool flag5 = false;
47056 if (flag2)
47057 {
47058 flag5 = Distance(player.Center) < num12;
47059 }
47060 NPC nPC3 = null;
47061 int num9 = (int)ai[1];
47062 if (Main.npc.IndexInRange(num9))
47063 {
47064 nPC3 = Main.npc[num9];
47065 if (!nPC3.CanBeChasedBy(this) || Distance(nPC3.Center) > num15)
47066 {
47067 nPC3 = null;
47068 }
47069 }
47070 if (!flag5 || nPC3 == null)
47071 {
47072 ai[1] = 0f;
47073 ai[0] = 0f;
47074 netUpdate = true;
47075 if (frame < 18)
47076 {
47077 frame = 18;
47078 }
47079 }
47080 else
47081 {
47082 int num10 = (((nPC3.Center - player.Center).X > 1f) ? 1 : (-1));
47083 Vector2 targetPosition = nPC3.Center + new Vector2((float)(-num10) * ((float)nPC3.width * 0.5f + 70f), -10f) - base.Center;
47084 float maxAmountAllowedToMove = 6f * Utils.Remap(((Vector2)(ref targetPosition)).Length(), 50f, 400f, 1f, 4f);
47085 int num11 = 32;
47086 Vector2 targetPosition2 = Vector2.Zero.MoveTowards(targetPosition, maxAmountAllowedToMove);
47087 velocity = velocity.MoveTowards(targetPosition2, num11);
47089 if (localAI[0]++ >= 3f)
47090 {
47091 localAI[0] = 0f;
47092 int targetNPCIndex3 = -1;
47093 float distanceToClosestTarget3 = -1f;
47095 if (targetNPCIndex3 != -1)
47096 {
47097 ai[1] = targetNPCIndex3;
47098 netUpdate = true;
47099 }
47100 }
47101 }
47102 }
47103 else
47104 {
47105 _ = ai[0];
47106 }
47107 if (ai[0] != 3f)
47108 {
47109 return;
47110 }
47111 if (player.HasMinionRestTarget)
47112 {
47113 vector = player.MinionRestTargetPoint;
47114 }
47115 else
47116 {
47117 ai[0] = 0f;
47118 netUpdate = true;
47119 }
47120 if (alpha == 0)
47121 {
47122 alpha = 255;
47123 for (int j = 0; j < 30; j++)
47124 {
47125 int num13 = Dust.NewDust(position, width, height, 135, 0f, 0f, 200, default(Color), 1.7f);
47126 Main.dust[num13].noGravity = true;
47127 Dust obj3 = Main.dust[num13];
47128 obj3.velocity *= 3f;
47129 Main.dust[num13].shader = GameShaders.Armor.GetSecondaryShader(Main.player[owner].cPet, Main.player[owner]);
47130 num13 = Dust.NewDust(position, width, height, 135, 0f, 0f, 100);
47131 Dust obj4 = Main.dust[num13];
47132 obj4.velocity *= 2f;
47133 Main.dust[num13].noGravity = true;
47134 Main.dust[num13].fadeIn = 2.5f;
47135 Main.dust[num13].shader = GameShaders.Armor.GetSecondaryShader(Main.player[owner].cPet, Main.player[owner]);
47136 }
47137 }
47138 else
47139 {
47140 for (int k = 0; k < 2; k++)
47141 {
47142 int num14 = Dust.NewDust(position, width, height, 135, 0f, 0f, 200, default(Color), 1.7f);
47143 Main.dust[num14].noGravity = true;
47144 Dust obj5 = Main.dust[num14];
47145 obj5.velocity *= 3f;
47146 Main.dust[num14].noLight = true;
47147 Main.dust[num14].shader = GameShaders.Armor.GetSecondaryShader(Main.player[owner].cPet, Main.player[owner]);
47148 num14 = Dust.NewDust(position, width, height, 135, 0f, 0f, 100);
47149 Dust obj6 = Main.dust[num14];
47150 obj6.velocity *= 2f;
47151 Main.dust[num14].noGravity = true;
47152 Main.dust[num14].fadeIn = 2.5f;
47153 Main.dust[num14].noLight = true;
47154 Main.dust[num14].shader = GameShaders.Armor.GetSecondaryShader(Main.player[owner].cPet, Main.player[owner]);
47155 }
47156 }
47157 velocity *= 0.7f;
47158 base.Center = Vector2.Lerp(base.Center, vector, 0.2f);
47159 if (Distance(vector) < 10f)
47160 {
47161 ai[0] = 1f;
47162 netUpdate = true;
47163 }
47164 }
int whoAmI
The index of this Entity within its specific array. These arrays track the entities in the world....
Definition Entity.cs:16
Vector2 velocity
The velocity of this Entity in world coordinates per tick.
Definition Entity.cs:33
float Distance(Vector2 Other)
Definition Entity.cs:275
Vector2 position
The position of this Entity in world coordinates.
Definition Entity.cs:28
int width
The width of this Entity's hitbox, in pixels.
Definition Entity.cs:46
bool active
If true, the Entity actually exists within the game world. Within the specific entity array,...
Definition Entity.cs:21
int height
The height of this Entity's hitbox, in pixels.
Definition Entity.cs:51
static ArmorShaderDataSet Armor
Definition GameShaders.cs:7
int owner
The index of the player who owns this projectile. In Multiplayer, Clients "own" projectiles that they...
float[] ai
An array with 3 slots used for any sort of data storage, which is occasionally synced to the server....
bool netUpdate
Set manually to true in M:Terraria.ModLoader.ModProjectile.AI once to make it sync its current F:Terr...
void AI_120_StardustGuardian_FindTarget(float lookupRange, ref int targetNPCIndex, ref float distanceToClosestTarget)
int alpha
How transparent to draw this projectile. 0 to 255. 255 is completely transparent. ExampleBulletsets...
float[] localAI
Acts like F:Terraria.Projectile.ai, but does not sync to the server. Many vanilla T:Terraria....
int frame
The frame number in the spritesheet that this projectile will be drawn with. Assign in M:Terraria....
int type
The Projectile ID of this projectile. The Projectile ID is a unique number assigned to each Projectil...
int timeLeft
Time in ticks before this projectile will naturally despawn. Each update timeLeft is decreased by 1...
int frameCounter
Used as a timer to decide when to change F:Terraria.Projectile.frame. Defaults to 0.

References Terraria.Entity.active, Terraria.Lighting.AddLight(), Terraria.Graphics.Shaders.GameShaders.Armor, Terraria.Entity.Center, Terraria.Player.dead, Terraria.Entity.direction, Terraria.Main.dust, Terraria.Player.HasMinionRestTarget, Terraria.Player.MinionRestTargetPoint, Terraria.Main.myPlayer, Terraria.Dust.NewDust(), Terraria.Main.npc, Terraria.Main.player, Terraria.Main.projFrames, Terraria.Utils.Remap(), and Terraria.Player.stardustGuardian.

+ Here is the call graph for this function: