Forum

> > Stranded II > Scripts > Scripting - Fragen/Probleme
Forums overviewStranded II overview Scripts overviewLog in to reply

German Scripting - Fragen/Probleme

6,780 replies
Page
To the start Previous 1 2194 195 196339 340 Next To the start

old Re: Scripting - Fragen/Probleme

Guest

Quote
Guten Tag.

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

old Re: Scripting - Fragen/Probleme

humer
User Off Offline

Quote
@darkcoffee

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.

old Re: Scripting - Fragen/Probleme

Kaffeebraun
User Off Offline

Quote
und wie??
also nur wenn ich nen schlüssel habe.....

so vielleicht?
1
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?

old Re: Scripting - Fragen/Probleme

Guest

Quote
@optional-man
s2 cmd create gibt die ID des Erstellten zurück.
Pseudo-Script:
1
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 s2 cmd texture die Textur des Schildes ändern, eine s2 cmd msgbox einsetzen oder aber mit s2 cmd text3d arbeiten. ( Letzteres ist wohl die einfachste Variante und sieht meiner Meinung nach auch gut aus )

@DarkCoffee
Das ist schon etwas komplexer, eventuell ermittelst du beim attack2 event die Entfernung Spieler-Holzwand oder setzt s2 cmd scantarget ein und überprüfst dann mit s2 cmd count_stored ob der Spieler den Schlüssel im Inventar hat.

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
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 )

old Re: Scripting - Fragen/Probleme

Guest

Quote
DarkCoffee has written
alles so richtig alles stehen lassen?

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 s2 cmd count_stored kannst du überprüfen wie viele Items eines bestimmten Typs der Spieler ( unit 1 ) im Inventar hat. Du musst dir jetzt nur überlegen wann und wo du das ganze prüfst, damit es auch Sinn macht ( Hinweis auf attack2 und/oder s2 cmd scantarget im letzten post )

old Re: Scripting - Fragen/Probleme

Kaffeebraun
User Off Offline

Quote
also hier n beispiel
1
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? ;
}

old Re: Scripting - Fragen/Probleme

Guest

Quote
Das on:event macht keinen Sinn, da in Stranded kein event mit dem Namen "event" vokommt. Du musst dir selbst überlegen wann du den s2 cmd timer startest.

s2 cmd count_stored macht nur in s2 cmd if Abfragen oder Variablenzuweisungen Sinn

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 )

old Re: Scripting - Fragen/Probleme

Cryp18Struct
User Off Offline

Quote
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.

old Re: Scripting - Fragen/Probleme

Kaffeebraun
User Off Offline

Quote
ich hab den script aus der map palmenwand kopiert funktioniert net-.-

1
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.......

old Re: Scripting - Fragen/Probleme

leinad1123
User Off Offline

Quote
@DarkCoffee

Die events müssen auch irgendwie ausgelöst werden. Das event "timer" löst man am besten mit einen s2 cmd timer aus. Alles andere mit s2 cmd event .
1
2
3
4
5
6
7
8
on:start{
  timer "self" blupp;
}

on:use{
  event move usw;
  blupp;
}

old Re: Scripting - Fragen/Probleme

Cryp18Struct
User Off Offline

Quote
DarkCoffee has written
ich hab den script aus der map palmenwand kopiert funktioniert net-.-

1
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");
macht überhaupt keinen Sinn.
[/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
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 ) :
>wird eine lokale Variable deklariert ( erschaffen ) und auf den Wert 11 gesetzt
>werden zwei Nachrichten ausgegeben
>wird ein Timer gestartet, welcher zehnmal im Abstand von 500 millisekunden das event "countdown" auslöst

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 s2 cmd if Abfrage und s2 cmd count_stored ob der Spieler den Schlüssel im Inventar hat und startest nur dann den Timer.

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

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
// Achtung ! Dieses Script ist mit Absicht falsch !
if( count_stored( "unit", 1, "Schlüssel" ) > 0 ){
	// Mach irgendwas
}
sondern:
1
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

old playergotitem vs. count_stored

Cryp18Struct
User Off Offline

Quote
Klar, s2 cmd playergotitem geht auch.
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.

old Re: Scripting - Fragen/Probleme

stealth
User Off Offline

Quote
DarkCoffee has written
ich hab den script aus der map palmenwand kopiert funktioniert net-.-

1
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
// 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^^
To the start Previous 1 2194 195 196339 340 Next To the start
Log in to reply Scripts overviewStranded II overviewForums overview