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 2306 307 308339 340 Next To the start

old sleep

Iuvenis
User Off Offline

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

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
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;
	}
}

old Re: Scripting - Fragen/Probleme

Iuvenis
User Off Offline

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

old Re: Scripting - Fragen/Probleme

Iuvenis
User Off Offline

Quote
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)
edited 1×, last 05.04.10 09:56:33 pm

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
Iuvenis has written
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?
edited 4×, last 08.04.10 06:28:49 pm

old Re: Scripting - Fragen/Probleme

DEATHSHEAD
User Off Offline

Quote
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

old Re: Scripting - Fragen/Probleme

davidsung
User Off Offline

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

old Re: Scripting - Fragen/Probleme

DEATHSHEAD
User Off Offline

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

old Re: Scripting - Fragen/Probleme

davidsung
User Off Offline

Quote
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.
edited 1×, last 11.04.10 04:54:27 pm

old Re: Scripting - Fragen/Probleme

Nova
User Off Offline

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

old Re: Scripting - Fragen/Probleme

LittleKrieger
User Off Offline

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

old Re: Scripting - Fragen/Probleme

LittleKrieger
User Off Offline

Quote
@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?

old Re: Scripting - Fragen/Probleme

Nova
User Off Offline

Quote
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?
To the start Previous 1 2306 307 308339 340 Next To the start
Log in to reply Scripts overviewStranded II overviewForums overview