Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:27

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

Advertisement



[ASM / METIN2]CoolDown der Fertigkeiten

Discussion on [ASM / METIN2]CoolDown der Fertigkeiten within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
MrCrisp's Avatar
 
elite*gold: 0
Join Date: Apr 2009
Posts: 721
Received Thanks: 178
[ASM / METIN2]CoolDown der Fertigkeiten

Hallo liebe Community!

Ich wusste nicht genau, in welches Forum ich schreiben sollte, deshalb versuch ich es hier einfach mal!

Ich stehe vor folgendem Problem:
Ich möchte einen Bot schreiben, der auch Fertigkeiten einsetzt. Das heißt, ich brauche die CoolDown, damit der Bot weiß, wann er die Fertigkeit erneut einsetzen kann.
Ich habe mir mit OllyDbg den CoolDown von z.B. Aura ausgeben lassen, sprich ich hab den ASM Block. Dieser sieht wie folgt aus:
Code:
MOV ECX,DWORD PTR SS:[LOCAL.0]
FSTP DWORD PTR SS:[LOCAL.4]
CALL 0x00470E00
PUSH EAX
EAX ist hier die CoolDown in Sekunden. Sie wird angezeigt, sobald man mit der Maus über die Fertigkeit fährt.

Die Funktion in C++ sieht nun so aus:
Code:
DWORD GetCoolDownAddr = 0x00470E00;
int CoolDownTime;
		_asm{
			MOV ECX, DWORD PTR SS : [LOCAL.0]
			FSTP DWORD PTR SS : [LOCAL.4]
			CALL GetCoolDownAddr
			PUSH CoolDownTime
		}
Jetzt ist die Frage: Kann ich damit überhaupt die CoolDown auslesen? Habe auch eine Funktion geschrieben, die mir den SkillSlot der Fertigkeit liefern "sollte", aber dann kommt ja die Frage auf: Welche Fertigkeit?
Bräuchte vielleicht einen kleinen Ansatz

Hoffe, dass ich mein Problem verständlich erklärt habe.

LG
MrCrisp is offline  
Old 08/04/2013, 01:32   #2
 
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
Der Cooldown wird serverseitig geregelt, d.h du könntest ihn zwar so modifizieren das du dauernd sw einsetzen kannst aber die fertigkeit würde nur nach dem serverseitig festgelegten cd schaden machen =)
ƬheGame is offline  
Thanks
1 User
Old 08/04/2013, 01:43   #3
 
MrCrisp's Avatar
 
elite*gold: 0
Join Date: Apr 2009
Posts: 721
Received Thanks: 178
Danke für die Antwort
Aber ich glaube ich habe mein Problem nicht richtig erklärt Ich möchte einen Bot schreiben, der auch Fertigkeiten einsetzt. Das heißt, ich brauche die CoolDown, damit der Bot weiß, wann er die Fertigkeit erneut einsetzen kann. Tut mir leid, dass das nicht ganz klar geworden ist Ich werde es rasch editieren.

LG
MrCrisp is offline  
Old 08/04/2013, 01:45   #4
 
.ErpeL's Avatar
 
elite*gold: 2
Join Date: Apr 2010
Posts: 252
Received Thanks: 4,688
also selbst wenn das die richtige Funktion zum Auslesen des CoolDown wäre (was ich stark bezweifle ) da dort glaube sowas wie ein Index oder so übergeben werden müsste. und wenn du was auslesen willst darfst du nicht PUSH CoolDownTime machen.

Code:
MOV ECX,DWORD PTR SS:[LOCAL.0]
FSTP DWORD PTR SS:[LOCAL.4]
CALL 0x00470E00
PUSH EAX
DWORD PTR SS:[LOCAL.x] sind irgendwelche Adressen auf dem Stack dort die du rausfinden müsstest versuch es nicht erst
Und wenn das die richtige Funktion wäre müsstest du das hier machen

Code:
DWORD GetCoolDownAddr = 0x00470E00;
int CoolDownTime;
		_asm{
			MOV ECX, DWORD PTR SS : [/*Addresse x*/]
			FSTP DWORD PTR SS : [/*Addresse y*/]
			CALL GetCoolDownAddr
			MOV CoolDownTime, EAX /*zum auslesen*/
		}
