soll deine aussage nun heißen, daß man mit addstate "object",$tmp,5; das lagerfeuer im adventure-modus tatsächlich zum ewigen feuer machen kann ?
Forum
Stranded II Scripts Scripting - Fragen/Problemesoll deine aussage nun heißen, daß man mit addstate "object",$tmp,5; das lagerfeuer im adventure-modus tatsächlich zum ewigen feuer machen kann ?
(Und dir das Script geben, will ich jetzt auch nicht, dabei lernt man nicht allzu viel. ;))
er hat aber gefragt, wie man etwas kleiner machen kann
und meiner meinung ist , das was ich geschrieben hab richtig
nur das ich halt geschrieben hab, wie man etwas größer macht, welches aber mit dem selben befehl gemacht wird
Versuchs einmal mit folgendem Code.
Versuche aber auch ihn zu begreifen.
1
2
3
4
5
6
2
3
4
5
6
loop ("objects",172) { //Geht alle lagerfeuer durch 	$id = loop_id (); //Vermittelt die ID des aktuellen lagerfeuers 	if (inview ("object",$id)==1) { //Checkt ob es im Blickfeld ist 		addstate ...; //Das weisst du ja 	} }
mfg
edited 1×, last 18.03.09 07:31:23 pm
@Mr Stranded: Genau richtig, nur hätte ich inrange genommen.
erstmal danke Mr Stranded.
wenn ich das richtig verstehe...
loop = ist eine funktion die stets wiederholt wird wie eine endlosschleife
("objects",172) = sind die lagerfeuer (objects = mehrzahl des gesuchten objectes ; 172 = id des lagerfeuers)
$id = hier soll die id aus dem loop_id() übernommen werden
loop_id() = hier wird die gesuchte id des lagerfeuers in die variable $id gelegt
if (inview ("object",$id)==1) = wenn das object mit der gesuchten id im blickfeld ist (== 1 / 1 = zutreffend sonst nein)
demnach müsste ich dann also im addstate folgendes schreiben...
addstate "object",$id,5; = dem gesuchten object mit der id $id den status ewiges feuer zu geben
wobei inrange durch den radius bestimmt wird und das feuer dadurch auch nicht unbedingt im blickfeld sein muß. man muß dort nur in reichweite des radius sein
bitte korrigieren, wenn ich irgendwo falsch liege will es ja auch wirklich verstehen
edited 1×, last 18.03.09 08:43:21 pm
Ich habe daran nichts auszusetzen.
Meinen Glückwunsch.
mfg
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
loop ("objects",172) { $lfid = loop_id(); loop ("objects",206) { $hid = loop_id(); if (inrange ("object",$lfid,10) == ($hid) { addstate "object",$lfid,5; } } }
nee, so geht es nicht. kann auch sein, daß ich da ein denkfehler drin habe
Das bedeutet, dein Code funktioniert leider nicht.
Ps: Ich würde dir empfehlen deinen Code einzurücken.
Also so etwas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
on:start 	{ 	loop ("count", 5) 		{ 		if (loop_id() == 3) 			{ 			mach_etwas; 			} 		else 			{ 			mach_etwas_anderes; 			} 		} 	}
Dadurch wird dein Code leichter zu überschauen. (Deinen eigenen Stil, wie du einrückst, wirst du erst finden müssen.)
Diese Einrückung wird auch oft benutzt, ist meiner Meinung nach aber nicht so toll:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
on:start { 	loop ("count", 5) { 		if (loop_id() == 3) { 			mach_etwas; 		} else { 			mach_etwas_anderes; 		} 	} }
1
2
3
4
5
6
7
2
3
4
5
6
7
on:start 	{ 	if (count_inrage ("objects",172,20),("objects",206)) 		{ 		addstate "objects",172,5; 		} 	}
Edit:
cool, habs eben mal versucht und keinen script debug fehler im parser bekommen
aber funktioniert des auch wirklich ?! :S
edited 1×, last 18.03.09 10:56:28 pm
Fehler:
Du hast "count_inrage" geschrieben, es heißt aber "count_inrange".
Du hast die runden Klammern bei dem Befehl falsch gesetzt. Ein rundes Klammernpaar um alle Parameter, nicht einfach irgendwo in der Mitte aufhören und ein neues Paar beginnen.
Du musst während einer If-Abfrage auch etwas abfragen. Count_inrange ist dafür eh nicht geeignet, weil es dir nicht sagt, welches Lagerfeuer in deiner Nähe ist.
Einzig und allein bei loop wird "objekts" beschrieben, sonst immer "objekt".
Du musst die ID-Nummer und nicht die Typ-Nummer bei addstate benutzen.
aber hier steht doch:
count_inrange "Klasse", Typ [,Radius] [,"Klasse2", ID2]
Kategorien: return, player
Gibt die Anzahl der Objekte eines bestimmten Typs innerhalb eines Radiuses (Standard 300) um den Spieler (oder ein Objekt) zurück
meine ok, für den ersten teil müsste des doch gehn, da dort der typ gesucht wird und für den zweiten müsste ich die id durch den loop befehl suchen.
und wenn man da dann sagt:
wenn das object 1 in der nähe von object 2 ist... dann...
oder nicht ?
Wuffelchen has written
Was bringt es dir, die Anzahl der Lagerfeuer in deiner Nähe zu wissen? Du brauchst du ID eines Lagerfeuers in deiner Nähe. aber hier steht doch:
count_inrange "Klasse", Typ [,Radius] [,"Klasse2", ID2]
Kategorien: return, player
Gibt die Anzahl der Objekte eines bestimmten Typs innerhalb eines Radiuses (Standard 300) um den Spieler (oder ein Objekt) zurück
count_inrange "Klasse", Typ [,Radius] [,"Klasse2", ID2]
Kategorien: return, player
Gibt die Anzahl der Objekte eines bestimmten Typs innerhalb eines Radiuses (Standard 300) um den Spieler (oder ein Objekt) zurück
Wuffelchen has written
Wie gesagt, siehe oben. meine ok, für den ersten teil müsste des doch gehn, da dort der typ gesucht wird und für den zweiten müsste ich die id durch den loop befehl suchen.
Das mit dem loop stimmt aber.
Wuffelchen has written
und wenn man da dann sagt:
wenn das object 1 in der nähe von object 2 ist... dann...
wenn das object 1 in der nähe von object 2 ist... dann...
Richtig, nur solltest du dafür count_behaviourinrange nehmen. Dazu brauchst du das Verhalten "cover".
sollte doch nicht schwer sein zu sagen, wenn die hütte in der nähe des feuers ist, dann soll das feuer immer brennen bzw das feuer in der nähe der hütte.
aber anscheinend ist das hier nicht möglich oder nur über zich umwege. wollte doch kein dinA4 script deswegen schreiben müssen
wobei ich jetzt das mit dem "verhalten" und "cover (nirgends angegeben) verstehe
edited 1×, last 19.03.09 01:30:39 pm
Das Script ist nicht allzu komplex (und groß), jedenfalls nicht wenn man weiß, was man eingeben muss.
wäre mir lieber, ich könnte sagen:
if (inrange ("klasse",typ1,radius,"klasse"typ2))
dann mache dies oder das
Erstelle eine neue Map und setzte auf sie eine Hütte. Jetzt setzt du auf die Map noch zwei Lagerfeuer, das eine in der Hütte, das zweite etwas entfernt. (Ungefähr zwei Hüttenlängen)
In die beiden Lagerfeuer setzt du nun dieses Script:
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
on:use 	{ 	$id = currentid(); 	if ( count_behaviourinrange("object", "cover", 60, "object", "$id") > 0) 		{ 		addstate "self", 5; 		closemenu; 		} 	}
Wenn du jetzt das Lagerfeuer in der Hütte benutzt, dann sollte es anfangen zu brennen. Das draußen sollte aus bleiben.
Jetzt musst du nur noch herausfinden wie du herausfindest welche ID das Lagerfeuer vor dir hat.
Tipp: inview und loop sind da ausschlaggebend.
Nova ich baue nur 1 lagerfeuer auf ner map und baue die hütte da drüber. und sobald die hütte steht sollte das lagerfeuer immer brennen. da kann ich keine 2 lagerfeuer vergleichen.