Forum

> > Stranded II > Scripts > Questreihe NPC
Forums overviewStranded II overview Scripts overviewLog in to reply

German Questreihe NPC

16 replies
To the start Previous 1 Next To the start

old Questreihe NPC

zeriel
User Off Offline

Quote
So da ich ja auf meiner Insel eine Questreihe starten will, die dann auch abhängig von Inventar, Fortschritt beim bau oder anderen npcs gemacht wird, versuche ich mir gerade ein kleines grundgerüst aufzubauen.

das erste ist mal das npc on:use script. Habe als variablen quest und fortschritt gewählt. Die dialoge sollen aus einer externen datei kommen. Die Variable Quest sagt den Npc mit welcher er den spieler nervt. Die variable fortschritt sagt den npc bei welcher quest ich gerade bin.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
on:use{
if ($quest==1){
dialogue "quest1",maps/quests.txt;
}
if ($fortschritt==1){
dialogue "quest1a",maps/quests.txt;
}
if ($quest==2){
dialogue "quest2",maps/quests.txt;
}
else
{
dialogue "intro",maps/quests.txt;
}
}
ich denke so kann man das gut für ca 20 quests durchziehen ohne die übersicht zu verlieren.


so nun habe ich mal den intro text im quest text container erstellt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
page=intro
title= Willkommen
text=start
Hi, Woher kommst du den?	
text=end
button=Tschüss, Las mich bloß in Ruhe du ungewaschener Inselabschaum
button=gestranded, Ich bin gestrandet hilf mir.


page=gestranded
text=start
Ich möchte mir ein Camp bauen, brauche dafür aber 50 Äste. Könntest du mir diese besorgen?
text=end
button=ja, Na Klar, ich helfe dir
button=nein, Leck mich

Page=ja
Script=start
$Quest++
Diary "Meine erste Aufgabe",maps/tagebuch.txt;
Script=end

Tagebucheintrag im Tagebuch Container

1
2
3
4
5
Titel=Meine erste Aufgabe
Da habe ich nochmal glück gehabt jemanden auf dieser einsamen insel zu finden. 50 Äste will er von mir haben. nagut dann werd ich ihm die einmal besorgen.
script=start
$fortschritt++
script=end


Der Fortschritt Dialog

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
page=quest1a
scrip=start
     if (playergotitem(24) >= 50)
          {
freestored "self",(24),50;
script=end
text=start
Wunderbar danke. als dank erhältst du 5 leere flaschen von mir. jedoch währe da noch eine andere sache bei der du mir helfen könntest
button=ok, klar helf ich dir
script=start
$quest++
find 106,10;
script=end
button=nein, Nein danke gib mir meine Flaschen
script=start
$quest++
find 106,10;
script=end

          }
     else
          {
          msg "Du hast zu wenig Äste also schwing deinen Hintern zum nächsten Baum und bearbeite ihm";
          }
     }

Folgende Fragen:

Das script soll wenn man ja ich helfe dir nach der 1ten Quest drückt den spieler auf die 2te quest weiterleiten

diese bennene ich zb quest2 im text container. wie mache ich das mit dem button? schreibe ich

button=ok, klar helf ich dir(map/quests.txt; quest2) ?

was mich irritiert ist, dass ich beim dialog immer die button namen als nächste page nehmen muss.

ist es vielleicht besser wenn ich für jede quest eine einzelne txt datei anlege sowie für jeden fortschritt?
___________________________________________

Um den bau einer zb hütte zu simulieren dachte ich an

model "Model" [, "Klasse", ID]

also das model vom einem zb. stein wird getauscht gegen einen unterstand. damit nicht jeder stein verwandelt wird füge ich ein if ($ston1) ein und gebe beim stein den status
on:start
$stone1

ein.

pew hoffe diesmal ists übersichtlicher

old Re: Questreihe NPC

Nova
User Off Offline

Quote
Hier mal ein Beispiel, wie man denn einen Charakter (NPC) mit zwei Quests machen kann:

Code der Person:
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
on:start
	{
	$quest = 0;
	}

