Posts: 73
Threads: 11
Joined: Dec 2012
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
Posts: 878
Threads: 5
Joined: Feb 2011
Reputation:
5
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.
...................................
Yeah, well. The Dude abides.
Posts: 73
Threads: 11
Joined: Dec 2012
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
Posts: 878
Threads: 5
Joined: Feb 2011
Reputation:
5
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.
...................................
Yeah, well. The Dude abides.
Posts: 73
Threads: 11
Joined: Dec 2012
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
Posts: 201
Threads: 15
Joined: Oct 2013
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.
Posts: 757
Threads: 93
Joined: Oct 2013
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...
Posts: 73
Threads: 11
Joined: Dec 2012
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
Attached Files
Eozera Time.rar (Size: 24.57 KB / Downloads: 15)
Posts: 201
Threads: 15
Joined: Oct 2013
01-27-2014, 11:50 AM
(This post was last modified: 01-27-2014, 12:00 PM by Shaolin2 .)
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
Posts: 73
Threads: 11
Joined: Dec 2012
01-27-2014, 05:39 PM
(This post was last modified: 01-29-2014, 10:42 AM by MAHA .)
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