|
You last visited: Today at 01:21
Advertisement
[Release]Endgültiger number_ex Fix + Bonus
Discussion on [Release]Endgültiger number_ex Fix + Bonus within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
09/09/2013, 17:00
|
#31
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,916
Received Thanks: 538
|
Quote:
Originally Posted by xCPx
Ganz hübsch
Und jeder der behauptet, der fehler existiert in der 2089 nicht, der hat sich gewaltig geschnitten.
Naja ich hab mittlerweile einfach nen gesamten Fehlerfixx dafür erstellt, sodass der core wegen eigentlich nichts mehr abschmieren kann.
notfalls returnt eine funktion einfach 0 aber der core rennt weiter
|
pub.
|
|
|
09/09/2013, 17:28
|
#32
|
elite*gold: 84
Join Date: May 2013
Posts: 478
Received Thanks: 234
|
Quote:
Originally Posted by 'oShet
pub.
|
Ja macht er sicherlich.
Er schenkt der Community etwas, womit er selbst Kohle verdienen könnte.
Sehr sehr naice Oce.
|
|
|
09/09/2013, 17:45
|
#33
|
elite*gold: 20
Join Date: Jun 2011
Posts: 2,897
Received Thanks: 3,336
|
Quote:
Originally Posted by 'oShet
pub.
|
Ist klar, dass ich nen fast 4000 zeilen script pub und das für ne Com, die einen dann nur zuspammt, dass sie zu blöde sind es einzubauen
Sry, aber das wird nur auf meinem Server und vllt dem ein oder anderen Server von Leuten, wo ich meine, dass sie es verdient haben zu finden sein.
|
|
|
09/09/2013, 19:19
|
#34
|
elite*gold: 0
Join Date: Jul 2009
Posts: 62
Received Thanks: 238
|
Vorher:
unsigned int __cdecl number_ex(int arg, int a2, int a3, int a4)
{
int v4; // ebx@1
int v5; // esi@1
v4 = arg;
v5 = a2;
if ( arg > a2 )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
arg,
a2,
a3,
a4);
v5 = arg;
v4 = a2;
}
return v4 + thecore_random() % (unsigned int)(v5 + 1 - v4);
}
Nacher:
unsigned int __cdecl number_ex(int Min, int Max, char *src, int srcline)
{
unsigned int v4; // ecx@3
__int32 v5; // ecx@4
int v6; // ebx@1
int v7; // esi@1
__int32 v8; // eax@3
v6 = Min;
v7 = Max;
if ( Min > Max )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
Min,
Max,
src,
srcline);
v7 = Min;
v6 = Max;
}
v8 = thecore_random();
v4 = v7 + 1 - v6;
if ( v7 + 1 == v6 )
{
sys_err((int)"number_ex", 362, "number(): Shutdown fix -> Set to 0, 1");
v8 = v5;
v4 = 1;
v6 = 0;
}
return v6 + v8 % v4;
}
Da es nur ein pseodo ist stimmt der so nicht exakt daher no mein pseodo ausn kopf:
unsigned int __cdecl number_ex(int Min, int Max, char *src, int srcline)
{
unsigned int v4; // ecx@3
__int32 v5; // ecx@4
int v6; // ebx@1
int v7; // esi@1
__int32 v8; // eax@3
v6 = Min;
v7 = Max;
if ( Min > Max )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
Min,
Max,
src,
srcline);
v7 = Min;
v6 = Max;
}
v8 = thecore_random();
v4 = v7 + 1 - v6;
if ( v4 == 0 )
{
sys_err((int)"number_ex", 362, "number(): Shutdown fix -> Set to 0, 1");
v4 = 1;
v6 = 0;
}
return v6 + v8 % v4;
}
das letztere ist genauer weil ich den code so vor augen hatte und ihn so in asm rein gesetzt
habe und wie man sehen kann wird das teilen durch 0 komplett verhindert xd hätte zwar auch returnen
können aber nö ^^
die dif für die 2089M (tiefer werd ich nicht gehen):
This difference file has been created by IDA Pro
By Cryfact
game_r2089M
000D0710: 55 89
000D0711: 89 D1
000D0712: E5 83
000D0713: 53 F9
000D0714: 83 00
000D0715: EC 75
000D0716: 24 2C
000D0718: 5D C8
000D0719: 08 C7
000D071A: A1 44
000D071B: F8 24
000D071C: 28 08
000D071D: 4C 9D
000D071E: 08 90
000D071F: 89 34
000D0720: 45 08
000D0721: F8 C7
000D0722: 31 44
000D0723: C0 24
000D0724: C7 04
000D0725: 03 6A
000D0726: F0 01
000D0727: D3 00
000D0728: 34 00
000D0729: 08 C7
000D072A: C7 04
000D072B: 43 24
000D072C: 04 ED
000D072D: 00 0F
000D072E: 00 47
000D072F: 00 08
000D0730: 00 E8
000D0731: C7 3B
000D0732: 43 D3
000D0733: 08 1F
000D0735: 00 8B
000D0736: 00 C1
000D0737: 00 B9
000D0738: 80 01
000D0739: 3D 00
000D073A: 88 00
000D073B: E9 00
000D073C: 5C BB
000D073D: 08 00
000D073F: 74 00
000D0740: 1F 00
000D0742: 43 D1
000D0743: 04 31
000D0744: 85 D2
000D0745: C0 F7
000D0746: 74 F1
000D0747: 5E E9
000D0748: 8B 95
000D0749: 45 D8
000D074A: F8 1F
000D074B: 33 00
002CDFDB: 89 E9
002CDFDC: D1 30
002CDFDD: 31 27
002CDFDE: D2 E0
002CDFDF: F7 FF
0030109D: 00 6E
0030109E: 00 75
0030109F: 00 6D
003010A0: 00 62
003010A1: 00 65
003010A2: 00 72
003010A3: 00 28
003010A4: 00 29
003010A5: 00 3A
003010A6: 00 20
003010A7: 00 53
003010A8: 00 68
003010A9: 00 75
003010AA: 00 74
003010AB: 00 64
003010AC: 00 6F
003010AD: 00 77
003010AE: 00 6E
003010AF: 00 20
003010B0: 00 66
003010B1: 00 69
003010B2: 00 78
003010B3: 00 20
003010B4: 00 2D
003010B5: 00 3E
003010B6: 00 20
003010B7: 00 53
003010B8: 00 65
003010B9: 00 74
003010BA: 00 20
003010BB: 00 74
003010BC: 00 6F
003010BD: 00 20
003010BE: 00 30
003010BF: 00 2C
003010C0: 00 20
003010C1: 00 31
könnt euch glücklich schätzen das ich idb dazu gefunden hab xD
mfg Cryfact
|
|
|
09/09/2013, 19:31
|
#35
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,916
Received Thanks: 538
|
Quote:
Originally Posted by cryfact
Vorher:
unsigned int __cdecl number_ex(int arg, int a2, int a3, int a4)
{
int v4; // ebx@1
int v5; // esi@1
v4 = arg;
v5 = a2;
if ( arg > a2 )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
arg,
a2,
a3,
a4);
v5 = arg;
v4 = a2;
}
return v4 + thecore_random() % (unsigned int)(v5 + 1 - v4);
}
Nacher:
unsigned int __cdecl number_ex(int Min, int Max, char *src, int srcline)
{
unsigned int v4; // ecx@3
__int32 v5; // ecx@4
int v6; // ebx@1
int v7; // esi@1
__int32 v8; // eax@3
v6 = Min;
v7 = Max;
if ( Min > Max )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
Min,
Max,
src,
srcline);
v7 = Min;
v6 = Max;
}
v8 = thecore_random();
v4 = v7 + 1 - v6;
if ( v7 + 1 == v6 )
{
sys_err((int)"number_ex", 362, "number(): Shutdown fix -> Set to 0, 1");
v8 = v5;
v4 = 1;
v6 = 0;
}
return v6 + v8 % v4;
}
Da es nur ein pseodo ist stimmt der so nicht exakt daher no mein pseodo ausn kopf:
unsigned int __cdecl number_ex(int Min, int Max, char *src, int srcline)
{
unsigned int v4; // ecx@3
__int32 v5; // ecx@4
int v6; // ebx@1
int v7; // esi@1
__int32 v8; // eax@3
v6 = Min;
v7 = Max;
if ( Min > Max )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
Min,
Max,
src,
srcline);
v7 = Min;
v6 = Max;
}
v8 = thecore_random();
v4 = v7 + 1 - v6;
if ( v4 == 0 )
{
sys_err((int)"number_ex", 362, "number(): Shutdown fix -> Set to 0, 1");
v4 = 1;
v6 = 0;
}
return v6 + v8 % v4;
}
das letztere ist genauer weil ich den code so vor augen hatte und ihn so in asm rein gesetzt
habe und wie man sehen kann wird das teilen durch 0 komplett verhindert xd hätte zwar auch returnen
können aber nö ^^
die dif für die 2089M (tiefer werd ich nicht gehen):
This difference file has been created by IDA Pro
By Cryfact
game_r2089M
000D0710: 55 89
000D0711: 89 D1
000D0712: E5 83
000D0713: 53 F9
000D0714: 83 00
000D0715: EC 75
000D0716: 24 2C
000D0718: 5D C8
000D0719: 08 C7
000D071A: A1 44
000D071B: F8 24
000D071C: 28 08
000D071D: 4C 9D
000D071E: 08 90
000D071F: 89 34
000D0720: 45 08
000D0721: F8 C7
000D0722: 31 44
000D0723: C0 24
000D0724: C7 04
000D0725: 03 6A
000D0726: F0 01
000D0727: D3 00
000D0728: 34 00
000D0729: 08 C7
000D072A: C7 04
000D072B: 43 24
000D072C: 04 ED
000D072D: 00 0F
000D072E: 00 47
000D072F: 00 08
000D0730: 00 E8
000D0731: C7 3B
000D0732: 43 D3
000D0733: 08 1F
000D0735: 00 8B
000D0736: 00 C1
000D0737: 00 B9
000D0738: 80 01
000D0739: 3D 00
000D073A: 88 00
000D073B: E9 00
000D073C: 5C BB
000D073D: 08 00
000D073F: 74 00
000D0740: 1F 00
000D0742: 43 D1
000D0743: 04 31
000D0744: 85 D2
000D0745: C0 F7
000D0746: 74 F1
000D0747: 5E E9
000D0748: 8B 95
000D0749: 45 D8
000D074A: F8 1F
000D074B: 33 00
002CDFDB: 89 E9
002CDFDC: D1 30
002CDFDD: 31 27
002CDFDE: D2 E0
002CDFDF: F7 FF
0030109D: 00 6E
0030109E: 00 75
0030109F: 00 6D
003010A0: 00 62
003010A1: 00 65
003010A2: 00 72
003010A3: 00 28
003010A4: 00 29
003010A5: 00 3A
003010A6: 00 20
003010A7: 00 53
003010A8: 00 68
003010A9: 00 75
003010AA: 00 74
003010AB: 00 64
003010AC: 00 6F
003010AD: 00 77
003010AE: 00 6E
003010AF: 00 20
003010B0: 00 66
003010B1: 00 69
003010B2: 00 78
003010B3: 00 20
003010B4: 00 2D
003010B5: 00 3E
003010B6: 00 20
003010B7: 00 53
003010B8: 00 65
003010B9: 00 74
003010BA: 00 20
003010BB: 00 74
003010BC: 00 6F
003010BD: 00 20
003010BE: 00 30
003010BF: 00 2C
003010C0: 00 20
003010C1: 00 31
könnt euch glücklich schätzen das ich idb dazu gefunden hab xD
mfg Cryfact
|
tested unf funktioniert perfekt
|
|
|
09/10/2013, 11:34
|
#36
|
elite*gold: 0
Join Date: Oct 2009
Posts: 4,086
Received Thanks: 3,786
|
Dif für 2089M added in ersten Post
|
|
|
09/10/2013, 19:42
|
#37
|
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,448
|
Quote:
Originally Posted by xCPx
Ist klar, dass ich nen fast 4000 zeilen script pub und das für ne Com, die einen dann nur zuspammt, dass sie zu blöde sind es einzubauen
Sry, aber das wird nur auf meinem Server und vllt dem ein oder anderen Server von Leuten, wo ich meine, dass sie es verdient haben zu finden sein.
|
Was hast du 4000 Zeilen gemacht?
3950 Zeilen Kommentare?
Hab die number_ex einfach neu gemacht in 32 Zeilen.
|
|
|
09/11/2013, 17:41
|
#38
|
elite*gold: 20
Join Date: Jun 2011
Posts: 2,897
Received Thanks: 3,336
|
Quote:
Originally Posted by .iRemix
Was hast du 4000 Zeilen gemacht?
3950 Zeilen Kommentare?
Hab die number_ex einfach neu gemacht in 32 Zeilen.
|
Manchmal frag ich mich echt, wie doof man sein kann...
Es ging um nen generelles Fehler Handling für Mt2.
Dass kein einziger Fehler in egal welcher func die game mehr zum absturz bringen kann...
|
|
|
09/11/2013, 18:29
|
#39
|
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,448
|
Quote:
Originally Posted by xCPx
Manchmal frag ich mich echt, wie doof man sein kann...
Es ging um nen generelles Fehler Handling für Mt2.
Dass kein einziger Fehler in egal welcher func die game mehr zum absturz bringen kann...
|
Tut mir leid, dass ich nicht wie ein richtiger Devil oder Loxer deinen PC gehackt hab und deine Sachen angeguckt hab.
Denkst du ernsthaft, lese mir immer diesen Kack, der hier so geschrieben wird, komplett durchlese?
Wenn es alles fixxt - schön.
Hab es halt nicht gewusst.
|
|
|
09/12/2013, 15:58
|
#40
|
elite*gold: 0
Join Date: Dec 2012
Posts: 64
Received Thanks: 17
|
Can someone translate in English?
|
|
|
09/12/2013, 19:30
|
#41
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,916
Received Thanks: 538
|
Quote:
Originally Posted by cryfact
Vorher:
unsigned int __cdecl number_ex(int arg, int a2, int a3, int a4)
{
int v4; // ebx@1
int v5; // esi@1
v4 = arg;
v5 = a2;
if ( arg > a2 )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
arg,
a2,
a3,
a4);
v5 = arg;
v4 = a2;
}
return v4 + thecore_random() % (unsigned int)(v5 + 1 - v4);
}
Nacher:
unsigned int __cdecl number_ex(int Min, int Max, char *src, int srcline)
{
unsigned int v4; // ecx@3
__int32 v5; // ecx@4
int v6; // ebx@1
int v7; // esi@1
__int32 v8; // eax@3
v6 = Min;
v7 = Max;
if ( Min > Max )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
Min,
Max,
src,
srcline);
v7 = Min;
v6 = Max;
}
v8 = thecore_random();
v4 = v7 + 1 - v6;
if ( v7 + 1 == v6 )
{
sys_err((int)"number_ex", 362, "number(): Shutdown fix -> Set to 0, 1");
v8 = v5;
v4 = 1;
v6 = 0;
}
return v6 + v8 % v4;
}
Da es nur ein pseodo ist stimmt der so nicht exakt daher no mein pseodo ausn kopf:
unsigned int __cdecl number_ex(int Min, int Max, char *src, int srcline)
{
unsigned int v4; // ecx@3
__int32 v5; // ecx@4
int v6; // ebx@1
int v7; // esi@1
__int32 v8; // eax@3
v6 = Min;
v7 = Max;
if ( Min > Max )
{
sys_err(
(int)"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
Min,
Max,
src,
srcline);
v7 = Min;
v6 = Max;
}
v8 = thecore_random();
v4 = v7 + 1 - v6;
if ( v4 == 0 )
{
sys_err((int)"number_ex", 362, "number(): Shutdown fix -> Set to 0, 1");
v4 = 1;
v6 = 0;
}
return v6 + v8 % v4;
}
das letztere ist genauer weil ich den code so vor augen hatte und ihn so in asm rein gesetzt
habe und wie man sehen kann wird das teilen durch 0 komplett verhindert xd hätte zwar auch returnen
können aber nö ^^
die dif für die 2089M (tiefer werd ich nicht gehen):
This difference file has been created by IDA Pro
By Cryfact
game_r2089M
000D0710: 55 89
000D0711: 89 D1
000D0712: E5 83
000D0713: 53 F9
000D0714: 83 00
000D0715: EC 75
000D0716: 24 2C
000D0718: 5D C8
000D0719: 08 C7
000D071A: A1 44
000D071B: F8 24
000D071C: 28 08
000D071D: 4C 9D
000D071E: 08 90
000D071F: 89 34
000D0720: 45 08
000D0721: F8 C7
000D0722: 31 44
000D0723: C0 24
000D0724: C7 04
000D0725: 03 6A
000D0726: F0 01
000D0727: D3 00
000D0728: 34 00
000D0729: 08 C7
000D072A: C7 04
000D072B: 43 24
000D072C: 04 ED
000D072D: 00 0F
000D072E: 00 47
000D072F: 00 08
000D0730: 00 E8
000D0731: C7 3B
000D0732: 43 D3
000D0733: 08 1F
000D0735: 00 8B
000D0736: 00 C1
000D0737: 00 B9
000D0738: 80 01
000D0739: 3D 00
000D073A: 88 00
000D073B: E9 00
000D073C: 5C BB
000D073D: 08 00
000D073F: 74 00
000D0740: 1F 00
000D0742: 43 D1
000D0743: 04 31
000D0744: 85 D2
000D0745: C0 F7
000D0746: 74 F1
000D0747: 5E E9
000D0748: 8B 95
000D0749: 45 D8
000D074A: F8 1F
000D074B: 33 00
002CDFDB: 89 E9
002CDFDC: D1 30
002CDFDD: 31 27
002CDFDE: D2 E0
002CDFDF: F7 FF
0030109D: 00 6E
0030109E: 00 75
0030109F: 00 6D
003010A0: 00 62
003010A1: 00 65
003010A2: 00 72
003010A3: 00 28
003010A4: 00 29
003010A5: 00 3A
003010A6: 00 20
003010A7: 00 53
003010A8: 00 68
003010A9: 00 75
003010AA: 00 74
003010AB: 00 64
003010AC: 00 6F
003010AD: 00 77
003010AE: 00 6E
003010AF: 00 20
003010B0: 00 66
003010B1: 00 69
003010B2: 00 78
003010B3: 00 20
003010B4: 00 2D
003010B5: 00 3E
003010B6: 00 20
003010B7: 00 53
003010B8: 00 65
003010B9: 00 74
003010BA: 00 20
003010BB: 00 74
003010BC: 00 6F
003010BD: 00 20
003010BE: 00 30
003010BF: 00 2C
003010C0: 00 20
003010C1: 00 31
könnt euch glücklich schätzen das ich idb dazu gefunden hab xD
mfg Cryfact
|
channel crasht wenn man z.b. hohe combokunst benutzt.
|
|
|
09/12/2013, 20:02
|
#42
|
elite*gold: 0
Join Date: Oct 2009
Posts: 4,086
Received Thanks: 3,786
|
34083 oder 2089?
Und bitte syserr vom Channel posten
|
|
|
09/12/2013, 20:06
|
#43
|
elite*gold: 0
Join Date: Dec 2010
Posts: 630
Received Thanks: 252
|
Quote:
Originally Posted by 'oShet
channel crasht wenn man z.b. hohe combokunst benutzt.
|
Also ich hab die Dif auch benutzt und bei mir crasht der server nicht wenn ich hohe Combokunst benutze
|
|
|
09/12/2013, 20:29
|
#44
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,916
Received Thanks: 538
|
Quote:
Originally Posted by Ocelot2606
34083 oder 2089?
Und bitte syserr vom Channel posten
|
2089 und syserr leer
|
|
|
09/12/2013, 20:56
|
#45
|
elite*gold: 0
Join Date: Oct 2009
Posts: 4,086
Received Thanks: 3,786
|
Quote:
Originally Posted by 'oShet
2089 und syserr leer
|
Dann liegt es nicht an der Dif den sonst würde was in die syserr kommen
|
|
|
Similar Threads
|
[Zusammenarbeit] number_ex fix
09/10/2015 - Metin2 Private Server - 34 Replies
Hallo zusammen^^
Wie ihr alle ja bereits wisst, gibt es eine blöde Lücke mit der dice-Funktion. Dies liegt jedoch daran, dass number_ex mit negativen Zahlen aufgerufen wird. Die Funktion number_ex kann die aber anscheinend nicht wirklich verarbeiten. Nun habe ich mal einen "fix" angelegt, um zumindest der Lösung ziemlich Nahe zu kommen :)
Ich hoffe jedenfalls, dass ich damit nahe gekommen bin. Hier ist der Pseudo C:
unsigned int __cdecl number_ex(int a1, int a2)
{
int v2; // ebx@1
...
|
Endgültiger PBC-Fix: Meldung "Programm schließen" deaktivieren!
11/28/2010 - Diablo 2 - 3 Replies
Hat sich erledigt.
|
All times are GMT +2. The time now is 01:21.
|
|