PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schnee zu bestimmten Uhrzeiten



Sernek
20.08.2013, 01:42
So, wollte in meiner Mod noch folgendes einbauen: Es soll von einer bestimmten Uhrzeit bis zu einer bestimmten Uhrzeit Schnee geben. (Also zb. das es jeden oder jeden 2. Tag von 8 uhr bis 15 uhr schneit oder eben jeden Tag um einer zufälligen Uhrzeit)
Die Frage ist nun: Was muss ich dazu machen? (Es soll aber NIE Regnen)
(Ich weiß das das mal wieder `ne Anfänger Frage ist. Weiß da aber echt nicht weiter...)

König Rhobar123
20.08.2013, 08:19
So, wollte in meiner Mod noch folgendes einbauen: Es soll von einer bestimmten Uhrzeit bis zu einer bestimmten Uhrzeit Schnee geben. (Also zb. das es jeden oder jeden 2. Tag von 8 uhr bis 15 uhr schneit oder eben jeden Tag um einer zufälligen Uhrzeit)
Die Frage ist nun: Was muss ich dazu machen? (Es soll aber NIE Regnen)
(Ich weiß das das mal wieder `ne Anfänger Frage ist. Weiß da aber echt nicht weiter...)

Nicht schlimm , dafür existiert das Forum ja :) Milky-Way hat mal eine Funktion geschrieben die genau das macht was du willst, allerdings kannst du nicht von morgens früh über 12 Uhr hinaus Schnee haben, so musst du eine Uhrzeit zwischen 00,01 (Null Uhr (var int start hr) + 1 Minute (var int start min) und 11,59 (Elf uhr + 59 Minuten (var int end_hr + var int end_min) oder aber zwischen 12,01 und 23,59. Da Schema ist also sehr leicht und sollte dir keine Schwierigkeiten bereiten. Für die Funktion benötigst du allerdings Ikarus. Wie du eine neue Funktion zu behandeln hast dürftest du ja wissen (Eintragen in Gothic.src unter ikarus!). Anschließend rufst du in der Init_Global oder in deiner Init_"Levelname"


StartRain_Time (12,11, 18, 49);

auf. Ergebnis: Regen/Schnee zwischen 12:11 Uhr und 18:49 Uhr. Um in einer bestimmten Zone Schnee anstellle von Regen zu haben musst du endweder das Musik Thema" _NCI_" oder "_NCO_" setzen (OcZoneMusic oder OcZoneMusicDefault). Um trotzdem Musik zu hören kannst du ja mit "Priority" von den Musikzonen arbeiten.



func void StartRain_Time (var int start_hr, var int start_min, var int end_hr, var int end_min) {
/* Globale Instanzen initialisieren: */
MEM_InitGlobalInst(); /* Hierrunter fällt auch der Skycontroller */

/* Gothic Tage sind um 12 Stunden verschoben, 0 = 12 Uhr, 1 = 12 Uhr des nächtes Tags */
start_hr = (start_hr + 12) % 24;
end_hr = (end_hr + 12) % 24;

if (start_hr > end_hr) {
MEM_Warn ("StartRain_Time: Regen um 12 Uhr mittags ist nicht möglich!");
return;
};

/* 24 Stunden auf Bereich 0 bis 1 runterskalieren (float) */
var int start_float; var int end_float;
start_float = divf(mkf(start_hr*60 + start_min), mkf(24*60));
end_float = divf(mkf(end_hr *60 + end_min) , mkf(24*60));
/* Ich rechne hier zunächst die Uhrzeit in vergangene Minuten
und dann als Anteil eines ganzen Tages aus und addiere anschließend
noch den Anteil eines halben Tages (1/2), da die Floats für den Regen
zwischen 12:00 Uhr = 0 und 12:00 Uhr am nächsten Tag = 1 liegen */

/* Start zur Startzeit*/
MEM_SkyController.rainFX_timeStartRain = start_float;
/* Ende zur Endzeit */
MEM_SkyController.rainFX_timeStopRain = end_float;

MEM_SkyController.rainFX_renderLightning = TRUE;

/* Ergebnis: Regen zur gewünschten Zeit! (es sei denn man ist in einer Zone
in der es schneit, dann gibt es Schnee) */
};




Grüße Dennis

Milky-Way
20.08.2013, 09:32
Es gibt im Forum auch eine Funktion, die für Schnee statt Regen sorgt, auch ohne Musikzone.

Sernek
20.08.2013, 10:12
Für die Funktion benötigst du allerdings Ikarus.

Das ist das nächste problem (Auch wenn das jetzt nicht wirklich zum Thema gehört :D)
Ich wollte eigentlich schon vor sehr langer Zeit mal mit Ikarus arbeiten, hab aber einfach nicht geschafft Ikarus eingebaut zu bekommen. Hab auch im Forum keine Anleitung gefunden, wie man Ikarus richtig einbaut :(

Milky-Way
20.08.2013, 10:27
Im Download im Thema:
http://forum.worldofplayers.de/forum/threads/969446-Skriptpaket-Ikarus-3
ist eine Readme.txt in der das beschrieben ist.

Sernek
20.08.2013, 11:31
(Auch wenn das jetzt wirklich nicht zum Thema gehört :D)

Ich hab versucht das Manaskript von Lehona (Das die Manabar dauerhaft angezeigt wird) einzubauen. (VOrher natürlich VERSUCHT :D Ikarus einzubauen) aber es wird ingame einfach nichts angezeigt. (Also die Manabar)

Hier mal meine Gothic.src einträge:

STORY\EngineClasses_G2\*.d
STORY\Ikarus.d
STORY\Ikarus_Const_G2.d
STORY\Manabar.d

Und das hier in der Startup:

func void INIT_Oldworld_4 ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();
ShowManabar(true);
MEM_InitAll();

INIT_SUB_Oldworld_4();
};

König Rhobar123
20.08.2013, 11:50
(Auch wenn das jetzt wirklich nicht zum Thema gehört :D)

Ich hab versucht das Manaskript von Lehona (Das die Manabar dauerhaft angezeigt wird) einzubauen. (VOrher natürlich VERSUCHT :D Ikarus einzubauen) aber es wird ingame einfach nichts angezeigt. (Also die Manabar)

Hier mal meine Gothic.src einträge:

STORY\EngineClasses_G2\*.d
STORY\Ikarus.d
STORY\Ikarus_Const_G2.d
STORY\Manabar.d

Und das hier in der Startup:

func void INIT_Oldworld_4 ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();
ShowManabar(true);
MEM_InitAll();

INIT_SUB_Oldworld_4();
};


Ich würde Ikarus direkt unter Constanst.d und Classes.d parsen und darunter deine Manabar. Und deine Funktion sollte in der Init_Global aufgerufen werden.

Zitat Lehona:

Nach jedem Neustart von Gothic muss die Funktion erneut aufgerufen werden, daher sollte man sie wohl in die Init_Global() eintragen.

Sernek
20.08.2013, 11:58
Ich würde Ikarus direkt unter Constanst.d und Classes.d parsen und darunter deine Manabar. Und deine Funktion sollte in der Init_Global aufgerufen werden.

Zitat Lehona:

Nach jedem Neustart von Gothic muss die Funktion erneut aufgerufen werden, daher sollte man sie wohl in die Init_Global() eintragen.

Das musst du mir jetzt bitte mal genauer erklären (Sorry, Anfänger im Gebiet "Ikarus") :D

Ich muss in der Classes.d also:


VAR INT MEM_InitAll();
VAR INT ShowManabar(true)

eintragen und in der Constants.d:


const int MEM_InitAll();
ShowManabar(true)

Oder wie jetzt?

Milky-Way
20.08.2013, 11:58
MEM_InitAll würde ich vor der Manabar-Funktion aufrufen.

Lehona
20.08.2013, 12:03
Ist schon richtig so wie in Post #6, nur rufe MEM_InitAll() bitte vor ShowManabar() auf (und beides in INIT_Global(), nicht woanders).

König Rhobar123
20.08.2013, 13:51
Das musst du mir jetzt bitte mal genauer erklären (Sorry, Anfänger im Gebiet "Ikarus") :D

Ich muss in der Classes.d also:


VAR INT MEM_InitAll();
VAR INT ShowManabar(true)

eintragen und in der Constants.d:


const int MEM_InitAll();
ShowManabar(true)

Oder wie jetzt?



Ich habe nicht gesagt das du in den Dateien etwas eintragen sollst, du sollt in der Gothic.src direkt die Ikarus Sachen unter Classes.d und Constants.d setzen. Außerdem glaube ich wird MEM_InitAll (); doch automatisch von Ikarus ausgeführt, oder? Also nochmal zusammenfassend:

1: Ikarus in der Gothic.src parsen (am besten unter constants.d und classes.d)
2: In der Gothic.src unter Ikarus deine Manabar Funktion eintragen
3: In der Startup.d setzt du sicherheitshalber in der Init_Global () MEM_InitAll (); ein und anschließend ShowManabar(1);

Lehona
20.08.2013, 15:49
Ikarus verlässt sich seit einiger Zeit darauf, dass MEM_InitAll() aufgerufen wurde, damit die Funktionen schneller sind.

König Rhobar123
20.08.2013, 16:24
Ikarus verlässt sich seit einiger Zeit darauf, dass MEM_InitAll() aufgerufen wurde, damit die Funktionen schneller sind.


Und wieder was dazugelernt, gut zu wissen. Danke :)

