Laden...

Kommunikation zw. Spiel (LUA) und C#

Erstellt von Attrachii vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.563 Views
Thema geschlossen
A
Attrachii Themenstarter:in
4 Beiträge seit 2011
vor 13 Jahren
Kommunikation zw. Spiel (LUA) und C#

Hallo Community,

und zwar bin ich gerade dabei ein HilfeTool für ein Computerspiel zu programmieren. Das Spiel besitzt keine externe API mit welcher ich von außen Daten abfragen kann. Dafür besitzt es aber eine Möglichkeit mit LUA-Addons zu programmieren, mit welchen dann über unzählige Methoden auf alle Spielinfos zugegriffen werden kann. Da das HilfeTool zu komplex ist um als LUA-Addon zu fungieren habe ich mich entschlossen das ganze in C# zu programmieren.

Nun brauche ich aber eine Möglichkeit um auf die Spieledaten zu zugreifen:

Als erstes habe ich an eine Textdatei gedacht, in welche das C# Programm einen Befehl schreibt z.B. "GETHEALTH" und das Lua-Addon loopt permanent über diese Datei und schreibt danach die Antwort hinein (währenddessen loopt das C# Programm).
-> Performance = 0

Dann habe ich an MemoryReading gedacht: Das Lua-Addon legt eine Variable mit dem Inhalt "INITIALIZEADDON" an. Das C# Programm durchsucht den Arbeitsspeicher nach dieser Zeichenkette und merkt sich die Speicheradresse. Ab diesem Zeitpunkt würde es wie bei der Methode mit den Textdateien weiter gehen. Blos wie suche ich mit C# den Arbeitsspeicher nach einer Zeichenkette ab? Bestimmte Adressen lesen ist kein Problem aber zu suchen. Keine Ahnung...

Könnt ihr mir bitte einen kleinen Gedächtnisanstoß geben? Andere Möglichkeiten sind auch gerne gesehen 😃

Grüße
Steve

309 Beiträge seit 2008
vor 13 Jahren

Hat LUA nicht eine C-API mit der C-Funktionen aufgerufen werden können?
Damit könntest du dir eine Wrapper-DLL in C schreiben und mit den Interop-Funktionen von C# kannst du dann auf die DLL zugreifen.

Also: LUA <-> C-DLL <-> C# Program

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

A
Attrachii Themenstarter:in
4 Beiträge seit 2011
vor 13 Jahren

Hey,

habe vergessen zu schreiben, dass Blizzard (World of Warcraft) alle LUA-Funktionen die zur Kommunikation verwendet werden können deaktiviert hat. Darunter auch die IO-Funktionen. Deshalb scheidet mein erster Vorschlag mit der Textdatei aus.

Hat noch jemand Ideen? Bzw. weiß jemand wie ich alle Speicheradressen die zur Wow.exe gehören nach einem bestimmten String durchsuche?

Danke!

5.742 Beiträge seit 2007
vor 13 Jahren

habe vergessen zu schreiben, dass Blizzard (World of Warcraft) alle LUA-Funktionen die zur Kommunikation verwendet werden können deaktiviert hat.

Das wird seinen Grund haben.
Vermutlich zählt das als Cheating und ist daher wahrscheinlich auch anhand der Nutzungsbedingungen verboten.

Bzw. weiß jemand wie ich alle Speicheradressen die zur Wow.exe gehören nach einem bestimmten String durchsuche?

... und das wird erst recht nicht erlaubt sein. Wenn so etwas aufliegt, kann mit etwas Pech wohl auch dein Account gesperrt werden.

M
120 Beiträge seit 2009
vor 13 Jahren

Das was du vorhast verstößt gegen die Nutzungsbedingungen, und somit riskierst du und die Benutzer deines Programms einen Account-Ban.

Die Lua-Schnittstelle von WoW stellt Addons alle Funktionen zur Verfügung, die im Rahmen der Nutzungsbedingungen erlaubt sind, bzw. umgekehrt: Was damit nicht möglich ist, ist auch nicht erlaubt. Insbesondere kein (Live-)Zugriff auf das Spiel durch andere Prozesse.

Zum einen gibt es SavedVariables, mit der man z.B. Questdatenbanken ins Spiel bekommt. Das sind Textdateien die beliebig Einstellungen u.ä. speichern können, jedoch immer nur beim Laden des UI ausgelesen werden (und vor dem UI-Neuladen/Logout gespeichert werden).

Zum anderen können Addons über spezielle versteckte Addon-Channel im Spiel miteinander kommunizieren.

Hinweis von herbivore vor 13 Jahren

Das was du vorhast verstößt gegen die Nutzungsbedingungen

Ich kann das zwar nicht abschließend beurteilen, aber die Vermutung halte ich für plausibel. Bittet das Forum nicht um Unterstützung für rechts- bzw vertragswidrige Taten. Sollte dein Vorhaben legal und legitim sein, kannst du das natürlich in einer PM ans Team darlegen.

Thema geschlossen