Seite 1 von 1

Frage: Spawnen eines Items über Dialogscript möglich?

Verfasst: 06. Dez 2016, 14:06
von Marjak
Hallo,

ich habe eine Frage. ich möchte ein neues Items über ein Dialogscript spawnen lassen, geht das?

Die Anwendung wäre der Zauber "Sumus Elexiere". Nach der erfolgreichen Probe soll die jeweilge Pflanze "Einbeere aufgeladen" o.ä. erscheinen.


Vielen Dank schon mal vorab

Verfasst: 06. Dez 2016, 14:16
von Yuan DeLazar
Ich weiß nicht so recht, worauf du hinaus willst, schau mal in der Wiki unter giveItemTo und showItemsetList nach, da könnte was für dich dabei sein.

Verfasst: 06. Dez 2016, 14:30
von Marjak
Ich versuche mal es zu erklären.

Über einen Dialog soll eine Probe auf einen Zauber laufen. Wenn diese erfolgreich war, soll ein neues Item gespawnt werden, das die jeweiligen Effekte enthält. Es geht also nicht um die Modifizierung eines schon vorhandenen Items.

[Edit]

Folgender Dialog:
[spoiler]

aengste_dlg
1
= -5) {
var res = rollCheck({"who":selid,"which":"aengste","type":"spell","mod":0,"cost":5});
}
if (res.ok)


}]]>
true



[/spoiler]

Bei "if (res.ok) " bräuchte ich jetzt sowas wie "spawn item xy"

Verfasst: 06. Dez 2016, 18:05
von Mordbrenner
Ja, einfach giveItemTo (dann spawnt das item einfach im Inventar, oder showItemSetList, dann bekommst Du ein loot-Fenster.


giveItemTo(Item-ID,anzahl,Char-ID);

Verfasst: 06. Dez 2016, 22:38
von Marjak
@Mordbrenner und Yuan

Mordbrenner, Yuan, ich bräuchte mal eure Hilfe.

Also, ein Item spawnt, aber ich möchte abhängig von den verbliebenen ZfP* unterschiedliche Items spawnen lassen, bei 3 ZfP* Item XX und bei 4 Item AB. Aber irgendwie krieg ich immer nur dasselbe Item, egal ob die Zauberprobe erfolgreich war oder nicht.

Hier mal das, was ich habe:
[spoiler]

aengste_dlg
1
= -5) {
var res = rollCheck({"who":selid,"which":"aengste","type":"spell","mod":0,"cost":1});
}
if (res && res.ok)
tap = res.resrem;
if (tap = 5) giveItemTo(3,1,selid);
else if (tap = 4) giveItemTo(10,1,selid);
else if (tap = 3) giveItemTo(9,1,selid);
else if (tap = 2) giveItemTo(8,1,selid);
else if (tap = 1) giveItemTo(7,1,selid);
else if (tap = 0) giveItemTo(6,1,selid);


}]]>
true




[/spoiler]

Ziemlich sicher habe ich bei dem unteren Teil nur Klammern vergessen, aber wenn ihr kurz erklären könntet, wann eine bei if-Sätzen gesetzt werden müßte, wäre das super.

Verfasst: 06. Dez 2016, 22:58
von Mordbrenner
ich seh da jetzt auf den ersten Blick keinen Fehler. Klammern brauchst Du nach einem if nur, wenn Du mehr als einen Befehl ausführen möchtest.

Allerdings fragst Du nur auf resrem 0 bis 5 ab. Was passiert, wenn >5?

Welches der items spawnt denn? Das erste oder das letzte?

Alternativ mal nach
tap = res.resrem;

folgendes einfügen:
debugLog("tap= "+tap);

Dann zeigt er Dir in der Konsole den Wert von tap an.

Verfasst: 06. Dez 2016, 23:00
von Marjak
[s]Es wird immer nur das 3. Item gespawnt, ganz egal, ob die Probe gelungen oder mißlungen ist.[/s]

Deine Anregung werde ich gleich mal ausprobieren.


[EDIT]

Bei tap=5 wird korrekt das 3. Item gespawnt, bei allen anderen tap (ausprobiert mit tap 3, 1 und Probe mißlungen) allerdings immer das 10. Item, was auf der Liste das erste else if...(else if (tap = 4) giveItemTo(10,1,selid);) ist.

[spoiler]
if (res && res.ok)
tap = res.resrem;
debugLog("tap= "+tap);
if (tap >= 5) giveItemTo(3,1,selid);
else if (tap = 4) giveItemTo(10,1,selid);
else if (tap = 3) giveItemTo(9,1,selid);
else if (tap = 2) giveItemTo(8,1,selid);
else if (tap = 1) giveItemTo(7,1,selid);
else if (tap = 0) giveItemTo(6,1,selid);
[/spoiler]

Irgendwie scheint er nur die ersten beiden Einträge zu nehmen

Verfasst: 06. Dez 2016, 23:20
von Marjak
Gut, die Lösung war zwar nicht logisch, dafür aber ziemlich einfach.

Die Engine kann mit "tap = 3" nichts anfangen. Habe jetzt alle Tap-Einträge auf >="Wert" gesetzt und jetzt geht es.

Mordbrenner, vielen vielen Dank. Damit ist jetzt mein erster "Mod" fast fertig.

Verfasst: 06. Dez 2016, 23:23
von Mordbrenner
*doing* betriebsblind. Wenn Du "ist gleich" abfragen willst, ist das "==".