Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 24
  1. #1
    Аватар для Valera_Trefilov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.12.2013
    Сообщений
    35
    Репутация:
    7 ±

    Защита от краша ( Зависание сервера у игроков ) Bullet Hit Type

    Привет всем пользователям портала Pro-Pawn.
    И вновь нашли дырку на клиенте SAMP.
    Но как говорится, на любую дырку. Свой фикс.
    Так вот сам крашер вызывает каллбэк OnPlayerWeaponShot с такими данными:

    OnPlayerWeaponShot(0,0,1,0,2004318080.000000,2004318080.000000,2004318080.000000)

    Как на это реагирует клиент:



    PHP код:
    SA-MP 0.3z
    Exception At Address
    0x49646550
    Base
    0x04170000

    Registers
    :
    EAX0x04C72818 EBX0x042F9028 ECX0x04C72818 EDX0x00863C40
    ESI
    0x04C2BF58 EDI0x042F9028 EBP0x00000000 ESP0x0028FB7C
    EFLAGS
    0x00010246

    Stack
    :
    +
    00000x004096AD   0x00533E99   0x04C2BF58   0x0028FBF0
    +00100x04C2BF58   0x00554164   0x042F9028   0x04C2BF58
    +00200x00000000   0x0055480F   0x427D5556   0x44582C0E
    +00300x44518AEA   0x04C2BF01   0x0028FC60   0x00000001
    +00400x04B481F0   0x04C2BF58   0x44518AEA   0xC5206C20
    +00500x443D5B00   0x42394800   0x00554BFD   0x04C2BF01
    +00600x0028FBF0   0x00000002   0x00000001   0x00000004
    +00700x0072D10B   0x44518AEA   0x00000012   0xC32458C2
    +00800xC35B2105   0x002DC1A0   0x00000007   0x00000002
    +00900xBF5CC141   0x3F32B54E   0x400E437C   0x00000005
    +00A00x40EA1EF6   0x00000012   0x00000004   0x00000001
    +00B00x00000014   0x00000002   0x4014E35F   0x40A1344E
    +00C00x417BC5FC   0x40F86EC0   0x419D2019   0x40F7B73D
    +00D00x41A0A168   0x3FF3E0E0   0x419E3E52   0x3FF6BEF8
    +00E00x419ABD03   0x43960000   0x00555669   0x0028FD64
    +00F00x00000005   0x00554B10   0x0028FD64   0x00000005
    +01000x00554840   0x0028FCC8   0x0028FCC8   0x0000000D
    +01100x002DC1A0   0x0000001A   0x0A68DC90   0x764B6C30
    +01200x00000000   0x3AA3D70A   0x435B2105   0xC32458C2
    +01300x43960000   0xC35B2105   0xC32458C2   0x43960000
    +01400x00000000   0xC8006558   0x486A6000   0xC4F90F23
    +01500x43132ACE   0x41E45183   0xC4B578D9   0x447DF0CE
    +01600x43C041BB   0xC523AF0A   0x446F0584   0x43C041BB
    +01700xC523675A   0x44591D54   0xC3F3CCC0   0xC4B4E97A
    +01800x4468089E   0xC3F3CCC0   0xC4DFB6C7   0x43EC71FB
    +01900x432207AA   0xC50B365F   0x43E14183   0x432207AA
    +01A00xC4F583A8   0x43E165BC   0x41F9B42C   0xC5003A6D
    +01B00x43DF28D8   0x41F9B42C   0xC50B1B7D   0x43D0D35F
    +01C00xC3250332   0xC4DF8104   0x43DC03D7   0xC3250332
    +01D00xC500350D   0x43DBDF9E   0xC208C834   0xC4F578E7
    +01E00x43DE1C82   0xC208C834   0x40A1344E   0x417BC5FC
    +01F00x40F7B73D   0x41A0A168   0x3FF3E0E0   0x419E3E52
    +02000x3FF6BEF8   0x419ABD03   0x40F86EC0   0x419D2019
    +02100x005558E2   0x00000001   0x00000000   0x41D45000
    +02200x0053E9FE   0x44340000   0x43E10000   0x0053ECC2
    +02300x00000001   0x00619B71   0x0000001A   0x00000001
    +02400x00000001   0x0000000A   0x00748DF0   0x0000001A
    +02500x00000001   0x76391245   0x00000000   0x0028FF88
    +02600x7EFDE000   0x012D0000   0x4E5AE91F   0x002D1130
    +02700x00000008   0x00000100   0x00000008   0x00000102

    SCM Op
    0x248lDbg0 LastRendObj18783

    Game Version
    EU 1.0

    State Information
    Ped Context0
    P0 
    (0,0P1 (32,0P2 (0,0P3 (0,0
    P4 (32,0P5 (32,0P6 (17,0P7 (0,0
    P8 (32,0P9 (32,0P10 (0,0P11 (32,0
    P12 (0,0P13 (32,0P14 (0,0P15 (0,0
    P16 (32,0P17 (0,0P18 (0,0P19 (0,0
    P20 (0,0P21 (32,0P22 (0,0P23 (32,0
    P24 (32,0P25 (32,0P26 (0,0P27 (32,0
    P29 (0,0P30 (0,0P31 (0,0
    P32 (32,0P34 (0,0P35 (32,0
    P36 (0,0P37 (0,0P38 (0,0P40 (32,0P43 (0,0
    P44 (0,0P45 (32,0P46 (0,0P47 (0,0
    P49 (0,0P50 (32,0P55 (32,0
    P59 (0,0
    P62 (0,0P63 (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(playeridweaponidhittypehitidFloat:fXFloat:fYFloat: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(playeridweaponidhittypehitidfXfYfZ);
    #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(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ);
    #endif 
    С вами был Valera_Trefilov
    Последний раз редактировалось Valera_Trefilov; 07.09.2014 в 20:14.

  2. 4 пользователя(ей) сказали cпасибо:
    Astrakhan30 (08.05.2016) Figish (05.03.2015) Hidden (23.09.2014) Steven_Davidson (22.09.2014)
  3. #2
    Аватар для DeadLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.05.2014
    Сообщений
    45
    Репутация:
    6 ±
    лойс!

  4. Пользователь сказал cпасибо:
    Valera_Trefilov (12.12.2014)
  5. #3
    Аватар для Valera_Trefilov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.12.2013
    Сообщений
    35
    Репутация:
    7 ±
    Цитата Сообщение от DeadLine Посмотреть сообщение
    лойс!
    спасибо, друг мой.
    за то что вы сами поставили лойс, и вас никто не просил

  6. #4
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Ну дело в том что мануал не одобрен и посты and + не засчитываются.

  7. #5
    Аватар для DeadLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.05.2014
    Сообщений
    45
    Репутация:
    6 ±
    Цитата Сообщение от Salvador Посмотреть сообщение
    Ну дело в том что мануал не одобрен и посты and + не засчитываются.
    Я извеняюсь=) это личная приязнь ?
    Причины есть по не одобрению ?
    Всем понятно что взято это с sa-mp.com ( не реклама и да к тому же какая это может быть реклама на официальный сайт разработчиков.

  8. #6
    Аватар для Valera_Trefilov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.12.2013
    Сообщений
    35
    Репутация:
    7 ±
    Цитата Сообщение от Salvador Посмотреть сообщение
    Ну дело в том что мануал не одобрен и посты and + не засчитываются.
    Одобрят - куда денутся.

    Такого мануала нет нигде, чтобы реально так подробно описано в фиксом.
    Да и код маленький, и компактный.

    Уже 3-4 человека поставили на сервер. С этого мануала.
    И зависания сервера, исправлены.

  9. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Набросал тут небольшой хотфикс.
    Использование: просто вставить в самое начало мода, после инклудов и забыть об этой заплатке, пока не выйдет обновление SA:MP.
    PHP код:
    public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat: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(playeridweaponidhittypehitidfXfYfZ);
    #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(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ);
    #endif 
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #8
    Аватар для Valera_Trefilov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.12.2013
    Сообщений
    35
    Репутация:
    7 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Набросал тут небольшой хотфикс.
    Использование: просто вставить в самое начало мода, после инклудов и забыть об этой заплатке, пока не выйдет обновление SA:MP.
    PHP код:
    public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat: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(playeridweaponidhittypehitidfXfYfZ);
    #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(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ);
    #endif 
    Я с самого начала хотел кое-что подобное добавить. Но думал народ не поймет.

    А так проще в паблик засунуть, и все.
    Не нужно тут всякий #include, #define, и прочее

  11. #9
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от Valera_Trefilov Посмотреть сообщение
    Я с самого начала хотел кое-что подобное добавить. Но думал народ не поймет.

    А так проще в паблик засунуть, и все.
    Не нужно тут всякий #include, #define, и прочее
    проще != лучше

  12. #10
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    проще != лучше
    все гениальное - просто )

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •