Forum

> > Stranded II > Allgemein > Items abnehmen und zurückgeben
ForenübersichtStranded II-ÜbersichtAllgemein-ÜbersichtEinloggen, um zu antworten

Deutsch Items abnehmen und zurückgeben

7 Antworten
Zum Anfang Vorherige 1 Nächste Zum Anfang

alt Items abnehmen und zurückgeben

-tony316-
User Off Offline

Zitieren
Auf meiner derzeitigen Map soll der Spieler von Eingeborenen gefangen genommen werden.
Dabei soll er alle Items, die er bei sich trägt, verlieren. Später soll der Spieler aber, nachdem er sich befreien konnte, alle Items, die er vorher besessen hat, zurück bekommen.
Ich schätz mal, dass man das Script mit Variablen aufbauen muss, aber ich komme irgendwie nicht voran. Kann mir irgendjemand helfen?

alt Re: Items abnehmen und zurückgeben

Nova
User Off Offline

Zitieren
Das ganze dürfte zu Problemen führen. Die Sache ist die: In der Scriptsprache von Stranded II kann man keine "Listen" definieren. Du müsstest also für jedes Item eine eigene Variable erstellen - viel Arbeit bei über 100 Gegenständen.

Meine Idee: Du speicherst das alles in einer Zeichenkette, also einem String.
Mit s2 cmd split kannst du das ganze als Text speichern und wieder laden. Mit s2 cmd loop gehst du dabei erst mal die Zahlen von 1 bis 1000 oder so durch, halt so viele, damit auch wirklich jedes Item drangenommen wird. Mit s2 cmd playergotitem guckst du dann, ob der Spieler das Item besitzt. Sollte er es besitzen, schreibst du das in die Variable und löschst sie beim Spieler. Oh, und s2 cmd join könnte nützlich sein.


Aber hey, die Idee ist gut! Ich werde das ganze mal programmieren und im Thread "Nützliche Scripts" veröffentlichen, damit es jeder nutzen kann.

alt Re: Items abnehmen und zurückgeben

Hurri04
Super User Off Offline

Zitieren
hier mal eine umsetzung des ganzen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
on:event {
	loop("count", 500) {
		$type=loop_id();
		if($type!=1) {
			$player_items=join("$player_items", ":", count_stored("unit", 1, $type));
		}else{
			$player_items=count_stored("unit", 1, $type);
		}
	}
	freestored "unit", 1, "all";
	clear;
	add $player_items;
	msgbox "Gespeicherte Items";
}

das sollte eine liste erstellen, in der die zahl jedes einzelnen item-typs, das beim spieler im rucksack gelagert ist, festgehalten wird, jeweils duch doppelpunkt getrennt.

herauskommen sollte dabei also etwas in dieser art:
Zitat
4:0:0:3:4:5:5:12:60:14:3:0: [...] : 5:6:0:0

falls nicht, ist wohl noch irgendwo ein kleiner dreher in meinem script, habs jezt nicht getestet

am besten passt du auch die 500 im loop-befehl so an, dass sie der höchsten item-typnummer entspricht.


mit s2 cmd split lässt sich das ganze nachher wieder aufteilen, dann musst du nur noch wieder mit s2 cmd create die neuen items erzeugen und mit s2 cmd store beim spieler einlagern.

Edit: noch eine kleine verbesserung eingebaut, indem ich beim s2 cmd freestored befehl den parameter "all" verwendet habe, wodurch ich den befehl außerhalb der loop-schleife schreiben konnte, wodurch er auch deutlich seltener aufgerufen wird -> profit

außerdem habe ich bei der if-abfrage fallunterscheidung umgedreht, wodurch in den meisten fällen bereits de rerste fall genommen werden kann und der zweite fall nur noch beim ersten durchlauf verwendet wird. dadurch muss auch hier seltener etwas unnütz durchlaufen werden -> more profit
3× editiert, zuletzt 17.06.12 12:16:35

alt Re: Items abnehmen und zurückgeben

Nova
User Off Offline

Zitieren
So, bin fertig, und es funktioniert. Speichern und Laden der Items des Spielers. Ich werde das Script jetzt in den Thread schreiben, dort kannst du es dir dann angucken. Am besten wäre es, wenn du es auch verstehst, und nicht einfach nur kopierst.

@user Hurri04: Dein Script braucht recht lange (2 Sekunden) zur Ausführung, aber es funktioniert. Ich habe das ganze so gemacht, dass nur Items gespeichert werden, die der Spieler auch besitzt. Dann muss man aber auch die ID speichern.


Hier noch mal ein Link zum Thread: Nützliche Scripts

alt Re: Items abnehmen und zurückgeben

Hurri04
Super User Off Offline

Zitieren
so, hab grade noch ne zeile entfernt, die sonst 500 mal sinnlos ausgeführt wurde.
eventuell sollte es damit ein kleines wenig schneller laufen.


natürlich kann man das so machen, dass man die typ-nummern mit abspeichert, aber dann muss man für die entwerder eine neue variable anlegen, in der man sie in der gleichen reihenfolge wie die anzahlen speichert, oder man packt beides in eine variable und schreibt sie immer abwechselnd hintereinander.

in jedem fall fand ich jedoch, dass es für user -tony316- (als script-anfänger) einfacher zu verstehen wäre, so wie ich es gemacht habe.

alt Re: Items abnehmen und zurückgeben

Nova
User Off Offline

Zitieren
user Hurri04 hat geschrieben
Edit: noch eine kleine verbesserung eingebaut, indem ich beim s2 cmd freestored befehl den parameter "all" verwendet habe, wodurch ich den befehl außerhalb der loop-schleife schreiben konnte, wodurch er auch deutlich seltener aufgerufen wird -> profit

Das habe ich bei meiner Lösung auch mal verwendet, danke für den Hinweis!
Zum Anfang Vorherige 1 Nächste Zum Anfang
Einloggen, um zu antwortenAllgemein-ÜbersichtStranded II-ÜbersichtForenübersicht