weil die Cooldowntime dann in EAX stehen würde, was sie aber hier nicht tut da es sicher die falsche func ist

Es gibt aber auf jeden Fall eine Funktion die ein bool zurückgibt, IsSkillActive oder IsSkillCoolTime oder so kp wie das war, die zeigt halt an ab der skill wieder gewirkt werden kann.
.ErpeL is offline  
Thanks
1 User
Old 08/04/2013, 02:14   #5
 
MrCrisp's Avatar
 
elite*gold: 0
Join Date: Apr 2009
Posts: 721
Received Thanks: 178
Vielen Dank für deine Hilfe Erpel!
Hab es jetzt ein wenig besser verstanden!

Die Funktion, nach der ich in meinem obigen Code gesucht hatte, war player.GetSkillCoolTime

Die Funktion, die du meinst - und die einzige, dich ich zu deiner Beschreibung gefunden habe, ist skill.CanUseSkill. Ich glaube die meinst du auch

Es darf also kein PUSH vorkommen, der von der CoolDown abhängig ist, oder? Heißt das, dass es ein CALL sein muss, welcher mir sagt, ob die Fertigkeit ready to use ist?

LG
MrCrisp is offline  
Old 08/04/2013, 02:29   #6
 
.ErpeL's Avatar
 
elite*gold: 2
Join Date: Apr 2010
Posts: 252
Received Thanks: 4,688
Ich hab dir mal ein altes vermutlich unfertiges Projekt von vor paar Jahren bei Dr.Kimble alias Kim DOT Com alias Kimpire hochgeladen

und darin steht das man den skillslot übergeben muss und nen bool zurückbekommt, mehr weiß ich nicht mehr ist schon ne ganze weile her

hier auch noch bissel was was gefehlt hat -.- ich muss unbedingt meine Projekte besser verwalten

PHP Code:
//IsSkillActive-----------------------------------------------------------------
bool C_IngameFunction::IsSkillActive(int _Index)
{
    
int   Result  false;
    
DWORD Address 0x438F30;

    
__asm
    
{
        
MOV ECX,DWORD PTR DS:[0x61997C]
        
PUSH _Index
        CALL Address
        MOV Result
EAX
    
}

    return 
Result;
}

//IsSkillCoolTime---------------------------------------------------------------
bool C_IngameFunction::IsSkillCoolTime(int _Index)
{
    
int   Result  false;
    
DWORD Address 0x438F10;

    
__asm
    
{
        
MOV ECX,DWORD PTR DS:[0x61997C]
        
PUSH _Index
        CALL Address
        MOV Result
EAX
    
}

    return 
Result;
}

//GetMainActorSkillGroup--------------------------------------------------------
int C_IngameFunction::GetMainActorSkillGroup()
{
    
int Result = -1;

    
__asm
    
{
        
MOV ECX,DWORD PTR DS:[0x61C028]
        
MOV EAX,DWORD PTR DS:[ECX+0x298]
        
MOV Result,EAX
    
}

    return 
Result;
}

//GetMainActorRace--------------------------------------------------------------
E_Race C_IngameFunction::GetMainActorRace()
{
    
E_Race Result;

    
__asm
    
{
        
MOV ECX,DWORD PTR DS:[0x61C028]
        
MOV EAX,DWORD PTR DS:[ECX+0x290]
        
MOV Result,EAX
    
}

    return 
Result;
}

