
Forum






Naja jetzt zu meinem problem^^
ich hab mich vorkurzem mit scripting befasst und hätte da eine frage ich hab jetzt ein wegweiser hingestellt.
nun möchte ich das auf dem wegweiser bzw anderen schildern steht zb willkommen oder da gehts zur stadt. wie macht man das ich wäre euch sehr dankbar
1
2
3
4
5
2
3
4
5
on:use { add "Text" ; add "Mehr Text :)" ; msgbox "Überschrift" ; }
da fehlt irgendwo ein semicolon. bei deinem problem kann ich dir leider nicht helfen, aber ist in der s2ext nicht, eh schon so ne art holzwandtür eingebaut.
Ich hätt' da doch noch ne idee. du kannst ja machen, dass wenn du die wand benutzt, mit on:use sie verschwindet und etwas weiter daneben wieder auftaucht.
also nur wenn ich nen schlüssel habe.....
so vielleicht?
1
2
3
4
2
3
4
on:use { setpos "object",ID ; x,y,z ; }
also ohne schlüssel muss natürlich sein wenn man n schlüssel hat da kommt vielleicht was mit playergotitem in frage oder?

Pseudo-Script:
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
on:event{ 	local $x, $z, $id; 	$x = getx( "unit", 1 ); // unit 1 ist immer der Spieler 	// Damit der Löwe nicht an der exakt gleichenStelle steht wie der Spieler: 	$x = $x + 150; 	$z = getz( "unit", 1 ); 	$id = create( "unit", LöwenID, $x, $z ); 	addscript "unit", $id, "MeineScriptdatei.s2s"; 	 	freevar $x, $z, $id; }
@Gast ( Wegweiser )
Hier gibt es mehrere Möglichkeiten, je nach de was du mit "auf dem Schild stehen genau meinst".
Du könntest mit



@DarkCoffee
Das ist schon etwas komplexer, eventuell ermittelst du beim attack2 event die Entfernung Spieler-Holzwand oder setzt


Das bewegen selbst geht mit einem mehrfach ausgeführten Timer, welches ein event aufruft dass die Holzwand ein wenig weiter verschiebt.
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
on:event{ 	timer "self", 100, 20, "move"; } on:move{ 	local $x; 	$x = getx( "self"); 	$x = $x + 10; 	setpos "self", $x, "self", "self"; }
( Die Werte sind alle nur als Beispiel gedacht und beliebig austauschbar )
edit:wie isn das jetzt mit dem count-stored und so?
DarkCoffee has written
alles so richtig alles stehen lassen?
edit:wie isn das jetzt mit dem count-stored und so?
edit:wie isn das jetzt mit dem count-stored und so?
1. Nein, du kannst den Script nicht mit Copy&Paste übernehmen, das ganze dient als Denkansatzt. ( Erkennt man eigentlich auch an dem unsinnigen on:event ... )
2. Nun, mit


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:event{ timer "self", 100, 20, "move"; } on:move{ local $x; $x = 20( "self"); $x = $x + 10; setpos "self", $x, "self", "self"; } on:??? { count_stored "Item", ID,was fürn typ? ; }



Noch ein Tipp:
Ablauf:
In dem von dir gewählten event:
Wenn der Spieler mehr als einen Schlüssel im Inventar hat:
starte Bewegungstimer
ansonsten:
gebe Nachricht aus "Ich brauche einen Schlüssel".
Wenn du willst dass sich die Wand beim Benutzen bewegt, wäre das "use" event angebracht.
( Es mag für dich nervig erscheinen dass ich dir Tipps gebe und nicht einfach eine Lösung hinknalle, aber auf diese Weise lernst du mehr, da DU derjenige bist der das Script schreibt )
DarkCoffee has written
ähh egal
Auch wenn die S2 Scriptsprache einfacher ist als viele andere Sprachen ist es einfach eine Vorraussetzung fürs Scripten, dass man sich damit beschäftigt. Nimm einfach einige Befehle lies dir deren Beschreibung in der Befehlsreferenz durch und experimentier damit.
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:TIMER{ timer "self", 100, 20, "move"; } on:move{ local $x; $x = 20( "self"); $x = $x + 10; setpos "self", $x, "self", "self"; } on:COUNT_STORED { count_stored "Item", ID,IRGENDEIN TYP WAS AUCH IMMER DAS IST! ; }
so.......
Die events müssen auch irgendwie ausgelöst werden. Das event "timer" löst man am besten mit einen


1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
on:start{ timer "self" blupp; } on:use{ event move usw; blupp; }
DarkCoffee has written
ich hab den script aus der map palmenwand kopiert funktioniert net-.-
so.......
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:TIMER{ timer "self", 100, 20, "move"; } on:move{ local $x; $x = 20( "self"); $x = $x + 10; setpos "self", $x, "self", "self"; } on:COUNT_STORED { count_stored "Item", ID,IRGENDEIN TYP WAS AUCH IMMER DAS IST! ; }
so.......
Das ist vorne und hinten falsch.
[edit]
Und auch noch in der Mitte ! Die Zeile
1
$x = 20( "self");
[/edit]
Du scheinst den aufbau der S2 Scriptsprache nicht verstanden zu haben, lies am Besten nochmal DC's Scripting Tutorial. ( Es besteht ein Unterschied zwischen events und Befehlen/Funktionen )
Schritt für Schritt ( vergiss erstmal dein ursprüngliches Problem ):
Ein kleines Beispiel mit einem mehrfach ausgeführten Timer
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:use{ 	local $zahl; 	$zahl = 11; 	msg "Der Spieler hat mich benutzt !"; 	msg "starte Countdown !"; 	timer "self", 500, 10, "countdown"; } on:countdown{ 	local $zahl; 	$zahl = $zahl - 1; 	msg "zahl: $zahl"; }
Füge dieses Script in ein beliebiges Objekt ein und benutz das Objekt.
Sobald der Spieler das Objekt benutzt ( on:use ) :



Bei jedem "countdown" event wird die lokale Varible $zahl um 1 verringert und ausgegeben.
Auf ähnliche Art und Weise kannst du dein Problem angehen. Statt beim "use" event direkt den Timer zu starten, überprüfst du mit einer


Da deine Holzwand ja nicht von 10 bis 1 zählen soll, musst du auch das Script im "countdown" event umändern.( -->

zu deinem "IRGENDEIN TYP WAS AUCH IMMER DAS IST! ;"-Problem: Jedem Item wird in Stranded2 eine ID ( eine Zahl ) zugeordnet. Wenn du wissen willst ob der Spieler einen Schlüssel im Inventar hast fragst du also nicht:
1
2
3
4
2
3
4
// Achtung ! Dieses Script ist mit Absicht falsch ! if( count_stored( "unit", 1, "Schlüssel" ) > 0 ){ 	// Mach irgendwas }
1
2
3
2
3
if( count_stored( "unit", 1, IDdesSchlüssels ) > 0 ){ 	// Mach irgendwas }
( wobei du allerdings IDdesSchlüssels durch die entsprechende ID [ zahl ] ersetzen musst )
edited 2×, last 22.07.08 05:06:22 pm



Langfristig hätte das allerdings zu dem Problem führen können, dass er zwar weis wie man prüft ob der Spieler etwas im Inventar hat aber nicht weiss wie man bei anderen units oder objects prüft ob etwas eingelagert ist.
DarkCoffee has written
ich hab den script aus der map palmenwand kopiert funktioniert net-.-
so.......
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:TIMER{ timer "self", 100, 20, "move"; } on:move{ local $x; $x = 20( "self"); $x = $x + 10; setpos "self", $x, "self", "self"; } on:COUNT_STORED { count_stored "Item", ID,IRGENDEIN TYP WAS AUCH IMMER DAS IST! ; }
so.......
DAS hast du aus meiner map?^^
Ich hab jetzt nachgeschaut. Mein aufsperr-script geht so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// dieses script wird bei spielstart // vom schild neben den palmen // in die 5 aufsperrbaren palmen kopiert on:use { 	if (playergotitem (92) > 0) { 		play "crack2.wav"; 		process "Aufsperren", 3000, "aufsperren"; 	} else { 		speech "negative"; 		msg "Die sind zugesperrt!"; 	} } on:aufsperren { 	speech "positive"; 	setrot "object", 15, -89, self, self; 	setrot "object", 16, -89, self, self; 	setrot "object", 17, -89, self, self; 	setrot "object", 18, -89, self, self; 	setrot "object", 19, -89, self, self; 	freescript "object", 15; 	freescript "object", 16; 	freescript "object", 17; 	freescript "object", 18; 	freescript "object", 19; }
Am besten du liest dir mal auf der stranded-website durch, was die befehle die ich da verwendet hab machen.
Und du solltest natürlich wissen was so zeug wie on:use bedeutet^^
Wenn du willst, übersetz ich dir den script mal ins deutsche^^
ja ok den script möchte ich ins deutsche haben
