What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

Hearstone wenn Taschen voll ?

Politiker

New Member
Joined
Dec 12, 2011
Messages
47
Reaction score
0
Gibt es die Möglichkeit das der Bot den Heartstone nimmt sobald seine Taschen voll ?

Oder gibt es die Möglichkeit des er zum AH in die WOD Hauptstadt geht und dort alles ins AH stellt ? Professionbuddy kann das ja nur in Sturmwind.
 
Ins AH stellen per Profil ist etwas schwierig.

Den Ruhestein kannst du benutzen, wenn du an der entsprechenden Stelle im Profil einfügst:

Code:
<If Condition="Me.IsAlive &_amp;&_amp; !Me.IsGhost &_amp;&_amp; !Me.Combat &_amp;&_amp; !Me.IsCasting &_amp;&_amp; (Me.FreeBagSlots &_lt; 1) &_amp;&_amp; (ObjectManager.GetObjectsOfTypeFast<WoWItem>().Any(i =&_gt; i.Entry == 6948 &_amp;&_amp; !i.Cooldown))" > 
    <CustomBehavior File="UseHearthstone" />
</If>
(Den Unterstrich nach jedem & musst du noch rauslöschen, sonst wird das hier nicht richtig angezeigt!)

In dem Fall beamt er sich weg, wenn du keinen Platz mehr in den Taschen hast und auch die anderen
Bedingungen zutreffen (Nicht im Kampf, nicht Geist, nicht während dem Casten, Ruhestein nicht auf Cooldown, etc.).
Den Ruhestein musst du vorher im Spiel richtig setzen.

Funktioniert aber nur mit Questbot, also nicht in der DE-Version von HB.
 
Last edited:
Corleone;1891311 [CODE said:
<If Condition="Me.IsAlive &_amp;&_amp; !Me.IsGhost &_amp;&_amp; !Me.Combat &_amp;&_amp; !Me.IsCasting &_amp;&_amp; (Me.FreeBagSlots &_lt; 1) &_amp;&_amp; (ObjectManager.GetObjectsOfTypeFast<WoWItem>().Any(i =&_gt; i.Entry == 6948 &_amp;&_amp; !i.Cooldown))" >
<CustomBehavior File="UseHearthstone" />
</If>[/CODE]
.

Warum so kompliziert?

HTML:
<If Condition="(Me.FreeBagSlots &lt;= 1) || (Me.LowestDurabilityPercent &lt;= 0.3)" >
<CustomBehavior File="Misc\RunLua" Lua="UseItemByName(6948)" WaitTime="1000" />
</If>
 
Warum so kompliziert?

HTML:
<If Condition="(Me.FreeBagSlots &lt;= 1) || (Me.LowestDurabilityPercent &lt;= 0.3)" >
<CustomBehavior File="Misc\RunLua" Lua="UseItemByName(6948)" WaitTime="1000" />
</If>

Danke euch, dann muss ich wohl wieder was programmieren. Das wollte ich eigentlich vermeiden :)
 
Warum so kompliziert?
Um alle Eventualitäten auszuschalten, die die Benutzung des Ruhesteins verhindern könnten.

Es könnte ja z.B. der Ruhestein auf Cooldown sein, die Taschen aber voll.
Dann versucht HB während der ganzen Cooldownzeit ständig den RS zu benutzen oder macht mit vollen Taschen weiter und kann nichts mehr aufsammeln.
Wäre dann auch optisch nicht so verräterisch, wenn er beim Mob stehenbleibt und ständig versucht trotzdem zu looten.

Das bisschen an zusätzlichem Code macht HB nicht langsamer, ist aber sicherer in der Anwendung.

Deine verkürzte Version geht natürlich auch, wobei man das = bei den Bagslots noch rausnehmen kann.
Sonst bleibt immer 1 Slot frei. ;)
 
Wäre es möglich am Ende eine Profils ein anderes zu laden ? Oder wäre es über ein Plugin möglich ?

