Benutzer-Werkzeuge

Webseiten-Werkzeuge


Inhaltsverzeichnis

MOBs erweitern

(von Fizzban)

Jeder VOB vom Typ MOBInter (Betten, Labore, Kessel, Bänke, Ambosse etc) hat ein Feld onStateFunc. Trägt man dort z.B. ABC ein, so werden folgende in den Skripten definierte Funktionen aufgerufen, wenn ein Charakter (Spieler und NSCs!) den MOB benutzt und eine bestimmte Situation eintritt:

FUNC VOID ABC_S0()
{
	// Meistens Aufruf, wenn der Charakter aufhört, den MOB zu benutzen
	// (steht von Bett/Bank/Stuhl auf, hört mit dem Schmieden auf)
};

FUNC VOID ABC_S1()
{
	// Meistens Aufruf, sobald der Charakter den MOB benutzt
	// (liegt in Bett, sitzt auf Bank/Stuhl, hämmert auf glühenden Rohlstahl ein)
};

FUNC VOID ABC_S2()
{
	// Unterschiedlich
	// Viele MOBs haben diesen Zustand nicht
};

FUNC VOID ABC_S3()
{
	// siehe S2
};

Wichtig: Funktionsnamen GROSS scheiben!

Sollen die Funktionen nur reagieren, wenn der SC einen MOB benutzt, so geht das mit dieser Abfrage:

	var C_NPC her; 	her = Hlp_GetNpc(PC_Hero); 
	var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
	
	if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) ) 
	{
		// Wird nur ausgeführt, wenn der Spieler/SC den MOB benutzt
	};

Gothic 1

(funktioniert in abgewandelter Form wahrscheinlich auch in G2)

Will man ein Auswahlmenü präsentieren, sobald der Spieler einen Gegenstand benutzt – wie z.B. beim Bett oder beim Amboss/Runentisch/Labor in G2 – so geht dies wie folgt:

An zentraler Stelle

var int mobInUse;

const int MOBINUSE_ANVIL = 1;
const int MOBINUSE_BED = 2;
const int MOBINUSE_PSILAB = 3;

einfügen. Will man weitere/andere MOBs erweitern, einfach passende Konstanten hinzufügen!

Die Datei Sleepabit.d anpassen:

Vor das

Ai_ProcessInfos (her);

in Zeile 39 kommt

mobInUse = MOBINUSE_BED;

Außerdem alle fünf *_Condition-Funktionen nach diesem Schema anpassen:

FUNC INT PC_SleepTime_Midnight_Condition()
{		
        if (mobInUse == MOBINUSE_BED) // DIESE ZEILE EINFÜGEN
        {
		return 1;
        };  // DIESE ZEILE EINFÜGEN
};

Nun die Sleepabit.d kopieren, umbenennen (z.B. in Smithabit.d) und in der neuen Datei folgende Änderungen vornehmen:

* Alle MOBINUSE_BED durch die passende Konstante (z.B. MOBINUSE_ANVIL für Ambosse) ersetzen
* Die Funktion SLEEPABIT_S1 umbennen, z.B. nach SMITHABIT_S1. SMITHABIT käme dann in das onStateFunc-Feld der MOBs.
* PC_Sleep umbenennen (z.B. nach PC_Smith), Parameter und alles außer den ersten beiden Zeilen (die auf JEDEN FALL drin lassen) anpassen.
* Die C_Info-Objekte umbennen und so anpassen, dass die gewünschten Optionen entstehen (es können natürlich auch C_Info-Objekte entfernt oder mehr hinzugefügt werden), in der Info-Funktion dann die im letzten Punkt umbenannte und abgeänderte Funktion aufrufen.

tipps_und_tricks/mobs_erweitern.txt · Zuletzt geändert: 2016/12/31 09:39 von milky-way