//ClickSkillSlot----------------------------------------------------------------
void C_IngameFunction::ClickSkillSlot(int _Index)
{
    
DWORD Address 0x443320;

    
__asm
    
{
        
MOV ECX,DWORD PTR DS:[0x61997C]
        
PUSH _Index
        CALL Address
    
}

.ErpeL is offline  
Thanks
2 Users
Old 08/04/2013, 02:32   #7
 
MrCrisp's Avatar
 
elite*gold: 0
Join Date: Apr 2009
Posts: 721
Received Thanks: 178
Vielen Dank für deine Mühen!!

LG
MrCrisp is offline  
Old 08/04/2013, 02:40   #8
 
.ErpeL's Avatar
 
elite*gold: 2
Join Date: Apr 2010
Posts: 252
Received Thanks: 4,688
geht das eigentlich nicht auch direkt mit python oder so, das wäre doch bei metin besser als dieses asm/c++ rumgefrickel?
.ErpeL is offline  
Old 08/04/2013, 02:46   #9
 
MrCrisp's Avatar
 
elite*gold: 0
Join Date: Apr 2009
Posts: 721
Received Thanks: 178
Ja, mit Python hab ich auch schon rumgespielt, aber ich hab diesen reiz in Python nicht.
Sollte wahrscheinlich doch erstmal mehr mit Python machen, anstatt mit C++ und ASM

Aber Danke nochmals!

LG
MrCrisp is offline  
Old 08/04/2013, 05:35   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by .ErpeL View Post
geht das eigentlich nicht auch direkt mit python oder so, das wäre doch bei metin besser als dieses asm/c++ rumgefrickel?
Funktionspointer wären auch eine wesentlich schönere Lösung als Inline Asm.
MrSm!th is offline  
Old 08/04/2013, 15:42   #11
 
.ErpeL's Avatar
 
elite*gold: 2
Join Date: Apr 2010
Posts: 252
Received Thanks: 4,688
Quote:
Originally Posted by MrSm!th View Post
Funktionspointer wären auch eine wesentlich schönere Lösung als Inline Asm.
außer du nimmst dieses blöde RAD Studio das stellt sich verdammt stur mit __thiscall ich glaub das konnte das nicht mal
.ErpeL is offline  
Old 08/04/2013, 15:56   #12

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
da kannste dann __fastcall verwenden, als Parameter haste dann this-Pointer, trash-Pointer und die regulären Parameter der Funktion (da ecx und edx beim fastcall belegt werden).
snow is offline  
Old 08/04/2013, 16:20   #13
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by .ErpeL View Post
außer du nimmst dieses blöde RAD Studio das stellt sich verdammt stur mit __thiscall ich glaub das konnte das nicht mal
Quote:
Originally Posted by snow911 View Post
da kannste dann __fastcall verwenden, als Parameter haste dann this-Pointer, trash-Pointer und die regulären Parameter der Funktion (da ecx und edx beim fastcall belegt werden).
Borland Fastcall sieht anders aus als MS Fastcall. Da hast du dann 2 "trash-Pointer", nämlich EAX, ECX und EDX.
Master674b is offline  
Thanks
1 User
Old 08/04/2013, 23:13   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by .ErpeL View Post
außer du nimmst dieses blöde RAD Studio das stellt sich verdammt stur mit __thiscall ich glaub das konnte das nicht mal
__thiscall kannst du nicht explizit angeben.
MrSm!th is offline  
Old 08/05/2013, 04:02   #15
 
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
ruf die Funktion lieber so auf ->
Code:
typedef int func(void);

func* f = (func*)0xmylittlepony; // Deinem Funktionspointer sagen auf welche Funktion er zeigen soll

int i = f(); //Funktion Aufrufen
Funktionsparameter müssen natürlich identisch zum original sein
ƬheGame is offline  
Reply


Similar Threads Similar Threads
(REDISTRIBUTE)REMOVE ANY ITEM COOLDOWN (GLOBAL COOLDOWN)
08/07/2011 - WoW PServer Exploits, Hacks & Tools - 24 Replies
FIRST POSTED ON DEATHSOFT BY zebra_masTer...10X TO HIM K. U need little knowledge in Cheat Enige and u need this programm. browse id of spell that u want remoove cooldown in Wowhead: Epic like your faction leader. We will use Moonfire (rank 12) id is 26988 SCAN Wow.exe with Cheat Enige For value 26988 (it moonfire) in the right colume u will se numbers MARK ALL THAT AR N O T GREEN than press the RED Arrow. After few sec's you will see number in the buttom colum mark all with = and...
Kann mir wer die alten Fertigkeiten hochladen? (P-SERVER FERTIGKEITEN)
04/01/2009 - Metin2 Private Server - 4 Replies
Könnte jemand in seinem P-Server Metin2 ordner gehen und in den Ordner Pack gehen? Also: P-Server > Pack > Effect.epk, Effect.eix, PC.epk, PC.eix hochladen? Die 4 Dateien VOM P-SERVER !!!! (nicht .de metin2) Will die alten Skills haben ._.



All times are GMT +2. The time now is 20:27.


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.