Hallo zusammen,
ich wollte fragen, ob es möglich ist , die waterplane einer Map per lua zu bewegen(auf/ab), und den Wert dann beim speichen des Spiels abzuspeichern
für Rat bin ich dankbar...
greetz
Hallo zusammen,
ich wollte fragen, ob es möglich ist , die waterplane einer Map per lua zu bewegen(auf/ab), und den Wert dann beim speichen des Spiels abzuspeichern
für Rat bin ich dankbar...
greetz
Hallo,mir kam grad die Erinnerung, dass jemand schonmal diese Frage gestellt hat, um Hochwasser darzustellen. Hab dann mal beim Modhoster nach Hochwasser gesucht und siehe da:
Laut Beschreibung mit Hochwasser-Simulation. Hab die Map aber nicht geladen und daher keine Ahnung ob sich da die waterplane bewegt.
Aber kannst dir ja mal ansehen.
MfG Robert
so und könnte mir mal fix einer erklären in welchem takt function update(dt) aufgerufen wird??
bzw. wie ich es verzögern kann
Update wird meines Wissens einmal pro Frame aufgerufen. Verzögern kannst du das demnach also nur, indem du irgendwie deine FPS runter bekommst. Wenn du aber mit dem dt arbeitest bringt das aber nix, bei 30fps ist das dt von einem Frame doppelt so hoch wie bei 60fps. Dann hilft es nur bei der Berechnung selbst was anzupassen.
achso und mit updateTick oder so??
wäre es damit möglich??
oder mit ähnlichem?
Also ich will das es jede Spielminute Updated
also einfache möglichkeint wäre:
du hast ca60FPS -> 60FPS*60s/min =3600 frames in der minute also:
load:
self.timer = 3600
update:
self.timer = self.timer - dt
if self.timer = 0 then
self.timer = 3600
updateWasser
end;
Vermutungen über die fps anstellen und da dann auch noch mit rumrechnen ist das allerblödeste, was man überhaupt machen kann.
dt ist die vergangene Zeit in ms seit dem letzten Frame. Eine Minute sind 60000ms, eine Stunde 3600000ms. Das sind Werte, wo man mit rechnen kann, weil sie auf jedem Rechner gleich sind. Oder zumindest fast gleich, die Unterschiede sind im unteren ms-Bereich und somit zu vernachlässigen.
Mr. F:
Das funktioniert so nicht. Du wirst den Timer niemals genau auf 0 bekommen, da wird also nie was upgedatet, nur unendlich runter gezählt. Und wenn es funktionieren würde würde der Teil alle 3.6s ausgeführt werden, nicht jede Minute.
Also das mit dem timer würde vllt gehen ,aber wie bekomm ich das mit dem variieren nach Spielzeit Geschwindigkeit hin???
Also wie is dass mit dem Update tick, wann kommt das in welchem Takt??
Und nochmal ne andere Frage: was wird hinter den funktions in klammern angegebenen???
Die Zeitskalierung kann man da ja auch leicht mit einbeziehen. Müsste mit g_currentmission.missionStats.timeScale gehen.
Den Takt von updateTick kenn ich nicht.
Das sind die Parameter, die da angegeben sind.
in was is timescale angegeben??
ist das ein faktor??
Müsste die tatsächliche Zeitskalierung sein. Kann man ja recht schnell mit einem kleinen Script ausprobieren.
g_currentmission.missionStats.timeScale ist die Zeitskalierung und zwar der reine Wert genau so wie er später im Spiel oben rechts steht..
ansonsten, ein Timer mit dt ist schon mal der richtige Weg.. Wenn man 60FPS hat ist dt*60 = 1 Sekunde, wenn man 30FPS hat ist dt*30 = 1 Sekunde und wenn man 15FPS hat ist dt*15 = 1 Sekunde, d.h. damit kann man in Echtzeit zählen.
load()
self.timerTime = 60000 -- 1 min
update()
self.timerTime = self.timerTime - dt
if self.timerTime < 0 then
-- 1 minute um
self.timerTime = 60000
end;
Somit hat man einen ziemlich exakten Timer... Nur weiß ich nicht wirklich wofür du einen Timer bei der Wasserplane brauchst?
Ach ja updateTick() im Singleplayer tickt etwa genau so schnell wie update() nur im MP wesentlich langsamer..
LG
Und kann man Dan auch noch FPS abfragen??
also ich will,dass wenn es regnet dass dann die plane langsam steigt..
und wenn es aufhört soll sie langsam wieder sinken....
Und für das langsam ist der Timer
Schau mal im washable Script da wird der Traktor sauber wenns regnet..
[lua] if g_currentMission.environment.lastRainScale > 0.1 and g_currentMission.environment.timeSinceLastRain < 30 then
self:decreaseDirt(dt);
else
if self:getIsActive() or self.isActive then
self:increaseDirt(dt);
end;
end;
[/lua]
Das in etwa kannst du verwenden.. Die Werte etwas ändern eben und dann entsprechend die Plane aufrufen.. Da brauchst du aber auch keinen Timer, ist überflüssig.
[lua]
load()
self.indexDerWasserplane = Hier den Index der Wasserplane rausfinden
self.wasserYMax = 10;
self.wasserYMin = 0;
self.wasserY = self.wasserYMin
self.speed = 0.001
update()
if g_currentMission.environment.lastRainScale > 0.1 and g_currentMission.environment.timeSinceLastRain < 30 then
self.hochwasser = true;
else
self.hochwasser = false;
end;
if self.hochwasser then
self.wasserY = math.min(self.wasserY + self.speed*dt, self.wasserYMax)
else
self.wasserY = math.max(self.wasserY - self.speed*dt, self.wasserYMin)
end;
setTranslation(self.indexDerWasserplane, 0, self.wasserY, 0)
[/lua]
So in etwa.. Wie schnell das Wasser steigt und sinkt hängt von self.speed ab, dass das Wasser steigt wenns regnet macht der Teil aus dem Washable Script... Quasi.
LG
Und kann man Dan auch noch FPS abfragen??
Kann man sich aus dt errechnen, braucht man aber nicht. Wie ich schon geschrieben habe: man darf niemals Annahmen über die FPS machen oder da mit rum rechnen.
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!