Technische Fragen zum Modden

#1
So wirkt Belmart lt. Kanon:
BELMARTBLATT
Beschreibung: Belmart nennt man die vielfach gerippten, dunkelgrünen Blätter eines kugeligen Buschs, der am häufigsten im Schatten der nordaventurischen Wälder zu finden ist. Es wird verwendet um den Verlauf von Krankheiten abzuschwächen oder um sich vor Giften zu schützen, weshalb es auch eine Zutat in Antidoten ist.
Einnahme: Die Abzüge durch Krankheiten sind für einen Tag aufgehoben, die Krankheit jedoch nicht geheilt.
GETROCKNETER BELMART
Zubereitung: Das Belmartblatt wird schlicht getrocknet und fermentiert.
Zutaten: 1 Belmartblatt
Wirkung: Die behandelten Blätter vermindern den täglichen Schadenswurf bei allen Krankheiten um 3 Punkte und für die Dauer eines Tages ist man immun gegen Gifte.


Lässt sich das so umsetzen, insbesondere die folgenden Punkte bei gesetztem Effekt:
1. Aufheben der Krankheitsabzüge (ich vermute mal, auf Attribute und Talente, nicht auf cLE) für eine bestimmte Dauer - nach Ablauf müssten die Abzüge dann wieder da sein.
2. Reduzierung der gewürfelten Ergebnisse (SP) um 3, aber das Ergebnis darf nicht negativ werden.
3. Temporäre Immunität gegen Gifte (aber keine Heilung von bei Einnahme bestehenden Vergiftungen) - etwas entfernt Ähnliches gibt es ja schon (Tollwut-Immunität, aber die ist lebenslang und nur für eine Krankheit)

Technische Fragen zum Modden

#2
Gibt es eine Möglichkeit, einen neuen Verwendungstyp einzuführen? Beim Lotusstaub z. B. kommt die Schadenswirkung nach dem Einatmen, essen und trinken dürften hier nicht möglich sein.

Oder gibt es schon einen allgemeinen Typ "verwenden"?

#3
Kann man das Kästchen "Einnahme" nicht auch in dem Fall einfach zu "Einatmen" umbenennen? Wobei das ja im Grunde auch eine Art des Einnehmens ist. Aber Einatmen passt vermutlich besser.

Beim Lotus macht man das ja durchaus extra aufgrund der Rauschwirkung.
Bild

#4
[quote='DJ_rainbow','index.php?page=Thread&postID=114189#post114189']Lässt sich das so umsetzen, insbesondere die folgenden Punkte bei gesetztem Effekt:
1. Aufheben der Krankheitsabzüge (ich vermute mal, auf Attribute und Talente, nicht auf cLE) für eine bestimmte Dauer - nach Ablauf müssten die Abzüge dann wieder da sein.
2. Reduzierung der gewürfelten Ergebnisse (SP) um 3, aber das Ergebnis darf nicht negativ werden.
3. Temporäre Immunität gegen Gifte (aber keine Heilung von bei Einnahme bestehenden Vergiftungen) - etwas entfernt Ähnliches gibt es ja schon (Tollwut-Immunität, aber die ist lebenslang und nur für eine Krankheit)[/quote]1. auf Umwegen. Du könntest zu jedem Krankheits-Effekt einen anti-Krankheits-Effekt machen. Belmart fragt dann im onAdd-Skript auf alle Effekte ab und fügt bei vorhandensein den entsprechenden Anti-Effekt mit Dauer 1 Tag hinzu. Dann gleichen sich der Effekt und der Anti-Effekt für den nächsten Tag aus. Aufpassen müsste man dann allerdings, wenn der Krankheits-Effekt geheilt wird, dass dann der Anti-Effekt keinen Bonus mehr gibt
2. Das wäre nur über Alternativ-Effekte machbar. Also wie 1 aber statt einem Anti-Effekt ersetzt Du den jeweiligen Krankheits-Effekt temporär mit einem Alternativ-Effekt
3. ja, Du kannst einen Effekt machen "Giftimmunität" und musst dann bei allen bestehenden Giften ein onAdd-Skript erstellen, wo Du auf Vorhandensein der Immunität abfragst und nur wenn nicht der Gifteffekt auch ausgelöst wird.

[quote='DJ_rainbow','index.php?page=Thread&postID=114209#post114209']Gibt es eine Möglichkeit, einen neuen Verwendungstyp einzuführen? Beim Lotusstaub z. B. kommt die Schadenswirkung nach dem Einatmen, essen und trinken dürften hier nicht möglich sein.[/quote]Ja, kann man. Ähnlich wie bei dem Lesen der Bücher kannst Du einen selbst-benannten Knopf definieren, der dann ein Skript aufruft.


So erstmal in Kurzform. Wenn nicht verständlich ruhig weiter fragen :)

#5
[quote='Mordbrenner','index.php?page=Thread&postID=114222#post114222']So erstmal in Kurzform.[/quote]
DJ_rainbow, wie du siehst, hast du dir eine komplexe Sache zum Programmieren ausgesucht. Das wird bestimmt nicht ganz einfach zu Beginn, das alles zu berücksichtigen und umzusetzen. Zudem du solche Sachen im Spiel auch genau austesten solltest. Aber wie Mordbrenner sagt, bei Problemen einfach fragen, und zur Not nach Alternativlösungen suchen. :)

#6
Nun, mein Talentwert in Programmieren liegt ja nicht bei -19. :D

Wenn ich auch beruflich nur quick & dirty in Excel VBA programmiere, so erleichtert es doch manches andere - insbesondere das Erkennen von vorhandenen Zusammenhängen und deren Adaption. Aber was ich nicht erkennen kann, weil es ganz oder teilweise hardcoded ist, muss ich eben fragen...

#7
Jetzt auch noch mal eine generelle Frage zu den Heilkundetalenten. Bei der Diskussion um den Kräuterbeutel habe ich verstanden, dass die hardcoded sind. Lassen sich denn für einzelne Kräuter / Produkte probenunterstützende Wirkungen (so wie sie ja für Wirsel bei HKW schon drin sind) per Mod machen?

Beispiel Olginwurz (zweiter Punkt):
Einnahme: Pro eingenommener Portion wird
- der Intervall eines Giftes um 1 gesenkt und
- bei Anwendung von Heilkunde Gift wird die Probe um 1 Punkt pro vorhandener Olginwurz erleichtert (automatischer Verbrauch im Inventar wie bei den Heilkräutern bei Heilkunde Wunden).

Der erste Punkt dürfte machbar sein (Verringerung Wirkungsdauer).

#8
[quote='DJ_rainbow','index.php?page=Thread&postID=114301#post114301']- der Intervall eines Giftes um 1 gesenkt und
- bei Anwendung von Heilkunde Gift wird die Probe um 1 Punkt pro vorhandener Olginwurz erleichtert (automatischer Verbrauch im Inventar wie bei den Heilkräutern bei Heilkunde Wunden).[/quote]
ersteres muss man dann über aktuellen Effekt auslesen und neuen Effekt setzen o.ä. machen
zweiteres geht vielleicht in den globalsettings, wobei es aktuell keine heilbaren Gifte gibt, da die ja immer nur im Kampf wirken:
[spoiler][/spoiler]

#9
[quote='DJ_rainbow','index.php?page=Thread&postID=114301#post114301']- bei Anwendung von Heilkunde Gift[/quote]
Tja, bei Heilkunde Gift muss ich dich leider enttäuschen, denn Heilkunde Gift ist im Spiel noch nicht implementiert und zwar aus dem Grund, den Mordbrenner gesagt hat. Es gibt eben nur ein Gift, wo sich Heilkunde Gift lohnen würde, da ansonsten alle Giftwirkungen am Ende des Kampfes aufgehoben werden. D.h., es gab nicht genügend Situationen um Heilkunde Gift einzubinden und letztendlich wurde es dann wohl vergessen. Ich habe das nämlich an der einen Stelle getestet gehabt, wo man außerhalb eines Kampfes vergiftet werden kann, und das ist Gorahs Truhengift. Chris weiß darüber schon bescheid.

Soll heißen, mit Heilkunde Gift kannst du zurzeit nichts sinnvolles machen, was das Anwenden von Heilkunde Gift im Lager/Herberge/etc. angeht. Wenn du die Möglichkeit anklickst, passiert einfach nichts.

#10
Ok, dann brauch ich da nicht lange zu probieren, danke für die Info!

Dann guck ich mal, dass ich zumindest die anderen Effekte hinterlegt bekomme.

#11
Neue Frage: Ab wann ist man denn wirklich tot in SchickHD?

