Forum

> > Stranded II > Scripts > Scripting - Fragen/Probleme
ForenübersichtStranded II-Übersicht Scripts-ÜbersichtEinloggen, um zu antworten

Deutsch Scripting - Fragen/Probleme

6.780 Antworten
Seite
Zum Anfang Vorherige 1 2306 307 308339 340 Nächste Zum Anfang

alt sleep

Iuvenis
User Off Offline

Zitieren
Hallo, ich habe das Problem, dass Straded abstürtzt wenn ich den Befehl "sleep" in einer map benutzte.
Beispiel bei einem Schild:
1
2
3
4
on:use
{
sleep;
}
Währe nett wen mir einer sagen könnte warum das nicht Funtzt.

alt Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Zitieren
soweit ich weiß war s2 cmd sleep einer der etwas verbuggten befehle.

da der befehl nicht funktioniert hatte ich mal nen alternatives script geschrieben, dass den schlaf-vorgang simuliert, ist zwar schon was länger her, dass ich das geschrieben habe und das script war eigentlich für die hängematte in S2 gedacht, aber wenn du magst kannst du dir das mal angucken:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
on:use {
  if (getplayervalue(4)>5) {
	$player_tiredness=getplayervalue(4);
	$sleeptime=$player_tiredness*0.1;
		if (int($sleeptime)>$sleeptime){ 
			$sleeptime_hours=$sleeptime-1;
			$sleeptime_hours=int($sleeptime_hours);
			$sleeptime_minutes=$sleeptime-$sleeptime_hours;
			$sleeptime_minutes=$sleeptime_minutes*60;

		} else {
			$sleeptime_hours=int($sleeptime);
			$sleeptime_minutes=$sleeptime-$sleeptime_hours;
			$sleeptime_minutes=$sleeptime_minutes*60;
		}

	flash 0, 0, 0, 0.01;
	$hunger=$player_tiredness*0.5;
	$thirst=$player_tiredness*0.4;
	$tiredness=$player_tiredness-5;
	consume 0, -$hunger, -$thirst, $tiredness;
	play "sleep.wav";

	$minute=minute();
	$wakeuptime_minute=$minute+$sleeptime_minutes;
	setminute $wakeuptime_minute;

	$hour=hour();
	$wakeuptime_hour=$hour+$sleeptime_hours;
	sethour $wakeuptime_hour;
		if ($wakeuptime_hour>24) {
			$day=day();
			$wakeuptime_day=$day+1;
			setday $wakeuptime_day;
			autosave;
		}

	} else {
		speech "negative";
		msg "Ich bin nicht müde genug,",3;
		msg "um einschlafen zu können!",3;
	}
}

alt Re: Scripting - Fragen/Probleme

Iuvenis
User Off Offline

Zitieren
Danke für die gute idee.
Ich habe mir das Script jetzt einfach aus der Game.inf kopiert und es klappt.
Aus welchem grund auch immer...

alt Re: Scripting - Fragen/Probleme

Iuvenis
User Off Offline

Zitieren
Mist, nein das scheint insgesamt überhaupt nicht zu funktionieren. (Zeit ändert sich nicht)
Ich verstehe von hurris script leider nur Bruchstücke.
Bei seinem script hat sich bei mir aber auch irgendwie nicht viel mehr getan. (obwohl über 20 mal "time" vorkommt)
1× editiert, zuletzt 05.04.10 21:56:33

alt Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Zitieren
Iuvenis hat geschrieben
Mist, nein das scheint insgesamt überhaupt nicht zu funktionieren. (Zeit ändert sich nicht)
Ich verstehe von hurris script leider nur Bruchstücke.
Bei seinem script hat sich bei mir aber auch irgendwie nicht viel mehr getan. (obwohl über 20 mal "time" vorkommt)