Also zb. Er farmt bis die Taschen voll sind, portet sich dann und dann lade ich das Professionbuddy AH Profil ?
 
Wäre es möglich am Ende eine Profils ein anderes zu laden ? Oder wäre es über ein Plugin möglich ?

Also zb. Er farmt bis die Taschen voll sind, portet sich dann und dann lade ich das Professionbuddy AH Profil ?

geht mit arelog oder hbrelog TASK ! ( 100% möglich)
oder aber in professionsbot das entsprechende profil schreiben ( weiß aber nicht ob das zu 100% möglich ist)
 
geht mit arelog oder hbrelog TASK ! ( 100% möglich)
oder aber in professionsbot das entsprechende profil schreiben ( weiß aber nicht ob das zu 100% möglich ist)
Das bringt nix. Ich muss die Bedingung abfragen können. Ich bräuchte den C# Code für den Befehl ein anderes Profil zu laden für ein Plugin. Oder falls es über ein Profil geht den entsprechenden Code.
 
Klar geht das, der Befehl steht in der Hilfe Datei von PB. Guide.rtf meine ich
 
also... jetzt mal tiefer.
colreone:
viele eventualtiaeten des codes sind einfach unnuetz.
Me.Alive - Die If Abfrage wird eh nur gestartet, wenn der Char am Leben ist, da sonst das Death Behavior Vorrang vor dem Profil hat.
!Me.ComBAT - siehe punkt 1. Ist der Char im Combat, springt die Abfrage garnicht erst an, da Combat Behavior Vorrang vor Profil hat.
Cooldown abfrage: Nuetzlich. Bei Lua Variante wird aber nicht versucht UseHaertstone wieder und wieder zu benutzen, sondern nur einmal. dann wird aus der If Abfrage gesprungen.

Wie machst du es am besten, Politiker?
Ich wuerde es so machen:

HTML:
<CustomBehavior File="Hooks\DoWhen" ActivityName="VendorHeart" AllowUseDuringCombat="false" UseWhen="(Me.FreeBagSlots &lt;= 1)" >
	<CustomBehavior File="Misc\RunLua" Lua="
		startTime, duration, enable = GetItemCooldown(6948)
		if (startTime == 0) then
			UseItemByName(6948)
		end
	" />
</CustomBehavior>

Diesen schnipsel pachst du direkt unter Questorder.

Jedes mal, egal wo du dich befindest springt der schnipsel an, sobald nurnoch 1 oder weniger Taschenplaetze frei sind, und der Char nicht im Combat ist.
Der Schnipsel fragt ab, ob heartstone cooldown hat. wenn nicht, wird er genutzt.

Da dieser schnipsel keine klassische If Abfrage ist, wuerde sogar die oben gepostete bedingung (cooldown) sinn machen.

Nach ausfuehrung des schnipsels wird das profil da fortgesetzt, wo der schnipsel angesprungen ist.
Soll in ein anderes Profil (AH?) gewechselt werden, kannst du das mit
CustomBehavior File="LoadProfile" ProfileName="Pfad"
machen.
Soll nur ein Haendlerrun gemacht werden, dann einfach
CustomBehavior File="ForceSetVendor" DoMail="False" DoSell="True" DoRepair="True"
in den schnipsel packen.
 
Ich hab nun etwas rum programmiert und es haben sich ein paar Fragen aufgetan.

PHP:
	     <If Condition="(Me.FreeBagSlots &gt; 3) " > 
	     
		     <SetGrindArea>
		     <GrindArea>
		     <Factions>95</Factions>
		     <MaxDistance>80</MaxDistance>
		     <TargetMinLevel>55</TargetMinLevel>
		     <TargetMaxLevel>66</TargetMaxLevel>

		     <Hotspots> 
			<Hotspot X="-1944.14" Y="-965.46" Z="30.15" />
			<Hotspot X="-1907.89" Y="-969.16" Z="30.35" />
			<Hotspot X="-938.58" Y="-959.23" Z="30.35" />
			<Hotspot X="-1909.48" Y="-980.29" Z="30.35" />
			<Hotspot X="-1919.80" Y="-1013.68" Z="30.35" />
			<Hotspot X="-1888.77" Y="-986.23" Z="30.35" />
			<Hotspot X="-9146.48" Y="-1013.68" Z="30.35" />
		     </Hotspots>

		     </GrindArea>
		     </SetGrindArea>
		     <GrindTo Condition="Me.FreeBagSlots &lt;= 3" GoalText="Ziel" />
	     </If>