Hintergrund ist das Shurinknollengift:
Wirkung: Dieses hinterhältige Gift wirkt zwar langsam doch fast immer tödlich. Die Wirkung setzt nach 6 KR ein (eigentlich dauert es viel länger, aber dann wäre es für Schick HD unrelevant). Pro Intervall verursacht es 1W6 SP und senkt GE, KK und KO um einen Punkt. Die Wirkung endet nicht (!) sondern geht bis zum Tod oder Giftheilung bzw. Klarum Purum. Das Opfer bemerkt die Wirkung meist erst dann, wenn es wie ein schlaffer, leerer Sack zusammenbricht (hier vielleicht eine Anzeigeverzögerung des Vergiftungssymbols das erst nach 5 Intervallen oder so erscheint.

Da bei dieser Wirkung normale FollowUps nicht wirklich Sinn machen, dachte ich an eine rekursive Wirkung, die ihr eigens FollowUp ist. Nur muss die dann ja auch irgendwann abgebrochen werden...

Tritt denn der Tod automatisch ein, kann ich das in einer Form abrufen, dass die Function dann heißt "Wenn tot, dann Vergiftung raus, sonst Schaden"?

#12
Und schon wieder eine, diesmal zum Schlachtfeldfieber. Im Code heißt es:

Code: Alles auswählen

	
		sickness
		sick
		8
		-5
		-5
		-5
		true
		= 7 ) {
		if( rollDice("1W20") = 7, passiert das eine.
* Solange Restdauer > 2 und  2, kommt ongoing.
5. Wie wirkt "anotherdamage, 24" generell?

#13
[quote='DJ_rainbow','index.php?page=Thread&postID=114380#post114380']Tritt denn der Tod automatisch ein, kann ich das in einer Form abrufen, dass die Function dann heißt "Wenn tot, dann Vergiftung raus, sonst Schaden"?[/quote][quote='DJ_rainbow','index.php?page=Thread&postID=114380#post114380']Neue Frage: Ab wann ist man denn wirklich tot in SchickHD?[/quote]Ab 5 LE ohnmächtig, ab 0 sterbend und ab -10 oder -20 oder so dann tot. Beim tot werden auch automatisch alle Effekte entfernt.

[quote='DJ_rainbow','index.php?page=Thread&postID=114381#post114381']Mir geht's insbesondere um "duration", das verstehe ich hier noch nicht ganz.
1. In der Effect-Definition ist duration = 217 Std., das ist klar.
2. Aber wie ist var duration = 0 dirct am Anfang des Script zu verstehen? Ist das der Startwert zum Abarbeiten der Wirkung? Also von duration = 0 bis 217 mache...?
3. Wie ist das duration = 0 in der OnAdd Function zu verstehen?
4. Danach verstehe ich es wie folgt:
* Solange die Restdauer (ermittelt aus 217 Stunden - verstrichener Zeit seit Ausbrauch) >= 7, passiert das eine.
* Solange Restdauer > 2 und 2, kommt ongoing.
5. Wie wirkt "anotherdamage, 24" generell?[/quote]2. duration ist hier nur eine Variable für das Skript danach, die könnte auch "Peter" heißen.
3. Bei oAdd wird die Variable auf 0 gesetzt
4.nein, duration ist die Variable, wenn die >7 ist, kann es passieren, dass man stirbt.
bei jedem "anotherdamage" (also alle 24h) wird die Vaiable 1 hochgezählt (duration++)
5. Im onAdd wird definiert, dass der Effekt alle 24h die function "anotherdamage" aufruft. In dieser wird dann ja abhängig von der duration Schade und Text ausgelöst und die duration 1 hochgezählt.

#14
[quote='Mordbrenner','index.php?page=Thread&postID=114391#post114391']Ab 5 LE ohnmächtig, ab 0 sterbend und ab -10 oder -20 oder so dann tot. Beim tot werden auch automatisch alle Effekte entfernt.[/quote]
Ich meine mal gelesen zu haben, das es durch "LE 0 - KO" festgelegt wird, wann der Held letztendlich stirbt. Aber ob das auch stimmt, kann ich nicht sagen. Also bei KO 14 würde der Held bei -14 LE sterben.

#15
Genau. Oder als es noch keine KO gab war es -KK

Aber was genau heißt denn -10 ODER -20? Was trifft denn nun zu? Oder wird hier noch zwischen Klassen unterschieden?
Bild

#16
[quote='Das Schwarze Auge','index.php?page=Thread&postID=114395#post114395']Aber was genau heißt denn -10 ODER -20? Was trifft denn nun zu? Oder wird hier noch zwischen Klassen unterschieden?[/quote]
Das ich es aus dem Kopf nicht weiß :) Vielleicht stimmt auch Lares' Aussage...

#17
Hier mal mein erster Versuch, den reduzierten Schadenswurf aufgrund der Belmart-Immunität umzusetzen (am Beispiel Tollwut):

Code: Alles auswählen

	function dodamage() {
				
		if( getCharEffect("poison_immune" ) ) { 
			var mind = 3;
		} 
		else {
			var mind = 0;
		}
						
		if( day == 1 ) {
			dealDamage({"amount":"1W6"-mind});
		} else if( day == 2 ) {
			dealDamage({"amount":"1W6+2"-mind});
		} else if( day == 3 ) {
			dealDamage({"amount":"2W6+2"-mind});
		} else {
			dealDamage({"amount":"3W6+2"-mind});
			var neweffect = getEffect("KK") - (day - 3);
			if( neweffect + getCharAttribute("KK",1) = 16 ) {
			dealDamage({"amount":999,"reason":"Tollwut Wurf "+dieroll});
			showMessage( getLangString( "sickness_tollwut_dead", [shortname] ) );
			return;
					}
		}
		if( day == duration ) {
			showMessage( getLangString( "sickness_general_healing", [shortname] ) );
			removeEffect({"which":"tollwut"});
			addEffect({"which":"tollwut_immune"});
			dealPermanentDamage("KK",-1);
		} else {
			showMessage( getLangString( "sickness_general_ongoing", [shortname] ) );
		}
	}
Eigentlich nichts anderes, als eine Variable "mind" mit einem Wert belegt (Effekt gesetzt => 3, Effekt nicht gesetzt => 0), die alle Schadenswürfe auf LE um "mind" reduziert. Würde das - unabhängig von der Frage, was passiert, wenn bei 1W6 - 3 was Negatives rauskommt - erst mal generell funktionieren?

#18
ich bin mir nicht sicher, ob

Code: Alles auswählen

dealDamage({"amount":"1W6"-mind})
funktioniert, da hier ein Wert in "" noch mit einer Variable verrechnet wird. Eventuell müsste man das als extra-Variabel in eine vorgelagerte Zeile auslagern.
Kann aber auch sein, dass es klappt.

Ansonsten kannst Du das mit dem kleiner Null ja auch über ne extra Zeile machen:

Code: Alles auswählen

schaden= Math.max(rollrandom(1,6)-mind, 0);

#19
Zumindest die Schadensreduktion funktioniert so.

Eingestellt zu Testzwecken war folgendes:
- Getrockneter Belmart - Immunität Duration -1, Immunität bei Gerbod, nicht bei Gurbosch.
- Tollwut_infection - Duration 1
- Schaden bei Tollwut wie folgt:

Code: Alles auswählen

				if( day == 1 ) {
					dealDamage({"amount":3});
				} else if( day == 2 ) {
					dealDamage({"amount":6 - mind});
				} else if( day == 3 ) {
					dealDamage({"amount":9 - mind});
				} else {
Der Screenshot zeigt den zweiten Schaden, der erste war bei beiden jeweils 3!
Zuletzt geändert von Praiodan am 27. Aug 2015, 12:51, insgesamt 1-mal geändert.
Dateianhänge
nlthd_screenshot_018.png
nlthd_screenshot_018.png (678.2 KiB) 1375 mal betrachtet

#20
Schon wieder eine Frage zur Tollwut. Im Code heißt es u.a.:

Code: Alles auswählen

	
		sickness
		sick
		8
		true
		0
		0
Was bewirkt denn hier der mod key auf KK?

Weiter heißt es im Code:

Code: Alles auswählen

<![CDATA[
		var neweffect = getEffect("KK") - (day - 3);
		if( neweffect + getCharAttribute("KK",1) < 0 )
		neweffect = -getCharAttribute("KK",1);
		setEffect("KK", neweffect);

Was bewirkt das denn?

#21
[quote='DJ_rainbow','index.php?page=Thread&postID=114471#post114471']Schon wieder eine Frage zur Tollwut.[/quote]
Mordbrenner wird dir das gleich bestimmt genauer beschreiben können oder das widerlegen/bestätigen, was ich jetzt in den Spoiler packe. Im Spoiler steht der Krankheitsverlauf von Tollwut, den ich aus der Komplettlösung habe. Vielleicht kannst du damit schon etwas anfangen und so die Sachen besser zuordnen.

[spoiler]Krankheitsverlauf: Solange der Held die Tollwut hat, werden ihm beim Talent „Sinnesschärfe“ 3 Punkte abgezogen. Zudem kann er bei einer Rast nicht mehr regenerieren. Am 1. Tag erleidet der Kranke 1W6 Schadenspunkte, am 2. Tag 1W6+2 Schadenspunkte, am 3 Tag 2W6+2 Schadenspunkte und ab dem 4. Tag immer 3W6+2 Schadenspunkte. Die Krankheit kann 14 bis 24 Tage andauern. Ab dem 3. Tag wird beim Kranken pro Tag die Körperkraft um einen Punkt gesenkt. Fällt dann die Körperkraft während der Krankheitsdauer auf 0, so besteht eine 25% Chance, das er stirbt.
Überlebt der Kranke, so wird ihm ein permanenter Punkt von seiner Körperkraft abgezogen und er ist von nun an, nach dem Ablauf der Krankheit, immun gegen Tollwut.
[/spoiler]

#23
Und wenn ich jetzt an diesen Stellen hier meinen "Krankheitsabzügeverhindern"-Effekt prüfe, sollte doch nichts passieren, wenn der Effekt gesetzt ist:

Code: Alles auswählen

					
		if( getCharEffect("sickness_reductionreverse" ) ) { 
			// do nothing
		} else {
			setEffect("KK", neweffect);
		}
		day++;
		if( getCharEffect("sickness_reductionreverse" ) ) { 
			// do nothing
		} else {				
			setEffect("sinnensch",getEffect("sinnensch")-3);
		}

#24
[quote='DJ_rainbow','index.php?page=Thread&postID=114471#post114471']Was bewirkt denn hier der mod key auf KK?[/quote]
nichts, da er hier 0 ist. Es werden also 0 Punkte zu KK addiert bzw. Abgezogen. Wird aber vielleicht für den code-Teil unten gebraucht.

Zum code: Der aktuelle Abzug auf KK wird ausgelesen, dann weiter angehoben und al sneuer Effekt gesetzt (zumindest solange KK noch >0).

Was mich wundert: Der code müsste am 4. Tag 1KK abziehen, am 5. Tag dann 2 WEITERE Punkte und am 6. Tag 3 weitere Punkte (also schon insgesamt um 6 Punkte) usw. Das ist etwas abweichend zu Lares Beschreibung.
Hmmm, außerdem müsste es an Tag 1 und 2 sogar Boni geben.
Seltsam, vielleicht interpretiere ich den code auch falsch...

Edit: ok, der Bonus ist zumindest mal nicht vorhanden, weil da noch ne if-Abfrage davor ist...

#25
[quote='DJ_rainbow','index.php?page=Thread&postID=114475#post114475']Auch wenn die KK-Geschichte ebenfalls erst am 4. Tag losgeht, so jedenfalls der Code.[/quote]
Da hast du recht. Ein Tippfehler in der Lösung. Ich habe es direkt korrigiert. :)

#26
2ter Beitrag in Folge.

[quote='Mordbrenner','index.php?page=Thread&postID=114480#post114480']Seltsam, vielleicht interpretiere ich den code auch falsch...[/quote]
Vielleicht auch nicht und die Beschreibung in der Lösung ist falsch.

Ich denke DJ_rainbow, das du das praktisch testen musst. Also im Spiel, um Klarheit über die Abzüge zu bekommen.

#28
Eigentlich müsste nach DSA4.1 das Talent Sinnenschärfe PRO Krankheitstag um 3 Punkte fallen, nicht nur einmal. Und wenn man die Krankheit überlebt sinkt die KK permanent um einen Punkt und die Sinnenschärfe permanent um 1W6 Punkte. Und ja, danach ist er dann immun gegen Tollwut.
Bild

#29
[quote='Das Schwarze Auge','index.php?page=Thread&postID=114488#post114488']Und wenn man die Krankheit überlebt sinkt die KK permanent um einen Punkt und die Sinnenschärfe permanent um 1W6 Punkte. Und ja, danach ist er dann immun gegen Tollwut.[/quote]
zumindest der KK-abzug permanent und die immunität ist auch umgesetzt.

#30
[quote='DJ_rainbow','index.php?page=Thread&postID=114487#post114487']...aber ich probiere es mal aus.[/quote]
Gib bescheid, was rauskommt. :)
Antworten

Zurück zu „Mod: Botanica Aventurica“