ein chmod +x ./file sollte für derartiges immer genügen
Und sicherstellen, dass der ausführende Nutzer auch die Rechte drauf hat (ggf. mit sudo). Am Besten aufs ganze ArmA 3 Verzeichnis falls nicht bereits vorhanden.
ein chmod +x ./file sollte für derartiges immer genügen
Und sicherstellen, dass der ausführende Nutzer auch die Rechte drauf hat (ggf. mit sudo). Am Besten aufs ganze ArmA 3 Verzeichnis falls nicht bereits vorhanden.
Waren die Fahrzeuge stärker beschädigt?
Habe in Erinnerung das es eine fn_cleanup.sqf bzw. cleanup.sqf gibt die alle 3 Minuten durchläuft und Fahrzeuge entfernt.
Ansonsten gibt es in ArmA Vanilla noch die Einstellungen
Ggf. ist das auch dein Problem, das betrifft dann aber auch wirklich nur zerstörte Fahrzeuge.
Sonst wüsste ich nicht wo es her kommen könnte.
In ArmA 3 Tools gerade mal 2 Stunden
In ArmA 3 sind es 994 Stunden
In ArmA 2 sind es 3333 Stunden
Da komme ich ja noch relativ gut davon.
Aaaah, verstehe. Ja, gut. Hatte ich früher auch so gemacht. Aber ich will das es absolut unmöglich ist an Vermögen ohne eine entsprechende Transaktion zu kommen.
Bei deinem Beispiel kann man noch immer einen Geldbetrag X in die Spielerdaten ercheaten, bei einer bestimmten Spieleranzahl & Aktivität wird es dann auch für den Support unübersichtlich.
Man kann drüber streiten, in der Tabelle des Nutzers habe ich auch Felder für Bank & Cash - mit dem Unterschied das dessen Werte nur über die Transaktionen gesetzt werden können.
Zudem Update ich diese Felder, anders als Ihr, nicht bei jedem Verkauf das wäre bei "100k+ Transaktionen und 500-1000 pro Person" (wie du so schön sagst) in der Tat eine unnötige Belastung.
Stattdessen werden diese beim Abruf der Spielerdaten aktualisiert - über (aus Sicherheitsgründen) fest Vordefinierte Routinen & Funktionen.
Das ganze geht selbst mit vielen tausenden, gar zehntausenden Einträgen problemlos wenn man sich nur ein bisschen mit Datenbankoptimierung auskennt - und wie gesagt, notfalls kann man die ganz alten immer zusammenfassen und hat wieder viel Luft. Von der API her: die Entlastet zusätzlich durch einen weiteren Cache und Datenansammlungen. Dank dem neuen .NET Core ist die Anzahl der Abfragen die die API handeln kann auch mehr als genug um es mit mehreren ArmA Servern und ggf. dritten Tools aufzunehmen.
Vom Aufwand her finde ich es auch wesentlich angenehmer wenn alles in der Datenbank liegt und man dessen Möglichkeiten zur Auswertung nutzen kann (dafür existiert Sie ja). Bei mir kommen Informationen von mehreren Servern, Maps, Webseite, usw. zusammen, da helfen keine einfachen Logs wo das meiste untergeht oder wo es nur für den Support einsehbar ist. Vor allem wenn externe Server von dritten im Spiel sind - da müssen neue, besser verwertbare, Lösungen her wenn man einen Überblick behalten möchte. Die Performance Gewinnung durch deine Methode (nur ein Wert im Nutzer & Log nebenbei) ist minimal und steht zu keinem Verhältnis gegenüber dem Nutzen wenn alles beisammen liegt.
Bei mir können so z.B. auch die höheren Beamten von "Ermittlungsbehörden" [natürlich nicht die in RL] (z.B. für Beweissicherung, illegale Transaktionen im RP Sinn ist nochmal anders gelöst, aber auch als zusätzliches Auge für den Support) und die Spieler selber Ihre Finanztransaktionen auf der Webseite einsehen. Ein nettes Feature wie ich finde.
TL;DR: Deine Methode ist okay, am bequemsten, wird auch von den meisten Servern so gemacht - aber für mich ist Sie keine Option mehr
Widerspricht jeglichem Datenbankprinzip Daten duplicate zu speichern, dann lieber wie wir es machen eine Wert speichern und jede Transaktion loggen, Kommt aufs selbe raus, spart Arbeit und Performance.
???? verstehe nicht was du meinst
Wenn Spieler A das Auto in seinem Shop für $10.000 verkauft, Spieler B das gleiche Auto in seinem Shop für $15.000 und Spieler C das Auto wieder für $10.000 (+ Nationsabhängige Steuern) wie soll ich dann mit einem Wert auskommen? Das wird ja das reinste durcheinander in der Datenbank. Da habe ich lieber 1 Zeile je Transaktion mit Betrag, Begründung, Steuer, Datum, Von wo und wohin. Wobei die letzten 4 automatisch von API / DB gesetzt werden können und dem ArmA Server nicht weiter kümmern müssen.
Aber gut, wir schweifen vom Thema ab.
EDIT: Und ja, ich arbeite mit Beziehungen & Routinen.
Das ist performant bei 100k+ Transaktionen und 500-1000 pro Person ? Allein die Datenmengen die da übers Network laufen sind ja extrem...
a) Man kann Transaktionen jederzeit auf Datenbankebene zusammenfassen bzw. zusammenrechnen. Wenn man einzelne Transaktionen noch beibehalten will (z.B. weil Sie verdächtig sind), werden die halt entsprechen markiert. Wo ist das Problem?
b) Caching und Stacking
c) Der Client bzw. ArmA-Server muss nicht für jeden Mist eine Antwort von der API/DB bekommen/abwarten. Noch weniger muss der ArmA Server dies immer an den Client weitergeben.
d) Die Synchronisation erfolgt halt einfach einmalig beim einloggen und wird separat lokal auf dem Client mitgetrackt. Was lokal läuft kann sowieso IMMER! manipuliert werden, da gibts keinen 100%tig sicheren weg das zu verhindern - aber das ist dann dem Server / der Datenbank egal und die Rechnung für die Manipulation gibt es bei der nächsten Synchro mit dem Server.
Will jetzt nicht zu tief ins Detail gehen aber es funktioniert, sogar recht Performance schonend, hab mir schon seit einer langen Zeit den Kopf über diese Problematik zerbrochen.
Zwar will ich das ganze auch vom ArmA Server wegbekommen (bin selber sehr Empfindlich wenn es um Performance geht) aber da macht mir BattlEye noch einen Strich durch die Rechnung.
Es gibt viele Wege:
- BattlEye (sehr mächtig wenn richtig konfiguriert)
- Mehr auf den Server umlagern, davon rate ich aber aus Performance Gründen dringenst ab.
- Für deinen Fall: Statt mit einfachen nummerischen Feldern, lieber mit Transaktionen arbeiten. Guthaben wird dann Anhand der Differenz der Transaktionen berechnet. Dadurch ist es so gut wie unmöglich sich Geld usw. zu ercheaten ohne entdeckt zu werden. Zudem kann man jederzeit jede Zahlung rückgängig machen ( siehe ArmiLife als Beispiel: https://armitxes.net/Projects/ArmiLife/ ).
- Wenn du ein Framework verwendest (wie AltisLife, Exile, etc) nimm einen Editor wie Sublime oder Visual Studio Code und suche & ersetze kritische Variablen mit einem neuen Namen.
- compileFinal ist dein Freund
- Selbst aktiv werden. Zumindest SQF injections lassen sich so leicht abwehren. Einfach mal selbst die neusten Cheats nach Schwachstellen durchleuchten.
- Gesharte Banlisten
- Ingame kontrollmechnismen. Speedhacks, TP hack und manche Spawn cheats haben dann auch keine Chance... dafür muss aber schon die Mission/der MOD von anfang an entsprechend entwickelt worden sein. Sonst gibts false positives
- Was bereits gesagt wurde.
MfG
(ein ex-anticheat Entwickler)