wie gesagt, das script war eigentlich für die hängematte gedacht, damit man überhaupt mal damit interagieren kann.
mit dem scrit schläft man bei 100% müdigkeit maximal 10 stunden, man braucht aber maximal eine müdigkeit von 5% und schläft dann eine halbe stunde (das ganze verläuft linear).
an solche sachen wie ein event beim changeday hab ich da wohl nicht gedacht... könnte man in dem fall nicht einfach den befehl einfügen, dass ein event ausgeführt werden soll, also
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
on:use {
  if (getplayervalue(4)>5) {
	$player_tiredness=getplayervalue(4);
	$sleeptime=$player_tiredness*0.1;
		if (int($sleeptime)>$sleeptime){ 
			$sleeptime_hours=$sleeptime-1;
			$sleeptime_hours=int($sleeptime_hours);
			$sleeptime_minutes=$sleeptime-$sleeptime_hours;
			$sleeptime_minutes=$sleeptime_minutes*60;

		} else {
			$sleeptime_hours=int($sleeptime);
			$sleeptime_minutes=$sleeptime-$sleeptime_hours;
			$sleeptime_minutes=$sleeptime_minutes*60;
		}

	flash 0, 0, 0, 0.01;
	$hunger=$player_tiredness*0.5;
	$thirst=$player_tiredness*0.4;
	$tiredness=$player_tiredness-5;
	consume 0, -$hunger, -$thirst, $tiredness;
	play "sleep.wav";

	[b]event "sleep", "global";[/b]
	$minute=minute();
	$wakeuptime_minute=$minute+$sleeptime_minutes;
	setminute $wakeuptime_minute;

	$hour=hour();
	$wakeuptime_hour=$hour+$sleeptime_hours;
	sethour $wakeuptime_hour;
		if ($wakeuptime_hour>24) {
			$day=day();
			$wakeuptime_day=$day+1;
			setday $wakeuptime_day;
			[b]event "changeday", "global";[/b]
			autosave;
		}

	} else {
		speech "negative";
		msg "Ich bin nicht müde genug,",3;
		msg "um einschlafen zu können!",3;
	}
}






Edit:
so, habe jetzt auch mal wieder selbst ein problem und zwar gelingt es mir nicht die distanz zwischen zwei objekten zu ermitteln...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
on:use {
	local "$own_class", "$own_id";
	$own_class=currentclass();
	$own_id=currentid();

	loop("object", 1) {
		$searched_id=loop_id();
		if(inrange("object", $own_id, 100, "object", $searched_id)==1) {

			msg "$own_id, $searched_id", 3, 8000;

			msg "A";
			$buildingsite_distance=distance("object", $own_id, "object", $searched_id);
			msg "$buildingsite_distance";
		}else{
			msg "B";
		}
	}
}
dieses script steht in den definitionen bei dem objekt drin (es ist zweimal das gleiche objekt, deren abstand ermittelt werden soll, die Typ-Nummer ist 1)



Edit:
so, das obenstehende problem hat sich mittlerweile auch erledigt.
dafür hab ich wieder ne neue frage, hoffentlich kann mir diesmal einer helfen:

wenn man mit dem hammer einen rechtsklick macht und dann in der liste eins der gebäude auswählt, dann kommt man ja in den platzierungsmodus und die kamera fährt nach oben.
meine frage ist jetzt: kann man bei einzelnen gebäuden auch einzeln einstellen (z.b. in der "objcts_buildings.inf"), dass die kamera nicht so hoch fahren soll, wenn man dieses gebäude platzieren will? und wenn ja, wie?
4× editiert, zuletzt 08.04.10 18:28:49

alt Re: Scripting - Fragen/Probleme

DEATHSHEAD
User Off Offline

Zitieren
Hi ich hab ne Frage,

und zwar wie stellt man im editor per script ein dass palisadentore beim start der map geschlossen sind. Und sich auch nict öffnen lassen wenn sie benutzt werden, sondern erst wenn ich die sper script auslöse.

Ziemlich viel ich weiss, aber nochmal in kurz, ich suche folgende Scripts:

1. Tor bei start der map schliessen (über on:start ereigniss)
2. Tor kann nicht über use geschlossen werden, sondern nur über scripts.
3.Wie öffne ich das Tor über einen Script.

Danke schonmal im vorraus

alt Re: Scripting - Fragen/Probleme

davidsung
User Off Offline

Zitieren
Wenn man sich die Definition des Tors angeschaut hat, dann kommt man schnell zu folgender Lösung:

1
2
3
4
on:start {
	event "toggle";
	$notuseable==0;
}

Obiges muss in das jeweilige Tor hinein. Mit dem Event "toggle" wird das Tor geschlossen bzw. geöffnet. Da zu Beginn der Map das Tor offen ist wird es logischerweise nun geschlossen.