Sernek
23.08.2013, 12:23
So, hab das ganze jetzt mal richtig (?) eingebaut, aber erhalte jetzt beim Start von Gothic 2 den Fehler:"Syntax error : OCNPC ( line 304 ) ...."
Nach ZSpy liegt der Fehler angeblich in der Datei: "Ikarus.d" (Was aber, denk ich mal, nicht sein kann ;))

Hier nochmal das von der Gothic SRC:


_INTERN\CONSTANTS.D
_INTERN\CLASSES.D

STORY\Ikarus.d
STORY\Manabar.d
STORY\Ikarus_Const_G2.d
STORY\EngineClasses_G2\Misc.d
STORY\EngineClasses_G2\oCAiHuman.d
STORY\EngineClasses_G2\oCInfoManager.d
STORY\EngineClasses_G2\oCItem.d
STORY\EngineClasses_G2\oCMob.d
STORY\EngineClasses_G2\oCNpc.d
STORY\EngineClasses_G2\oCZoneMusic.d
STORY\EngineClasses_G2\zCCamera.d
STORY\EngineClasses_G2\zCConsole.d
STORY\EngineClasses_G2\zCMenu.d
STORY\EngineClasses_G2\zCMesh.d
STORY\EngineClasses_G2\zCOption.d
STORY\EngineClasses_G2\zCParser.d
STORY\EngineClasses_G2\zCSkyController.d
STORY\EngineClasses_G2\zCTexture.d
STORY\EngineClasses_G2\zCTrigger.d
STORY\EngineClasses_G2\zCWaynet.d
STORY\EngineClasses_G2\zCWorld.d
STORY\EngineClasses_G2\zCZoneZFog.d

Milky-Way
23.08.2013, 12:27
Lies dir bitte die readme.txt durch, die Ikarus beigefügt ist.

Sernek
23.08.2013, 12:44
Lies dir bitte die readme.txt durch, die Ikarus beigefügt ist.

OMG :eek: Ich hab`s geschafft. Auch die Manabar wird jetzt angezeigt (Ich hoffe der Rest funzt jetzt auch noch :D)
Vielen Dank nochmal an alle :gratz