Forum

> > Stranded II > Allgemein > Items abnehmen und zurückgeben
Forums overviewStranded II overviewAllgemein overviewLog in to reply

German Items abnehmen und zurückgeben

7 replies
To the start Previous 1 Next To the start

old Items abnehmen und zurückgeben

-tony316-
User Off Offline

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

old Re: Items abnehmen und zurückgeben

Nova
User Off Offline

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

old Re: Items abnehmen und zurückgeben

Hurri04
Super User Off Offline

Quote
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:
Quote
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
edited 3×, last 17.06.12 12:16:35 pm

old Re: Items abnehmen und zurückgeben

Nova
User Off Offline

Quote
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

old Re: Items abnehmen und zurückgeben

Hurri04
Super User Off Offline

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

old Re: Items abnehmen und zurückgeben

Nova
User Off Offline

Quote
user Hurri04 has written
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!
To the start Previous 1 Next To the start
Log in to replyAllgemein overviewStranded II overviewForums overview