on:use
	{
	if ($quest == 2)
		{
		dialogue "quest2", "quest2.txt";
		}

	if ($quest == 1)
		{
		if (playergotitem(24) >= 10)
			{
			dialogue "quest1fertig", "quest1.txt";
			freestored "unit", 1, 24, 10;
			$quest = 2;
			}
		else
			{
			msg "Hol mehr Äste!";
			}
		}

	if ($quest == 0)
		{
		dialogue "quest1", "quest1.txt";
		}
	}


quest1.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
page=quest1
title=Aufgabe 1
text=start
Hol mir bitte 10 Äste.
text=end
button=quest1ja, Okay, mach ich.
button=action:close, Nö, kannst du knicken!

page=quest1ja
title=Aufgabe 1
text=start
Danke!
text=end
script=start
$quest = 1;
script=end
button=action:close, Tschüss!

page=quest1fertig
title=Aufgabe 1
text=start
Danke, ich nehme dir die Äste dann mal ab.
text=end
button=action:close, Tschüss!

quest2.txt
1
2
3
4
5
6
page=quest2
title=Aufgabe 2
text=start
Hier steht dann der Auftrag für die zweite Quest.
text=end
button=action:close, Ahja...


Ich habe das Script gerade getestet, bei mir funktioniert es einwandfrei.
Fühlt sich gut an, mal wieder mit Stranded II zu arbeiten. Glücklicherweise habe ich nichts vergessen, deswegen hat dieser Code nicht so lange gedauert, wie ich anfangs annahm.

Du brauchst nicht für jede neue Frage einen eigenen Thread erstellen. Nur wenn die Fragen nichts miteinander zutun haben, solltest du einen neuen machen. Ansonsten kannst du alles in einen Thread schreiben.

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
amazing, ziehe ich mir dann gleich mal genauer rein. da kann ich ja schon anfangen quests zu schreiben. die ideen sprudeln nur so aus mir raus und zeit hab ich auch

freundin meckert zwar schon bisschen aber mir egal

will aber natürlich auch ein "questbook" machen, also ein tagebuch wo man alles nachlesen kann. sollen ja 2-3 questgeber werden. soll ich da für jeden eintrag auch eine txt datei schreiben ? und wie wird es ausgelöst ? ich denke mal so :

1
2
3
4
5
6
7
8
page=quest1fertig
title=Aufgabe 1
text=start
Danke, ich nehme dir die Äste dann mal ab.
text=end
button=action:close, Tschüss!
script=start
diary "Quest bestanden", "maps/tagebuch1.txt";

old Re: Questreihe NPC

Nova
User Off Offline

Quote
Das Problem dabei dürfte sein, dass Stranded den Tagebucheintrag sofort öffnet, nachdem er erstellt wurde. Dann sieht man das "Danke, ich nehme dir die Äste dann mal ab." nicht mehr.

Versuche am besten, dort im Script einen s2 cmd timer zu erstellen, sagen wir mal, mit dem Namen "quest1fertig" und der Zeit 2000. Danach musst du nur noch zu dem Script der Person folgendes hinzufügen:
1
2
3
4
on:quest1fertig
	{
	diary "Quest bestanden", "maps/tagebuch1.txt";
	}

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
dann las ich das mit dem tagebuch weg. reicht ja wenn der npc nachrichten ausgibt wie: hol noch mehr äste oder gehe zu den indianern etc.

muss jetzt mal etwas spielen, damit ich wieder ein gefühl dafür bekomme was machbar ist und was wie lange dauert. 10 äste ist ja verschwendete scripting zeit. die hat man ja in null komma nix

edit:

macht richtig spass. jetzt hab ichs geschafft ein gerüst für endlos erweiterbare scripts zu schreiben juhu stand vor fehlern und hab sie selber gelöst *freu*

so ich habe noch was vor. so schauts üblicherweise aus wenn ich ne quest am laufen habe:

1
2
3
4
5
6
7
8
9
10
11
12
if ($quest == 3)
			 {
			 if (playergotitem(96) >= 3)
					{
					dialogue "quest3fertig", "maps/mi/quest3.txt";
					freestored "unit", 1, 96, 3;
					$quest = 3;
					find 12,5;
					} else	{
			msg "Das sind doch keine 3 Affenhäute du Kanalhure";
					}
			 }

