while-schleife cast x | schleife ende cast y

07/26/2010 04:28 fuuch#1
ich kann nicht einschlafen und versuche gerade halbwach herauszufinden, wie ich den bot etwas casten lassen kann, um ihn anschließend nach 10-15 casts etwas anderes casten zu lassen.
Code:
	if(NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) >= 100)
	{
		if((target.name == "Pindleskin") && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) >= 100)
		{
			var i =0;
			while(i<15)
			{
				return NTC_CastSkill(106, NTC_HAND_LEFT, target);
				i++;
			}
			
			return NTC_CastSkill(101, NTC_HAND_LEFT, target);
		}
		else 
			return NTC_CastSkill(101, NTC_HAND_LEFT, target);
	}
das soll theoretisch beim phys immunen pindle 15x zealen um anschließend zu holybolten, doch irgendwie zealt es nur - vorschläge?
07/26/2010 12:32 Zerker.jar#2
Edit : Bullshit-Gelaber, tut nix zur Sache ;)
07/26/2010 12:35 fuuch#3
Code:
var i =0;
			while(i<15)
			{
				return NTC_CastSkill(106, NTC_HAND_LEFT, target);
				i++;
			}
			
			[COLOR="Red"]return NTC_CastSkill(101, NTC_HAND_LEFT, target);[/COLOR]
das kommt ja direkt nach der while schleife, also müsste das doch aufgerufen werden nachdem er die schleife durchrattert - oder?

der else fall ist für alle anderen phys immunen mobs, ich möchte bei pindle das er die adds umzealt, bevor er anfängt ihn zu holybolten, sonst hauen die mich und meinen merc um (holy bolt macht auf dem zealer eher wenig dmg, aber genug um einen phys immunen mob umzuhauen nach 15sek)
07/26/2010 12:44 Zerker.jar#4
Au weia ich bin heut´aber dodal verpeilt.

Das "else" wird nur dann ausgeführt, wenn die Phys-Resis von Pindle <= 100 sind. Hattest du des so geplant?
07/26/2010 14:25 sternenlooper#5
wieso eine while schleife? o.O

es gibt doch eine schöne counter schleife -.-
Code:
   for(i = 0; i <= 20; i++) //führe das 20 mal durch
   {
      meine befehle die ich einbauen wollen würde
         break; //diesen befehl mit deinem if sowieso verbinden fals eine gewisse situation erreicht ist! wie zb pindel nicht 100% immun dann gleich abbrechen
   }
07/26/2010 14:57 fuuch#6
hm das else liegt in der äußeren if-abfrage und soll eigentlich zünden, wenn das target nicht pindleskin heißt (und phys immun ist), aber dennoch phys immun ist.
ich versuche es jetzt mal mit der for-loop
07/26/2010 22:29 Muddy Waters#7
Ich habe es nur mal kurz überflogen, hoffe ich habe dabei nichts übersehen.

Was Sterni sagt stimmt schonmal, du solltest immer wenn du die Anazhl der Durchläufe kennst (eventuell auch nur grob wenn es für die Anwendung reicht) zur for-Schleife tendieren, auch wenn es hier nichts am eigentlichen Problem ändert. Zum einen ist die Schreibweise kompakter, zum anderen ist die Gefahr von Endlosschleifen deutlich geringer.

Dein eigentliches Problem hier liegt aber mehr im Geltungsbereich deiner Zählvariable. Die Zählvariable i existiert nur im if-Block, nicht aber darüber hinaus. Mal abgesehen davon, wird aber die Funktion mit dem return beendet, sprich die Inkrementierung deiner Zählvariable findet nie statt.
Mit dem return endet auch die Lebensdauer deiner Zählvariablen, sprich beim nächsten Funktionsaufruf wird wieder eine neue Zählvariable i angelegt und mit 0 initialisiert.
Aus diesem Grunde kann man aus dem obigen Beispiel auch die while-Schleife sowie die Zählvariable komplett entfernen und hätte denselben Effekt - aktuell läuft die Schleife nämlich jedes mal genau ein einziges mal durch und endet mit dem return.

In C++ könnte man sowas mit statischen Variablen lösen, die einmal deklariert werden und dann über die ganze Laufzeit des Programms hinweg existieren. Ich fürchte aber, dass es sowas in JavaScript nicht gibt. :rolleyes:

Also musst du dir irgendwie mit einer globalen Zählvariable behelfen.
Diese musst du dann gegebenenfalls immer wieder zurücksetzen, wobei du das stattdessen auch einfach mit dem Modulo Operator lösen kannst.

Ich hoffe das ist so klar, ansonsten nochmal nachfragen, dann erkläre ich es nochmal genauer. :)

Lg
Muddy