|
You last visited: Today at 20:27
Advertisement
[ASM / METIN2]CoolDown der Fertigkeiten
Discussion on [ASM / METIN2]CoolDown der Fertigkeiten within the C/C++ forum part of the Coders Den category.
08/04/2013, 01:24
|
#1
|
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
|
|
|
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 =)
|
|
|
08/04/2013, 01:43
|
#3
|
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
|
|
|
08/04/2013, 01:45
|
#4
|
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.
|
|
|
08/04/2013, 02:14
|
#5
|
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
|
|
|
08/04/2013, 02:29
|
#6
|
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 } }
|
|
|
08/04/2013, 02:32
|
#7
|
elite*gold: 0
Join Date: Apr 2009
Posts: 721
Received Thanks: 178
|
Vielen Dank für deine Mühen!!
LG
|
|
|
08/04/2013, 02:40
|
#8
|
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?
|
|
|
08/04/2013, 02:46
|
#9
|
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
|
|
|
08/04/2013, 05:35
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Originally Posted by .ErpeL
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.
|
|
|
08/04/2013, 15:42
|
#11
|
elite*gold: 2
Join Date: Apr 2010
Posts: 252
Received Thanks: 4,688
|
Quote:
Originally Posted by MrSm!th
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
|
|
|
08/04/2013, 15:56
|
#12
|
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).
|
|
|
08/04/2013, 16:20
|
#13
|
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
|
Quote:
Originally Posted by .ErpeL
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
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.
|
|
|
08/04/2013, 23:13
|
#14
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Originally Posted by .ErpeL
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.
|
|
|
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
|
|
|
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.
|
|