1. Ist die If Abfrage so wie in C# das er komplett alles durcharbeitet und erst oben wieder prüft oder würde er auch mitten nach zb. Dem 3ten Hotspot aussteigen wenn die Taschenplätze auf 3 fallen ?

2. Wozu ist die <GrindTo Condition

3. Wie kann ich eine random Zahl erzeigen und wie kann ich einen Timer erzeugen mit dem ich zb. Den obige Spot zb. 30 Minuten farme ? While timer vermute ich mal, da wäre dann wieder die Frage, steigt er irgendwann aus wenn der Timer durch ist oder erst nachdem die Schleife komplett abgearbeitet wurde.
 
Die If Abfrage ist nur eine Abfrage. Es ist keine Schleife die wieder anfaengt, wenn das Ende Erreicht ist.

Die Grind Area ist eine Art Schleife. Die Hotspots werden solange abgelaufen bis die GrindTo Condition erfuellt ist.
 
ah ok, danke.

Dann möchte ich Zeug verkaufen

PHP:
     <SellGrey>True</SellGrey>
     <SellWhite>True</SellWhite>
     <SellGreen>True</SellGreen>
     <SellBlue>True</SellBlue>
     <SellPurple>false</SellPurple>

       <ProtectedItems>
		<!--**Important Items**-->
			<!--**Hearthstone**-->
			<Item>6948</Item> 
			<!--**Mining Pick**-->
       </ProtectedItems>

Aber er verkauft nicht alles weißes Zeug. Obwohl ich es nicht als ProtecetedItems eingetragen habe. zB Wollstoff

Und ich möchte, das er den Heartstone benutzt, wenn er nicht in Sturmwind ist. Aber er versucht ihn auch zu benutzen wenn ich es in Sturmwind starte. Ist die MapID richtig ? Habe sie ausm Internet:

PHP:
	     <While Condition="Me.MapId != 301" >
	     		<CustomBehavior File="Misc\RunLua" Lua="UseItemByName(6948)" WaitTime="500" />
	     		<CustomBehavior File="WaitTimer" WaitTime="50000" TerminateWhen="Me.MapId == 301 || Me.Combat || !Me.IsCasting" />
	     </While>
 
Zu Punkt 1. Verkaufen:
Du musst den Hearthstone und die Hacke nicht in einen ProtectedItems Tag packen. Die beiden Teile sind automatisch geschuetzt. dieser automatische schutz umfasst auch den Wolstoff. das ist auch der grund warum Wolstoff nicht verkauft wird.

Die Datei ProtectedItems.xml im HB Hauptverzeichniss regelt diesen Globalen schutz. Wenn wollstoff verkauft werden soll, musst du den eintrag in der erwaehnten datei suchen und entfernen.

Punkt 2: Sturmwind.
MapId is ein bisschen verwirrend.
Ganz Azeroth hat die MapID 0. die ganzen oestlichen Koenigreiche haben die MapId 1. Also auch sturmwind hat die MapId1. (oder umgekehrt.)
Du kannst aber mit ZoneId arbeiten. Diese ID ist unterschiedlich fuer alle bereiche.
Sturmwind sollte die ZoneId 301 haben.
 
Wie cg1203im2 schon schrieb... das ganze Konstrukt mit "ProtectedItems" gehört nicht in ein Profil und kann große Probleme bereiten.
Einzige Ausnahme ist, wenn du ein spezielles Item schützen willst, das du für eine Quest aufsammelst.
Ansonsten IMMER die Datei "Protected Items.xml" benutzen.
Leider steht das im neuen Wiki noch nicht drin. Im alten Wiki war das sogar als Warnhinweis gelb unterlegt.
Das Gleiche gilt für "ForceMail" und ForceMail.xml

