miceiken

FishingScript.cs

Mar 13th, 2011
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.37 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using cleanCore;
  7.  
  8. namespace cleanLayer.Scripting.Scripts
  9. {
  10.     public class FishingScript : Script
  11.     {
  12.         public FishingScript()
  13.             : base("Fishing", "Bot")
  14.         { }
  15.  
  16.         private int Fishes;
  17.         private WoWSpell Fishing;
  18.         private DateTime LootTimer;
  19.         private DateTime CombatTimer;
  20.  
  21.         private List<string> EventSubscription = new List<string>
  22.         {
  23.             "LOOT_OPENED",
  24.             "LOOT_SLOT_CLEARED",
  25.             "LOOT_CLOSED",
  26.             "SKILL_LINES_CHANGED",
  27.             "PLAYER_REGEN_DISABLED",
  28.             "PLAYER_REGEN_ENABLED"
  29.         };
  30.  
  31.         private FishingState CurrentState
  32.         {
  33.             get;
  34.             set;
  35.         }
  36.  
  37.         public override void OnStart()
  38.         {
  39.             CurrentState = FishingState.Lure;
  40.             Fishes = 0;
  41.             Fishing = WoWSpell.GetSpell("Fishing");
  42.             if (!Fishing.IsValid)
  43.             {
  44.                 Print("You don't know fishing!");
  45.                 Stop();
  46.             }
  47.  
  48.             foreach (var ev in EventSubscription)
  49.                 Events.Register(ev, HandleFishingEvents);
  50.         }
  51.  
  52.         public override void OnTick()
  53.         {
  54.             switch (CurrentState)
  55.             {
  56.                 case FishingState.Lure:
  57.                     //if (!HasBait)
  58.                     //{
  59.                     //    // Implement applying lure
  60.                     //}
  61.                     CurrentState = FishingState.Cast;
  62.                     break;
  63.  
  64.                 case FishingState.Cast:
  65.                     Print("Casting Fishing Pole");
  66.                     Fishing.Cast();
  67.                     CurrentState = FishingState.Fishing;
  68.                     Sleep(500); // Force a sleep for the cast
  69.                     break;
  70.  
  71.                 case FishingState.Fishing:
  72.                     if (IsFishing)
  73.                     {
  74.                         if (IsBobbing)
  75.                             CurrentState = FishingState.Loot;
  76.                     }
  77.                     else
  78.                         CurrentState = FishingState.Lure;
  79.                     break;
  80.  
  81.                 case FishingState.Loot:
  82.                     Print("Getting Fishing Bobber");
  83.                     Bobber.Interact();
  84.                     LootTimer = DateTime.Now;
  85.                     CurrentState = FishingState.Looting;
  86.                     break;
  87.  
  88.                 case FishingState.Looting:
  89.                     var span = DateTime.Now - LootTimer;
  90.                     if (span.TotalSeconds > 3)
  91.                     {
  92.                         Print("No loot? Back to fishing then!");
  93.                         CurrentState = FishingState.Lure;
  94.                     }
  95.                     break;
  96.  
  97.                 case FishingState.Combat:
  98.                     // Not much we can do but wait :(
  99.                     break;
  100.             }
  101.  
  102.             Sleep(200);
  103.         }
  104.  
  105.  
  106.         private void HandleFishingEvents(string ev, List<string> args)
  107.         {
  108.             //Print("DEBUG - EVENT: {0} ({1})", ev, args);
  109.             TimeSpan span;
  110.             switch (ev)
  111.             {
  112.                 case "LOOT_OPENED":
  113.                     Print("We have {0} catches to loot", args[0]);
  114.                     break;
  115.  
  116.                 case "LOOT_SLOT_CLEARED":
  117.                     //var loot = WoWScript.Execute("GetLootSlotInfo(" + args[0] + ")");
  118.                     //Print("Looted [{0}]x{1}", loot[1], loot[2]);
  119.                     break;
  120.  
  121.                 case "LOOT_CLOSED":
  122.                     span = DateTime.Now - LootTimer;
  123.                     Print("Looting took {0} seconds.", Math.Round(span.TotalSeconds, 1));
  124.                     Fishes++;
  125.                     CurrentState = FishingState.Lure;
  126.                     break;
  127.  
  128.                 case "SKILL_LINES_CHANGED":
  129.                     Print("Seems like we leveled up our fishing!");
  130.                     break;
  131.  
  132.                 case "PLAYER_REGEN_DISABLED":
  133.                     Print("Seems like we entered combat!");
  134.                     CombatTimer = DateTime.Now;
  135.                     if (CanHandleCombat)
  136.                         Combat.Start();
  137.                     else
  138.                         Print("... too bad you didn't select a combat brain, now we're going to die");
  139.                     CurrentState = FishingState.Combat;
  140.                     break;
  141.  
  142.                 case "PLAYER_REGEN_ENABLED":
  143.                     if (CanHandleCombat)
  144.                         Combat.Stop();
  145.                     span = DateTime.Now - CombatTimer;
  146.                     Print("Combat done after {0} seconds", Math.Round(span.TotalSeconds, 1));
  147.                     CurrentState = FishingState.Lure;
  148.                     break;
  149.             }
  150.         }
  151.  
  152.         public override void OnTerminate()
  153.         {
  154.             foreach (var ev in EventSubscription)
  155.                 Events.Remove(ev, HandleFishingEvents);
  156.  
  157.             CurrentState = FishingState.Lure;
  158.             Fishing = null;
  159.             Print("Fishing season is over! You did however catch {0} fishes.", Fishes);
  160.         }
  161.  
  162.         #region Properties
  163.  
  164.         private WoWGameObject Bobber
  165.         {
  166.             get
  167.             {
  168.                 return Manager.Objects.Where(b => b.IsValid && b.IsGameObject)
  169.                     .Select(b => b as WoWGameObject)
  170.                     .Where(b => b.CreatedByMe && b.Name == "Fishing Bobber")
  171.                     .FirstOrDefault() ?? WoWGameObject.Invalid;
  172.             }
  173.         }
  174.  
  175.         private bool IsBobbing
  176.         {
  177.             get { return (Bobber.IsValid ? Helper.Magic.Read<byte>(Bobber.Pointer + 0xD4) == 1 : false); }
  178.         }
  179.  
  180.         private bool IsFishing
  181.         {
  182.             get { return Manager.LocalPlayer.ChanneledCastingId == Fishing.Id; }
  183.         }
  184.  
  185.         private bool HasBait
  186.         {
  187.             get { return WoWScript.Execute<int>("GetWeaponEnchantInfo()", 0) == 1; }
  188.         }
  189.  
  190.         private bool CanHandleCombat
  191.         {
  192.             get { return Combat.Brain != null; }
  193.         }
  194.  
  195.         #endregion
  196.  
  197.         #region FishingState enum
  198.  
  199.         enum FishingState
  200.         {
  201.             Lure,
  202.             Cast,
  203.             Fishing,
  204.             Loot,
  205.             Looting,
  206.             Combat
  207.         }
  208.  
  209.         #endregion
  210.     }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment