Unterschätze Arma nicht https://community.bistudio.com/wiki/Category:Command_Group:_Math
https://community.bistudio.com/wiki/sqrt
https://community.bistudio.com/wiki/a_%5E_b
Quadrieren könntest du übrigens auch mit a*a, dafür braucht man dann nicht umbedingt einen zusätzlichen Scriptbefehl für
Danke, habe ich Gestern Morgen auch schon bei Google gefunden, Arma hat ja richtig was auf Kasten
Überfordere die Leute nicht Trend und Arithmetisches Mittel reichen - denk doch auch mal an den Otto-Normal-User
Hahahaha, ja die Grenzwerte sind ja nicht zum Farmen gedacht, wobei sie eine gute Übersicht gibt, wie weit der Preis denn vom Durchschnitt abweichen wird. Natürlich auf Basis der letzen Werte gemessen. Jede Minute macht der Server einen Eintrag, den der User sich mit dem "einloggen" holen kann. Ja, wenn du den Börsendialog öffnest, melde ich dich via Script beim Server an, dass du Infos erhalten möchtest ^^. Nur habe ich aktuell ein Problem und zwar möchte ich all diese Dinge temporär lassen, sprich nicht in eine DB hauen, demnach habe ich keinen verlässlichen Zeitstempel in Bezug auf Echtzeit. Ich könnte es natürlich in die DB haun und dann da den Zeitstempel drüber laufen lassen, aber dass muss nun wirklich nicht sein...
Naja lange Rede kurzer Sinn, ich arbeite mit diag_tickTime, nur kann man eine erfasste Zeit mit diag_tickTime nicht von der diag_tickTime abziehen, bzw. kann man schon, nur kommen da verwirrende Ergebnisse raus, mit denen ich nicht mehr arbeiten kann...
Ich möchte nur ungerne ein eigenes Zeitsystem schaffen, weil ich den Server nicht unnötig belasten will...
Also das Menü sieht mittlerweile auch schon wieder etwas anders aus... ist noch etwas kleines hinzugekommen... eine "Spielerei"
Also ich arbeite wie folgt... Hier wird die aktuelle Zeit für einen Trade erfasst ( schon Serverseitig, der Client schickt nur das notwendigste )
{
private _resource = _this select 2;
private _moneySet = _this select 3;
private _trend = _this select 4;
if((isNil "_resource") OR (isNil "_moneySet")) exitWith {};
private _index = -1;
{
_index = _index + 1;
if(_resource isEqualTo (_x select 0)) exitWith {};
} forEach DYNMARKET_sellarraycopy;
private _startValue = (DYNMARKET_sellarraycopy select _index)select 1;
if((isNil "_startValue") or !(_startValue isEqualType 0)) exitWith {};
private _tradeID = 1 + (TRADE_IDs select ((count TRADE_IDs) - 1));
TRADE_IDs pushBack _tradeID;
ACTIVE_TRADES pushBack [(diag_tickTime),[_trader,(owner _trader),_resource,_startValue,_moneySet,_tradeID,_trend]];
diag_log format["### DYNMARKET >> Trade #%7 opened: %1 (%2): %3 $%4 for $%5 trend %6",(name _trader),(getPlayerUID _trader),_resource,_startValue,_moneySet,_trend,_tradeID];
};
Alles anzeigen
Wie man sieht nehme ich die diag_tickTime, wenn ich mit dieser Festgehaltenen Zeit nun im Anschluss rechen/arbeiten möchte, wird diese zur aktuellen Zeit. Ich komme mir dabei extrem verarscht vor, aber gut. Ich habe das mal ausgelesen, dann steht bei der im array z.B. 1200 und die aktuelle diag_tickTime sagt auch 1200. Wobei die aus dem array aber eigentlich zum Zeitpunkt 1100 festgehalten wurde, nur so als Beispiel.
{
_index = _index + 1;
private _startTime = _x select 0;
private _info = _x select 1;
_diff = _startTime - (diag_tickTime);
_diff2 = _diff / 1000 + 300;
_diff3 = round _diff2;
if(_diff3 isEqualTo 0) then {
[3,(_info select 0),(_info select 1),(_info select 2),(_info select 3),(_info select 4),(_info select 5),(_info select 6)] call TON_fnc_updateTrader;
ACTIVE_TRADES deleteAt _index;
diag_log "### DYNMARKET >> calculation heart >> removed index";
} else {
[4,_diff3,(_info select 2),(_info select 6),(_info select 3),(_info select 4)] remoteExec ["life_fnc_update",(_info select 1)];
diag_log format["#%1 %2s",(_info select 5),_diff3];
};
} forEach ACTIVE_TRADES;
Alles anzeigen
nunja, um zusehen, was in dem Array wo sitzt, werft einen Blick in die vorletzte Zeile über der abschließenden geschweiften Klammer... wie man sieht versuche ich hier verzweifelt in unnötig viele Schritten zu verhindern, dass er die Zeit aus dem Array einfach überschreibt. Aber er tut es trotzdem
Ob er sie wirklich überschreibt kann ich nicht sagen, vlt muss ich es mal mit floor probieren statt mit round. Ich habe herausgefunden, dass beim runden das Ergebnis beim Substrahieren 0 ist, hingegen ohne runden aber so klein im Nachkommabereich, dass ich es nicht nutzen kann.
Erläuterung zum Dividieren durch 1000 und addieren mit 300: Ich beschränke den Trade auf 5 Minuten, also 300 Sekunden. Später kann man das vlt. selber einstellen, ist mir dann aber aktuell doch zu komplex. Naja und um von ms auf sec zu kommen muss man die ms durch 1000 teilen
Naja also wie man sieht muss ich mir etwas einfallen lassen. Ich habe mir das ganze als Wochenendprojekt vorgestellt aber dieses Problem hat mich voll und ganz aus der Bahn geworfen.