2 dinge möchte ich machen.

1) der npc bildet ein objekt aus den materialien die ich bringe

2) ich möchte beim eingeborenen dorf einen trigger machen der den spieler attackiert. wenn dann beim npc eine quest erfolgreich war bekomme ich ein item das diesen trigger ausschaltet -> dauerhaft.

hier meine ideen zu den 2 punkten:

1)

der befehl model "Model" [, "Klasse", ID]
weiß aber nicht wie ich das umsetzen sollte. laut beschreibung ersetzt der befehl ein model mit nem anderen.

zb. ein stein neben ihm wird zum haus.

2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
on:start {
	local $x,$y,$z;
	$x=getx("info",32);
	$y=(gety("info",32)+15);
	$z=getz("info",32);
}

on:trigger {
	projectile 54,$x,$y,$z,4,55,59;
	if ($spnat==0){
		$spnat=1;
		timer 0,3000,1,"spotnatives";
	}
}

das hab ich aus dem adventure kopiert, weiß aber nicht ob ich das 1:1 übernehmen kann. im adventure ist daneben noch ne flagge mit dem status ewig feuer weiß net ob das beeinflusst.

jedenfalls sollte das item dann den beschuss abschalten dauerhaft also zb eben dieser free befehl der gleich alles löscht ( also den trigger )

ps: freestored "unit", 1, 96, 3;
freestored "Klasse", ID, Typ [,Anzahl]
unit = item
ID = ??
Typ = ist klar welches item
anzahl auch klar

was genau heißt die 1 bei ID ?

pps: Wie kann ich eine quest machen die es verlangt gewisse tiere zu töten ?

habe mir befehle durchgesehen bin aber nicht fündig geworden
dachte irgendwie local bei der quest allen einheiten des typs Affe eine variable hinzu zufügen und pro kill diese variable erhöhen zu lassen.
-) kann man quests machen die verlangen etwas zu bauen
-) kann man per script gewisse baubare objekte sperren und erst durch erfüllen einer quest freischalten lassen ?
-) kann ich eine quest machen wo gleich 3 verschidene items gebraucht werden?
edited 5×, last 18.08.11 11:38:40 pm

old Re: Questreihe NPC

Der Muggemann
User Off Offline

Quote
okay
1. also ich mach sowas immer so. Ich mach dort wo das objekt (Gebäude) stehen soll eine Info. und nach dem quest erstellt man einfach mit s2 cmd create das entsprechende Gebäude und setz es mit s2 cmd setat und s2 cmd setrot auf die info.

1
2
3
4
5
6
... dialog ...
script=start
	$id=create("object",160);
	setat "object",$id,"info",1;
	setrot "object",$id,"info",1;
sript=end

2. Beim Objekt das schiesen soll:
1
2
3
on:schuss{
	projectile 53,getx("self"),gety("self"),getz("self"),4,55,59;
}
(Den vorletzten Parameter musst du evtl. anpassen)
und beim Trigger:
1
2
3
on:trigger{
	event "schuss";
}
und zum stoppen einfach s2 cmd stopptrigger benutzen.

Der Befehl freestored löscht eingelagerte Items und die ID sagt einfach aus welchem "Lager". Unit 1 ist der Spieler, also löscht es etwas aus dem Inventar.

Das mit den Affen geht mit s2 cmd extendscript.

Man kann auch quests machen, die verlangen etwas zu bauen. Ich würd dann vorgeben wo etwas gebaut werden soll und mit einem Trigger überprüfen, wann es fertig ist.

Sperren geht mit s2 cmd lockbuilding und s2 cmd unlockbuilding

Man kann auch verschiedene Items verlangen, dann muss man das aber auch 3 mal mit s2 cmd playergotitem abfragen.

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
das mit dem extend script versteh ich nicht. wo muss ich das einfügen und wie ?

das mit den pfeilen bringe ich nicht zum laufen, ja ansonsten läufts

hab noch ne frage wegen früchten. zb beim orangenbaum bei der ext. wie lange braucht es bis 1 orange am baum ist ? 1 frucht pro tag ??

