|
You last visited: Today at 01:46
Advertisement
Buhuhuhu ich programmiere so schlecht ...
Discussion on Buhuhuhu ich programmiere so schlecht ... within the Diablo 2 Programming forum part of the Diablo 2 category.
04/22/2012, 23:37
|
#1
|
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
|
Buhuhuhu ich programmiere so schlecht ...
Ich komm grad mal wieder nicht weiter bei meinen Problemen ....
Momentan lasse ich 3 Bots im selben Spiel laufen. Ich möchte, dass meine Leecher vor Skriptbeginn erstmal abfragen ob der Leader noch am aktuellen Skript ist. Es passiert von Zeit zu Zeit, dass die Bots nichtmehr Synchron laufen und im schlimmsten Fall passierts, dass ein Bot in einem Spiel hängen bleibt und nichts passiert.
Grundsätzlich: ich benutze Bluebirds Version des D2NT.
Ich habe nun beispielsweise folgendes im Dialeechskript eingebaut:
Code:
NTConfig_Leader = "shoooopp";
scheffe = GetPlayerUnit(NTConfig_Leader);
if (scheffe.areaid >= 109)
{
NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}
Allerdings tut sich rein garnichts, vollkommen egal wo der Leader steht.
Was habe ich wieder übersehen / falsch gemacht ?
Danke schonmal.
|
|
|
04/23/2012, 00:30
|
#2
|
elite*gold: 0
Join Date: Oct 2011
Posts: 688
Received Thanks: 130
|
use muddys
|
|
|
04/23/2012, 19:49
|
#3
|
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
|
Und wo genau muss ich das jetzt im Programmcode einfügen ?
:P
Ja das habe ich mir auch schon überlegt... Das Problem ist nur, dass ich bei meinem Bot mittlerweile so viel "entwickelt" (seis verändert oder einfach nur verschlechtert ^^) habe, dass es wohl erstmal wieder eine Weile dauern wird bis Muddys bei mir so läuft wie ich das gerne hätte ^^
|
|
|
04/24/2012, 17:15
|
#4
|
elite*gold: 0
Join Date: Jun 2010
Posts: 462
Received Thanks: 125
|
deklarier mal die variable
|
|
|
04/24/2012, 19:41
|
#5
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
|
Die fehlende Deklaration ist nicht das Problem, sofern diese fehlt, wird die Variable implizit als global deklariert. Obwohl du recht hast, anständige, explizite Deklarierungen sind sauberer, weil sie klarere Verhältnisse schaffen und daher grundsätzlich vorzuziehen.
Woher weißt du, dass GetPlayerUnit Argumente akzeptiert? Das wird eigentlich in sämtlichen standard Libraries zu Fuß gelöst, darum wäre ich mir nicht so sicher, ob die Funktion Selektoren annimmt. Aber wenn sie dies tut, dann ist der Vergleich definitiv case sensitive - ein Grund mehr, das ganze besser zu Fuß über eine geignete Funktion zu machen. Lass dir am besten mal scheffe ausgeben und stell sicher, dass es sich dabei um ein valides Objekt handelt.
|
|
|
04/25/2012, 00:18
|
#6
|
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
|
Quote:
Originally Posted by Muddy Waters
Die fehlende Deklaration ist nicht das Problem, sofern diese fehlt, wird die Variable implizit als global deklariert. Obwohl du recht hast, anständige, explizite Deklarierungen sind sauberer, weil sie klarere Verhältnisse schaffen und daher grundsätzlich vorzuziehen.
Woher weißt du, dass GetPlayerUnit Argumente akzeptiert? Das wird eigentlich in sämtlichen standard Libraries zu Fuß gelöst, darum wäre ich mir nicht so sicher, ob die Funktion Selektoren annimmt. Aber wenn sie dies tut, dann ist der Vergleich definitiv case sensitive - ein Grund mehr, das ganze besser zu Fuß über eine geignete Funktion zu machen. Lass dir am besten mal scheffe ausgeben und stell sicher, dass es sich dabei um ein valides Objekt handelt.
|
Die Variable ist deklariert.
Dass GetPlayerUnit Argumente akzeptiert wusste ich nicht, allerdings fand ichs seltsam dass es leere Klammern nach der Funktion gibt und dachte dass der Nick eines Spielers da am meisten Sinn machen würde ^^
Was bedeutet zu Fuß ?
Und vielleicht noch wichtiger: Was muss ich tun um mir die Variable ausgeben zu lassen ?
Ich dachte ich hatte mal eine Beschreibung irgendwo (vielleicht auch hier im Forum...) zu der Funktion gefunden. Inklusive aller Eigenschaften wie .areaid usw. allerdings habe ich die Erklärung nichtmehr gefunden als ich da rumgebastelt habe
|
|
|
04/25/2012, 12:40
|
#7
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
|
Mit solchen Annahmen wäre ich vorsichtig, vor allem wenn du noch nichtmal eine Ahnung hast, wie du denn Überprüfen kannst, ob deine Vermutung stimmt.
Zum Thema Ausgabe:
Gemeint ist eine simple Ausgabe auf die Konsole, nicht mehr und nicht weniger.
Code:
Print("Leader: " + scheffe);
Sofern scheffe definiert ist, würde der Rückgabewert von scheffe.toString() ausgegeben; ist scheffe nicht definiert dann undefined oder in diesem Fall vielleicht auch null.
Und zu Fuß heißt hier schreib dir eine Funktion, in der du die mit GetPlayerUnit() angeforderte (einfach verkettete) Liste von Objekten durchläufst und gib bei einer Übereinstimmung den Pointer aufs aktuelle Objekt zurück, oder sofern dieses nicht gefunden werden kann, eben den Nullpointer.
Das ist schnell gemacht, funktioniert sicher und sieht dann in etwa so aus:
Code:
function GetLeaderUnit(name)
{
var _unit = GetPlayerUnit();
while(_unit && _unit.GetNext())
{
if(_unit.name.toLowerCase() == name.toLowerCase())
return _unit;
}
return null;
}
|
|
|
Similar Threads
|
Game programmiere
01/25/2011 - S4 League - 12 Replies
Hi
ich suche leute die mit mir ein änhliches psiel wie s4 entwickeln.wer macht mit?
|
Wie programmiere ich einen Bot
02/02/2010 - General Coding - 27 Replies
Ich würde gerne einen Bot für ein 3d mmorpg Programmieren, Programmierkenntnisse sind bedingt in Java & C vorhanden. Leider hab ich keine Ahnung wie ich am besten vorhehen soll , der Bot soll mir in dem game standartaufgaben wie jagen usw. abnehmen.
Um es genau zu sagen geht es dabei um das kostenlos game pe, und mein bot soll für mich "sweaten", weil das so ziemlich die stupideste Tätigkeit ist die man sich vorstellen kann, jedoch leider die einzige um in dem game Geld zuverdienen, ohne...
|
All times are GMT +2. The time now is 01:46.
|
|