Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 5 ПерваяПервая 1 2 3 4 5 ПоследняяПоследняя
Показано с 21 по 30 из 43
  1. #21
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Что то у меня не совсем выходит написать по аналогии с этим античит на деньги. Проблема в параметрах функции, которая оповещает администраторов т.д.

    Код:
    error 004 function "OnMoneyCheatDetected" is not implemented
    error 055: start of function body without function header
    error 010: invalid function or declaration
    Последний раз редактировалось Desulaid; 26.05.2015 в 00:27.

  2. #22
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Ура. Вышло. Я же теперь типа "супир" скриптер!
    PHP код:
    /* * * * * * * * * * * * * * * * * * * * * * * * * * *
     *        Money Anticheat
     *            by Darge
     *        www.pro-pawn.ru    \
     *            убрал другую ссылка :)
     *
     *        Copyright (c) 2015 Darge
     *
     *        ipsBruno's and Y_Less's technologies are used.
     *        separate gratitude to Daniel_Cortez
     */

    #if    !defined    AC_MONEY__IGNORE_TIME
        #define    AC_MONEY__IGNORE_TIME    1000
    #endif 

    static ac__money[MAX_PLAYERS];
    static 
    ac__money_ignore_timestamp[MAX_PLAYERS];  

    //------------------------------------------------------
    public OnPlayerUpdate(playerid)
    {
        {
            new 
    money;
            
    money GetPlayerMoney(playerid);
            if(
    ac__money[playerid] != money)
            {
                if((
    ac__money[playerid] > money)
                && (
    GetTickCount() > ac__money_ignore_timestamp[playerid]))  
                {
                    
    ac__money[playerid] = money;
                }
                else if(
    ac__money[playerid] < money)
                {
                    
    GivePlayerMoney(playeridac__money[playerid]);
                
    #if    defined    OnMoneyCheatDetected
                    
    OnMoneyCheatDetected(playeridac__money[playerid], money);
                
    #endif 
                
    }
            }
        }
    #if    defined    ac_hp__OnPlayerUpdate
        
    ac_hp__OnPlayerUpdate(playerid);
    #endif
        
    return 1;
    }
    #if    defined    _ALS_OnPlayerUpdate
        #undef    OnPlayerUpdate
    #else
        #define    _ALS_OnPlayerUpdate
    #endif
    #define    OnPlayerUpdate    ac_hp__OnPlayerUpdate
    #if    defined    ac_hp__OnPlayerUpdate
    forward ac_hp__OnPlayerUpdate(playerid);
    #endif
    //------------------------------------------------------
    public OnPlayerSpawn(playerid)
    {
        
    ac__money_ignore_timestamp[playerid] = GetTickCount()+AC_MONEY__IGNORE_TIME;
        
    ac__money[playerid] = 100;
    #if    defined    ac_money__OnPlayerSpawn
        
    ac_money__OnPlayerSpawn(playerid);
    #endif
        
    return 1;
    }
    #if    defined    _ALS_OnPlayerSpawn
        #undef    OnPlayerSpawn
    #else
        #define    _ALS_OnPlayerSpawn
    #endif
    #define    OnPlayerSpawn    ac_money__OnPlayerSpawn
    #if    defined    ac_money__OnPlayerSpawn
    forward ac_money__OnPlayerSpawn(playerid);
    #endif  
    //------------------------------------------------------
    stock ac__GetPlayerMoney(playeridmoney)
    {
        
    money ac__money[playerid];
        return 
    1;
    }
    #if    defined    _ALS_GetPlayerMoney
        #undef    GetPlayerMoney
    #else
        #define    _ALS_GetPlayerMoney
    #endif
    #define GetPlayerMoney ac__GetPlayerMoney 
    //------------------------------------------------------
    stock ac__GivePlayerMoney(playeridmoney)
    {
        
    ac__money_ignore_timestamp[playerid] = GetTickCount()+AC_MONEY__IGNORE_TIME;
        
    ac__money_ignore_timestamp[playerid] = money;
        return 
    GivePlayerMoney(playeridmoney)
    }
    #if    defined    _ALS_GivePlayerMoney
        #undef    GivePlayerMoney
    #else
        #define    _ALS_GivePlayerMoney
    #endif
    #define GivePlayerMoney ac__GivePlayerMoney
    //------------------------------------------------------
    #if    defined    OnMoneyCheatDetected
    forward OnMoneyCheatDetected(playeridmoney_acmoney_c);
    #endif 

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    1. В чём необходимость использования OnPlayerUpdate? Можно было просто перехватить OnGameModeInit и сделать свой односекундный таймер, а не грузить сервер проверками каждого игрока по 25 раз в секунду.
    2. Если собираетесь публиковать работу - не пользуйтесь машинным переводом, это выглядит убого. Либо учите английский, либо лучше даже не пытайтесь писать на нём.
    3. Это так и задумано, чтобы античит отбирал у игрока все деньги после смерти, оставляя всего 100$ ?
    Цитата Сообщение от Darge
    Код:
    public OnPlayerSpawn(playerid)
    {
        ac__money_ignore_timestamp[playerid] = GetTickCount()+AC_MONEY__IGNORE_TIME;
        ac__money[playerid] = 100;
    #if    defined    ac_money__OnPlayerSpawn
        ac_money__OnPlayerSpawn(playerid);
    #endif
        return 1;
    }
    4. Зачем каждый раз получать кол-во денег у игрока, когда можно сначала проверить время игнора, а уже потом, если нужно, сделать проверку на чит?
    5. Определитесь уже с префиксом:
    Цитата Сообщение от Darge
    Код:
    ac_money__OnPlayerSpawn
    
    ac__money_ignore_timestamp
    ac__money_OnPlayerSpawn
    
    ac__GivePlayerMoney
    
    ac_hp__OnPlayerUpdate // серьёзно!?
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    Desulaid (26.05.2015)
  5. #24
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Не люблю даблпостинг, но всё же...
    Цитата Сообщение от Darge Посмотреть сообщение
    Код:
    stock ac__GivePlayerMoney(playerid, money)
    {
    	ac__money_ignore_timestamp[playerid] = GetTickCount()+AC_MONEY__IGNORE_TIME;
    	ac__money_ignore_timestamp[playerid] = money;
    	return GivePlayerMoney(playerid, money)
    }
    С такими ошибками скоро придётся реквестировать поддержку Pawn в PVS-Studio.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #25
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Хм очень интересно, накидал фикс кика (Что бы выводились сообщения)
    PHP код:
    stock fix_KickPlayer(playerid)
    {
        print(
    "fix_KickPlayer | Вызван");
        
    SetTimerEx("OnPlayerKick"1000false"i"playerid);
        return 
    1;
    }
    #if defined _ALS_Kick
        #undef    Kick
    #else
        #define    _ALS_Kick
    #endif
    #define    Kick    fix_KickPlayer 
    PHP код:
    forward OnPlayerKick(playerid);
    public 
    OnPlayerKick(playerid) return print("OnPlayerKick | Вызван"), Kick(playerid); 
    Вызовы паблика и стока есть, но не кикает, в чем может быть причина?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Вызов оригинала должен быть до переобъявления.
    Скорее всего, у вас паблик находится после переобъявления и вместо вызова оригинала Kick производится вызов перехватчика. В итоге получаем косвенную рекурсию: перехватчик вызывает сам себя через таймер.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Сообщений
    7
    Репутация:
    1 ±
    Можно ли сделать вот так?

    PHP код:
    AC_GivePlayerMoney(playerid,summa)
    {
        
    PlayerInfo[playerid][pMoney] += summa;
        
    GivePlayerMoney(playerid,summa);
        return 
    true;
    }
    #define GivePlayerMoney AC_GivePlayerMoney 
    И еще эти перехваты должны быть после a_samp или до, вот насчет этого момента?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Reim Посмотреть сообщение
    Можно ли сделать вот так?

    PHP код:
    AC_GivePlayerMoney(playerid,summa)
    {
        
    PlayerInfo[playerid][pMoney] += summa;
        
    GivePlayerMoney(playerid,summa);
        return 
    true;
    }
    #define GivePlayerMoney AC_GivePlayerMoney 
    И еще эти перехваты должны быть после a_samp или до, вот насчет этого момента?
    Вы не первый, кто это спрашивает (и вряд ли последний). Поэтому я добавил послесловие в первой части урока.
    Для удобства процитирую его здесь:
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Вместо послесловия:

    Как-то давно один "профессионал" спросил меня, мол зачем вся эта чепуха с перехватами, когда всё можно уместить в один #define?
    PHP код:
    stock my_AddStaticVehicle(modelidFloat:spawn_xFloat:spawn_yFloat:spawn_zFloat:anglecolor1color2)
    {
        print(
    'Функция AddStaticVehicle перехвачена');
        return 
    AddStaticVehicle(modelidspawn_xspawn_yspawn_zanglecolor1color2);
    }
    #define AddStaticVehicle my_AddStaticVehicle 
    Так вот, этот метод в корне неправильный.

    Почему? Очень просто, им нельзя сделать больше одного перехвата на одну и ту же функцию.
    Не верите? Тогда попробуйте скомпилировать код (выведет ошибку на втором #define AddStaticVehicle):
    PHP код:
    // 2-й перехватчик для AddStaticVehicle
    stock my2_AddStaticVehicle(modelidFloat:spawn_xFloat:spawn_yFloat:spawn_zFloat:anglecolor1color2)
    {
        print(
    'Функция AddStaticVehicle перехвачена ещё раз');
        return 
    AddStaticVehicle(modelidspawn_xspawn_yspawn_zanglecolor1color2);
    }
    #define AddStaticVehicle my2_AddStaticVehicle

    // 1-й перехватчик для AddStaticVehicle
    stock my1_AddStaticVehicle(modelidFloat:spawn_xFloat:spawn_yFloat:spawn_zFloat:anglecolor1color2)
    {
        print(
    'Функция AddStaticVehicle перехвачена');
        return 
    AddStaticVehicle(modelidspawn_xspawn_yspawn_zanglecolor1color2);
    }
    #define AddStaticVehicle my1_AddStaticVehicle 
    Не получилось? Я предупреждал.

    Такой способ подойдёт только если вы используете его в своём моде и только если вы перехватываете функцию один раз (хоть я этого и не рекомендую).
    Но если вы используете этот ленивый способ в выкладываемых на Pro-Pawn работах (да, я смотрю на вас, авторы уроков и мануалов), даже не надейтесь, что ваша работа будет одобрена.
    Вы явно ошиблись порталом, если думаете, что можно одобрить полурабочий говнокод, который может нарушить совместимость с другими работами.

    > Но ведь и так сойдёт! А кому не нравится, пусть сами переделывают!!
    Отправляйтесь обратно н***й на govno-info и постите говнокод там.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. 3 пользователя(ей) сказали cпасибо:
    $continue$ (25.06.2015) Desulaid (25.06.2015) Reim (24.06.2015)
  11. #29
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    А если я хочу сделать античит на деньги, в самом игровом моде отдельный переменный который хранит деньги и в античите отдельный. Как нормально сохранить и выдать деньги игроку? Или надо убрать из мода переменный, который хранит информацию о деньгах игрока и использовать для этого только переменную из античита?

  12. #30
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    А если я хочу сделать античит на деньги, в самом игровом моде отдельный переменный который хранит деньги и в античите отдельный. Как нормально сохранить и выдать деньги игроку? Или надо убрать из мода переменный, который хранит информацию о деньгах игрока и использовать для этого только переменную из античита?
    На сколько я понял, то в обычном античите копируется вызываение суммы для античита. А тут мы просто должны перехватить значение > записать его в переменную и далее сравнивать.

 

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

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

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

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

Ваши права

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