kann man das auch per script beeinflussen? wenn zb nur alle 2 tage was wächst, damit man per script das auf 1 tag ändert ?
edited 2×, last 19.08.11 06:35:46 pm

old Re: Questreihe NPC

Nova
User Off Offline

Quote
Erklär mal genau, was du momentan schon gemacht hast bezüglich dem Pfeil-Script.

s2 cmd extendscript "unit", 117, "maps/script.txt";
Dieser Befehl würde nun das Script aus der Datei script.txt an das bereits vorhandene Script der Einheit mit der ID 117 anfügen, also erweitern.

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
oki doki, probiers dann aus wenn ich mti der questreihe bei den affen töten bin

naja ich habe

1
2
3
on:schuss{
     projectile 53,get$x("self"),get$y("self"),get$z("self"),4,55,59;
}

bei 2 leuchttürmen hinzugefügt und dazwischen einen gebietstrigger der einen guten radius hat und auslöser spieler mit diesen hier

1
2
3
on:trigger{
     event "schuss";
}

old Re: Questreihe NPC

Nova
User Off Offline

Quote
Ganz einfach: Lies dir mal s2 cmd event durch.

Wenn du dann noch nicht drauf kommst: "Führt bei dem Objekt wo das aktuelle Script ausgeführt wird (oder bei dem Objekt das über die Parameter angegeben wird) ein Ereignis aus."

Da steht, dass das Event nur bei dem Objekt ausgeführt wird, bei dem der Befehl ausgeführt wurde, wenn keine weiteren Parameter angegeben wurden. Wenn das Event überall, also auch bei den beiden "Leuchttürmen", ausgeführt werden soll, musst du das weiteren Parameter "global" angeben.

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
Hänge gerade bei ner quest wo er mehr items als 1 braucht. Mugge meinte einfach mehr ifplayergot einfügen aber das haut nicht hin. hier mein script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if ($quest == 12){
dialogue "quest", "maps/mi/quest6.txt";
}
if ($quest == 13){
if (playergotitem(11) >= 6)
if (playergotitem(15) >= 20)
if (playergotitem(26) >= 18)
if (playergotitem(46) >= 6)
if (playergotitem(98) >= 5)
{
dialogue "fertig", "maps/mi/quest6.txt";
freestored "unit", 1, 11, 6;
freestored "unit", 1, 15, 6;
freestored "unit", 1, 26, 6;
freestored "unit", 1, 46, 6;
freestored "unit", 1, 98, 6;
&quest = 14;
}else{
msg Du brauchst 6x kl. Fleisch 20x Blätter 18x Lianen 6x Beeren 5x Insektenteile
}
}

was brauche ich um stranded zu sagen das die 5 ifplayergotitem zusammenhängen?

lg
ps. nach der quest soll der angriffstrigger deaktiviert werden. mal sehen ob ich das hinbekomme dank der neuen tipps
edited 1×, last 19.08.11 11:33:51 pm

old Re: Questreihe NPC

Nova
User Off Offline

Quote
Er meinte das sicher so:
1
2
3
4
5
6
7
8
9
10
11
12
13
if (playergotitem(11) >= 6)
	{
	if (playergotitem(15) >= 20)
		{
		if (playergotitem(26) >= 18)
			{
			if (playergotitem(46) >= 5)
				{
				msg "Wow, du hast alles!";
				}
			}
		}
	}

Allerdings nimmt das wirklich viel Platz weg und ist nicht sehr übersichtlich. Besser ist es so:
1
2
3
4
if ((playergotitem(11) >= 6) && (playergotitem(15) >= 20) && (playergotitem(26) >= 18) && (playergotitem(46) >= 5))
	{
	msg "Wow, du hast alles!";
	}
Leider kann man die If-Abfrage nicht in mehrere Zeilen, man kann da zwar ein wenig tricksen, aber wesentlich schöner wird das nicht.