Zu Sturmwind:
Es gibt einen Unterschied zwischen MapId und ZoneId.
MapId ist der Kontinent, auf dem du dich aufhältst. ZoneId ist der Ort auf der Map, an dem du dich befindest.
Also müsste deine Bedingung mit Me.ZoneId geprüft werden.
Die ZoneId bekommst du, wenn du in Sturmwind das Developer Tool in HB öffnest und dort in die Kommandozeile schreibst:

Log(Me.ZoneId);

Deine Bedingung müsste also so lauten:
While Condition="Me.Zoneid != xxx"

Das While /While in der Abfrage kannst du auch getrost durch If /If ersetzen. ;)
 
Last edited:
Danke das hat alles viel geholfen und ich komme mit den Profilen nun schon ganz gut klar. Nun möchte ich verschiedene Profile über ein Plugin steuern. zB. Profil 1 30 Minuten STOP Lade Profil 2 ect.

Immerhin kann ich das Plugin laden und es steht auch schon da er hätte es gewechselt aber danach kommt nurnoch:

PB: Loading profile AHBot.xml from file
PB: GetMailAction->CheckNewMail appears to be unused
Changing current profile to level 0 - 2147483647
Changing current profile to level 0 - 2147483647
Changing current profile to level 0 - 2147483647


Die Unterfunktion die ich dazu geschrieben hat ist:

PHP:
        private static void profilwechsel()
        {
            Profile = "./Default Profiles\\ProfessionBuddy\\AHBot.xml";
            Logging.WriteDiagnostic(Colors.LightSkyBlue, "Lade Profil", Profile);
            WoWMovement.MoveStop();
            Thread.Sleep(1000);
            ProfileManager.LoadNew(Profile);
            Thread.Sleep(1000);
            Logging.WriteDiagnostic(Colors.LightSkyBlue, "Profile Changer: Load Profile: {0} done", Profile);

        }


Und ich rufe sie auf über s.u. Ka ob es sinvoll ist... Pulse wird vermutlich alle paar milisekunden mal ausgeführt oder wie ist da ?
PHP:
        public override void Pulse()
        {
            profilwechsel();
        }
 
Ohne den Code jetzt genauer untersucht zu haben...

Sleep ist PFUI!
Verwende NIEMALS, unter keinen Umständen, Sleep in einem Plugin/Botbase, etc.
HB öffnet keine Threads, alles läuft in einer Applikation ab.
Mit Thread.Sleep schickst du daher den kompletten Bot schlafen!

Verwende einen Timer (Stopwatch) und prüfe in Pulse(), ob der Timer abgelaufen ist.

Dein Code ist noch übler, da er HB bei jedem Pulse 2 Sekunden einfriert +
etliche hundert Filezugriffe pro Sekunde stattfinden.

Kleiner Tip dazu, wie es ganz ohne Sleep geht:

Code:
...
using System.Diagnostics;
...

public class DeineKlasse : HBPlugin
{      
   public static readonly Stopwatch myStopwatch = new Stopwatch();

   public override void Pulse()
        {
            if (myStopwatch.IsRunning && myStopwatch.ElapsedMilliseconds < 30000)   // 30 Sekunden Timer
                return;
            myStopwatch.Reset();

            Profile = "./Default Profiles\\ProfessionBuddy\\AHBot.xml";
            Logging.WriteDiagnostic(Colors.LightSkyBlue, "Lade Profil", Profile);
            WoWMovement.MoveStop();
            ProfileManager.LoadNew(Profile);
            Logging.WriteDiagnostic(Colors.LightSkyBlue, "Profile Changer: Load Profile: {0} done", Profile); 

            myStopwatch.Start();
        }
}
(Das ist nur ein Grundgerüst für deinen Loader!)
 
Last edited:
Back
Top