Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 12:56

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Class Initialization & if

Discussion on Class Initialization & if within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
Class Initialization & if

Hey Hou, hab ne Frage

Ich habe eine Funktion gehookt um bestimmte Daten zu "Manipulieren" die Funktion wird bei jedem Monster Kill auf'm Server ausgeführt und sollte d.h schnell und sicher sein natürlich.

Habe einen Vector wo bestimmte Spieler drinnen sind und wo geprüft werden muss ob Sie drinnen sind und was der return Wert ist.

PHP Code:
int __declspec(nakedAsmHookAllotExpFunction()
{
    
CVIPSystem VIP;
    
check true;
    
__asm
    
{
            
PUSHAD    //Save  Register
            
PUSHFD // Save FLAGS ?

            
mov        Expeax
            mov     edx
, [ebp 2Ch// PlayerPointer
            
mov        PlayerPtredx
    
}
    if (
PlayerPtr)
    {
        if ((
VIP.IsinVector(PlayerPtr) == 100) && (check == true) )
        {
            
Exp Exp 1.10;
            
check false;
        }
        if ((
VIP.IsinVector(PlayerPtr) == 200) && (check == true) )
        {
            
Exp Exp 1.20;
            
check false;
        } 
Meine erste Frage : Ist es Sinnvoller CVIPSystem VIP; Global zu machen ? somit wird nicht bei jedem Ausführen aufs neue die Class initialisiert ?
oder würde z.b nen std::auto_ptr auch gut sein ?

Meine zweite Frage: Sind die if so gut gemacht ? habe extra den check drinne damit die vectoren nicht alle durchgelaufen werden müssen ?

oder sollte ich da auf etwas anderes setzen ?
bloodx is offline  
Old 01/17/2015, 17:59   #2
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Ist die Funktion zu langsam?
Schlüsselbein is offline  
Old 01/17/2015, 18:09   #3




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
Quote:
Originally Posted by Schlüsselbein View Post
Ist die Funktion zu langsam?
nein, das Problem besteht bisher nicht.

Aber mir ging es um das Verständniss. OB es Sinnvoller ist die Class nicht jedes Mal zu initialisieren.

oder OB die if methode auf diese Weise schlecht gewählt ist.




vielleicht noch eine Frage da google mir im bezug auf das Thema nicht hilft.

CiritcalSection sind sie Sinnvoll beim Hooken ?

Ich Modifizier ja Daten in Player / Item / Monster etc. Objecten vom Server in meiner DLL - WENN der fall auftritt das 2 drauf zugreifen wollen könnte es zu Problemen kommen oder ?
bloodx is offline  
Old 01/17/2015, 23:55   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Meine erste Frage : Ist es Sinnvoller CVIPSystem VIP; Global zu machen ? somit wird nicht bei jedem Ausführen aufs neue die Class initialisiert ?
oder würde z.b nen std::auto_ptr auch gut sein ?
Wenn überhaupt solltest du die Variable static machen. Dann wird sie zum einen erst lazy beim ersten Aufruf der Funktion initialisiert, zum anderen ist ihre Sichtbarkeit dann nicht global. Das ist durchaus ein probates Mittel, um Komplexere Initialisierungen nur einmal auszuführen.
Inwiefern auto_ptr hier aushelfen sollte, verstehe ich nicht ganz (und nein, auto_ptr würde ich nicht mehr nutzen; es gibt bessere Alternativen wie std::unique_ptr).

Quote:
CiritcalSection sind sie Sinnvoll beim Hooken ?
Nur wenn die Funktion aus mehreren Threads aufgerufen wird und dabei Race-Conditions entstehen können.
Ob du dabei CriticalSections oder C++ Locks verwenden solltest, kann ich dir nicht beantworten, da ich mich zu wenig mit den Implementierungen auskenne. Ich bezweifle aber, dass der eine Mechanismus signifikante Vorteile gegenüber dem anderen hat und würde daher aufgrund von Ausnahmesicherheit zu C++ Locks greifen.

Quote:
Ich Modifizier ja Daten in Player / Item / Monster etc. Objecten vom Server in meiner DLL - WENN der fall auftritt das 2 drauf zugreifen wollen könnte es zu Problemen kommen oder ?
Die Sache ist: Wenn du in einem fremden Programm deinen Hook einbringst, kannst du da sowieso nicht vernünftig für Synchronisation sorgen, wenn du nicht gerade jede Stelle kennst, an der auf das Objekt zugegriffen wird, um dort einen Hook zum Anfragen des Locks einzubauen. Locking funktioniert ja nur, wenn jede Funktion sich daran hält, erst auf das Lock zu warten, bevor sie etwas mit dem Objekt tut.
Höchstwahrscheinlich nutzt das Spiel aber selbst schon irgendeine Form von Locks, wenn es mit mehreren Threads arbeitet. Du könntest die Locks des Spiels suchen und mitverwenden.

Wichtig wäre aber zu erwähnen, dass Locking die Performance deiner Funktion deutlich mehr als dein vector beeinflussen würde.

Solange dein vector nicht ein paar Millionen Elemente hat, würde ich mir da über die Performance nicht so große Sorgen machen. Geht es hier eigentlich um Server-Software oder um einen Client? Ich kann mir gerade irgendwie nicht vorstellen, dass wirklich jeder Kill auf dem gesamten Server jedem Client gemeldet wird.
MrSm!th is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Battleye initialization failed warum?
01/08/2014 - DayZ - 1 Replies
Hi Habe seid ca 3wochen nicht mehr sa gespielt dann wollte ich heute mal starten aber sobald ich auf einen server gehen will kommt das battleye initialization failed warum kommt das?? Danke in voraus
DayZ-battleye initialization failed
09/20/2013 - DayZ - 20 Replies
hab Arma 2 geupdatet nu kommt wenn ich ein server joinen will in DayZ immer -battleye initialization failed. Warum? wie behebe ich das? bitte genaue beschreibung.... bin ein nullchecker und so
error at initialization of bundled DLL: secure.dll
06/21/2013 - Metin2 Private Server - 1 Replies
Hallo, ich wollte den neuen Server Olymp2 zocken aber wenn ich den Client starte kommt: error at initialization of bundled DLL: secure.dll Der SA weiß net weiter Ich hab Windows 8 und ich hab das mit der Problembehandlung schon versucht. Falls jemand diesen Fehler schonmal hatte bitte ich um Hilfe. Hat sich geklärt kackserver 19 Spieler
[Fehler] Black Ops 2 error during initialization?
01/05/2013 - Call of Duty - 2 Replies
Hallo, ich frage hier für einen freund nach er hat den beliebten fehler error during initialization wir haben schon alles probiert leider kann er durch seinen begrenzten Speed blops erst in einem Monat wieder runterlanden und deswegen frag ich mal hier: habt ihr ne Ahnung was das sein könnte? Zeitzone und Zeit/Tag schon umgestellt. (möglichst ohne etwas zu downloaden) danke im voraus.
Gameguard initialization erro : 230
02/04/2008 - Dekaron Exploits, Hacks, Bots, Tools & Macros - 2 Replies
I'm using monter edit and gameguard v2, and after a few minutes playing i get the message "Gameguard initialization error : 230" and the game jumps itselfs to windows, closing. I tried to put the file gameguard.exe in the firewall exclusions and i tried to play without the antivirus on (Avg). I already reinstaled Win xp sp2, it's fully updated with net framework 2.0, virus and spyware free. The gameguard is rev.1059 Any solution please??



All times are GMT +2. The time now is 12:56.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.