$notuseable verhindert dann ein weiteres öffnen/schließen des Tors vom Spieler.

Hinweis: Um das Tor über Scripts öffnen/schließen zu lassen muss wieder das Event "toggle" benutzt werden. $notuseable stört dabei nicht, da das nur das on:use verhindert.

alt Re: Scripting - Fragen/Probleme

DEATHSHEAD
User Off Offline

Zitieren
Gut danke das mit $notusable funktioniert.

Aber kann mir jemand noch mal erklähren wie der Script aussehen muss wenn man das Tor z.B. über ein Schild öffnet (on:use beim Schild).
Weil $state im script des tores ist eine lokale variable und in ein schild on:use { $state = 1;} reinzuschreiben um ein tor zu öffnen dürfte ja nicht funktionieren.

alt Re: Scripting - Fragen/Probleme

davidsung
User Off Offline

Zitieren
Ja, das ist etwas komplizierter.

Du weißt nun, dass das Tor ein sogenannten Event "toggle" hat. Wenn man diesen direkt im Tor-Script auslöst, muss man nicht angeben, wo sich das Event befindet (kann ja auch ein Stein, ein Baum oder wo auch immer sein).

Wenn Du aber das Event von wo anders auslösen willst, musst du nun die Quelle angeben. Das sehe so aus:

1
2
3
on:use {
	event "toggle" , "object", ID;
}

ID muss nun mit der ID des Tors ersetzt werden, z.B. mit 14.

Edit: Ooops, natürlich ist das Tor ein Objekt. Ich habe das mal angepasst.
1× editiert, zuletzt 11.04.10 16:54:27

alt Re: Scripting - Fragen/Probleme

Nova
User Off Offline

Zitieren
Du brauchst gar nichts mit der Variable machen, du brauchst nur das Event "toggle".

1
2
3
4
on:use
	{
	event "toggle", "object", [id];
	}
Dabei musst du [id] durch die ID des Tors ersetzen.

alt Re: Scripting - Fragen/Probleme

LittleKrieger
User Off Offline

Zitieren
Hi,ich bin noch neu im Forum.Ich habe damit angefangen zu scripten und ich bin bei einem meiner ersten Scripts auch schon auf ein Problem gestoßen dass egal was ich mache nicht lösen kann.Ich hab auch schon im Forum gesucht.Ich will das ein Tagebucheintrag erscheint sobald der Spieler ein Gebiet betritt.Aber der Trigger stoppt nicht und spamt die Tagebucheinträge.
Hier die Scripts:

Global
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
on:start { 
            diary "(name)" ,"(Quelle)"
}
on:trigger (ID) { showentry "(name)" ,SFX 
                       stoptrigger (ID)
}

// ich hab auch schon versucht:

on:start { 
            diary "(name)" ,"(Quelle)"
}
on:trigger {  showentry "(name)" ,SFX 
                       stoptriggers
}
Wahrscheinlich habe ich nur irgendeinen blöden Anfänger- fehler gemacht .Ich hoffe ihr könnt mir helfen.

alt Re: Scripting - Fragen/Probleme

LittleKrieger
User Off Offline

Zitieren
@DEATHSHEAD
Wie im Code schon zu sehen war habe ich ein Stoptrigger-
Ereigniss eingebaut.Mein Problem ist nur das er trotzdem
nicht stoppt.Oder habe ich etwas falsch verstanden?

alt Re: Scripting - Fragen/Probleme

Nova
User Off Offline

Zitieren
So funktioniert das nicht LittleKrieger, du musst das Script in den Trigger selbst reinschreiben.

Du musst also in den Trigger mit on:trigger reinschreiben, dass der Tagebucheintrag erstellt wird. Der Befehl s2 cmd diary erstellt dabei nicht nur den Eintrag, sondern zeigt ihn auch gleich an. Das musst du also nicht extra mit s2 cmd showentry machen.

Außerdem musst du jeden Befehl, den du aufschreibst, mit einem Semikolon beenden, also so:
√ diary "Hallo!", "quelle";
× diary "Hallo!", "quelle"


Hast du dir bereits das Scripting-Tutorial angeguckt?
Zum Anfang Vorherige 1 2306 307 308339 340 Nächste Zum Anfang
Einloggen, um zu antworten Scripts-ÜbersichtStranded II-ÜbersichtForenübersicht