adrianmak

Untitled

Sep 5th, 2019
197
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Turbo.Plugins.Default;
  5.  
  6. namespace Turbo.Plugins.langman
  7. {
  8.     public class EliteCirclePlugin : BasePlugin, IInGameWorldPainter, IAfterCollectHandler, ICustomizer
  9.     {
  10.         /************************************************************************/
  11.         /* MonsterCirclePlugin                                                  */
  12.         /* https://github.com/coreyblackgh/HUD-Plugins                          */
  13.         /* and                                                                  */
  14.         /* DiadrasFirstGemPlugin                                                */
  15.         /* https://github.com/User5981/Resu                                     */
  16.         /************************************************************************/
  17.         //public WorldDecoratorCollection ReflectDecorator { get; set; }
  18.         public WorldDecoratorCollection RareDecorator { get; set; }
  19.         public WorldDecoratorCollection ChampionDecorator { get; set; }
  20.         public WorldDecoratorCollection JuggernautDecorator { get; set; }
  21.         public WorldDecoratorCollection GoblinDecorator { get; set; } // Goblin
  22.         public WorldDecoratorCollection UniqueDecorator { get; set; }   //Purple
  23.         public WorldDecoratorCollection BossDecorator { get; set; }   //Boss
  24.         public TopLabelDecorator EliteHealthDecorator { get; set; }
  25.         public WorldDecoratorCollection WormholeDecorator { get; set; }
  26.         public WorldDecoratorCollection WormholeWarningDecorator { get; set; }
  27.         public int EliteHealthBlockSize;
  28.         public bool ShowDirectLineToElite { get; set; } = true; // Elite's HP < 20%
  29.         public bool ShowStricken { get; set; } = true;
  30.         public int StrickenPropSquare { get; set; }
  31.         public bool StrickenInCooldown { get; set; }
  32.         public int StrickenMonsterCount { get; set; }
  33.         public TopLabelDecorator StrickenStackDecorator { get; set; }
  34.         public Dictionary<uint, Tuple<double, int>> StrickenMonsterStatus { get; set; }  // AcdId, Health, Stacks
  35.         public void LoadEliteCirclePlugin()
  36.         {
  37.  
  38.  
  39.             EliteHealthDecorator = new TopLabelDecorator(Hud)
  40.             {
  41.                 TextFont = Hud.Render.CreateFont("tahoma", 10, 255, 0, 0, 0, true, false, 250, 255, 255, 255, true),
  42.             };
  43.             EliteHealthBlockSize = (int)(Hud.Window.Size.Width / 50);
  44.  
  45.             var shadowBrush = Hud.Render.CreateBrush(96, 0, 0, 0, 1);
  46.  
  47.             GoblinDecorator = new WorldDecoratorCollection(
  48.                 new GroundCircleDecorator(Hud)
  49.                 {
  50.                     Brush = Hud.Render.CreateBrush(255, 57, 194, 29, 3),
  51.                     Radius = 3
  52.                 },
  53.                 new GroundCircleDecorator(Hud)
  54.                 {
  55.                     Brush = Hud.Render.CreateBrush(255, 240, 213, 10, 5),
  56.                     Radius = 2
  57.                 },
  58.                 new GroundCircleDecorator(Hud)
  59.                 {
  60.                     Brush = Hud.Render.CreateBrush(180, 255, 0, 0, 6),
  61.                     Radius = 0.3f
  62.                 }
  63.             );
  64.  
  65.             RareDecorator = new WorldDecoratorCollection(
  66.                 new GroundCircleDecorator(Hud)
  67.                 {
  68.                     Brush = Hud.Render.CreateBrush(255, 255, 148, 20, 3),
  69.                     Radius = 3
  70.                 },
  71.                 new GroundCircleDecorator(Hud)
  72.                 {
  73.                     Brush = Hud.Render.CreateBrush(255, 255, 148, 20, 5),
  74.                     Radius = 2
  75.                 },
  76.                 new GroundCircleDecorator(Hud)
  77.                 {
  78.                     Brush = Hud.Render.CreateBrush(180, 255, 0, 0, 6),
  79.                     Radius = 0.3f
  80.                 },
  81.                 new MapShapeDecorator(Hud)
  82.                 {
  83.                     Brush = Hud.Render.CreateBrush(255, 255, 148, 20, 0),
  84.                     Radius = 6,
  85.                     ShapePainter = new CircleShapePainter(Hud)
  86.                 }
  87.             );
  88.             ChampionDecorator = new WorldDecoratorCollection(
  89.                 new GroundCircleDecorator(Hud)
  90.                 {
  91.                     Brush = Hud.Render.CreateBrush(255, 64, 128, 255, 3),
  92.                     Radius = 3
  93.                 },
  94.                 new GroundCircleDecorator(Hud)
  95.                 {
  96.                     Brush = Hud.Render.CreateBrush(255, 64, 128, 255, 5),
  97.                     Radius = 2
  98.                 },
  99.                 new GroundCircleDecorator(Hud)
  100.                 {
  101.                     Brush = Hud.Render.CreateBrush(180, 255, 0, 0, 6),
  102.                     Radius = 0.3f
  103.                 },
  104.                 new MapShapeDecorator(Hud)
  105.                 {
  106.                     Brush = Hud.Render.CreateBrush(255, 64, 128, 255, 0),
  107.                     Radius = 6,
  108.                     ShapePainter = new CircleShapePainter(Hud)
  109.                 }
  110.             );
  111.             JuggernautDecorator = new WorldDecoratorCollection(
  112.                 new MapShapeDecorator(Hud)
  113.                 {
  114.                     Brush = Hud.Render.CreateBrush(255, 255, 50, 0, 0),
  115.                     ShadowBrush = shadowBrush,
  116.                     Radius = 6,
  117.                     ShapePainter = new CircleShapePainter(Hud),
  118.                 },
  119.                 new GroundCircleDecorator(Hud)
  120.                 {
  121.                     Brush = Hud.Render.CreateBrush(255, 255, 50, 0, 3),
  122.                     Radius = 3,
  123.                 },
  124.                 new GroundCircleDecorator(Hud)
  125.                 {
  126.                     Brush = Hud.Render.CreateBrush(255, 255, 148, 20, 5),
  127.                     Radius = 2
  128.                 },
  129.                 new GroundCircleDecorator(Hud)
  130.                 {
  131.                     Brush = Hud.Render.CreateBrush(180, 255, 0, 0, 6),
  132.                     Radius = 0.3f
  133.                 }
  134.                 );
  135.             UniqueDecorator = new WorldDecoratorCollection(
  136.                 new GroundCircleDecorator(Hud)
  137.                 {
  138.                     Brush = Hud.Render.CreateBrush(255, 255, 140, 255, 3),
  139.                     Radius = 3
  140.                 },
  141.                 new GroundCircleDecorator(Hud)
  142.                 {
  143.                     Brush = Hud.Render.CreateBrush(255, 255, 140, 255, 5),
  144.                     Radius = 2
  145.                 },
  146.                 new GroundCircleDecorator(Hud)
  147.                 {
  148.                     Brush = Hud.Render.CreateBrush(180, 255, 0, 0, 6),
  149.                     Radius = 0.3f
  150.                 },
  151.                 new MapShapeDecorator(Hud)
  152.                 {
  153.                     Brush = Hud.Render.CreateBrush(255, 255, 140, 255, 0),
  154.                     Radius = 6,
  155.                     ShapePainter = new CircleShapePainter(Hud)
  156.                 }
  157.             );
  158.  
  159.             BossDecorator = new WorldDecoratorCollection(
  160.                 new GroundCircleDecorator(Hud)
  161.                 {
  162.                     Brush = Hud.Render.CreateBrush(255, 255, 96, 0, 4),
  163.                     Radius = 4
  164.                 },
  165.                 new GroundCircleDecorator(Hud)
  166.                 {
  167.                     Brush = Hud.Render.CreateBrush(255, 255, 96, 0, 5),
  168.                     Radius = 2
  169.                 },
  170.                 new GroundCircleDecorator(Hud)
  171.                 {
  172.                     Brush = Hud.Render.CreateBrush(180, 255, 0, 0, 6),
  173.                     Radius = 0.3f
  174.                 },
  175.                 new MapShapeDecorator(Hud)
  176.                 {
  177.                     Brush = Hud.Render.CreateBrush(255, 255, 96, 0, 0),
  178.                     Radius = 6,
  179.                     ShapePainter = new CircleShapePainter(Hud)
  180.                 }
  181.             );
  182.  
  183.  
  184.             var importantBorderBrush = Hud.Render.CreateBrush(128, 0, 0, 0, 2);
  185.             var importantLabelFont = Hud.Render.CreateFont("tahoma", 6f, 255, 255, 255, 255, true, false, false);
  186.  
  187.  
  188.  
  189.  
  190.             //  ReflectDecorator = new WorldDecoratorCollection(
  191.             //     new GroundLabelDecorator(Hud)
  192.             //     {
  193.             //         BackgroundBrush = Hud.Render.CreateBrush(255, 50, 50, 50, 0),
  194.             //         BorderBrush = Hud.Render.CreateBrush(128, 0, 0, 0, 2),
  195.             //         TextFont = Hud.Render.CreateFont("tahoma", 5f, 200, 220, 120, 0, false, false, false)
  196.             //     }
  197.             //  );
  198.  
  199.  
  200.  
  201.             StrickenMonsterStatus = new Dictionary<uint, Tuple<double, int>>();
  202.             StrickenPropSquare = (int)(Hud.Window.Size.Width / 53.333);
  203.             StrickenInCooldown = false;
  204.             StrickenMonsterCount = 0;
  205.  
  206.             StrickenStackDecorator = new TopLabelDecorator(Hud)
  207.             {
  208.                 TextFont = Hud.Render.CreateFont("tahoma", 7, 255, 0, 0, 0, true, false, 250, 255, 255, 255, true),
  209.             };
  210.  
  211.  
  212.             WormholeWarningDecorator = new WorldDecoratorCollection(
  213.                  new GroundCircleDecorator(Hud)
  214.                  {
  215.                      Brush = Hud.Render.CreateBrush(205, 255, 50, 255, 3, SharpDX.Direct2D1.DashStyle.Dash),
  216.                      Radius = 5f,
  217.                  },
  218.                  new GroundCircleDecorator(Hud)
  219.                  {
  220.                      Brush = Hud.Render.CreateBrush(205, 255, 50, 255, 0),
  221.                      Radius = 4f,
  222.                  },
  223.                  new GroundLabelDecorator(Hud)
  224.                  {
  225.                      BackgroundBrush = Hud.Render.CreateBrush(0, 0, 0, 0, 0),
  226.                      TextFont = Hud.Render.CreateFont("tahoma", 20, 255, 255, 255, 255, true, true, true),
  227.                  }
  228.              );
  229.  
  230.             WormholeDecorator = new WorldDecoratorCollection(
  231.                 new GroundCircleDecorator(Hud)
  232.                 {
  233.                     Brush = Hud.Render.CreateBrush(160, 255, 50, 255, 3, SharpDX.Direct2D1.DashStyle.Dash),
  234.                     Radius = 5f,
  235.                 },
  236.                 new GroundCircleDecorator(Hud)
  237.                 {
  238.                     Brush = Hud.Render.CreateBrush(160, 255, 50, 255, 0),
  239.                     Radius = 4f,
  240.                 },
  241.                 new GroundLabelDecorator(Hud)
  242.                 {
  243.                     TextFont = Hud.Render.CreateFont("tahoma", 9, 255, 255, 255, 255, true, false, 128, 0, 0, 0, true),
  244.                 }
  245.             );
  246.  
  247.  
  248.  
  249.         }
  250.         public void OnNewAreaEliteCirclePlugin(bool newGame, ISnoArea area)
  251.         {
  252.             if (newGame)
  253.             {
  254.                 StrickenMonsterStatus.Clear();
  255.             }
  256.         }
  257.  
  258.         private IQuest riftQuest
  259.         {
  260.             get
  261.             {
  262.                 return Hud.Game.Quests.FirstOrDefault(q => q.SnoQuest.Sno == 337492) ?? // rift
  263.                        Hud.Game.Quests.FirstOrDefault(q => q.SnoQuest.Sno == 382695);   // gr
  264.             }
  265.         }
  266.         public bool IsGuardianAlive()
  267.         {
  268.             return riftQuest != null && (riftQuest.QuestStepId == 3 || riftQuest.QuestStepId == 16);
  269.         }
  270.         public void DrawEliteCirclePlugin(WorldLayer layer)
  271.         {
  272.             bool flagNeedShowSteadyAimYard = false;
  273.             if (Hud.Game.Me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
  274.             {
  275.                 var dhSteadyAimBuff = Hud.Game.Me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_Passive_SteadyAim.Sno);
  276.                 if (dhSteadyAimBuff != null)
  277.                 {
  278.                     flagNeedShowSteadyAimYard = true;
  279.                 }
  280.  
  281.                 //??
  282.             }
  283.  
  284.  
  285.  
  286.             var alivemonsters = Hud.Game.AliveMonsters;
  287.             var goblins = Hud.Game.AliveMonsters.Where(x => x.SnoMonster.Priority == MonsterPriority.goblin);
  288.             foreach (var monster in goblins)
  289.             {
  290.                 GoblinDecorator.Paint(layer, monster, monster.FloorCoordinate, null);
  291.             }
  292.             List<IMonster> monstersElite = new List<IMonster>();
  293.             foreach (var monster in alivemonsters)
  294.             {
  295.                 if (monster.Rarity == ActorRarity.Champion || monster.Rarity == ActorRarity.Rare)
  296.                 {
  297.                     monstersElite.Add(monster);
  298.                 }
  299.                 if (monster.Rarity == ActorRarity.Unique)
  300.                 {
  301.                     UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized);
  302.                 }
  303.  
  304.                 if (monster.Rarity == ActorRarity.Boss)
  305.                 {
  306.                     BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized);
  307.                 }
  308.             }
  309.             foreach (var monster in monstersElite)
  310.             {
  311.                 if (monster.SummonerAcdDynamicId == 0)
  312.                 {
  313.                     var currentMonsterHealthPercent = monster.CurHealth * 100.0 / monster.MaxHealth;
  314.  
  315.                     bool flagIsNotJuggernaut = true;
  316.                     foreach (var snoMonsterAffix in monster.AffixSnoList)
  317.                     {
  318.                         string affixName = null;
  319.                         affixName = snoMonsterAffix.NameLocalized;
  320.                         if (snoMonsterAffix.Affix == MonsterAffix.Juggernaut) flagIsNotJuggernaut = false;
  321.                     }
  322.                     if (monster.Rarity == ActorRarity.Rare)
  323.                     {
  324.                         if (flagIsNotJuggernaut) RareDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized);
  325.                         else JuggernautDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized);
  326.                     }
  327.                     if (monster.Rarity == ActorRarity.Champion) ChampionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized);
  328.  
  329.                     var monsterScreenCoordinate = monster.FloorCoordinate.ToScreenCoordinate();
  330.  
  331.                     if (IsGuardianAlive())
  332.                     {
  333.                         if (flagNeedShowSteadyAimYard)
  334.                         {
  335.                             string yardStr = monster.NormalizedXyDistanceToMe.ToString("0") + "Yard";
  336.                             EliteHealthDecorator.TextFunc = () => yardStr;
  337.                             EliteHealthDecorator.Paint(monsterScreenCoordinate.X, monsterScreenCoordinate.Y - EliteHealthBlockSize, EliteHealthBlockSize, EliteHealthBlockSize, HorizontalAlign.Center);
  338.                         }
  339.                     }
  340.                     else
  341.                     {
  342.                         if (currentMonsterHealthPercent < 40.0)
  343.                         {
  344.                             string monsterHealthPercentStr = "HP:" + currentMonsterHealthPercent.ToString("0.0") + "%";
  345.                             EliteHealthDecorator.TextFunc = () => monsterHealthPercentStr;
  346.                             EliteHealthDecorator.Paint(monsterScreenCoordinate.X, monsterScreenCoordinate.Y - EliteHealthBlockSize, EliteHealthBlockSize, EliteHealthBlockSize, HorizontalAlign.Center);
  347.                         }
  348.                     }
  349.                     if (currentMonsterHealthPercent < 20.0 && ShowDirectLineToElite)
  350.                     {
  351.                         Hud.Render.CreateBrush(192, 255, 255, 55, -1).DrawLine(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, Hud.Game.Me.ScreenCoordinate.X, Hud.Game.Me.ScreenCoordinate.Y + 60, 1.0f);
  352.                     }
  353.                 }
  354.             }
  355.  
  356.             bool StrickenActive = false;
  357.             foreach (var StrickenLocation in Hud.Game.Items.Where(x => x.Location == ItemLocation.LeftRing || x.Location == ItemLocation.RightRing || x.Location == ItemLocation.Neck))
  358.             {
  359.                 if (StrickenLocation.SocketCount != 1 || StrickenLocation.ItemsInSocket == null) continue;
  360.                 var Stricken = StrickenLocation.ItemsInSocket.FirstOrDefault();
  361.                 if (Stricken == null) continue;
  362.                 if (Stricken.SnoItem.Sno == 3249948847) { StrickenActive = true; break; } else { continue; }
  363.             }
  364.             if (StrickenActive && ShowStricken)
  365.             {
  366.                 var Texture = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_018_x1);
  367.                 foreach (var monster in monstersElite)
  368.                 {
  369.                     if (monster.IsAlive)
  370.                     {
  371.                         var monsterScreenCoordinate = monster.FloorCoordinate.ToScreenCoordinate();
  372.                         Tuple<double, int> valuesOut;
  373.                         if (StrickenMonsterStatus.TryGetValue(monster.AcdId, out valuesOut))
  374.                         {
  375.                             double monHealth = monster.CurHealth;
  376.                             double prevHealth = valuesOut.Item1;
  377.                             int prevStacks = valuesOut.Item2;
  378.  
  379.                             if (prevHealth > monHealth && Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.BaneOfTheStrickenPrimary.Sno, 2) && StrickenMonsterCount == 0 && !StrickenInCooldown)
  380.                             {
  381.                                 int Stacks = (int)(prevStacks + 1);
  382.                                 Tuple<double, int> updateValues = new Tuple<double, int>(monster.CurHealth, Stacks);
  383.                                 StrickenMonsterStatus[monster.AcdId] = updateValues;
  384.                                 StrickenMonsterCount++;
  385.                                 StrickenInCooldown = true;
  386.                             }
  387.  
  388.                             else if (!Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.BaneOfTheStrickenPrimary.Sno, 2) && StrickenInCooldown)
  389.                             {
  390.                                 StrickenInCooldown = false;
  391.                                 StrickenMonsterCount = 0;
  392.                                 if (prevHealth > monHealth)
  393.                                 {
  394.                                     int Stacks = (int)(prevStacks);
  395.                                     Tuple<double, int> updateValues = new Tuple<double, int>(monster.CurHealth, Stacks);
  396.                                     StrickenMonsterStatus[monster.AcdId] = updateValues;
  397.                                 }
  398.                             }
  399.                             if (prevStacks > 0)
  400.                             {
  401.                                 Texture.Draw(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, StrickenPropSquare, StrickenPropSquare);
  402.                                 StrickenStackDecorator.TextFunc = () => prevStacks.ToString();
  403.                                 StrickenStackDecorator.Paint(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, StrickenPropSquare, StrickenPropSquare, HorizontalAlign.Center);
  404.                             }
  405.                         }
  406.                         else
  407.                         {
  408.                             Tuple<double, int> valuesIn = new Tuple<double, int>(monster.CurHealth, (int)(0));
  409.                             StrickenMonsterStatus.Add(monster.AcdId, valuesIn);
  410.                         }
  411.                     }
  412.                     else
  413.                     {
  414.                         StrickenMonsterStatus.Remove(monster.AcdId);
  415.                     }
  416.                 }
  417.             }
  418.  
  419.  
  420.             var shrines = Hud.Game.Shrines.Where(s => (s.Type == ShrineType.PoolOfReflection || s.Type == ShrineType.BanditShrine));
  421.             foreach (var shrine in shrines)
  422.             {
  423.                 if (shrine.IsDisabled == false && shrine.IsOperated == false)
  424.                 {
  425.                     var monsterScreenCoordinate = shrine.FloorCoordinate.ToScreenCoordinate();
  426.                     Hud.Render.CreateBrush(192, 255, 255, 55, -1).DrawLine(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, Hud.Game.Me.ScreenCoordinate.X, Hud.Game.Me.ScreenCoordinate.Y + 60, 1.0f);
  427.                 }
  428.             }
  429.  
  430.             double minDistanceToMe = 999999.0;
  431.             var oculusActors = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, Hud.Sno.SnoPowers.OculusRing.Sno) == 1);
  432.             foreach (var actor in oculusActors)
  433.             {
  434.                 if (minDistanceToMe > actor.NormalizedXyDistanceToMe)
  435.                 {
  436.                     minDistanceToMe = actor.NormalizedXyDistanceToMe;
  437.                 }
  438.             }
  439.             foreach (var actor in oculusActors)
  440.             {
  441.                 if (minDistanceToMe == actor.NormalizedXyDistanceToMe && actor.NormalizedXyDistanceToMe < 100)
  442.                 {
  443.                     var actorScreenCoordinate = actor.FloorCoordinate.ToScreenCoordinate();
  444.                     Hud.Render.CreateBrush(192, 234, 60, 83, -1).DrawLine(actorScreenCoordinate.X, actorScreenCoordinate.Y, Hud.Game.Me.ScreenCoordinate.X, Hud.Game.Me.ScreenCoordinate.Y + 60, 1.0f);
  445.  
  446.  
  447.                     //  StrickenStackDecorator.TextFunc = () => ("(" + (int)(actorScreenCoordinate.X) + "," + (int)(actorScreenCoordinate.Y) + ")");
  448.                     //  StrickenStackDecorator.Paint(actorScreenCoordinate.X, actorScreenCoordinate.Y, StrickenPropSquare, StrickenPropSquare, HorizontalAlign.Center);
  449.  
  450.                 }
  451.             }
  452.  
  453.  
  454.             foreach (var actor in Hud.Game.Actors)
  455.             {
  456.                 switch (actor.SnoActor.Sno)
  457.                 {
  458.                     case ActorSnoEnum._x1_monsteraffix_teleportmines:
  459.                         if (actor.NormalizedXyDistanceToMe <= 6) WormholeWarningDecorator.Paint(layer, actor, actor.FloorCoordinate, "Wormhole!");
  460.                         else WormholeDecorator.Paint(layer, actor, actor.FloorCoordinate, "Wormhole");
  461.                         break;
  462.                 }
  463.             }
  464.  
  465.  
  466.  
  467.  
  468.  
  469.             monstersElite.Clear();
  470.         }
  471.  
  472.  
  473.         /************************************************************************/
  474.         /*                                                                      */
  475.         /************************************************************************/
  476.         public EliteCirclePlugin()
  477.         {
  478.             Enabled = true;
  479.         }
  480.         public override void Load(IController hud)
  481.         {
  482.             base.Load(hud);
  483.             LoadEliteCirclePlugin();
  484.         }
  485.         public void OnNewArea(bool newGame, ISnoArea area)
  486.         {
  487.             OnNewAreaEliteCirclePlugin(newGame, area);
  488.         }
  489.         public void PaintWorld(WorldLayer layer)
  490.         {
  491.             DrawEliteCirclePlugin(layer);
  492.         }
  493.         public void AfterCollect()
  494.         {
  495.  
  496.         }
  497.         public void Customize()
  498.         {
  499.         }
  500.     }
  501. }
RAW Paste Data