Zurück   Pokemon GO Bot Forum |WoW Forum | WoW FairPlay Bot Forum > Offtopic > WoW/MMO Glider Bot Forum > FAQs und Guides

Werbung
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hyjal Blumen pflücken und Bergbau (2000g+/h) Admin Farm Profile für Bergbau 56 08.01.2012 23:51
Abmount Problem beim Erze farmen bmwmonster Allgemeines, Fragen, Bugs oder Probleme 1 22.03.2011 14:15
[gelöst] Bergbau Erze farmen TheTiger83 Allgemeines, Fragen, Bugs oder Probleme 14 28.01.2011 00:55
Flugmount + Kräuter farmen Cyrus WoW/MMO Glider Support 2 31.01.2009 14:57
Kräuter Erze Farmen Zachariass WoW/MMO Glider Support 3 01.04.2008 17:59
Antwort
 
Themen-Optionen Ansicht
 
Alt 10.03.2009
Registriert seit: Jun 2008
Beiträge: 88
 
Schlachtrufer

Offline
habe wieder eine frage, und zwar fliege ich die waypoints ab nachdem ich auf record .... geklickt habe, danach wenn ich am startpunkt angelangt bin klicke ich auf pause und dann auf patrol, was macht der char? fliegt nicht los obwohl das flugmount bei Common.Mount richtig zugewiesen wurde und läuft in die entgegengesetzte Richtung. Muss man vllt bei Glider ein neues Profil erstellen? Hatte das Firefly Profil am laufen gehabt....
Mit Zitat antworten
Benutzerbild von Google Adsense
Registriert seit: viel zu lange
Beiträge: viel zu viele...
Ort: überall...
 
Google Adsense

Online Now!
Posted: vor kurzem


 
Alt 10.03.2009
Registriert seit: Dec 2007
Beiträge: 87
 
Schlachtrufer

Offline
Hay,
hab nochmal ne frage...kann ich die Profile/tasks oder was weiß ich was yoink benutzt auch abspeichern erweitern verändern oder so?
Mit Zitat antworten
 
Alt 11.03.2009
Registriert seit: Oct 2007
Beiträge: 24
 
Member

Offline
manche sollten einfach nicht fliegen

nutze das schon länger aber das hier is die härte hört mal auf fragen wie klein kinder zu stellen manchmal frage ich mich wie ihr wow starten könnt ^^

ps: Relaxe wegen deiner Frage einstellen kannst da nix aba ich bin mir sicher du benutzt ein epic mount ich habe die erfahrung gemacht je schneller das mount ist was man benutzt desto ungenauer fliegt er das erz an mountet früher ab landet im wasser usw... teste mal ein lahmes flugmount dann wirste sehen er stopt genau überm erz und landet sogar auf ihm....

glaub auch das yoink nimmer weiter entwickelt wird ?!
Mit Zitat antworten
 
Alt 11.03.2009
Registriert seit: May 2008
Beiträge: 202
 
Gesperrt

Offline
Zitat:
Zitat von Phantasie22 Beitrag anzeigen
manche sollten einfach nicht fliegen

nutze das schon länger aber das hier is die härte hört mal auf fragen wie klein kinder zu stellen manchmal frage ich mich wie ihr wow starten könnt ^^
Naja sieht man doch schon nach jedem neuen Addon wie blöd man im /1 Fragen kann wo quest xy ist obwohl es im Questlog steht oder für die lesefaulen/Brainafkler kann man sich Questhelper und Ähnliche runterladen .

Zitat:
glaub auch das yoink nimmer weiter entwickelt wird ?!
Hab auch sowas im Amiforum gelesen aber da ich lieber im 1000 winter Erze Farme und nebenbei noch ein paar Marken mitnehme war Yoink nicht wirklich was dolles vor allem auf vollen Servern wo eh die Geier den ganzen kreisen und mittlerweile die Porthacks wieder im kommen sind wars eh keine Alternative.(klar postet gleich ein Klugscheißer was anderes, aber probierts selbst einfach ne Wache anhauen oder aktiv PVP einstellen gibt dann sogar ein bissel Ehre)
Mit Zitat antworten
 
Alt 11.03.2009
Benutzerbild von Zelina
Registriert seit: Feb 2009
Beiträge: 20
 
Späher

Offline
sry leute aber ich bin da wohl zu blöd für diese Yoink,cs umzuschreiben, kann mir jemand den Code so umschreiben das es für Priester funktioniert den wäre ich total dankbar und es gibt natürlich +rep

danke im vorraus

MfG Zelina
Mit Zitat antworten
 
Alt 12.03.2009
Registriert seit: Oct 2007
Beiträge: 21
 