Kleiner Tipp von mir: Wie testest du momentan deine Scripte? Wenn du sie im Editor schreibst, dann die Map speicherst, den Editor verlässt um dann bei "Einzelkarten" deine Map auszuwählen, versuche mal folgendes:
Drücke F12 im Editor. Dann kannst du die Map direkt testen und befindest dich auch im sogenannten Debug-Modus. Dort werden Fehler in den Scripten dir sofort ausgegeben. Dies kann sehr hilfreich sein, wenn du mal nicht weißt, wieso dein Script nicht funktioniert. Um das aufploppende Menü wieder zu verlassen, drücke einfach die ^ Taste. (Links neben der 1 und über Tab)

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
wow um die zeit noch ne antwort danke. schau ich mir morgen gleich mal an. ich teste es immer und habe dadurch schon viele fehler selbst gefunden.

ich setze den quest zähler per globalen script zur neu geschriebenen quest hoch z.B.

1
2
3
on:start{
$quest = 10;
}

schau ob die quest funktioniert und mache dann weiter. aber bei dieser sache wusste ich einfach nicht was mir der debug modus sagen will

bin immer stolzer auf meine map. steckt schon viel arbeit drinnen und ist kein dummes hol mri 10 holz. oh danke jetzt hol mir 10 blatt. es ist viel witz drinnen. naja wenn mans auf wesentliche reduziert eher mehr unterste schublade, niveaulos, obszön etc. aber der fun faktor bleibt erhalten

mal schaun ob ich dann auch wem finde der mir die map testet bevor ich sie veröffentliche. brauche halt feedback zu spielbarkeit, welche parts sind zu leicht, zu schwer. wo findet man sich nicht zu recht. was ist unklar etc.

ps. wie gebe ich meinen spieler eine map. sodass er von anfang an ein item hat, mit dem er die map sehen kann ?

lg

old Re: Questreihe NPC

Nova
User Off Offline

Quote
Du erzeugst mit create ein "item" mit der ID 73 und benutzt dann s2 cmd store, um es in den Spieler einzulagern.
(Speichere dabei die Item-ID, die du von create bekommst, in einer Variable zwischen.)
Als Hilfe kannst du dir vielleicht noch mal hier unten "Befehle mit Rückgabewerten" ansehen.

Ich würde mich gerne als Tester zur Verfügung stellen, speziell weil ich wissen will, welche "netten Wörter" du neben Kanalhure in deinen Dialogen eingebaut hast.
Schreib mich einfach für genaueres per PN an.

user zeriel has written
wow um die zeit noch ne antwort danke.
Wir haben 0:30 Uhr, das ist noch gar nichts. Von mir kann man auch mal erwarten um 3 Uhr Nachts Hilfe zu bekommen, selbst an Schultagen.

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
hmm bringe es nicht zusammen. also das script attackiert den player wenn ich bei der info ein global hinzufüge

1
2
3
on:trigger{
     event "schuss", "global";
}

nur leider die ganze zeit, und nicht auf den trigger radius beschränkt. wenn ich global weg lasse attackiert es garnicht.

ps. die türme schießen recht tief und treffen daher kaum, kann man die höhe justieren ?

1
2
3
on:schuss{
     projectile 53,getx("self"),gety("self"),getz("self"),4,55,59;
}
steht hier die zahl 4 für 4 - Das Projektil fliegt auf den Spieler? würde gerne noch die geschwindigkeit erhöhen von den pfeilen. habs grad mit raketen auch probiert aber die machen irgendwie viel zu viel damage, also lieber schnellere pfeile mit weniger dmg

old Re: Questreihe NPC

Der Muggemann
User Off Offline

Quote
okay...
1. hast du den Trigger richtig eingestellt?
Da steht irgendwo die Anzahl, bei der der Trigger auslösen soll.
Da steht standartmäßig glaub ich =0. Das musst du auf =1 umstellen, dann sollte es nur auslösen, wenn du im Bereich stehst.

2. Da musst du bei getz noch +10, oder so dranhängen.

Die 4 steht für den Modus "auf den Spieler schießen".
kannst du aber alles hier s2 cmd projectile nachlesen.
Da gibts auch einen Parameter für die Geschwindigkeit.

old Re: Questreihe NPC

zeriel
User Off Offline

Quote
ok habs. das mit der 1 beim trigger war der fehler. lol da muss man mal draufkommen. lg
To the start Previous 1 Next To the start
Log in to reply Scripts overviewStranded II overviewForums overview