MMOMinion

Full Version: EorzeaTime
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

Leider hat die API ein Problem mit Berechnungen von Numerischen Variablen größer 8 Zeichen

Beispiel

temp = 99999999

temp = temp + 1

Ergebnis:
temp = 10000000

Wenn man die Variable jetzt wieder um 1 erhöht ist temp immer noch 100000000

Ich habe eine Funktion geschrieben, womit man die Eorzea Zeit auslesen "kann"
leider ist die Variable zu groß z.b. 28602418340

PHP Code:
function EorzeaTime()
    
local ezt1 os.time() * 20.571428571
    local eztime 
string.sub(os.date("!%X",ezt1),1,5)
    return 
eztime
end 

Er Berechnet die Zeit einmalig, kann Sie dann aber nicht mehr Aktualisieren, da die Ausgabe zum Berechnen zu groß ist.

Also versuchte ich die Sache zu kürzen:

PHP Code:
function EorzeaTime()
    
local ezt1 os.time() * 20.571428571 
    local ezt2 
ezt1 - ((os.date("%Y",ezt1) - 1970) * 31536000)
    
local ezt3 ezt2 - ((os.date("%m",ezt2) - 1) * 2678400
    
local ezt4 ezt3 - ((os.date("%d",ezt3) - 1) * 86400
    
local eztime string.sub(os.date("!%X",ezt4),1,5)
    return 
eztime
end 

ezt1 = 28602418340
ezt2 = 30802340
ezt3 = 1339940
ezt4 = 43940

aber auch die zweite Funktion um den String zu kürzen schlägt leider fehl, weil er ja am Anfang die Große Zahl hat (11-12 stellen).

Besteht die Möglichkeit dies Anzupassen oder eine Funktion in die API einzubauen?


MAHA
das hat nichts mit der API zu tun, du verwendest ausschließlich LUA code. Was genau ist denn die Zahl die du da ausrechnest. Ich weiss was ezora time ist, aber wie kommst du auf die Formel und was soll die Zahl darstellen ? os.time() ist das aktuelle Datum in Sekunden seit 1970.
hoi,

ja die Ezora Time ist die Aktuelle Zeit "os.time() * 20.571428571"

z.B.
Aktuelle Zeit:
06:10:4
os.time() = 1390457442

Ezora Zeit:
07:05:49
os.time() * 20.571428571 = 28603695949.675

Diese Zeit brauch man um zu schauen ab wann ich was Farmen kann.

Wenn Du Natürlich einen anderen Weg kennst der Funktioniert, dann nehme ich den gerne :)

MAHA
wie gesagt, du multiplizierst ein Datum , keine Uhrzeit. Das macht nicht wirklich viel Sinn. Auch wenn das Ergebnis vieleicht stimmt ist es nicht verwunderlich das du einen Überlauf bekommst.
jein ich Multipliziere eine Zahl ;)

das Problem ist die Übergabe der Zahl vom LUA Script zur API
Du kannst MAX bis 16777216 berechnen danach ist Schluss.

hier ein kleines Script zum Testen.

PHP Code:
ATest= { }
ATest.lastticks 0
pp  
9999990
pp1 
16777210
--******************************************************************************************************
function 
ATest.ModuleInit()
    
GUI_NewWindow("TEST",417,279,289,135)
    
GUI_NewButton("TEST","+ 1","ATest.ADDI");
    
GUI_NewField("TEST","Zahl","sZahl""Main");
    
GUI_NewField("TEST","Zahl","sZahl1""Main");
    
GUI_SizeWindow("TEST",289,135);
    
GUI_UnFoldGroup("TEST","Main")
    
sZahl pp
    sZahl1 
pp1
end
--******************************************************************************************************
function 
ATest.Addition()
    
sZahl sZahl 1
    sZahl1 
sZahl1 1
end
--******************************************************************************************************
RegisterEventHandler("Module.Initalize",ATest.ModuleInit)
RegisterEventHandler("ATest.ADDI"ATest.Addition

Ich Denke mal das Du in C# Programmierst, und Die Variable in ein Float übergibst?

schau mal hier
Why does a float variable stop incrementing at 16777216


Ich hoffe das Hilft Dir.
Kann Dir aber auch eine Funktion in C# oder VBnet geben um Die Zeit zu Berechnen.

Bin selber von Beruf Anwendungsentwickler und will nur Helfen, denn ich mag eure Arbeit sehr.

MAHA
local time = os.date('*t')

damit bekommst doch glaub eine Tabelle zurück die das Datum und die Zeit schon aufsplittet.
time.hour
time.min
time.sec

damit dürftest du dann rechnen können. notfalls alles wieder auf sec hoch rechnen wenn das für deine Formel dann besser passt.
die OS-Time dürften ja Unix-ticks sein so wie's aussieht, d.h. da ist Datum und Uhrzeit enthalten. Evtl könnte man das Datum vorher rausrechnen, da das ja nicht gebraucht wird...
Hi Ho,
also ich hab noch keine Lösung gefunden, womit ich das Problem umgehen kann.

man muss leider erst die Unix Time Multiplizieren, damit das Ergebnis stimmt.

wenn jemand eine andere Formel kennt nehme ich diese auch :)

Im Anhang die Source und exe (VBNET) für die ausgabe der Eorzea Zeit.

@HansW
kannst Du nicht eine Funktion direkt in die API einbauen dann wäre das Problem erledigt.

Gruss
MAHA
nein bin auch noch auf keine formel gekommen die mit os.date und der reinen echten Uhrzeit arbeitet.
es gibt zwar ne umrechnung wie viel echtzeit Eorzea Zeiten haben
http://ffxiv.gamerescape.com/wiki/Time
aber hatte noch keine zeit darüber zu sinnieren wie man das in LUA umsetzt mit dem was wir haben
trotzdem würde ich HansW bitten es in die API einzubauen
Vieeeelen Dank

Leider funktionierte die LUA Formel am nächsten Tag nicht mehr :(


Gruss MAHA