Offline
Hi Habe das prob das wenn ich die Yoink datei über arbeitet habe das er nun noch fehlermeldungen auspuckt :O( kann mal jemand von euch drüber schauen was das sein kann ??

soll fürn mage sein!

Code:
// Yoink.cs - Flying Mount Node Patrol
//
// Version: 0.4.0
//
//////////////////////////////////////////////////////////////////////////
//
// IMPORTANT!  
// 1. paste your NON PATROL OVERRIDING "combat class" where the useless comment is
// 2. copy the namespace and class name from the combat class and replace the line below with it
// 3. A using line looks like 'using blah.blah.blah;'  merge the using lines from your combat class, and the yoink class.
// 4. put your flying mount on casting bar 3, slot 1
// 5. put your cloud sucker on casting bar 3, slot 2
//
// For more information on Yoink
//
//          http://vforums.mmoglider.com/showthread.php?t=196008
//

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Media;
using System.Net;
using System.Runtime.Serialization;
using System.Security.Cryptography;
using System.Text;
using System.Threading;

//!Class: Glider.Common.Objects.YoinkSpace.Yoink

//////////////////////////////////////////////
////paste your Combat Class below, between the region markers
//////////////////////////////////////////////
#region Combat Class

namespace Glider.Common.Objects
{
    public class Mage : GGameClass
    {
const double PULL_MIN_DISTANCE = 20.0;  // Don't try to use slow pull spell if closer than this.
        const double WAND_MAX_RANGE = 30.0;
        const double COUNTERSPELL_RANGE = 30.0;
        const int BUFFID_COMBUSTION = 0x700a;

        #region Mage properties/config
        GSpellTimer ManaShieldTimer = new GSpellTimer(60 * 1000, false);   // 60 seconds for ManaShield
        GSpellTimer Armor = new GSpellTimer(27 * 60 * 1000, false);        // Frost Armor
        GSpellTimer Intellect = new GSpellTimer(27 * 60 * 1000, false);    // Arcane intellect.
        GSpellTimer Dampen = new GSpellTimer(9 * 60 * 1000, false);        // Dampen magic.
        GSpellTimer IceBarrier = new GSpellTimer(30 * 1000, true);         // Actual cooldown on casting.
        GSpellTimer Manastone = new GSpellTimer(3 * 60 * 1000, true);      // Cooldown between using mana stones.
        GSpellTimer Fireblast;
        GSpellTimer MeleeSpell;
        GSpellTimer Evocation = new GSpellTimer(8 * 60 * 1000, true);
        GSpellTimer FoodConjure = new GSpellTimer(60 * 1000, true);        // Futility timer for conjuring to avoid looping action.
        GSpellTimer WaterConjure = new GSpellTimer(60 * 1000, true);       // Futility timer for conjuring to avoid looping action.
        GSpellTimer StoneConjure = new GSpellTimer(2 * 60 * 1000, true);   // Futility timer to avoid looping stones when bag is full.
        

        bool UseStoneInv;     // Read inventory to determine if we have a manastone?
        bool UseCounterspell;
        bool UseDampen;
        bool UseManastones;
        bool WaitOnPull;
        bool UsePoly;
        bool UseCombustion;
        bool UseFrostNova;
        bool UseMeleeSpell;
        bool ApproachFireblast;
        bool SaveFireblast;
        bool UseEvocation;
        int FireblastDistance;
        IceBarrierMode ShieldMode;
        Finisher FinishMode;
        double FinishLife;
        double CounterspellLife;
        double ShieldLife;

        bool GotStone;
        bool Polyd;
        long PolyGUID;
        #endregion

        #region GGameClass overrides
        public override string DisplayName
        {
            get { return "Mage"; }
        }

        public override void Startup()
        {
        }

        public override GConfigResult ShowConfiguration()
        {
            return Context.ShowStockConfigDialog(GPlayerClass.Mage);
        }

        public override void CreateDefaultConfig()
        {
            Context.SetConfigValue("Mage.FireblastCooldownSec", "8", false);
            Context.SetConfigValue("Mage.UseFrostNova", "True", false);
            Context.SetConfigValue("Mage.PullDistance", "30", false);
            Context.SetConfigValue("Mage.ApproachFireblast", "True", false);
            Context.SetConfigValue("Mage.SaveFireblast", "False", false);
            Context.SetConfigValue("Mage.UseCounterspell", "False", false);
            Context.SetConfigValue("Mage.UseCombustion", "False", false);
            Context.SetConfigValue("Mage.UsePoly", "False", false);
            Context.SetConfigValue("Mage.UseEvocation", "False", false);
            Context.SetConfigValue("Mage.UseMeleeSpell", "False", false);
            Context.SetConfigValue("Mage.MeleeSpellCooldown", "10", false);
            Context.SetConfigValue("Mage.WaitOnPull", "True", false);
            Context.SetConfigValue("Mage.UseDampen", "False", false);
            Context.SetConfigValue("Mage.UseManaStones", "False", false);
            Context.SetConfigValue("Mage.IceBarrier", "0", false);
            Context.SetConfigValue("Mage.FinishLife", "10", false);
            Context.SetConfigValue("Mage.CounterspellLife", "40", false);
            Context.SetConfigValue("Mage.FireblastDistance", "20", false);
            Context.SetConfigValue("Mage.Finisher", ((int) Finisher.Wand).ToString(), false);
            Context.SetConfigValue("Mage.ShieldLife", "50", false);
        }

        public override void LoadConfig()
        {
            CounterspellLife = ((double)Context.GetConfigInt("Mage.CounterspellLife")) / 100.0;  // Down to pct.
            FinishLife = ((double)Context.GetConfigInt("Mage.FinishLife")) / 100.0;  // Down to pct.
            ApproachFireblast = Context.GetConfigBool("Mage.ApproachFireblast");
            FireblastDistance = Context.GetConfigInt("Mage.FireblastDistance");
            SaveFireblast = Context.GetConfigBool("Mage.SaveFireblast");
            UseFrostNova = Context.GetConfigBool("Mage.UseFrostNova");
            WaitOnPull = Context.GetConfigBool("Mage.WaitOnPull");
            UseCounterspell = Context.GetConfigBool("Mage.UseCounterspell");
            UseCombustion = Context.GetConfigBool("Mage.UseCombustion");
            UsePoly = Context.GetConfigBool("Mage.UsePoly");
            UseEvocation = Context.GetConfigBool("Mage.UseEvocation");
            UseDampen = Context.GetConfigBool("Mage.UseDampen");
            UseMeleeSpell = Context.GetConfigBool("Mage.UseMeleeSpell");
            UseManastones = Context.GetConfigBool("Mage.UseManaStones");
            ShieldMode = (IceBarrierMode) Context.GetConfigInt("Mage.IceBarrier");
            FinishMode = (Finisher) Context.GetConfigInt("Mage.Finisher");
            Fireblast = new GSpellTimer(Context.GetConfigInt("Mage.FireblastCooldownSec") * 1000, true);
            MeleeSpell = new GSpellTimer(Context.GetConfigInt("Mage.MeleeSpellCooldown") * 1000, true);
            ShieldLife = ((double)Context.GetConfigInt("Mage.ShieldLife")) / 100.0;  // Down to pct.;
            
        }

        // Don't buy this stuff, we can make it.
        public override bool ShouldBuyFood { get { return false; } }
        public override bool ShouldBuyWater { get { return false; } }
        public override bool CanDrink
        {
            get { return true; }   // umm drinking good.
        }
        public override bool Rest()
        {
            if (Me.IsSitting)
            {
                Context.SendKey("Common.Back");
                Thread.Sleep(1100);
            }

            int FoodLeft = Interface.GetActionInventory("Common.Eat");
            int WaterLeft = Interface.GetActionInventory("Common.Drink");

            if (FoodLeft < 10 && FoodConjure.IsReady)
            {
                FoodConjure.Reset();
                Context.Log("Only have " + FoodLeft + " food left, conjuring more");
                Context.CastSpell("Mage.ConjureFood");
                Thread.Sleep(771);  // Slight delay to let response come from server.
                return true;
            }

            if (WaterLeft < 10 && WaterConjure.IsReady)
            {
                WaterConjure.Reset();
                Context.Log("Only have " + WaterLeft + " water left, conjuring more");
                Context.CastSpell("Mage.ConjureWater");
                Thread.Sleep(771);  // Slight delay to let response come from server.
                return true;
            }

            if (UseManastones && StoneConjure.IsReady)
            {
                if (UseStoneInv)        // Jam flag with value from game.
                    GotStone = Context.Interface.GetActionInventory("Mage.UseManastone") != 0;

                if (!GotStone && Me.Mana > .35)
                {
                    StoneConjure.Reset();
                    Context.CastSpell("Mage.CreateManastone");
                    Thread.Sleep(1001);  // Let spell finish so inventory updates.
                    GotStone = true;
                    return true;
                }
            }

            if (Intellect.IsReady && Me.Mana > .2)
            {
                Context.CastSpell("Mage.ArcaneIntellect");
                Intellect.Reset();
                return true;
            }

            if (UseEvocation &&
                Me.Mana < Context.RestMana && Interface.IsKeyReady("Mage.Evocation") && !UsePoly && Me.Health > Context.RestHealth &&
                Evocation.IsReady)
            {
                Evocation.Reset();
                Context.CastSpell("Mage.Evocation", true, false, 2000);
                return true;
            }

            return base.Rest();
        }

        public override void ResetBuffs()
        {
            Intellect.ForceReady();
            Armor.ForceReady();
            Dampen.ForceReady();
            ManaShieldTimer.ForceReady();
        }

        public override void OnStartGlide()
        {
            if (UseManastones)
            {
                int Stones = Context.Interface.GetActionInventory("Mage.UseManastone");

                if (Stones == -1)
                {
                    Context.Log("Can't read manastone from inventory (barstate should not be indifferent), assuming no manastone present");
                    GotStone = false;
                    UseStoneInv = false;
                }
                else
                {
                    if (Stones == 0)
                        Context.Log("No mana stone, will conjure at rest");
                    else
                        Context.Log("Looks like we have a mana stone");

                    UseStoneInv = true;
                }
            }

            base.OnStartGlide();
        }

        public override void RunningAction()
        {
            if (Context.RemoveDebuffs(GBuffType.Curse, "Mage.RemoveCurse", false))
                return;

            // Check for IsKeyReady explicitly to keep from waiting for a GCD while running - this
            // will only cast the spell if the key is ready, so there's no chance of running past something.
            if (Armor.IsReady && Me.Mana > .2 && Interface.IsKeyReady("Mage.FrostArmor"))
            {
                Context.CastSpell("Mage.FrostArmor");
                Armor.Reset();
                return;
            }

            if (UseDampen && Dampen.IsReady && Me.Mana > .2 && Interface.IsKeyReady("Mage.DampenMagic"))
            {
                Context.CastSpell("Mage.DampenMagic");
                Dampen.Reset();
                return;
            }
        }

        public override void ApproachingTarget(GUnit Target)
        {
            if (ShieldMode == IceBarrierMode.Always && IceBarrier.IsReady)
            {
                Context.CastSpell("Mage.IceBarrier");
                IceBarrier.Reset();
            }
        }

        public override GCombatResult KillTarget(GUnit Target, bool IsAmbush)
        {
            Context.Debug("Mage.KillTarget invoked, isAmbush = " + IsAmbush + ", Target = " + Target.ToString() + ", distance = " + Target.DistanceToSelf);

            GCombatResult CommonResult;
            double StartLife = Me.Health;
            bool WasClose = false;

            Polyd = false;

            if (Target.IsPlayer)
                return KillPlayer((GPlayer) Target);

            GMonster Monster = (GMonster) Target;

            if (IceBarrier.IsReady)
            {
                if (ShieldMode == IceBarrierMode.Always ||
                    (ShieldMode == IceBarrierMode.OnHit && IsAmbush))
                {
                    Context.CastSpell("Mage.IceBarrier");
                    IceBarrier.Reset();
                }
            }

            if (Context.IsRunning || Context.IsSpinning)
            {
                Context.ReleaseSpinRun();
                Thread.Sleep(201);  // Let the game register the arrow key reelase.
            }

            Target.Face();
            Context.Debug("Faced target");

            if (UseCombustion && Interface.IsKeyReady("Mage.Combustion") && !Me.HasWellKnownBuff("Combustion"))
                Context.CastSpell("Mage.Combustion");

            // Cast pull spell if there's time:
            if ((Target.DistanceToSelf > PULL_MIN_DISTANCE && !IsAmbush) ||
                (Target.Reaction == GReaction.Neutral && Target.TargetGUID == 0))  
            {
                Context.CastSpell("Mage.Frostbolt");

                if (Target.DistanceToSelf > PULL_MIN_DISTANCE)
                {
                    bool Channeled = Context.CastSpell("Mage.Fireball");

                    if (!Channeled && !Me.IsInCombat)
                    {
                        // No good, try again?
                        if (Target.DistanceToSelf > PullDistance)
                        {
                            Context.Log("No channeling/combat on second spell, must have gone out of range");
                            return GCombatResult.Retry;
                        }
                        else
                        {
                            Context.Log("No combat after second spell and in range, must be obstructed");
                            return GCombatResult.Bugged;
                        }
                    }

                    if (WaitOnPull)
                        Target.WaitForApproach(base.PullDistance, 3000);
                }
            }

            // Pop 'em with a fireblast if they're close enough and it's an ambush:
            if (IsAmbush && Monster.DistanceToSelf < FireblastDistance && Fireblast.IsReady)
            {
                Context.CastSpell("Mage.Fireblast");
                Fireblast.Reset();
            }

            // Ok, main loop:
            while (true)
            {
                Thread.Sleep(101);

                // See if any of the normal combat exits got triggered - bail out if so.
                CommonResult = Context.CheckCommonCombatResult(Monster, IsAmbush);

                if (CommonResult != GCombatResult.Unknown)
                    break;

                if (Monster.DistanceToSelf > PullDistance)
                {
                    if (Monster.DistanceToSelf > 100.0)
                    {
                        Context.Log("! Monster is way too far away!");
                        return GCombatResult.Vanished;
                    }
                    else
                    {
                        Monster.Approach(this.PullDistance);
                    }
                }
                else
                    Monster.Face();

                // Runner!
                if (WasClose && Target.DistanceToSelf > Context.MeleeDistance)
                {
                    WasClose = false;

                    if (Interface.IsKeyReady("Mage.Fireblast") && SaveFireblast)
                    {
                        Context.Log("Shooting runner");
                        Context.CastSpell("Mage.Fireblast", true, false);
                        continue;
                    }
                }

                if (Target.DistanceToSelf < Context.MeleeDistance)
                    WasClose = true;

                // Counterspell!
                if (UseCounterspell && Monster.IsCasting && Monster.Health < CounterspellLife &&
                    Interface.IsKeyReady("Mage.Counterspell") && Monster.DistanceToSelf <= COUNTERSPELL_RANGE)
                {
                    Context.CastSpell("Mage.Counterspell", true, false);
                    continue;
                }

                if ((Me.Health < StartLife && ShieldMode == IceBarrierMode.OnHit) ||
                    (Me.Health < ShieldLife && ShieldMode != IceBarrierMode.None) ||
                    ShieldMode == IceBarrierMode.Always)
                {
                    if (IceBarrier.IsReady)
                    {
                        Context.CastSpell("Mage.IceBarrier");
                        IceBarrier.Reset();
                        StartLife = Me.Health;  // Remember this, just in case.
                        continue;
                    }
                }

                // Potion?
                if (Me.Health < .20 && Interface.IsKeyReady("Common.Potion") && Interface.IsKeyEnabled("Common.Potion"))
                {
                    Context.CastSpell("Common.Potion");
                    continue;
                }

                if (UseManastones)
                {
                    if (UseStoneInv)        // Jam flag with value from game.
                        GotStone = Context.Interface.GetActionInventory("Mage.UseManastone") != 0;

                    // Mana stone?
                    if (GotStone && Manastone.IsReady &&
                        ((Target.Health > .20 && Me.Mana < .20) ||
                         Me.Mana < .10))
                    {
                        Context.CastSpell("Mage.UseManastone");
                        Manastone.Reset();
                        GotStone = false;
                        continue;
                    }
                }

                // Defense is good.  Check offense:
                //

                // Extra attacker?
                if (CheckAdd(Monster))
                    continue;

                // Frost nova?
                if (ShouldFrostNova(Monster))
                {
                    if (DoFrostNova(Monster, true))
                        continue;
                }

                // Fireblast time?
                if (Fireblast.IsReady && Monster.DistanceToSelf < FireblastDistance && (Target.Health > .70 || !SaveFireblast))
                {
                    Context.CastSpell("Mage.Fireblast");
                    Fireblast.Reset();
                    continue;
                }

                // Melee spell?
                if (UseMeleeSpell && MeleeSpell.IsReady && Interface.IsKeyReady("Mage.MeleeSpell") && Target.DistanceToSelf <= Context.MeleeDistance)
                {
                    MeleeSpell.Reset();
                    Context.CastSpell("Mage.MeleeSpell");
                    continue;
                }

                // Go into the wand loop if they're low enough or we're gassed:
                if (((FinishMode == Finisher.Wand && Target.Health < FinishLife) || Me.Mana < .02) && Target.DistanceToSelf < WAND_MAX_RANGE)
                {
                    Context.Debug("Going into wand for finisher");
                    CommonResult = DoWand(Monster);

                    if (CommonResult != GCombatResult.Unknown)  // Something happened, we're done.
                        break;

                    continue;
                }

                if (Context.RemoveDebuffs(GBuffType.Curse, "Mage.RemoveCurse", true))
                    continue;

                // Spam it up.
                string SpamSpell = "Mage.Fireball";

                if (Target.Health < FinishLife && FinishMode == Finisher.Scorch)
                    SpamSpell = "Mage.Scorch";

                if (UseCounterspell && Target.DistanceToSelf <= COUNTERSPELL_RANGE)
                    Context.CastSpellWithInterrupt(SpamSpell, Monster, 
                                                   CounterspellLife, "Mage.Counterspell", true);
                else
                    Context.CastSpell(SpamSpell);

            }

            // If we poly'd someone, try to set it up as the next target and possibly grab some health/mana
            // before the next fight.  We won't be able to rest, so it has to be now:
            if (CommonResult == GCombatResult.Success && Polyd)
            {
                GUnit Add = GObjectList.FindUnit(PolyGUID);

                if (Add == null)
                {
                    Context.Log("! Could not find poly'd unit after combat, id = " + PolyGUID.ToString("x"));
                    return GCombatResult.Success;
                }

                if (!Add.SetAsTarget(false))
                {
                    Context.Log("! Could not target poly'd unit after combat, name = \"" + Add.Name + "\", id = " + Add.GUID.ToString("x"));
                    return GCombatResult.Success;
                }

                // If we have no other (third) attackers, consider bandaging and evocation:
                if (GObjectList.GetNearestAttacker(Add.GUID) == null)
                {
                    base.CheckBandageApply(true);

                    if (UseEvocation && Me.Mana < .33 && Interface.IsKeyReady("Mage.Evocation"))
                    {
                        Context.Log("Mana is low on poly, firing evocation");
                        Context.CastSpell("Mage.Evocation", true, false, 2000);
                    }

                    //! Back away from this guy if he's too close.
                    if (Add.DistanceToSelf < 12.0)
                        Movement.BackAway(Add, 17.0);
                }

                // Tell Glider to immediately begin wasting this guy and not rest:
                CommonResult = GCombatResult.SuccessWithAdd;
            }

            return CommonResult;
        }

        GCombatResult KillPlayer(GPlayer Target)
        {
            Context.Log("Killing player: \"" + Target + "\" (note: finish this later!)");

            while (!Me.IsDead)
                Thread.Sleep(1000);

            return GCombatResult.Died;
        }

        #endregion

        #region Complex functions
        bool ShouldFrostNova(GMonster Target)
        {
             return (Target.Health > .35 || Me.Health < .30) && Target.DistanceToSelf <= Context.MeleeDistance && UseFrostNova && Me.Mana > .2 && Interface.IsKeyReady("Mage.FrostNova") && !Polyd;
        }

        // Do a frost nova move and return true if we did something.  False if we changed our minds.
        bool DoFrostNova(GMonster Monster, bool ShootAfter)
        {
            // Stupid check for neutral mobs:
            GMonster Nearest = GObjectList.GetClosestNeutralMonster();

            if (Nearest != null && Nearest.DistanceToSelf < 12.0)  // Neutral mobs too close, will probably jump in.
                return false;

            GLocation MyStartPos = Me.Location;
            GLocation MonsterStartPos = Monster.Location;
            bool CheckedDistance = false;

            Thread.Sleep(676);

            // Second check in here in case the monster's health dropped while we were thinking about FN,
            // which happens a lot due to general server lag from damage spells.
            if (!ShouldFrostNova(Monster))
                return false;

            Context.CastSpell("Mage.FrostNova", true, true);
            Thread.Sleep(431);
            Context.PressKey("Common.Back");

            GSpellTimer FutileBackup = new GSpellTimer(4000, false);
            GSpellTimer DistanceCheck = new GSpellTimer(1000, false);
            bool JumpWait = false;

            while (!FutileBackup.IsReadySlow)
            {
                if (DistanceCheck.IsReady && !CheckedDistance)
                {
                    CheckedDistance = true;

                    if (MyStartPos.GetDistanceTo(Me.Location) < 3.0)
                    {
                        Context.Log("Character is not moving in Frost Nova, must be stuck!");
                        break;
                    }

                    if (MonsterStartPos.GetDistanceTo(Monster.Location) > 5.0)
                    {
                        Context.Log("Monster is moving in Frost Nova, must have resisted!");
                        break;
                    }

                    if (Context.RNG.Next() % 2 == 0)
                    {
                        Context.CastSpell("Common.Jump", false, true);
                        JumpWait = true;
                    }
                }

                if (Monster.DistanceToSelf > 9.0)
                    break;
            }

            Context.ReleaseKey("Common.Back");
            Thread.Sleep(401);  // Let game register key release.

            if (Monster.DistanceToSelf > 9.0)
            {
                if (JumpWait)
                    Thread.Sleep(700);

                if (ShootAfter)
                    Context.CastSpell("Mage.Fireball");
            }

            return true;
        }

        // Start wanding this guy and keep at it until he's dead or we decide it's time to
        // stop wanding:
        GCombatResult DoWand(GMonster Monster)
        {
            bool StopWand = false;
            GSpellTimer FutileWand = new GSpellTimer(12 * 1000, false);

            Context.CastSpell("Mage.Wand", true, true);

            while (!FutileWand.IsReadySlow)
            {
                GCombatResult CommonResult = Context.CheckCommonCombatResult(Monster, false);

                if (CommonResult != GCombatResult.Unknown)
                    return CommonResult;

                if (!Interface.IsKeyFiring("Mage.Wand"))
                {
                    if (!Monster.IsDead)
                        Context.Log("Wand is no longer firing - we get knocked down or stunned?");

                    break;
                }

                Monster.Face(Math.PI / 4.0);   // About 45 degrees.

                // Got an add and this guy isn't dead yet, better bust out.
                if (GObjectList.GetNearestAttacker(Monster.GUID) != null && Monster.Health > .20)
                    StopWand = true;

                // We're getting low and he's not, better bust out.
                if ((Me.Health < .30 && Monster.Health > .1) ||
                    Me.Health < .20)
                    StopWand = true;

                if (StopWand)
                {
                    Context.CastSpell("Mage.Wand", false, false);   // Stop the wand and get out!
                    Context.WaitForNotFiring("Mage.Wand");
                    break;
                }
            }

            return GCombatResult.Unknown;
        }

        // See if we have an extra attacker and should do something about it.  If something was
        // done, returns True.  Otherwise, False.
        bool CheckAdd(GMonster OriginalTarget)
        {
            if (Polyd || !UsePoly)
                return false;

            GUnit Add = GObjectList.GetNearestAttacker(OriginalTarget.GUID);

            if (Add == null)
                return false;

            if (!CanPoly(Add))
                return false;

            // Got an add!
            Context.Log("Additional attacker: \"" + Add.Name + "\", 0x" + Add.GUID.ToString("x") + ", polymorphing");

            if (!Add.SetAsTarget(false))    // Couldn't select it.
            {
                Context.Log("Could not select with Tab key, turning off poly option");
                UsePoly = false;
                OriginalTarget.SetAsTarget(true);
                return false;
            }

            if (UseFrostNova && Interface.IsKeyReady("Mage.FrostNova") &&
                (OriginalTarget.DistanceToSelf <= Context.MeleeDistance ||
                 Add.DistanceToSelf <= Context.MeleeDistance))
            {
                Context.Log("Using FrostNova to make some room for poly");
                DoFrostNova(OriginalTarget, false);
            }


            // Add is targeted!  Poly 'em:
            Context.CastSpell("Mage.Poly");
            Polyd = true;
            PolyGUID = Add.GUID;
            OriginalTarget.SetAsTarget(true);
            OriginalTarget.Face();

            return true;

        }

        private bool CanPoly(GUnit MyTarget)
        {
            if (MyTarget.CreatureType == GCreatureType.Beast || MyTarget.CreatureType == GCreatureType.Humanoid)
            {
                return true;
            }
            return false;
        }

        public override bool CheckPartyBuffs()
        {
            //LogHelper.Debug("CheckPartyBuffs for mage");
            return Context.Party.BuffParty("Mage.ArcaneIntellectOther", (26 * 60), GPlayerClass.Druid) ||
                   Context.Party.BuffParty("Mage.ArcaneIntellectOther", (26 * 60), GPlayerClass.Hunter) ||
                   Context.Party.BuffParty("Mage.ArcaneIntellectOther", (26 * 60), GPlayerClass.Paladin) ||
                   Context.Party.BuffParty("Mage.ArcaneIntellectOther", (26 * 60), GPlayerClass.Priest) ||
                   Context.Party.BuffParty("Mage.ArcaneIntellectOther", (26 * 60), GPlayerClass.Shaman) ||
                   Context.Party.BuffParty("Mage.ArcaneIntellectOther", (26 * 60), GPlayerClass.Warlock);
        }

        #endregion

        #region UpdateKeys method
        public override void UpdateKeys(GKey[] UpdatableKeys)
        {
            foreach (GKey One in UpdatableKeys)
            {
                GShortcut button = null;

                switch (One.KeyName)
                {
                    case "Mage.MeleeSpell":     // Take Dragon's Breath if it's there, otherwise CoC.
                        if (UseMeleeSpell)
                            button = GShortcut.FindMatchingSpellGroup("0x7bad 0x78");
                        else
                            continue;
                        break;

                    case "Mage.FrostArmor":     // Molten Armor if it's there, otherwise Ice Armor or wienie Frost Armor.
                        button = GShortcut.FindMatchingSpellGroup("0x7712 0x1c86 0xa8");
                        break;

                    case "Mage.UseManastone":   // Highest stone first, then others.
                        if (UseManastones)
                            button = GShortcut.FindMatchingShortcut(GShortcutType.Item, "0x561c 0x1f48 0x1f47 0x1589 0x158a");
                        else
                            continue;
                        break;

                    case "Mage.CreateManastone":  // Highest stone first, then others.
                        if (UseManastones)
                            button = GShortcut.FindMatchingShortcut(GShortcutType.Spell, "0x69dd 0x2746 0x2745 0xde0 0x2f7");
                        else
                            continue;
                        break;

                    default:
                        continue;  // Don't try to handle this, we didn't do anything smart.
                }

                if (button != null)
                {
                    Context.Debug("Mapped " + One.KeyName + " -> " + button.ToString());
                    One.SIM = button.ShortcutValue;
                }
                else
                    Context.Log("Unable to find suitable button for " + One.KeyName + ", see help section \"Re-Assigning Keys\" under Key Mappings.");

            }
        }

        #endregion

    }
}

#endregion

namespace Glider.Common.Objects.YoinkSpace
{
    public class Yoink :
        //////////////////////////////////////////////
        ////change this to your Combat Class
        Glider.Common.Objects.Mage
    //////////////////////////////////////////////
    {
        #region Initialization
        private void initialize()
        {
            log("initialize");
            tickRate = 1000;
            Ticker = new System.Threading.Timer(new System.Threading.TimerCallback(Tick), null, tickRate, tickRate);
            Ticker.Change(0, tickRate);
            RunMethod = PathRunMethod.BOUNCE;
            soundPlayer = new SoundPlayer();
            CurrentTargetNode = new Node();
            http = new http();
            http.UserAgent = LanguageVars.CLASSNAME + "/" + VERSION;
            BlackList = new List<long>();
            chatLogBuffer = new List<String>();
            Context.SetKeyValue(LanguageVars.CLASSNAME + ".Mount", GBarState.Indifferent, GContext.SS_NONE, 49);
            Context.SetKeyValue(LanguageVars.CLASSNAME + ".Extractor", GBarState.Indifferent, GContext.SS_NONE, 50);
            Context.SetKeyValue(LanguageVars.CLASSNAME + ".BAR3", GBarState.Indifferent, GContext.SS_SHIFT, 51);
            InitializeGUI();
            DisableMainLoop = false;
            GContext.Main.ChatLog += new GContext.GChatLogHandler(Main_ChatLog);
        }
        private bool RunPatrolLoop = true;
        private bool DisableMainLoop = true;
        private bool pathDirection = false;
        private int currentPathIndex = 0;
        private int _tickRate = -1;
        private int tickRate
        {
            get
            {
                return _tickRate;
            }
            set
            {
                _tickRate = value?
                if (!Object.Equals(null, Ticker))
                {
                    Ticker.Change(0, value);
                }
            }
        }
        private const string VERSION = "0.4.0";
        private const string DBURL = "http://thatit.org/yoink/";
        private Timer Ticker = null;
        private Thread gatherThread = null;
        private Thread mainLoopThread = null;
        private Thread onlineDBQueryThread = null;
        private Coordinates PatrolPath = null;
        private List<long> BlackList = null;
        private List<String> chatLogBuffer = null;
        private SoundPlayer soundPlayer = null;
        private Action DoingNow = Action.NIL;
        private DateTime timeLastAquired;
        private PathRunMethod RunMethod;
        private Node CurrentTargetNode;
        private http http = null;
        #region GUI Initialization
        private System.Windows.Forms.Button btnRecNewPath;
        private System.Windows.Forms.Button btnLoadPath;
        private System.Windows.Forms.Button btnRunPath;
        private System.Windows.Forms.Button btnPauseRec;
        private System.Windows.Forms.Button btnUnloadPath;
        private System.Windows.Forms.TextBox txbLoadFileName;
        private System.Windows.Forms.TextBox txbSaveFileName;
        private System.Windows.Forms.TableLayoutPanel tlpMain;
        private System.Windows.Forms.Form GUIForm;
        private System.Windows.Forms.Label lblYoink;
        private System.Windows.Forms.ComboBox cbbPathMode;
        private System.Windows.Forms.CheckBox cbNinja;
        private System.Windows.Forms.Label lblLootDelay;
        private System.Windows.Forms.NumericUpDown nudLootDelay;
        private System.Windows.Forms.CheckBox cbGetHerbs;
        private System.Windows.Forms.CheckBox cbGetMinerals;
        private System.Windows.Forms.CheckBox cbGetClouds;
        private System.Windows.Forms.CheckBox cbGetTreasures;
        private System.Windows.Forms.CheckBox cbUseOnlineDB;
        private void InitializeGUI()
        {
            #region Init
            this.btnRecNewPath = new System.Windows.Forms.Button();
            this.btnLoadPath = new System.Windows.Forms.Button();
            this.btnRunPath = new System.Windows.Forms.Button();
            this.btnUnloadPath = new System.Windows.Forms.Button();
            this.tlpMain = new System.Windows.Forms.TableLayoutPanel();
            this.lblYoink = new System.Windows.Forms.Label();
            this.txbLoadFileName = new System.Windows.Forms.TextBox();
            this.txbSaveFileName = new System.Windows.Forms.TextBox();
            this.btnPauseRec = new System.Windows.Forms.Button();
            this.cbbPathMode = new System.Windows.Forms.ComboBox();
            this.cbNinja = new System.Windows.Forms.CheckBox();
            this.lblLootDelay = new System.Windows.Forms.Label();
            this.nudLootDelay = new System.Windows.Forms.NumericUpDown();
            this.cbGetHerbs = new System.Windows.Forms.CheckBox();
            this.cbGetMinerals = new System.Windows.Forms.CheckBox();
            this.cbGetClouds = new System.Windows.Forms.CheckBox();
            this.cbGetTreasures = new System.Windows.Forms.CheckBox();
            this.cbUseOnlineDB = new System.Windows.Forms.CheckBox();
            #endregion
            #region Text
            this.lblLootDelay.Text = LanguageVars.LOOTDELAY;
            this.cbGetClouds.Text = LanguageVars.GETCLOUDS;
            this.cbGetHerbs.Text = LanguageVars.GETHERBS;
            this.cbGetMinerals.Text = LanguageVars.GETMINERALS;
            this.btnLoadPath.Text = LanguageVars.LOAD1;
            this.btnUnloadPath.Text = LanguageVars.UNLOAD1;
            this.btnRecNewPath.Text = LanguageVars.RECORD1;
            this.btnPauseRec.Text = LanguageVars.RECORD3;
            this.btnRunPath.Text = LanguageVars.RUN1;
            this.lblYoink.Text = LanguageVars.CLASSNAME;
            this.cbNinja.Text = LanguageVars.NINJA;
            this.cbGetTreasures.Text =?LanguageVars.GETTREASURES;
            this.cbUseOnlineDB.Text = LanguageVars.USEONLINEDB;
            #endregion
            #region Other
            this.nudLootDelay.Minimum = 0;
            this.nudLootDelay.Maximum = 10000;
            this.cbbPathMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cbbPathMode.Items.Add("BOUNCE");
            this.cbbPathMode.Items.Add("CIRCLE");
            #endregion
            #region DockStyle
            this.cbNinja.Dock = System.Windows.Forms.DockStyle.Fill;
            this.lblYoink.Dock = System.Windows.Forms.DockStyle.Fill;
            this.txbLoadFileName.Dock = System.Windows.Forms.DockStyle.Fill;
            this.btnLoadPath.Dock = System.Windows.Forms.DockStyle.Fill;
            this.btnUnloadPath.Dock = System.Windows.Forms.DockStyle.Fill;
            this.txbSaveFileName.Dock = System.Windows.Forms.DockStyle.Fill;
            this.btnRecNewPath.Dock = System.Windows.Forms.DockStyle.Fill;
            this.btnPauseRec.Dock = System.Windows.Forms.DockStyle.Fill;
            this.btnRunPath.Dock = System.Windows.Forms.DockStyle.Fill;
            this.cbbPathMode.Dock = System.Windows.Forms.DockStyle.Fill;
            this.lblLootDelay.Dock = System.Windows.Forms.DockStyle.Fill;
            this.nudLootDelay.Dock = System.Windows.Forms.DockStyle.Fill;
            this.cbGetHerbs.Dock = System.Windows.Forms.DockStyle.Fill;
            this.cbGetMinerals.Dock = System.Windows.Forms.DockStyle.Fill;
            this.cbGetClouds.Dock = System.Windows.Forms.DockStyle.Fill;
            this.cbGetTreasures.Dock = System.Windows.Forms.DockStyle.Fill;
            this.cbUseOnlineDB.Dock = System.Windows.Forms.DockStyle.Fill;
            #endregion
            #region Table Layout Panel
            this.tlpMain.AutoSize = true;
            this.tlpMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
            this.tlpMain.ColumnCount = 1;
            this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tlpMain.RowCount = 2;
            this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
            this.tlpMain.Width = 200;
            this.tlpMain.Controls.Add(lblYoink);
            this.tlpMain.Controls.Add(txbLoadFileName);
            this.tlpMain.Controls.Add(btnLoadPath);
            this.tlpMain.Controls.Add(btnUnloadPath);
            this.tlpMain.Controls.Add(txbSaveFileName);
            this.tlpMain.Controls.Add(cbbPathMode);
            this.tlpMain.Controls.Add(btnRecNewPath);
            this.tlpMain.Controls.Add(btnPauseRec);
            this.tlpMain.Controls.Add(cbGetHerbs);
            this.tlpMain.Controls.Add(cbGetMinerals);
            this.tlpMain.Controls.Add(cbGetClouds);
            this.tlpMain.Controls.Add(cbGetTreasures);
            this.tlpMain.Controls.Add(cbNinja);
            this.tlpMain.Controls.Add(lblLootDelay);
            this.tlpMain.Controls.Add(nudLootDelay);
            this.tlpMain.Controls.Add(cbUseOnlineDB);
            this.tlpMain.Controls.Add(btnRunPath);
            #endregion
            #region Form
            this.GUIForm = new System.Windows.Forms.Form();
            this.GUIForm.Hide();
            this.GUIForm.SuspendLayout();
            this.GUIForm.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.GUIForm.AutoSize = true;
            this.GUIForm.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            this.GUIForm.ShowIcon = false;
            this.GUIForm.Controls.Add(this.tlpMain);
            this.GUIForm.Name = YoinkSpace.Random.String(8);
            this.GUIForm.Text = YoinkSpace.Random.St?ing(8);
            this.GUIForm.ResumeLayout(false);
            #endregion
            #region Config
            this.txbLoadFileName.Text = (getConfigVal("txbLoadFileName") == String.Empty) ? LanguageVars.DEFAULTPATHNAME1 : getConfigVal("txbLoadFileName");
            this.txbSaveFileName.Text = (getConfigVal("txbSaveFileName") == String.Empty) ? LanguageVars.DEFAULTPATHNAME1 : getConfigVal("txbSaveFileName");
            this.cbbPathMode.SelectedItem = (getConfigVal("cbbPathMode") == String.Empty) ? "BOUNCE" : getConfigVal("cbbPathMode");
            this.cbGetHerbs.Checked = (getConfigVal("cbGetHerbs") == String.Empty) ? true : Boolean.Parse(getConfigVal("cbGetHerbs"));
            this.cbGetMinerals.Checked = (getConfigVal("cbGetMinerals") == String.Empty) ? true : Boolean.Parse(getConfigVal("cbGetMinerals"));
            this.cbGetClouds.Checked = (getConfigVal("cbGetClouds") == String.Empty) ? false : Boolean.Parse(getConfigVal("cbGetClouds"));
            this.cbNinja.Checked = (getConfigVal("cbNinja") == String.Empty) ? true : Boolean.Parse(getConfigVal("cbNinja"));
            this.nudLootDelay.Value = (getConfigVal("nudLootDelay") == String.Empty) ? 1000 : Decimal.Parse(getConfigVal("nudLootDelay"));
            this.cbGetTreasures.Checked = (getConfigVal("cbGetTreasures") == String.Empty) ? false : Boolean.Parse(getConfigVal("cbGetTreasures"));
            this.cbUseOnlineDB.Checked = (getConfigVal("cbUseOnlineDB") == String.Empty) ? true : Boolean.Parse(getConfigVal("cbUseOnlineDB"));
            #endregion
            #region Events
            this.txbLoadFileName.TextChanged += new EventHandler(txbLoadFileName_TextChanged);
            this.txbSaveFileName.TextChanged += new EventHandler(txbSaveFileName_TextChanged);
            this.btnRecNewPath.Click += new EventHandler(btnRecNewPath_Click);
            this.btnLoadPath.Click += new EventHandler(loadPath);
            this.btnRunPath.Click += new EventHandler(btnRunPath_Click);
            this.btnPauseRec.Click += new EventHandler(btnPauseRec_Click);
            this.btnUnloadPath.Click += new EventHandler(btnUnloadPath_Click);
            this.GUIForm.FormClosing += new System.Windows.Forms.FormClosingEventHandler(GUIForm_FormClosing);
            this.cbbPathMode.SelectedValueChanged += new EventHandler(cbbPathMode_SelectedValueChanged);
            this.cbNinja.CheckedChanged += new EventHandler(cbNinja_CheckedChanged);
            this.nudLootDelay.ValueChanged += new EventHandler(nudLootDelay_ValueChanged);
            this.cbGetClouds.CheckedChanged += new EventHandler(cbGetClouds_CheckedChanged);
            this.cbGetHerbs.CheckedChanged += new EventHandler(cbGetHerbs_CheckedChanged);
            this.cbGetMinerals.CheckedChanged += new EventHandler(cbGetMinerals_CheckedChanged);
            this.cbGetTreasures.CheckedChanged += new EventHandler(cbGetTreasures_CheckedChanged);
            this.cbUseOnlineDB.CheckedChanged += new EventHandler(cbUseOnlineDB_CheckedChanged);
            #endregion
            this.GUIForm.Show();
        }
        #endregion
        #endregion
        #region Loops
        private void loopMain()
        {
            try
            {
                if (DisableMainLoop) return;
                if (isGliderUseable)
                {
                    switch (DoingNow)
                    {
                        case Action.PATROL:
                            DisableMainLoop = true;
                            playSound();
                            loopPatrol();
                            resetKeys();
                            DisableMainLoop = false;
                            break;
                        case Action.MANEUVER:
                            DisableMainLoop = true;
                            playSound();
                            loopManeuver();
                            resetKeys();
                            DisableMainLoop = false;
                            break;
                        case Action.RECORD:
   ?                        DisableMainLoop = true;
                            loopRecord();
                            DisableMainLoop = false;
                            break;
                        case Action.COMBAT:
                            DisableMainLoop = true;
                            loopCombat();
                            DisableMainLoop = false;
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                log("loopMain(): " + ex.Message);
            }
        }
        private void loopCombat()
        {
            try
            {
                while (Context.Me.IsInCombat)
                {
                    if (IsMounted())
                        disMount();
                    GUnit target = GObjectList.GetNearestAttacker(0);
                    if (object.Equals(null, target))
                    {
                        continue;
                    }
                    if (target != null && !target.IsDead)
                    {
                        if ((target.IsPlayer && !((GPlayer)target).IsSameFaction) ||
                            target.Reaction != GReaction.Friendly)
                        {
                            Context.Log("Got a Target. Go Kill!");
                            if (!target.SetAsTarget(false))
                            {
                                Context.Log("Can not target");
                            }
                            else
                            {
                                target.TouchHealthDrop();
                                StartCombat();
                                GCombatResult outcome = KillTarget(target, false);
                                log("Combat outcome: " + outcome.ToString());
                            }
                        }
                        else
                            Context.ClearTarget();
                    }
                    pause(100, 1000);
                }
                Context.Me.Refresh(true);
                if (Context.Me.IsDead)
                {
                    stopAll("Dead >_<");
                    return;
                }
                resetKeys();
                GUnit[] units = GObjectList.GetUnits();
                foreach (GUnit u in units)
                {
                    if (u.IsLootable)
                    {
                        lootUnit2D(u);
                    }
                }
                DoingNow = Action.PATROL;
                if (checkForNodes())
                {
                    if (CurrentTargetNode.Coords.Location.DistanceToSelf < 20)
                    {
                        DoingNow = Action.MANEUVER;
                    }
                }
            }
            catch (Exception ex)
            {
                log("loopCombat(): " + ex.Message);
            }
        }
        private bool firstPathIndex = true;
        private void loopPatrol()
        {
            try
            {
                while (DoingNow == Action.PATROL)
                {
                    Context.Me.Refresh(true);
                    if (Context.Me.IsDead)
                    {
                        stopAll("Dead >_<");
                        return;
                    }
                    if (Context.Me.IsInCombat && !IsMounted())
                    {
                        log("ambushed, kick some but using combat class");
                        DoingNow = Action.COMBAT;
                        return;
                    }
                    if (!IsMounted())
                    {
                        mountAndTakeOff();
                        if (!IsMounted())
                        {
                            continue;
                        }
                    }
                    float meX = Context.Me.Location.X;
                    float meY = Context.Me.Location.Y;
               ?    float meZ = Context.Me.Location.Z;
                    //find closest waypoint
                    float lowestDiff = 100000;
                    float tmpXdiff = 0;
                    float tmpYdiff = 0;
                    float tmpZdiff = 0;
                    float tmpLowDif = 0;
                    int PathCursor = -1;
                    int closestCoordIndex = -1;
                    foreach (Coordinate c in PatrolPath)
                    {
                        if (pathDirection)
                        {
                            if (currentPathIndex > PathCursor && !firstPathIndex)
                            {
                                PathCursor++;
                                continue;
                            }
                        }
                        else
                        {
                            if (currentPathIndex < PathCursor && !firstPathIndex)
                            {
                                PathCursor++;
                                continue;
                            }
                        }
                        PathCursor++;
                        tmpXdiff = Math.Abs(c.X - meX);
                        tmpYdiff = Math.Abs(c.Y - meY);
                        tmpZdiff = Math.Abs(c.Z - meZ);
                        tmpLowDif = tmpXdiff + tmpYdiff + tmpZdiff;
                        if (lowestDiff > tmpLowDif)
                        {
                            lowestDiff = tmpLowDif;
                            closestCoordIndex = PathCursor;
                        }
                    }
                    firstPathIndex = false;
                    //go towards the point after the closest point
                    int targetCoordIndex = -1;
                    if (pathDirection)
                        targetCoordIndex = closestCoordIndex - 1;
                    else
                        targetCoordIndex = closestCoordIndex + 1;
                    if (targetCoordIndex < 0)
                    {
                        switch (RunMethod)
                        {
                            case PathRunMethod.BOUNCE:
                                targetCoordIndex = 0;
                                pathDirection = !pathDirection;
                                break;
                            case PathRunMethod.CIRCLE:
                                targetCoordIndex = PatrolPath.Count - 1;
                                break;
                        }
                    }
                    if (targetCoordIndex > PatrolPath.Count - 1)
                    {
                        switch (RunMethod)
                        {
                            case PathRunMethod.BOUNCE:
                                targetCoordIndex = PatrolPath.Count - 1;
                                pathDirection = !pathDirection;
                                break;
                            case PathRunMethod.CIRCLE:
                                targetCoordIndex = 0;
                                break;
                        }
                    }
                    currentPathIndex = targetCoordIndex;
                    Coordinate TargetCoord = PatrolPath[targetCoordIndex];
                    moveTo3D(TargetCoord, .3, 15, 0, 0, 0, 0, 0);
                    if (checkForNodes())
                    {
                        DoingNow = Action.MANEUVER;
                        return;
                    }
                    pause(300, 1500);
                }
            }
            catch (Exception ex)
            {
                log("loopPatrol(): " + ex.Message);
            }
        }
        private void loopManeuver()
        {
            DateTime startTime = DateTime.Now;
            DateTime distStTime = DateTime.Now;
            try
            {
                GObject node = GObjectList.FindObject(CurrentTargetNode.GUID);
                if (node != null && node.IsValid)
                {
           ?        log("Maneuvering towards " + node.Name);
                }
                bool directlyAbove = false;
                while (DoingNow == Action.MANEUVER)
                {
                    node = GObjectList.FindObject(CurrentTargetNode.GUID);
                    #region Checks
                    if (node == null || !node.IsValid)
                    {
                        log("node dissapeared, blacklisting it, back to patrol");
                        blackListNode(CurrentTargetNode.GUID);
                        DoingNow = Action.PATROL;
                        if (checkForNodes())
                        {
                            if (CurrentTargetNode.Coords.Location.DistanceToSelf < 20)
                            {
                                DoingNow = Action.MANEUVER;
                            }
                        }
                        return;
                    }
                    node.Refresh(true);
                    Context.Me.Refresh(true);
                    if (Context.Me.IsDead)
                    {
                        stopAll("Dead >_<");
                        return;
                    }
                    if (Context.Me.IsInCombat && !IsMounted())
                    {
                        log("ambushed, kick some but using combat class");
                        DoingNow = Action.COMBAT;
                        return;
                    }
                    if (DateTime.Now.CompareTo(startTime.AddSeconds(45)) > 0)
                    {
                        log("took too long to get to this node (45 seconds), blacklisting it, back to patrol");
                        blackListNode(CurrentTargetNode.GUID);
                        DoingNow = Action.PATROL;
                        if (checkForNodes())
                        {
                            if (CurrentTargetNode.Coords.Location.DistanceToSelf < 20)
                            {
                                DoingNow = Action.MANEUVER;
                            }
                        }
                        return;
                    }
                    if (!checkForNodes())
                    {
                        log("no nodes, back to patrol");
                        DoingNow = Action.PATROL;
                        return;
                    }
                    #endregion
                    #region Maneuver
                    Coordinate TargetCoord = new Coordinate(node.Location);
                    Coordinate MyCoord = new Coordinate(Context.Me.Location);

                    float diffY = TargetCoord.Y - MyCoord.Y;
                    float diffX = TargetCoord.X - MyCoord.X;
                    float diffZ = TargetCoord.Z - MyCoord.Z;
                    double distanceX = Math.Round(Math.Abs(diffX));
                    double distanceY = Math.Round(Math.Abs(diffY));
                    double distanceZ = Math.Round(Math.Abs(diffZ));

                    if (DateTime.Now.CompareTo(distStTime.AddSeconds(1)) > 0)
                    {
                        distStTime = DateTime.Now;
                        //log("Distance: " + node.DistanceToSelf.ToString() + " distanceX:" + distanceX.ToString() + " distanceY:" + distanceY.ToString() + " distanceZ:" + distanceZ.ToString());
                    }

                    if (!directlyAbove && distanceX < 4 && distanceY < 4 && diffZ < 0)
                    {
                        directlyAbove = true;
                        log("directly above node, descending");
                    }
                    if (!directlyAbove)
                    {
                        TargetCoord.Z = TargetCoord.Z + 25;
                    }

                    moveTo3D(TargetCoord, .3, (directlyAbove) ? 0 : 5, (directlyAbove) ? 0 : 5, (directlyAbove) ? 100 : 4, (directlyAbove) ? 100 : 4, (directlyAbove) ? 100 : 4, (directlyAbove) ? 100 : 4);
                    if (directlyAbove && diffZ > -10 && IsMounted())
                    {
   ?                    resetKeys();
                        disMount();
                    }
                    if (directlyAbove && diffZ > -10 && !IsMounted())
                    {
                        resetKeys();
                        pause(300, 1500);
                        moveTo2D(TargetCoord, 4, 10, 200);
                        acquireNode();
                        acquireNodeThreadSupervisor();
                    }
                    #endregion
                    pause(200);
                }
            }
            catch (Exception ex)
            {
                log("loopManeuver(): " + ex.Message);
            }
        }
        private void loopRecord()
        {
            try
            {
                if (!isGliderUseable) return;
                if (object.Equals(null, PatrolPath))
                    PatrolPath = new Coordinates();
                while (DoingNow == Action.RECORD || DoingNow == Action.RECORDPAUSE)
                {
                    if (DoingNow == Action.RECORD)
                    {
                        Context.Me.Refresh(true);
                        float meX = Context.Me.Location.X;
                        float meY = Context.Me.Location.Y;
                        float meZ = Context.Me.Location.Z;
                        if (PatrolPath.Count > 0)
                        {
                            if (PatrolPath[PatrolPath.Count - 1].X == meX && PatrolPath[PatrolPath.Count - 1].Y == meY && PatrolPath[PatrolPath.Count - 1].Z == meZ)
                                continue;
                        }
                        playSound();
                        PatrolPath.Add(new Coordinate(Context.Me.Location));
                    }
                    //pause(300, 1500);//better?
                    pause(1000);
                }
            }
            catch (Exception ex)
            {
                log("loopRecord(): " + ex.Message);
            }
            string s = string.Empty;
            foreach (Coordinate c in PatrolPath)
            {
                s += c.X.ToString() + "|" + c.Y.ToString() + "|" + c.Z.ToString() + "\n";
            }
            try
            {
                string fpath = Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Profiles" + Path.DirectorySeparatorChar + txbSaveFileName.Text + ".yoink";
                FileStream fs = new FileStream(fpath, FileMode.Create);
                StreamWriter sw = new StreamWriter(fs);
                sw.Write(s);
                sw.Flush();
                sw.Close();
                fs.Close();
                log("Wrote path recording to: " + fpath);
            }
            catch (Exception ex)
            {
                log("loopRecord(): " + ex.Message);
            }
        }
        #endregion
        #region Node Logic
        private void acquireNode()
        {
            gatherThread = new Thread(new ThreadStart(acquireNode2));
            gatherThread.Start();
        }
        private void acquireNode2()
        {
            try
            {
                GObject node = GObjectList.FindObject(CurrentTargetNode.GUID);
                moveTo2D(new Coordinate(node.Location), 5, 100, 100);
                int chatLogBufferCursor = chatLogBuffer.Count;
                bool isCloud = (node.Name.ToLower().Contains("cloud")) ? true : false;
                while (node != null && node.IsValid)
                {
                    if (isCloud)
                    {
                        useExtractor();
                    }
                    else
                    {
                        GContext.Main.EnableCursorHook();
                        node.Hover();
                        node.Interact();
                        GContext.Main.DisableCursorHook();
                    }
                    string message = GContext.Main.RedMessage.ToLower();
                    if (message.ToLower().Contains("lock"))
                    {
        ?               log(message + ", blacklisting node");
                        blackListNode(CurrentTargetNode.GUID);
                        return;
                    }
                    if (message.ToLower().Contains("require"))
                    {
                        log(message + ", blacklisting node");
                        blackListNode(CurrentTargetNode.GUID);
                        return;
                    }
                    if (message.ToLower().Contains("are full"))
                    {
                        stopAll("Bags Full");
                        return;
                    }
                    if (message.ToLower().Contains("placed in that"))
                    {
                        stopAll("Bags Full");
                        return;
                    }
                    if (message.ToLower().Contains("not go there"))
                    {
                        stopAll("Bags Full");
                        return;
                    }
                    while (Context.Me.IsCasting)
                    {
                        pause(50);
                    }
                    pause((int)nudLootDelay.Value);
                    //HandleBopPopup(1000);
                    if (chatLogBuffer.Count > chatLogBufferCursor)
                    {
                        int howManyNewLines = chatLogBuffer.Count - chatLogBufferCursor;
                        List<String> newLines = chatLogBuffer.GetRange(chatLogBuffer.Count - howManyNewLines, howManyNewLines);
                        chatLogBufferCursor = chatLogBuffer.Count;
                        foreach (String line in newLines)
                        {
                            if ((line == String.Empty) || (line == null)) continue;
                            if (line.ToLower().Contains("you receive loot: "))
                            {
                                log("Got some of the node!");
                                timeLastAquired = DateTime.Now;
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log("acquireNode2(): " + ex.Message);
            }
        }
        private void acquireNodeThreadSupervisor()
        {
            try
            {
                GObject node = GObjectList.FindObject(CurrentTargetNode.GUID);
                DateTime startTime = DateTime.Now;
                timeLastAquired = DateTime.Now;
                while (node != null && node.IsValid)
                {
                    if (Context.Me.IsInCombat)
                    {
                        log("ambushed, kick some but using combat class");
                        DoingNow = Action.COMBAT;
                        gatherThread.Abort();
                        resetKeys();
                        return;
                    }
                    if (DateTime.Now.CompareTo(timeLastAquired.AddSeconds(35)) > 0)
                    {
                        log("took too long to mine this node (35 seconds), blacklisting it");
                        blackListNode(CurrentTargetNode.GUID);
                        DoingNow = Action.PATROL;
                        if (checkForNodes())
                        {
                            if (CurrentTargetNode.Coords.Location.DistanceToSelf < 20)
                            {
                                DoingNow = Action.MANEUVER;
                            }
                        }
                        gatherThread.Abort();
                        resetKeys();
                        return;
                    }
                    pause(500);
                }
                gatherThread.Abort();
                resetKeys();
                DoingNow = Action.PATROL;
                if (checkForNodes())
                {
                    if (CurrentTargetNode.Coords.Location.DistanceToSelf < 20)
    ?               {
                        DoingNow = Action.MANEUVER;
                    }
                }
            }
            catch (Exception ex)
            {
                log("acquireNodeThreadSupervisor(): " + ex.Message);
            }
        }
        private bool checkForNodes()
        {
            GObject[] objs = GObjectList.GetObjects();
            foreach (GObject o in objs)
            {
                Action a = new Action();
                if (IsValidNode(o, out a))
                {
                    setTargetNode(o.GUID, o.Location, o.Name, a);
                    startDBQuery(o);
                    return true;
                }
            }
            return false;
        }
        private bool IsValidNode(GObject obj, out Action Action)
        {
            Action = Action.NIL;
            if (object.Equals(null, obj))
                return false;
            if (!obj.IsValid)
                return false;
            if (BlackList.Contains(obj.GUID))
                return false;
            if (obj.Type != GObjectType.Node && obj.Type != GObjectType.Monster)
                return false;
            //valid node?
            if (obj.Type == GObjectType.Node)
            {
                GNode objNode = (GNode)obj;
                if (!objNode.IsFlower && !objNode.IsMineral && !objNode.IsTreasure)
                    return false;
                if (objNode.IsFlower && !GPlayerSelf.Me.HasHerbalism)
                    return false;
                if (objNode.IsMineral && !GPlayerSelf.Me.HasMining)
                    return false;
                if (objNode.IsFlower && !cbGetHerbs.Checked)
                    return false;
                if (objNode.IsMineral && !cbGetMinerals.Checked)
                    return false;
                if (objNode.IsTreasure && !cbGetTreasures.Checked)
                    return false;
            }
            //valid cloud?
            if (obj.Type == GObjectType.Monster)
            {
                if (!cbGetClouds.Checked)
                    return false;
                if (!obj.Name.ToLower().Contains("cloud"))
                    return false;
            }
            //check ninja status
            if (!cbNinja.Checked)
            {
                GPlayer[] players = GObjectList.GetPlayers();
                foreach (GPlayer player in players)
                {
                    if (player.GUID == Context.Me.GUID)
                        continue;
                    player.Refresh(true);
                    if (player.Location.GetDistanceTo(obj.Location) < 20)
                    {
                        return false;
                    }
                }
            }
            Action = Action.AQUIRE;
            return true;
        }
        private void startDBQuery(GObject obj)
        {
            try
            {
                if (!object.Equals(null, onlineDBQueryThread))
                {
                    if (onlineDBQueryThread.IsAlive)
                        return;
                }
                onlineDBQueryThread = new Thread(new ParameterizedThreadStart(startDBQuery2));
                onlineDBQueryThread.SetApartmentState(ApartmentState.STA);
                onlineDBQueryThread.Priority = ThreadPriority.AboveNormal;
                onlineDBQueryThread.Name = "onlineDBQueryThread";
                onlineDBQueryThread.Start(obj);
            }
            catch (Exception ex)
            {
                log("startDBQuery(GObject obj): " + ex.Message);
            }
        }
        private void startDBQuery2(object o)
        {
            try
            {
                GObject obj = (GObject)o;
                int numCases = onlineDbQueryEvents(new Coordinate(obj.Location), 20, "stuckswim", "stuckinside");
                if (numCases > 0)
                {
                    log("Online DB Reported " + numCases.ToString() + " cases of stuckswim and/or stuckinside for a node ?ocation, blacklisting the node");
                    blackListNode(obj.GUID);
                }
            }
            catch (Exception ex)
            {
                log("startDBQuery2(object o): " + ex.Message);
            }
        }
        private void blackListNode(long GUID)
        {
            BlackList.Add(GUID);
        }
        private void setTargetNode(long GUID, GLocation Coords, String Name, Action NodeAction)
        {
            Node n = new Node();
            n.Action = NodeAction;
            n.Word = String.Empty;
            n.GUID = GUID;
            n.Coords = new Coordinate(Coords);
            n.Name = Name;
            CurrentTargetNode = n;
        }
        #endregion
        #region Move Logic
        private void moveTo3D(Coordinate TargetCoord)
        {
            moveTo3D(TargetCoord, .3, 0, 0, 0, 0, 0, 0);
        }
        private void moveTo3D(Coordinate TargetCoord, double TolHead, int tolZ_lower, int tolZ_upper, int tolX_lower, int tolX_upper, int tolY_lower, int tolY_upper)
        {
            Context.Me.Refresh(true);
            Coordinate MyCoord = new Coordinate(Context.Me.Location);
            GLocation TargetGLoc = new GLocation(TargetCoord.X, TargetCoord.Y, TargetCoord.Z);
            GLocation MyGLoc = new GLocation(MyCoord.X, MyCoord.Y, MyCoord.Z);
            float diffY = TargetCoord.Y - MyCoord.Y;
            float diffX = TargetCoord.X - MyCoord.X;
            float diffZ = TargetCoord.Z - MyCoord.Z;
            float distanceX = Math.Abs(diffX);
            float distanceY = Math.Abs(diffY);
            float distanceZ = Math.Abs(diffZ);
            float distanceXY = Math.Abs(diffY) + Math.Abs(diffX);
            #region heading
            double heading = Context.Movement.GetHeadingTo(MyGLoc, TargetGLoc);
            double headingDiff = heading - Context.Me.Heading;
            if (Math.Abs(headingDiff) > TolHead)
            {
                Context.Movement.SetHeading(heading);
            }
            else
            {
                if (Context.IsSpinning)
                    Context.ReleaseSpin();
            }
            #endregion
            #region X and Y Axis
            clamp(ref tolX_lower, 0, 100);
            clamp(ref tolX_upper, 0, 100);
            tolX_lower = tolX_lower * -1;
            clamp(ref tolY_lower, 0, 100);
            clamp(ref tolY_upper, 0, 100);
            tolY_lower = tolY_lower * -1;
            if (diffX > tolX_upper || diffY > tolY_upper)
            {
                Context.ReleaseKey("Common.Back");
                Context.PressKey("Common.Forward");
            }
            else if (diffX < tolX_lower || diffY < tolY_lower)
            {
                Context.ReleaseKey("Common.Back");
                Context.PressKey("Common.Forward");
                //Context.ReleaseKey("Common.Forward");
                //Context.PressKey("Common.Back");
            }
            else
            {
                Context.ReleaseKey("Common.Back");
                Context.ReleaseKey("Common.Forward");
            }
            #endregion
            #region Z Axis
            clamp(ref tolZ_lower, 0, 100);
            clamp(ref tolZ_upper, 0, 100);
            tolZ_lower = tolZ_lower * -1;
            bool mounted = IsMounted();
            if (diffZ > tolZ_upper)//go up
            {
                Context.ReleaseKey("Common.Sit");
                Context.PressKey("Common.Jump");
            }
            else if (diffZ < tolZ_lower && mounted)//go down
            {
                Context.ReleaseKey("Common.Jump");
                Context.PressKey("Common.Sit");
            }
            else
            {
                Context.ReleaseKey("Common.Sit");
                Context.ReleaseKey("Common.Jump");
            }
            #endregion
        }
        private void moveTo2D(Coordinate TargetCoord, int distance, int adjustFrequencyMS, int numLoops)
        {
            GLocation loc = new GLoca?ion(TargetCoord.X, TargetCoord.Y, TargetCoord.Z);
            if (loc.DistanceToSelf <= distance)
                return;
            resetKeys();
            for (int i = 0; i < numLoops; i++)
            {
                if (loc.DistanceToSelf <= distance)
                    break;
                Context.Me.Refresh(true);
                GLocation MyGLoc = Context.Me.Location;
                double heading = Context.Movement.GetHeadingTo(MyGLoc, loc);
                Context.Movement.SetHeading(heading);
                Context.PressKey("Common.Forward");
                pause(adjustFrequencyMS);
            }
            resetKeys();
        }
        #endregion
        #region Event Handlers
        private void cbUseOnlineDB_CheckedChanged(object sender, EventArgs e)
        {
            setConfigVal("cbUseOnlineDB", cbUseOnlineDB.Checked.ToString());
        }
        private void Main_ChatLog(string RawText, string ParsedText)
        {
            chatLogBuffer.Add(RawText);
        }
        private void GUIForm_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
        {
            e.Cancel = true;
            GUIForm.Visible = false;
        }
        private void txbSaveFileName_TextChanged(object sender, EventArgs e)
        {
            setConfigVal("txbSaveFileName", txbSaveFileName.Text);
        }
        private void txbLoadFileName_TextChanged(object sender, EventArgs e)
        {
            setConfigVal("txbLoadFileName", txbLoadFileName.Text);
        }
        private void cbNinja_CheckedChanged(object sender, EventArgs e)
        {
            setConfigVal("cbNinja", cbNinja.Checked.ToString());
        }
        private void cbGetMinerals_CheckedChanged(object sender, EventArgs e)
        {
            setConfigVal("cbGetMinerals", cbGetMinerals.Checked.ToString());
        }
        private void cbGetHerbs_CheckedChanged(object sender, EventArgs e)
        {
            setConfigVal("cbGetHerbs", cbGetHerbs.Checked.ToString());
        }
        private void cbGetClouds_CheckedChanged(object sender, EventArgs e)
        {
            setConfigVal("cbGetClouds", cbGetClouds.Checked.ToString());
        }
        private void cbGetTreasures_CheckedChanged(object sender, EventArgs e)
        {
            setConfigVal("cbGetTreasures", cbGetClouds.Checked.ToString());
        }
        private void nudLootDelay_ValueChanged(object sender, EventArgs e)
        {
            setConfigVal("nudLootDelay", nudLootDelay.Value.ToString());
        }
        private void cbbPathMode_SelectedValueChanged(object sender, EventArgs e)
        {
            string s = (string)cbbPathMode.SelectedItem;
            log("changing Path Mode to " + s);
            switch (s)
            {
                case "BOUNCE":
                    RunMethod = PathRunMethod.BOUNCE;
                    break;
                case "CIRCLE":
                    RunMethod = PathRunMethod.CIRCLE;
                    break;
                default:
                    break;
            }
            setConfigVal("cbbPathMode", s);
        }
        private void btnRunPath_Click(object data, EventArgs e)
        {
            try
            {
                if (!isGliderUseable) return;
                if (isPatrolling)
                {
                    stopAll("GUI Stop Button Pressed");
                }
                else
                {
                    startAll("GUI Start Button Pressed");
                }
            }
            catch (Exception ex)
            {
                log("btnRunPath_Click(object data, EventArgs e): " + ex.Message);
            }
        }
        private void loadPath(object sender, EventArgs e)
        {
            try
            {
                if (!isGliderUseable) return;
                if (isPatrolling)
                {
                    log("Please stop the current patrol first.");
                    return;
                }
  ?             string s = string.Empty;
                bool error = false;
                try
                {
                    string fname = txbLoadFileName.Text + ".yoink";
                    FileStream fs = new FileStream(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Profiles" + Path.DirectorySeparatorChar + fname, FileMode.Open);
                    StreamReader sr = new StreamReader(fs);
                    s = sr.ReadToEnd();
                    log("Loaded " + fname);
                }
                catch (Exception ex)
                {
                    error = true;
                    log("loadPath(object sender, EventArgs e): " + ex.Message);
                }
                string[] lines = s.Split('\n');
                PatrolPath = new Coordinates();
                foreach (string line in lines)
                {
                    string[] coordsOneSet = line.Split('|');
                    if (coordsOneSet.Length < 3)
                        continue;
                    PatrolPath.Add(new Coordinate(float.Parse(coordsOneSet[0]), float.Parse(coordsOneSet[1]), float.Parse(coordsOneSet[2])));
                }
                if (!error)
                    playSound();
            }
            catch (Exception ex)
            {
                log("loadPath(object sender, EventArgs e): " + ex.Message);
            }
        }
        private void btnUnloadPath_Click(object sender, EventArgs e)
        {
            PatrolPath = new Coordinates();
        }
        private void btnRecNewPath_Click(object sender, EventArgs e)
        {
            if (!isGliderUseable) return;
            if (DoingNow == Action.RECORD || DoingNow == Action.RECORDPAUSE)
            {
                DoingNow = Action.NIL;
                btnRecNewPath.Text = LanguageVars.RECORD1;
                btnPauseRec.Text = LanguageVars.RECORD3;
            }
            else if (DoingNow == Action.NIL)
            {
                DoingNow = Action.RECORD;
                btnRecNewPath.Text = LanguageVars.RECORD2;
            }
            else
            {
                log("Please stop patrolling first.");
                return;
            }
        }
        private void btnPauseRec_Click(object sender, EventArgs e)
        {
            if (!isGliderUseable) return;
            if (DoingNow != Action.RECORD && DoingNow != Action.RECORDPAUSE)
            {
                log("Not Recording, can't pause.");
                return;
            }
            if (DoingNow == Action.RECORD)
            {
                DoingNow = Action.RECORDPAUSE;
                btnPauseRec.Text = LanguageVars.RECORD4;
            }
            else
            {
                DoingNow = Action.RECORD;
                btnPauseRec.Text = LanguageVars.RECORD3;
            }
        }
        #endregion
        #region Other Logic
        private void lootUnit2D(GUnit unit)
        {
            moveTo2D(new Coordinate(unit.Location), 5, 100, 100);
            GContext.Main.EnableCursorHook();
            unit.Hover();
            unit.Interact();
            GContext.Main.DisableCursorHook();
            HandleBopPopup();
            string message = GContext.Main.RedMessage.ToLower();
            if (message.Contains("are full"))
            {
                stopAll("Bags Full");
                return;
            }
            if (message.Contains("not go there"))
            {
                stopAll("Bags Full");
                return;
            }
        }
        private void HandleBopPopup()
        {
            HandleBopPopup(1000);
        }
        private void HandleBopPopup(int maxWaitMS)
        {
            resetKeys();
            DateTime st = DateTime.Now;
            while (true)
            {
                if (DateTime.Now.CompareTo(st.AddMilliseconds(maxWaitMS)) > 0)
                    break;
                for (int i = 1; i <= 4; i++)
                {
                ?   String name = "StaticPopup" + i.ToString();
                    GInterfaceObject obj = GContext.Main.Interface.GetByName(name);
                    if (obj == null || !obj.IsVisible)
                        continue;
                    if (obj.IsVisible)
                    {
                        GInterfaceObject text = obj.GetChildObject(name + "Text");
                        log("Loot: Got a loot popup ('" + text + "')");
                        if (text.LabelText.Contains("will bind it to you"))
                        {
                            GInterfaceObject obj2 = GContext.Main.Interface.GetByName(name + "Button1");
                            if (obj2 != null && obj2.IsVisible)
                            {
                                GContext.Main.EnableCursorHook();
                                obj2.ClickMouse(false);
                                GContext.Main.DisableCursorHook();
                            }
                        }
                        else
                        {
                            GInterfaceObject obj3 = GContext.Main.Interface.GetByName(name + "Button2");
                            if (obj3 != null && obj3.IsVisible)
                            {
                                GContext.Main.EnableCursorHook();
                                obj3.ClickMouse(false);
                                GContext.Main.DisableCursorHook();
                            }
                        }
                    }
                }
                pause(100);
            }
        }
        private void resetKeys()
        {
            GContext.Main.DisableCursorHook();
            Context.ReleaseSpin();
            Context.ReleaseKey("Common.Jump");
            Context.ReleaseKey("Common.Sit");
            Context.ReleaseKey("Common.Forward");
            Context.ReleaseKey("Common.Back");
            Context.ReleaseKey("Common.RotateRight");
            Context.ReleaseKey("Common.RotateLeft");
        }
        private void TargetClosestAttacker()
        {
            GUnit NearestAttacker = GObjectList.GetNearestAttacker(0);
            NearestAttacker.SetAsTarget(false);
        }
        private void disMount()
        {
            Context.SendKey(LanguageVars.CLASSNAME + ".Mount");
        }
        private void useExtractor()
        {
            resetKeys();
            pause(200);
            Context.SendKey(LanguageVars.CLASSNAME + ".BAR3");
            pause(200);
            Context.SendKey(LanguageVars.CLASSNAME + ".Extractor");
        }
        private void mountAndTakeOff()
        {
            resetKeys();
            Context.SendKey(LanguageVars.CLASSNAME + ".BAR3");
            pause(200);
            Context.SendKey(LanguageVars.CLASSNAME + ".Mount");
            pause(4500, 8000);//looking at minimap or something ;)
            if (IsMounted())
            {
                Context.PressKey("Common.Jump");
                pause(1000, 3000);
                Context.ReleaseKey("Common.Jump");
            }
            else
            {
                if (GContext.Main.RedMessage.Contains("swim"))
                {
                    onlineDbInsertEvent("stuckswim");
                    stopAll("Trying to mount while swimming.");
                }
                else if (GContext.Main.RedMessage.Contains("mount here"))
                {
                    onlineDbInsertEvent("stuckinside");
                    stopAll("Trying to mount inside.");
                }
            }
        }
        private static bool IsMounted()
        {
            return IsMounted(GPlayerSelf.Me);
        }
        private static bool IsMounted(GUnit Unit)
        {
            Unit.SetBuffsDirty();
            if (Unit.HasBuff(MountSpellIds.FlyingMounts))
                return true;
            if (Unit.HasBuff(MountSpellIds.GroundMounts))
                return true;
            return false;
        }
        private void Tick(object state)?
        {
            if (!object.Equals(null, mainLoopThread))
            {
                if (mainLoopThread.IsAlive)
                    return;
            }
            mainLoopThread = new Thread(new ThreadStart(loopMain));
            mainLoopThread.SetApartmentState(ApartmentState.STA);
            mainLoopThread.Priority = ThreadPriority.AboveNormal;
            mainLoopThread.Name = "MainLoopThread";
            mainLoopThread.Start();
        }
        #region Stoppers
        private bool stopGlide()
        {
            return stopGlide(String.Empty);
        }
        private bool stopGlide(String reason)
        {
            try
            {
                GUIForm.Visible = true;
                if (!isGliderUseable) return false;
                log("Stopping Glide; " + reason);
                if (Context.IsGliding)
                {
                    Context.KillAction("[" + LanguageVars.CLASSNAME + " " + DateTime.Now.ToString() + "] " + reason, false);
                    return true;
                }
                else
                {
                    log("Glide already stopped.");
                    return false;
                }
            }
            catch (Exception ex)
            {
                log("stopGlide(String reason): " + ex.Message);
            }
            return false;
        }
        private bool stopPatrol()
        {
            return stopPatrol(String.Empty);
        }
        private bool stopPatrol(String reason)
        {
            try
            {
                GUIForm.Visible = true;
                log("Stopping Patrol; " + reason);
                if (!isPatrolling)
                {
                    log("Patrol already stopped.");
                    return false;
                }
                DoingNow = Action.NIL;
                btnRunPath.Text = LanguageVars.RUN1;
                DisableMainLoop = false;
                resetKeys();
                killAllThreads();
                return true;
            }
            catch (Exception ex)
            {
                log("stopPatrol(String reason): " + ex.Message);
            }
            return false;
        }
        private bool stopAll()
        {
            return stopAll(String.Empty);
        }
        private bool stopAll(String reason)
        {
            bool b = stopGlide(reason);
            b = (stopPatrol(reason) && b) ? true : false;
            return b;
        }
        #endregion
        #region Starters
        private bool startGlide()
        {
            return startGlide(String.Empty);
        }
        private bool startGlide(String reason)
        {
            try
            {
                GUIForm.Visible = true;
                if (!isGliderUseable) return false;
                log("Starting Glide; " + reason);
                if (!Context.IsGliding)
                {
                    return Context.StartGlide();
                }
                else
                {
                    log("Glide already started.");
                    return false;
                }
            }
            catch (Exception ex)
            {
                log("startGlide(String reason): " + ex.Message);
            }
            return false;
        }
        private bool startPatrol()
        {
            return startPatrol(String.Empty);
        }
        private bool startPatrol(String reason)
        {
            try
            {
                GUIForm.Visible = true;
                if (!isGliderUseable) return false;
                log("Starting Patrol; " + reason);
                if (isPatrolling)
                {
                    log("Patrol already started.");
                    return false;
                }
                if (Context.Me.IsDead)
                {
                    log("Toon is dead >_<");
                    return false;
                }
                if (!pathLoaded)?
                {
                    loadPath();
                    if (!pathLoaded)
                    {
                        log("Please Load a path with > 1 point first.");
                        return false;
                    }
                }
                firstPathIndex = true;
                DoingNow = Action.PATROL;
                btnRunPath.Text = LanguageVars.RUN2;
                return true;
            }
            catch (Exception ex)
            {
                log("startPatrol(String reason): " + ex.Message);
            }
            return false;
        }
        private bool startAll()
        {
            return startAll(String.Empty);
        }
        private bool startAll(String reason)
        {
            return (startPatrol(reason) && startGlide(reason));
        }
        #endregion
        private bool isPatrolling
        {
            get
            {
                return (DoingNow != Action.NIL);
            }
        }
        private bool pathLoaded
        {
            get
            {
                return (!object.Equals(null, PatrolPath) && PatrolPath.Count > 1);
            }
        }
        private void loadPath()
        {
            loadPath(null, null);
        }
        private bool contextUseable()
        {
            if (object.Equals(null, Context))
            {
                return false;
            }
            if (object.Equals(null, Context.Me))
            {
                return false;
            }
            if (object.Equals(null, Context.Me.Location))
            {
                return false;
            }
            return true;
        }
        private bool isGliderUseable
        {
            get
            {
                if (contextUseable())
                {
                    return true;
                }
                return false;
            }
        }
        private void killAllThreads()
        {
            try
            {
                log("killing all threads");
                if (!object.Equals(null, gatherThread))
                {
                    if (gatherThread.IsAlive)
                        gatherThread.Abort();
                }
                if (!object.Equals(null, mainLoopThread))
                {
                    if (mainLoopThread.IsAlive)
                    {
                        mainLoopThread.Abort();
                        DisableMainLoop = false;
                    }
                }
                if (!object.Equals(null, onlineDBQueryThread))
                {
                    if (onlineDBQueryThread.IsAlive)
                        onlineDBQueryThread.Abort();
                }
            }
            catch (Exception ex)
            {
                log("killAllThreads(): " + ex.Message);
            }
        }
        private void killTicker()
        {
            try
            {
                log("killing ticker");
                if (!object.Equals(null, Ticker))
                {
                    Ticker.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
                    Ticker.Dispose();
                }
            }
            catch (Exception ex)
            {
                log("killTicker(): " + ex.Message);
            }
        }
        #endregion
        #region Internal Helpers
        private void onlineDbInsertEvent(String Event)
        {
            if (!cbUseOnlineDB.Checked) return;
            http.Response resp = new http.Response();
            ArrayList paramSet = new ArrayList();
            Context.Me.Refresh(true);
            paramSet.Add(new string[2] { "worldmap", Context.WorldMap });
            paramSet.Add(new string[2] { "zonetext", Context.ZoneText });
            paramSet.Add(new string[2] { "subzonetext", Context.SubZoneText });
            paramSet.Add(new string[2] { "x", Context.Me.Location.X.ToString() });
            paramSet.Add(ne? string[2] { "y", Context.Me.Location.Y.ToString() });
            paramSet.Add(new string[2] { "z", Context.Me.Location.Z.ToString() });
            paramSet.Add(new string[2] { "op", "insert_event" });
            paramSet.Add(new string[2] { "event", Event });
            bool success = http.post(ref resp, DBURL, paramSet, null, http.FILE_COMPRESSION_METHODS.NONE, http.ENCODING_TYPES.APP_X_WWW_FORM_URLENCODED, http.REQUEST_METHODS.GET);
            if (success)
                log("onlineDbInsertEvent(" + Event + "): " + resp.ToString());
            else
                log("onlineDbInsertEvent(" + Event + "): FAILED!");
        }
        private int onlineDbQueryEvents(Coordinate Coord, int range, params string[] Events)
        {
            try
            {
                if (!cbUseOnlineDB.Checked) return 0;
                http.Response resp = new http.Response();
                ArrayList paramSet = new ArrayList();
                paramSet.Add(new string[2] { "worldmap", Context.WorldMap });
                paramSet.Add(new string[2] { "zonetext", Context.ZoneText });
                paramSet.Add(new string[2] { "subzonetext", Context.SubZoneText });
                paramSet.Add(new string[2] { "x", Coord.X.ToString() });
                paramSet.Add(new string[2] { "y", Coord.Y.ToString() });
                paramSet.Add(new string[2] { "z", Coord.Z.ToString() });
                paramSet.Add(new string[2] { "op", "query_events" });
                paramSet.Add(new string[2] { "range", range.ToString() });
                foreach (string e in Events)
                {
                    paramSet.Add(new string[2] { "events[]", e });
                }
                bool success = http.post(ref resp, DBURL, paramSet, null, http.FILE_COMPRESSION_METHODS.NONE, http.ENCODING_TYPES.APP_X_WWW_FORM_URLENCODED, http.REQUEST_METHODS.GET);
                if (!success)
                {
                    log("onlineDbQueryEvents: FAILED!");
                    return 0;
                }
                string result = resp.ToString().Trim();
                int resultInt = Int32.Parse(result);
                return resultInt;
            }
            catch (Exception ex)
            {
                log("onlineDbQueryEvents(Coordinate Coord, int range, params string[] Events): " + ex.Message);
                return 0;
            }
        }
        private String getConfigVal(String Key)
        {
            String cv1 = LanguageVars.CLASSNAME + "." + Key;
            String cv11 = Context.GetConfigString(cv1);
            return (object.Equals(null, cv11)) ? String.Empty : cv11;
        }
        private void setConfigVal(String Key, String Value)
        {
            try
            {
                Context.SetConfigValue(LanguageVars.CLASSNAME + "." + Key, Value, true);
            }
            catch (Exception ex)
            {
                log("setConfigVal(String Key, String Value): " + ex.Message);
            }
        }
        private void pause(int HowLongMS)
        {
            clamp(ref HowLongMS, 1, 3600000);//1 hour max ./shrug
            Thread.Sleep(HowLongMS);
        }
        private void pause(int minMS, int maxMS)
        {
            clamp(ref minMS, 1, 3600000);//1 hour max ./shrug
            Thread.Sleep(new System.Random().Next(minMS, maxMS));
        }
        private void clamp(ref int inVal, int min, int max)
        {
            inVal = Math.Min(max, inVal);
            inVal = Math.Max(min, inVal);
        }
        private void log(string what)
        {
            Context.Log("[" + LanguageVars.CLASSNAME + " v" + VERSION + " " + DateTime.Now.ToString() + "] " + what);
        }
        private void playSound()
        {
            try
            {
                if (!soundPlayer.IsLoadCompleted)
                {
                    string sep = Path.DirectorySeparatorChar.ToString();
                    soundPlayer.SoundLocation = Environment.CurrentDirectory + sep + ?Key.wav";
                    soundPlayer.Load();
                    soundPlayer.Stop();
                }
                soundPlayer.Play();
            }
            catch (Exception ex)
            {
                log("playSound(): " + ex.Message);
            }
        }
        #endregion
        #region Overrides
        public override void Patrol()
        {
            bool gliderRunning = false;
            while (RunPatrolLoop)
            {
                if (Context.IsGliderRunning && !gliderRunning)
                {
                    gliderRunning = true;
                    OnStartGlide();
                }
                if (!Context.IsGliderRunning && gliderRunning)
                {
                    gliderRunning = false;
                }
                pause(500);
            }
        }
        public override string DisplayName
        {
            get { return LanguageVars.CLASSNAME; }
        }
        public override void OnStartGlide()
        {
            log("OnStartGlide");
            if (!isPatrolling)
            {
                startPatrol("Glide Started");
            }
        }
        public override void OnStopGlide()
        {
            log("OnStopGlide");
            if (isPatrolling)
            {
                stopPatrol("Glide Stopped");
            }
        }
        public override void OnResurrect()
        {
            log("OnResurrect");
        }
        public override bool Rest()
        {
            log("Rest");
            return false;
        }
        public override void ApproachingTarget(GUnit Target)
        {
            log("ApproachingTarget");
        }
        public override void RunningAction()
        {
            log("RunningAction");
        }
        public override void Startup()
        {
            log("Startup");
            initialize();
            base.Startup();
        }
        public override void Shutdown()
        {
            log("Shutdown");
            GUIForm.Close();
            GUIForm.Dispose();
            soundPlayer.Stop();
            killTicker();
            killAllThreads();
            base.Shutdown();
            RunPatrolLoop = false;
        }
        #endregion
    }
    #region External Helpers
    public static class LanguageVars
    {
        public static string USEONLINEDB = "Use Online Database";
        public static string GETTREASURES = "Get Treasures";
        public static string GETHERBS = "Get Herbs";
        public static string GETMINERALS = "Get Minerals";
        public static string GETCLOUDS = "Get Clouds";
        public static string LOOTDELAY = "Loot Delay (ms)";
        public static string NINJA = "Loot Ninjutsu";
        public static string CLASSNAME = "Yoink";
        public static string DEFAULTPATHNAME1 = "somearea";
        public static string RECORD1 = "Record Path";
        public static string RECORD2 = "Stop Recording";
        public static string RECORD3 = "Pause Recording";
        public static string RECORD4 = "Resume Recording";
        public static string RUN1 = "Patrol";
        public static string RUN2 = "Stop Patrolling";
        public static string LOAD1 = "Load Path";
        public static string UNLOAD1 = "UnLoad Path";
        public static string DATAFILEFRIENDLYNAME1 = "Yoink Files";
    }
    public static class MountSpellIds
    {
        public static int[] FlyingMounts
        {
            get
            {
                return new int[] {
                        #region Long List
                        54726, //Winged Steed of the Ebon Blade
		                44744,
                        41517,
                        59567,
                        32290,
                        41518,
                        32242,
                        3363,
                        44151,
                        59568,
                        49193,
                        32243,
                        39798,
   ?                    46197,
                        32292,
                        32296,
                        32235,
                        32239,
                        59569,
                        60021,
                        44317,
                        61442,
                        61444,
                        32246,
                        59976,
                        43927,
                        32297,
                        60024,
                        37015,
                        59570,
                        32295,
                        51960,
                        41513,
                        59650,
                        61451,
                        39800,
                        59961,
                        46199,
                        60025,
                        59571,
                        32240,
                        41514,
                        58615,
                        39801,
                        61229,
                        60002,
                        61309,
                        41515,
                        39802,
                        61230,
                        44153,
                        61294,
                        32245,
                        32289,
                        41516,
                        61446,
                        39803,
                        32244,
                        32345,
                        59996,
                        40192
	#endregion
                    };
            }
        }
        public static int[] GroundMounts
        {
            get
            {
                return new int[] {
                        #region Long List
                        23214, //Charger (Paladin epic mount)
		                581,
                        580,
                        579,
                        578,
                        472,
                        471,
                        470,
                        468,
                        459,
                        458,
                        8980,
                        8395,
                        8394,
                        6899,
                        6898,
                        6897,
                        6896,
                        6777,
                        6654,
                        6653,
                        6648,
                        61470,
                        47037,
                        46628,
                        61469,
                        61467,
                        61465,
                        61447,
                        61425,
                        60424,
                        60140,
                        60136,
                        60119,
                        60118,
                        60116,
                        60114,
                        59811,
                        59810,
                        59804,
                        59802,
                        59799,
                        59797,
                        59793,
                        59791,
                        59788,
                        59785,
                        59573,
                        59572,
                        55531,
                        54753,
                        51412,
                        50870,
                        50869,
                        49379,
                        49378,
                        49322,
                        48954,
                        48027,
                        43900,
                        43899,
                        43810,
                        43688,
                        42781,
                        42777,
                        42776,
                        41252,
                        39319,
                        39318,
                        39317,
                        39316,
                        39315,
                        36702,
     ?                  35714,
                        35713,
                        35712,
                        35711,
                        35710,
                        35028,
                        35027,
                        35025,
                        35022,
                        35020,
                        35018,
                        34899,
                        34898,
                        34897,
                        34896,
                        34795,
                        34790,
                        34407,
                        34406,
                        33660,
                        33630,
                        30174,
                        29059,
                        28828,
                        24252,
                        24242,
                        23510,
                        23509,
                        23338,
                        23252,
                        23251,
                        23250,
                        23249,
                        23248,
                        23247,
                        23246,
                        23243,
                        23242,
                        23241,
                        23240,
                        23239,
                        23238,
                        23229,
                        23228,
                        23227,
                        23225,
                        23223,
                        23222,
                        23221,
                        23220,
                        23219,
                        22724,
                        22723,
                        22722,
                        22721,
                        22720,
                        22719,
                        22718,
                        22717,
                        18992,
                        18991,
                        18990,
                        18989,
                        18363,
                        17481,
                        17465,
                        17464,
                        17463,
                        17462,
                        17461,
                        17460,
                        17459,
                        17458,
                        17456,
                        17455,
                        17454,
                        17453,
                        17450,
                        17229,
                        16084,
                        16083,
                        16082,
                        16081,
                        16080,
                        16060,
                        16059,
                        16058,
                        16056,
                        16055,
                        15781,
                        15780,
                        15779,
                        10969,
                        10873,
                        10799,
                        10798,
                        10796,
                        10795,
                        10793,
                        10789
	#endregion
                    };
            }
        }
    }
    public static class AllowedChars
    {
        public static string String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
    }
    public class Coordinate : ISerializable
    {
        public float X = 0;
        public float Y = 0;
        public float Z = 0;
        public GLocation Location
        {
            get
            {
                return new GLocation(X, Y, Z);
            }
        }
        public Coordinate(float X, float Y, float Z)
        {
            this.X = X;
            this.Y = Y;
            this.Z = Z;
        }
        public Coordinate(GLocation Coords)
        {
            X = Coords.X;
            Y = Coords.Y;
            Z = Coords.Z;
        }
        public Coordinate(SerializationInfo info, StreamingContext ctxt)
        ?
            X = (float)info.GetValue("X", typeof(float));
            Y = (float)info.GetValue("Y", typeof(float));
            Z = (float)info.GetValue("Z", typeof(float));
        }
        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            info.AddValue("X", X);
            info.AddValue("Y", Y);
            info.AddValue("Z", Z);
        }
    }
    public class Coordinates : IEnumerable, ISerializable
    {
        private ArrayList allCoordinates = new ArrayList();
        public Coordinates(SerializationInfo info, StreamingContext ctxt)
        {
            allCoordinates = (ArrayList)info.GetValue("allCoordinates", typeof(ArrayList));
        }
        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            info.AddValue("allCoordinates", allCoordinates);
        }
        public Coordinate this[int index]
        {
            get
            {
                return (Coordinate)allCoordinates[index];
            }
            set
            {
                allCoordinates[index] = value;
            }
        }
        public Coordinates()
        {
            allCoordinates = new ArrayList();
        }
        public int Add(Coordinate a)
        {
            lock (allCoordinates)
            {
                return allCoordinates.Add(a);
            }
        }
        public void RemoveAt(int i)
        {
            lock (allCoordinates)
            {
                allCoordinates.RemoveAt(i);
            }
        }
        public int Count
        {
            get
            {
                return allCoordinates.Count;
            }
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            return new MemoryEnumerator(allCoordinates);
        }
        public class MemoryEnumerator : IEnumerator
        {
            private int cursor = -1;
            private ArrayList _Memories = null;
            public MemoryEnumerator(ArrayList Memories)
            {
                _Memories = Memories;
            }
            public bool MoveNext()
            {
                cursor++;
                return (cursor < _Memories.Count);
            }
            public void Reset()
            {
                cursor = -1;
            }
            public object Current
            {
                get
                {
                    try
                    {
                        return _Memories[cursor];
                    }
                    catch (IndexOutOfRangeException)
                    {
                        throw new InvalidOperationException("Index out of bounds.");
                    }
                }
            }
        }
    }
    public struct Node
    {
        public string Word;
        public Action Action;
        public long GUID;
        public Coordinate Coords;
        public string Name;
    }
    public enum PathRunMethod
    {
        BOUNCE,
        CIRCLE
    }
    public enum Action
    {
        NIL,
        AQUIRE,
        COMBAT,
        PATROL,
        MANEUVER,
        RECORD,
        RECORDPAUSE,
        LOAD
    }
    public static class Random
    {
        public static string String(Int32 NumSpaces)
        {
            char[] ac = AllowedChars.String.ToCharArray();
            System.Random Random = new System.Random();
            System.Text.StringBuilder StringBuilder = new StringBuilder(NumSpaces, NumSpaces);
            for (Int32 i = 0; i < NumSpaces; i++)
            {
                StringBuilder.Append(ac[Random.Next(0, ac.Length)]);
            }
            return StringBuilder.ToString();
        }
    }
    internal sealed class http
    {
        public static byte[] FileToByteArray(string file)
        {
            FileInfo fInfo = new FileInfo(file);
            long numBytes = fInfo.Length;
            FileStream fStream = new FileStream(file, FileMode.Open, FileAccess.Read?;
            BinaryReader br = new BinaryReader(fStream);
            byte[] data = br.ReadBytes((int)numBytes);
            br.Close();
            fStream.Close();
            return data;
        }
        public delegate void httpInfoDelegate(String s);
        public event httpInfoDelegate onInformationMessage;
        private void Info(String s)
        {
            if (!object.Equals(null, onInformationMessage))
            {
                onInformationMessage(s);
            }
        }
        private static DateTime DateCompiled()
        {
            System.Version v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
            DateTime d = new DateTime(
                v.Build * TimeSpan.TicksPerDay +
                v.Revision * TimeSpan.TicksPerSecond * 2
                ).AddYears(1999).AddHours(1);
            return d;
        }
        private static String AssemblyVersion
        {
            get
            {
                return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
            }
        }
        public string UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1";
        public CookieContainer CookieJar = new CookieContainer();
        private Hashtable getQueryStringParams(string url)
        {
            int queryStringStart = url.IndexOf("?");
            if (queryStringStart == -1) return new Hashtable();
            string queryString = url.Substring(queryStringStart + 1);
            Hashtable h = new Hashtable();
            string[] pairs = queryString.Split('&');
            foreach (string pair in pairs)
            {
                try
                {
                    string[] splitPair = pair.Split('=');
                    if (splitPair[0] == String.Empty || object.Equals(null, splitPair[0])) continue;
                    h[splitPair[0]] = splitPair[1];
                }
                catch
                {
                }
            }
            return h;
        }
        private StreamWriter addVar(StreamWriter sw, string boundary, string varName, string varValue)
        {
            string newLine = "\r\n";
            sw.Write("--" + boundary + newLine);
            sw.Write("Content-Disposition: form-data; name=\"" + varName + "\"");
            sw.Write(newLine);
            sw.Write(newLine);
            sw.Flush();
            sw.Write(varValue);
            sw.Write(newLine);
            sw.Flush();
            return sw;
        }
        private ArrayList normalizePostData(ArrayList Data)
        {
            ArrayList AllParams = new ArrayList();
            Type t_hashTable = typeof(System.Collections.Hashtable);
            Type t_stringArray = typeof(string[]);
            foreach (object o in Data)
            {
                Type t = o.GetType();
                if (t == t_hashTable)
                {
                    Hashtable h = (Hashtable)o;
                    foreach (DictionaryEntry de in h)
                    {
                        AllParams.Add(new string[2] { (string)de.Key, (string)de.Value });
                    }
                }
                if (t == t_stringArray)
                {
                    string[] s = (string[])o;
                    AllParams.Add(new string[2] { s[0], s[1] });
                }
            }
            return AllParams;
        }
        private MemoryStream getPostData(Hashtable files, ArrayList _allParams, string url, string boundary, FILE_COMPRESSION_METHODS CompressionMethod)
        {
            ArrayList allParams = normalizePostData(_allParams);
            MemoryStream postData = new MemoryStream();
            string newLine = "\r\n";
            StreamWriter sw = new StreamWriter(postData);
            if (!object.Equals(null, allParams))
            {
                foreach (string[] param in allParams)
                {
                    string fieldNam? = param[0];
                    string fieldValue = param[1];
                    if (fieldName == String.Empty || object.Equals(null, fieldName)) continue;
                    sw = addVar(sw, boundary, fieldName, fieldValue);
                }
            }
            Hashtable queryStringParams = getQueryStringParams(url);
            IDictionaryEnumerator en = queryStringParams.GetEnumerator();
            while (en.MoveNext())
            {
                sw = addVar(sw, boundary, en.Key.ToString(), en.Value.ToString());
            }
            if (!object.Equals(null, files))
            {
                foreach (DictionaryEntry de in files)
                {
                    string fieldName = (string)de.Key;
                    string fileName = (string)de.Value;
                    byte[] fileContents = FileToByteArray(fileName);

                    if (fileContents == null) { Info("Upload: couldnt read \"" + fileName + "\""); return null; } //couldnt read the file
                    int uSize = fileContents.Length;
                    string FileNameOnlyName = Path.GetFileName(fileName);

                    sw = addVar(sw, boundary, "md5_" + fieldName, MD5SUM(fileContents));
                    //write the file to the stream
                    sw.Write("--" + boundary + newLine);
                    sw.Write("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", fieldName, Path.GetFileName(fileName), newLine);
                    sw.Write("Content-Type: application/octet-stream" + newLine + newLine);
                    sw.Flush();
                    postData.Write(fileContents, 0, fileContents.Length);
                    sw.Write(newLine);

                }
            }
            DateTime _datetime = DateTime.Now;
            string dateTimeNow = _datetime.ToString("s", DateTimeFormatInfo.InvariantInfo) + "Z";
            string dateTimeNowUTC = _datetime.ToUniversalTime().ToString("s", DateTimeFormatInfo.InvariantInfo) + "Z";
            sw = addVar(sw, boundary, "clientTime", dateTimeNow);
            sw = addVar(sw, boundary, "clientTimeUTC", dateTimeNowUTC);
            sw.Write("--{0}--{1}", boundary, newLine);
            sw.Flush();
            //byte[] b = postData.ToArray();
            //string s = System.Text.Encoding.UTF8.GetString(b);
            return postData;
        }
        private string MD5SUM(byte[] FileOrText) //Output: String<-> Input: Byte[] //
        {
            try
            {
                return BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(FileOrText)).Replace("-", "").ToLower();
            }
            catch
            {
                //DebugLine("MD5SUM: "+e.Message);
                return null; //the addon possibly does not exist
            }
        }
        public enum ENCODING_TYPES
        {
            APP_X_WWW_FORM_URLENCODED,
            MULTI_FORM_DATA
        }
        public enum REQUEST_METHODS
        {
            GET,
            POST
        }
        public enum FILE_COMPRESSION_METHODS
        {
            NONE,
            GZIP
        }
        public CredentialCache CredentialCache = new CredentialCache();
        public int Timeout = 43200000;
        public bool post(ref Response Response, string Url)
        {
            return post(ref Response, Url, null, null, this.UserAgent, ENCODING_TYPES.MULTI_FORM_DATA, REQUEST_METHODS.POST, this.Timeout, this.CookieJar, this.CredentialCache, FILE_COMPRESSION_METHODS.NONE, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters)
        {
            return post(ref Response, Url, Parameters, null, this.UserAgent, ENCODING_TYPES.MULTI_FORM_DATA, REQUEST_METHODS.POST, this.Timeout, this.CookieJar, this.CredentialCache, FILE_COMPRESSION_METHODS.NONE, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files)
        {
            return post(ref Response, Url, Paramete?s, Files, this.UserAgent, ENCODING_TYPES.MULTI_FORM_DATA, REQUEST_METHODS.POST, this.Timeout, this.CookieJar, this.CredentialCache, FILE_COMPRESSION_METHODS.NONE, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods)
        {
            return post(ref Response, Url, Parameters, Files, this.UserAgent, ENCODING_TYPES.MULTI_FORM_DATA, REQUEST_METHODS.POST, this.Timeout, this.CookieJar, this.CredentialCache, FileCompressionMethods, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod)
        {
            return post(ref Response, Url, Parameters, Files, this.UserAgent, EncType, ReqMethod, this.Timeout, this.CookieJar, this.CredentialCache, FileCompressionMethods, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod, int Timeout)
        {
            return post(ref Response, Url, Parameters, Files, this.UserAgent, EncType, ReqMethod, Timeout, this.CookieJar, this.CredentialCache, FileCompressionMethods, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod, int Timeout, string UserAgent)
        {
            return post(ref Response, Url, Parameters, Files, UserAgent, EncType, ReqMethod, Timeout, this.CookieJar, this.CredentialCache, FileCompressionMethods, "");
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod, int Timeout, string UserAgent, string Referer)
        {
            return post(ref Response, Url, Parameters, Files, UserAgent, EncType, ReqMethod, Timeout, this.CookieJar, this.CredentialCache, FileCompressionMethods, Referer);
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod, int Timeout, string UserAgent, string Referer, CookieContainer Cookies)
        {
            return post(ref Response, Url, Parameters, Files, UserAgent, EncType, ReqMethod, Timeout, Cookies, this.CredentialCache, FileCompressionMethods, Referer);
        }
        public bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, FILE_COMPRESSION_METHODS FileCompressionMethods, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod, int Timeout, string UserAgent, string Referer, CookieContainer Cookies, CredentialCache CredentialCache)
        {
            return post(ref Response, Url, Parameters, Files, UserAgent, EncType, ReqMethod, Timeout, Cookies, CredentialCache, FileCompressionMethods, Referer);
        }
        private bool post(ref Response Response, string Url, ArrayList Parameters, Hashtable Files, string UserAgent, ENCODING_TYPES EncType, REQUEST_METHODS ReqMethod, int Timeout, CookieContainer Cookies, CredentialCache CredentialCache, FILE_COMPRESSION_METHODS FileCompressionMethods, string Referer)
        {

            if (!object.Equals(null, Url)) Info("URL: " + Url);
            if (!object.Equals(null, Files)) Info("Files: " + Files.Count.ToString());
            if (!object.Equals(null, EncType)) Info("Encode Type: " + EncType.ToString());
            if (!object.Equals(null, ReqMethod)) Info("Request Method: " + ReqMethod.ToString());
            if (!object.Equals(null, Referer) && !object.Equals(String.Empty, Referer)) Info("Referer: " + Referer);
            //Info(req.Headers.ToString());
            //Info(s2);

            System.Net.ServicePointManager.E?pect100Continue = false;
            //string newLine = "\r\n";

            string boundary = Guid.NewGuid().ToString().Replace("-", "");
            MemoryStream postData = new MemoryStream();
            string urlEncoded = "";

            switch (EncType)
            {
                case ENCODING_TYPES.APP_X_WWW_FORM_URLENCODED:
                    urlEncoded = Url + "?" + getPostDataUrlEncoded(Parameters, Url, boundary);
                    break;
                case ENCODING_TYPES.MULTI_FORM_DATA:
                    postData = getPostData(Files, Parameters, Url, boundary, FileCompressionMethods);
                    break;
            }


            if (EncType == ENCODING_TYPES.APP_X_WWW_FORM_URLENCODED)
            {
                Url = urlEncoded;
            }

            HttpWebRequest req = (new MyWebRequest().GetWebRequest2(new System.Uri(Url)) as HttpWebRequest);
            switch (EncType)
            {
                case ENCODING_TYPES.APP_X_WWW_FORM_URLENCODED:
                    req.ContentType = "application/x-www-form-urlencoded;";
                    break;
                case ENCODING_TYPES.MULTI_FORM_DATA:
                    req.ContentType = "multipart/form-data; boundary=" + boundary;
                    break;
            }
            switch (ReqMethod)
            {
                case REQUEST_METHODS.GET:
                    req.Method = "GET";
                    break;
                case REQUEST_METHODS.POST:
                    req.Method = "POST";
                    break;
            }
            if (!object.Equals(null, Referer))
            {
                req.Referer = Referer;
            }
            req.UnsafeAuthenticatedConnectionSharing = true;
            req.CookieContainer = Cookies;

            if (!object.Equals(null, Cookies))
            {
                req.CookieContainer = Cookies;
            }
            if (!object.Equals(null, CredentialCache))
            {
                req.Credentials = CredentialCache;
            }
            req.UserAgent = UserAgent;
            req.AllowWriteStreamBuffering = false;
            req.Accept = "application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
            req.ContentLength = postData.Length;
            req.Timeout = Timeout;
            if (ReqMethod == REQUEST_METHODS.POST)
            {
                Stream oRequestStream = req.GetRequestStream();
                postData.Seek(0, SeekOrigin.Begin);

                int bytesSent = 0;
                int totalBytesSent = 0;
                int totalOutBytes = (int)postData.Length;
                byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)postData.Length))];
                while ((bytesSent = postData.Read(buffer, 0, buffer.Length)) != 0)
                {
                    oRequestStream.Write(buffer, 0, bytesSent);
                    totalBytesSent += bytesSent;
                    fireSendProgressEvent(totalBytesSent, (int)postData.Length);
                }
                oRequestStream.Close();
            }
            Info("Request Sent.  ( " + postData.Length.ToString("N0") + " Bytes )");

            HttpWebResponse lHttpWebResponse;
            Stream lHttpWebResponseStream;
            byte[] byteBuffer = new byte[1024];
            int bytesRead;
            try
            {
                lHttpWebResponse = (HttpWebResponse)req.GetResponse();

                Response.CharacterSet = lHttpWebResponse.CharacterSet;
                Response.ContentEncoding = lHttpWebResponse.ContentEncoding;
                Response.ContentType = lHttpWebResponse.ContentType;
                Response.Cookies = lHttpWebResponse.Cookies;
                Response.Headers = lHttpWebResponse.Headers;
                Response.IsFromCache = lHttpWebResponse.IsFromCache;
                Response.IsMutuallyAuthenticated = lHttpWebResponse.IsMutuallyAuthenticate?;
                Response.LastModified = lHttpWebResponse.LastModified;
                Response.Method = lHttpWebResponse.Method;
                Response.ProtocolVersion = lHttpWebResponse.ProtocolVersion;
                Response.ResponseUri = lHttpWebResponse.ResponseUri;
                Response.Server = lHttpWebResponse.Server;
                Response.StatusCode = lHttpWebResponse.StatusCode;
                Response.StatusDescription = lHttpWebResponse.StatusDescription;

                lHttpWebResponseStream = req.GetResponse().GetResponseStream();
                Int32 ContentLength = Convert.ToInt32(lHttpWebResponse.ContentLength);
                int progress = 0;
                Response.Content = new MemoryStream();
                do
                {
                    bytesRead = lHttpWebResponseStream.Read(byteBuffer, 0, 1024);
                    Response.Content.Write(byteBuffer, 0, bytesRead);
                    progress += bytesRead;

                    if (progress <= ContentLength)
                    {
                        fireReceiveProgressEvent(progress, ContentLength);
                    }
                    else
                    {
                        fireReceiveProgressEvent(ContentLength, ContentLength);
                    }
                } while (bytesRead > 0);
                lHttpWebResponseStream.Close();
                postData.Close();
                lHttpWebResponse.Close();
                Info("Response Received.  ( " + ContentLength.ToString("N0") + " Bytes )");
                return true;
            }
            catch (Exception e)
            {
                Info(e.Message);
                return false;
            }

        }
        public class Response
        {
            public MemoryStream Content;
            public string CharacterSet;
            public string ContentType;
            public string ContentEncoding;
            public CookieCollection Cookies;
            public long ContentLength
            {
                get
                {
                    if (!object.Equals(null, Content))
                        return Content.Length;
                    else return -1;
                }
            }
            public WebHeaderCollection Headers;
            public bool IsFromCache;
            public bool IsMutuallyAuthenticated;
            public DateTime LastModified;
            public string Method;
            public Version ProtocolVersion;
            public Uri ResponseUri;
            public string Server;
            public HttpStatusCode StatusCode;
            public string StatusDescription;
            public override string ToString()
            {
                if (!object.Equals(null, Content))
                    return System.Text.Encoding.UTF8.GetString(Content.ToArray());
                else return "";
            }
        }
        private string getPostDataUrlEncoded(ArrayList allParams, string url, string boundary)
        {
            string postData = "";
            bool first = true;
            if (!object.Equals(null, allParams))
            {
                foreach (string[] param in allParams)
                {

                    string fieldName = param[0];
                    if (fieldName == String.Empty) continue;
                    if (fieldName == String.Empty || object.Equals(null, fieldName)) continue;
                    string fieldValue = param[1];
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        postData += "&";
                    }
                    postData += fieldName + "=" + fieldValue;
                }
            }
            Hashtable queryStringParams = getQueryStringParams(url);
            IDictionaryEnumerator en = queryStringParams.GetEnumerator();
            while (en.MoveNext())
            {
                if (?irst)
                {
                    first = false;
                }
                else
                {
                    postData += "&";
                }
                postData += en.Key + "=" + en.Value;
            }
            DateTime _datetime = DateTime.Now;
            string dateTimeNow = _datetime.ToString("s", DateTimeFormatInfo.InvariantInfo) + "Z";
            string dateTimeNowUTC = _datetime.ToUniversalTime().ToString("s", DateTimeFormatInfo.InvariantInfo) + "Z";
            if (first)
            {
                first = false;
            }
            else
            {
                postData += "&";
            }
            postData += "clientTime=" + dateTimeNow;
            if (first)
            {
                first = false;
            }
            else
            {
                postData += "&";
            }
            postData += "clientTimeUTC=" + dateTimeNowUTC;
            return postData;
        }
        public delegate void ReceiveProgressDelegate(int CurrentPosition, int TotalSize);
        public event ReceiveProgressDelegate onReceiveProgress;
        private void fireReceiveProgressEvent(int CurrentPosition, int TotalSize)
        {
            if (!object.Equals(null, onReceiveProgress))
            {
                onReceiveProgress(CurrentPosition, TotalSize);
            }
        }
        public delegate void SendProgressDelegate(int CurrentPosition, int TotalSize);
        public event SendProgressDelegate onSendProgress;
        private void fireSendProgressEvent(int CurrentPosition, int TotalSize)
        {
            if (!object.Equals(null, onSendProgress))
            {
                onSendProgress(CurrentPosition, TotalSize);
            }
        }
    }
    internal class AcceptAllCertificatePolicy : ICertificatePolicy
    {
        public AcceptAllCertificatePolicy()
        {
        }
        public bool CheckValidationResult(ServicePoint sPoint,
           System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Net.WebRequest wRequest, int certProb)
        {
            // Always accept
            return true;
        }
    }
    internal class MyWebRequest : System.Net.WebClient
    {
        protected override System.Net.WebRequest GetWebRequest(Uri uri)
        {
            HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
            webRequest.KeepAlive = false;
            return webRequest;
        }
        public System.Net.WebRequest GetWebRequest2(Uri uri)
        {
            return GetWebRequest(uri);
        }
    }
    #endregion
}
Mit Zitat antworten
 
Alt 12.03.2009
Registriert seit: Jan 2008
Beiträge: 28
 
Member

Offline
@Zelina: Du musst die _gesamte_ Paladin Klasse reinkopieren, nicht bloss den oberen Teil. Einfach alles aus der Datei markieren, an die richtige Stelle in der Yoink.cs kopieren, und dann noch alle "using" Zeilen löschen, die mit eingefügt wurden.

@Lexxas: poste am besten mal die Fehlermeldungen (NICHT die warnungen..), dann kann man Dir besser helfen.

@Thori: Vielen Dank, dass Du mich/uns auf Yoink hingewiesen hast. Es läuft um Welten besser als andere Freeware-Codes hier, auch wenn man natürlich noch Wiederbelebung und Mailen implementieren muss.
Mit Zitat antworten
 
Alt 12.03.2009
Registriert seit: Oct 2007
Beiträge: 21
 

Offline
So das glider wenn ich ihn starte

Code:
Glider 1.8.0 starting up (Release)
No string filename: de-DE.xml
No other language files matching de*.xml, falling back to en-US
Loading: .\en-US.xml
Loaded successfully: C:\Dokumente und Einstellungen\Norman\Desktop\[H][HERBALISM][1-300]\[H][HERBALISM][1-300]\Barrens_Herbalism(50-100).xml
Adding class stub: "Paladin" on source file "Paladin.cs (internal)"
Adding class stub: "Mage" on source file "Mage.cs (internal)"
Adding class stub: "Priest" on source file "Priest.cs (internal)"
Adding class stub: "Druid" on source file "Druid.cs (internal)"
Adding class stub: "Shaman" on source file "Shaman.cs (internal)"
Adding class stub: "Rogue" on source file "Rogue.cs (internal)"
Adding class stub: "Warlock" on source file "Warlock.cs (internal)"
Adding class stub: "Warrior" on source file "Warrior.cs (internal)"
Adding class stub: "Hunter" on source file "Hunter.cs (internal)"
Adding class stub: "Deathknight" on source file "Deathknight.cs (internal)"
WN: Applying config, enabled = False
Keymap loaded from: Keys.xml
WoW client version: 3, 0, 9, 9551
Compiling internal: "Warrior.cs"
Compiled internal class: "Warrior.cs", displayname = "Warrior"
Deleting chat log
Shadow confirmed, looks awake
Message from server detected
Key validated successfully
Full version of Glider, thanks for registering!
Glider Elite enabled on PayPal subscription.
Starting Tripwire
New TW instance created
Compile failed on "Yoink.cs": Line 2424, column 94: Zeilenumbruch innerhalb einer Konstanten.
Line 2075, column 40: ; erwartet.
Line 2077, column 24: Ungültiges Token . in Klassen-, Struktur- oder Schnittstellenmember-Deklaration.
Line 2077, column 25: Die Klassen-, Struktur- oder Schnittstellenmethode muss einen Rückgabetyp haben.
Line 2077, column 32: Typ erwartet.
Line 2077, column 52: Ungültiges Token ) in Klassen-, Struktur- oder Schnittstellenmember-Deklaration.
Line 2079, column 43: Ungültiges Token ) in Klassen-, Struktur- oder Schnittstellenmember-Deklaration.
Line 2082, column 13: Member, wie z.B. Felder oder Methoden, sind nicht direkt im Namespace enthalten.
Line 2082, column 34: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2082, column 45: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2089, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2093, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2117, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2121, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2145, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2149, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2157, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2161, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2184, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2188, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2225, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2229, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2234, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2241, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2248, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2252, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2268, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2279, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2308, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2326, column 17: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2329, column 38: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2330, column 38: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2332, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2332, column 37: Bezeichner erwartet.
Line 2333, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2333, column 37: Bezeichner erwartet.
Line 2334, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2334, column 37: Bezeichner erwartet.
Line 2335, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2335, column 37: Bezeichner erwartet.
Line 2336, column 37: Bezeichner erwartet.
Line 2337, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2337, column 37: Bezeichner erwartet.
Line 2338, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2338, column 37: Bezeichner erwartet.
Line 2339, column 30: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.
Line 2339, column 37: Bezeichner erwartet.
Line 2345, column 9: Typ- oder Namespacedefinition oder Dateiende erwartet.
Line 2333, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Line 2334, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Line 2335, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Line 2336, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Line 2337, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Line 2338, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Line 2339, column 36: Der Namespace <globaler Namespace> enthält bereits eine Definition für ?.
Glider started, press F1 for help
Mit Zitat antworten
 
Alt 13.03.2009
Registriert seit: Jan 2008
Beiträge: 28
 
Member

Offline
Line 2424, column 94: Zeilenumbruch innerhalb einer Konstanten.
Line 2075, column 40: ; erwartet.

Das ist es wohl. Schau Dir die genannten Zeilen genauer an, falls Du jetzt noch interesse daran hast, weiter zu gliden.
Mit Zitat antworten
 
Alt 13.03.2009
Beiträge: n/a
 
Guest

Wenn Du ihm den Trick verrätst wie das geht, dann hat er sicher noch Interesse.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht



Willkommen zurück
Foren Statistik
Mitglieder: 54,125
Threads: 35,507
Posts: 187,397

Neustes Mitglied: dizzyshtolze5767
Werbung