Привет всем пользователям портала Pro-Pawn.
И вновь нашли дырку на клиенте SAMP.
Но как говорится, на любую дырку. Свой фикс.
Так вот сам крашер вызывает каллбэк OnPlayerWeaponShot с такими данными:
OnPlayerWeaponShot(0,0,1,0,2004318080.000000,2004318080.000000,2004318080.000000)
Как на это реагирует клиент:
![](http://puu.sh/bpafq/c5e0c28dc9.png)
PHP код:
SA-MP 0.3z
Exception At Address: 0x49646550
Base: 0x04170000
Registers:
EAX: 0x04C72818 EBX: 0x042F9028 ECX: 0x04C72818 EDX: 0x00863C40
ESI: 0x04C2BF58 EDI: 0x042F9028 EBP: 0x00000000 ESP: 0x0028FB7C
EFLAGS: 0x00010246
Stack:
+0000: 0x004096AD 0x00533E99 0x04C2BF58 0x0028FBF0
+0010: 0x04C2BF58 0x00554164 0x042F9028 0x04C2BF58
+0020: 0x00000000 0x0055480F 0x427D5556 0x44582C0E
+0030: 0x44518AEA 0x04C2BF01 0x0028FC60 0x00000001
+0040: 0x04B481F0 0x04C2BF58 0x44518AEA 0xC5206C20
+0050: 0x443D5B00 0x42394800 0x00554BFD 0x04C2BF01
+0060: 0x0028FBF0 0x00000002 0x00000001 0x00000004
+0070: 0x0072D10B 0x44518AEA 0x00000012 0xC32458C2
+0080: 0xC35B2105 0x002DC1A0 0x00000007 0x00000002
+0090: 0xBF5CC141 0x3F32B54E 0x400E437C 0x00000005
+00A0: 0x40EA1EF6 0x00000012 0x00000004 0x00000001
+00B0: 0x00000014 0x00000002 0x4014E35F 0x40A1344E
+00C0: 0x417BC5FC 0x40F86EC0 0x419D2019 0x40F7B73D
+00D0: 0x41A0A168 0x3FF3E0E0 0x419E3E52 0x3FF6BEF8
+00E0: 0x419ABD03 0x43960000 0x00555669 0x0028FD64
+00F0: 0x00000005 0x00554B10 0x0028FD64 0x00000005
+0100: 0x00554840 0x0028FCC8 0x0028FCC8 0x0000000D
+0110: 0x002DC1A0 0x0000001A 0x0A68DC90 0x764B6C30
+0120: 0x00000000 0x3AA3D70A 0x435B2105 0xC32458C2
+0130: 0x43960000 0xC35B2105 0xC32458C2 0x43960000
+0140: 0x00000000 0xC8006558 0x486A6000 0xC4F90F23
+0150: 0x43132ACE 0x41E45183 0xC4B578D9 0x447DF0CE
+0160: 0x43C041BB 0xC523AF0A 0x446F0584 0x43C041BB
+0170: 0xC523675A 0x44591D54 0xC3F3CCC0 0xC4B4E97A
+0180: 0x4468089E 0xC3F3CCC0 0xC4DFB6C7 0x43EC71FB
+0190: 0x432207AA 0xC50B365F 0x43E14183 0x432207AA
+01A0: 0xC4F583A8 0x43E165BC 0x41F9B42C 0xC5003A6D
+01B0: 0x43DF28D8 0x41F9B42C 0xC50B1B7D 0x43D0D35F
+01C0: 0xC3250332 0xC4DF8104 0x43DC03D7 0xC3250332
+01D0: 0xC500350D 0x43DBDF9E 0xC208C834 0xC4F578E7
+01E0: 0x43DE1C82 0xC208C834 0x40A1344E 0x417BC5FC
+01F0: 0x40F7B73D 0x41A0A168 0x3FF3E0E0 0x419E3E52
+0200: 0x3FF6BEF8 0x419ABD03 0x40F86EC0 0x419D2019
+0210: 0x005558E2 0x00000001 0x00000000 0x41D45000
+0220: 0x0053E9FE 0x44340000 0x43E10000 0x0053ECC2
+0230: 0x00000001 0x00619B71 0x0000001A 0x00000001
+0240: 0x00000001 0x0000000A 0x00748DF0 0x0000001A
+0250: 0x00000001 0x76391245 0x00000000 0x0028FF88
+0260: 0x7EFDE000 0x012D0000 0x4E5AE91F 0x002D1130
+0270: 0x00000008 0x00000100 0x00000008 0x00000102
SCM Op: 0x248, lDbg: 0 LastRendObj: 18783
Game Version: EU 1.0
State Information: Ped Context: 0
P0 (0,0) P1 (32,0) P2 (0,0) P3 (0,0)
P4 (32,0) P5 (32,0) P6 (17,0) P7 (0,0)
P8 (32,0) P9 (32,0) P10 (0,0) P11 (32,0)
P12 (0,0) P13 (32,0) P14 (0,0) P15 (0,0)
P16 (32,0) P17 (0,0) P18 (0,0) P19 (0,0)
P20 (0,0) P21 (32,0) P22 (0,0) P23 (32,0)
P24 (32,0) P25 (32,0) P26 (0,0) P27 (32,0)
P29 (0,0) P30 (0,0) P31 (0,0)
P32 (32,0) P34 (0,0) P35 (32,0)
P36 (0,0) P37 (0,0) P38 (0,0) P40 (32,0) P43 (0,0)
P44 (0,0) P45 (32,0) P46 (0,0) P47 (0,0)
P49 (0,0) P50 (32,0) P55 (32,0)
P59 (0,0)
P62 (0,0) P63 (0,0)
А как на это отреагируем мы, обычные скриптеры. Которым жалуются клиенты / игроки на зависания.
Ищем паблик OnPlayerWeaponShot.
Вставляем туда:
PHP код:
if( hittype == BULLET_HIT_TYPE_PLAYER )
{
if( !( -20.0 <= fX <= 20.0 ) || !( -20.0 <= fY <= 20.0 ) || !( -20.0 <= fZ <= 20.0 ) )
{
// Наказываем игрока
return false;
}
}
Вариант от Daniel_Cortez (в самый верх мода после инклудов) .
PHP код:
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
if(hittype == BULLET_HIT_TYPE_PLAYER)
{
if((floatcmp(floatabs(fX), 20.0) == 1)
|| (floatcmp(floatabs(fY), 20.0) == 1)
|| (floatcmp(floatabs(fZ), 20.0) == 1))
return Kick(playerid), 0;
}
#if defined hotfix_OnPlayerWeaponShot
return hotfix_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerWeaponShot
#undef OnPlayerWeaponShot
#else
#define _ALS_OnPlayerWeaponShot
#endif
#define OnPlayerWeaponShot hotfix_OnPlayerWeaponShot
#if defined hotfix_OnPlayerWeaponShot
forward hotfix_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
#endif
С вами был Valera_Trefilov