|
-
Manaregneration
Wie kann ich , den Helden nen Manareg einbauen den er schon von Anfang an besitzt , also nicht so wie in der Mana Reloaded Mod , was genau muss ich den Scripts den ändern ?
-
ich habe meine mana reg so
ne schleife:
if (mana_reg >0)
[
mana_reg2 = mana_reg2 +1;
};
if (mana_reg2 == 5)
{
NPC (changeAttribute, hero, MANA mana_reg)
mana_reg2=0;
};
beim ersten Dialog mit Xardas musst du dann einfach nur mana_reg = x;
wobei x für Mana steht, der der Held alle 5 Sekunden erhält, somit sind auch regenerationen von über 1 per Sekunde möglich. und es ist einfach durch items die reg zu erhöhen.
wenn du es einfach haben willst, kannst du aber auch einfach im ersten dialog schreiben.
hero.attribute[REGENERATEMANA] = y;
alle y Sekunden erhälst du einen Manapunkt 0 = kein mana
-
Das Thema ist zwar schon ziemlich alt, aber ich habe trotzdem mal eine Frage dazu:
Da ich noch nicht ganz kapiert haben, wann genau die einzelnen Funktionen aufgerufen werden, würde ich gerne wissen, in welche Skriptdatei ich diese Schleife einfügen müsste.
Am liebsten wäre mit eine prozentuale Lösung, gibt es für diesen Zweck eine Funktion, die den maximalen Manawert liefert?
Ich alleine gegen alle Orks? Ein bisschen unfair!
Vielleicht sollte ich mit links kämpfen...
-
Du kannst es in jedes Skript schreiben, das geparst wird. Die Funktion muss von einem (z.B. sekündlichen) Trigger aufgerufen werden. Das Skript ruft dann wieder den Trigger auf, der nach einer Sekunde das Skript aufruft,... (siehe Forumssuche/Wiki Triggerschleifen).
Code:
self.attribute[ATR_MANA_MAX]
liefert das maximale Mana von self.
-
Zu erwähnen wäre, dass self in Triggern NICHT initialisiert ist und man daher mit
Code:
var c_npc slf; slf = Hlp_GetNpc(Meine_Npc_Instanz);
slf.attribute[ATR_MANA_MAX]
arbeiten muss.
-
Danke erstmal für die Antworten.
Das mit dem Trigger habe ich hingekriegt, aber bei prozentualen Lösung hakts noch.
Meine Methode sieht so aus:
Code:
func void MANA_REG ()
{
var float mana_neu;
mana_neu = hero.attribute[ATR_MANA] + hero.attribute[ATR_MANA_MAX] * 2 / 100;
if (Mana_Neu > hero.attribute[ATR_MANA_MAX])
{
hero.attribute[ATR_MANA] = hero.attribute[ATR_MANA_MAX];
};
else
{
hero.attribute[ATR_MANA] = mana_neu;
};
Wld_SendTrigger ("MY_TRIGGER");
};
Ich will dem Spieler jede Sekunde 2% seines maximalen Manas wiedergeben, aber ich habe irgendwo im Syntaxtutorial gelesen, dass man mit floats nicht rechnen kann. Kann man das irgendwie anders Lösen?
Achja, ich bekomme in der Zeile:
"mana_neu = hero.attribute[ATR_MANA] += hero.attribute[ATR_MANA_MAX] * 2 / 100;"
einen Syntaxerror für HERO.ATTRIBUTE
Ich alleine gegen alle Orks? Ein bisschen unfair!
Vielleicht sollte ich mit links kämpfen...
Geändert von Ildorion (12.03.2010 um 11:54 Uhr)
-
Gothic kann man Floats nicht rechnen, "man" schon. In der Editing-FAQ ist im letzten Post eine Übersicht über diverse nützliche Threads verlinkt. Dort wirst du eine Float-Implementierung von Sektenspinner finden.
-
Falls jemand Interesse hat, hier meine Lösung:
Code:
func void MANA_REG ()
{
var int mana_neu; var int d1; var int d2; var int f; var int mana_max;
d1 = mkf (2);
d2 = mkf (100);
f = divf (d1, d2);
mana_max = mkf (hero.attribute[ATR_MANA_MAX]);
mana_neu = hero.attribute[ATR_MANA] + truncf (mulf (mana_max, f));
if (mana_neu <= hero.attribute[ATR_MANA_MAX])
{
hero.attribute[ATR_MANA] = mana_neu;
}
else
{
hero.attribute[ATR_MANA] = hero.attribute[ATR_MANA_MAX];
};
Wld_SendTrigger ("MY_TRIGGER");
};
Der Held bekommt jede Sekunde 2% seines Max Manas wieder.
Grundlage ist die Float-Implementierung von Sektenspinner, mit der man einen prozentualen Anteil des Max Manas berechnen kann
Ich alleine gegen alle Orks? Ein bisschen unfair!
Vielleicht sollte ich mit links kämpfen...
-
Zitat von Ildorion
Falls jemand Interesse hat, hier meine Lösung:
Code:
func void MANA_REG ()
{
var int mana_neu; var int d1; var int d2; var int f; var int mana_max;
d1 = mkf (2);
d2 = mkf (100);
f = divf (d1, d2);
mana_max = mkf (hero.attribute[ATR_MANA_MAX]);
mana_neu = hero.attribute[ATR_MANA] + truncf (mulf (mana_max, f));
if (mana_neu <= hero.attribute[ATR_MANA_MAX])
{
hero.attribute[ATR_MANA] = mana_neu;
}
else
{
hero.attribute[ATR_MANA] = hero.attribute[ATR_MANA_MAX];
};
Wld_SendTrigger ("MY_TRIGGER");
};
Der Held bekommt jede Sekunde 2% seines Max Manas wieder.
Grundlage ist die Float-Implementierung von Sektenspinner, mit der man einen prozentualen Anteil des Max Manas berechnen kann
Sorry für den 7-Jahre-Nekro, aber ich möchte genau diese Sequenz bei mir einfügen, vorzugsweise in eine andere Mod.
Problem: Ich habe absolut keine Ahnung vom Modden. Nada. Ich habe mir das Wiki durchgelesen und bin so weit gekommen:
- habe die Mod, in die ich die Manareg. einfügen möchte, mit VDFS extrahiert
- habe die Sequenz von oben in irgendein bestehendes Skript der mod mithilfe von GothicSourcer am Ende eingefügt
Jetzt weiß ich aber nicht weiter. Wenn ich das richtig verstanden habe, muss ich das Verzeichnis nun irgendwie zurück in eine .mod Datei bringen und an irgendeinem Punkt noch irgendetwas parsen. Keine Ahnung wo und wie aber.
Kann irgendjemand helfen?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|