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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±

    GivePlayerMoneyPlus

    Решил сделать функцию GivePlayerMoney, которая сразу обрабатывает данные с переменной.

    PHP код:
    stock GivePlayerMoneyPlus(playeridamount)
    {
            
    pInfo[playerid][pMoney] += amount;
            
    GivePlayerMoney(playeridamount);

            if (
    GetPlayerMoney(playerid) != pInfo[playerid][pMoney])
            {
                    
    ResetPlayerMoney(playerid);
                    
    GivePlayerMoney(playeridpInfo[playerid][pMoney]);
            }

            return 
    1;
    }
    #if defined _ALS_GivePlayerMoney
            #undef    GivePlayerMoney
    #else
            #define    _ALS_GivePlayerMoney
    #endif
    #define GivePlayerMoney GivePlayerMoneyPlus 
    GivePlayerMoneyPlus получает указанную сумму, присваивает ее к переменной и выводит количество денег в hud. А дальше проверка, если количество денег с переменной и функции не совпадает, игрок получает число с переменной.

    Код желательно ставить после объявления переменной с главным энуменатором, или после всех new. Также, чтобы выше этого stock'а не было задач с GivePlayerMoney!

    В паблик завершения регистрации/авторизации добавляем:
    PHP код:
    GivePlayerMoney(playerid0); //оставляем 0. Можно использовать для бонуса при регистрации: GivePlayerMoney(playerid, 25000); 
    Все просто.
    Последний раз редактировалось m1n1vv; 30.09.2016 в 20:51.

  2. #2
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    К чему переменная AmountPlus?
    Судя по коду, при каждой передаче money, переменная увеличивается на +1, вопрос зачем? И если игрок получит больше 255 раз money, будет кое что не очень хорошее). Т.к. char, только 0..255

  3. #3
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    К чему переменная AmountPlus?
    Судя по коду, при каждой передаче money, переменная увеличивается на +1, вопрос зачем? И если игрок получит больше 255 раз money, будет кое что не очень хорошее). Т.к. char, только 0..255
    if (!AmountPlus{playerid})

    - - - Добавлено - - -

    А хотя можно и без переменной с проверкой, а выдавать игроку 0 при загрузке данных.
    PHP код:
    GivePlayerMoney(playerid0); 
    Последний раз редактировалось m1n1vv; 30.09.2016 в 20:39.

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А общее дублирование кода к чему?

    То бишь это
    PHP код:
    pInfo[playerid][pMoney] += amount;
    GivePlayerMoney(playeridamount); 
    + условие
    PHP код:
    if (GetPlayerMoney(playerid) != pInfo[playerid][pMoney]) 
    и ещё 2 действия
    PHP код:
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playeridpInfo[playerid][pMoney]); 
    Как я понимаю, это попытка избавиться от постоянного вызова ResetPlayerMoney, так?
    Только на деле выходит, что ты добавляешь вызов GetPlayerMoney и, собственно, обращение к массиву.
    А если условие срабатывает, то ещё и GivePlayerMoney вызываешь повторно.
    Шило на мыло, уроненное в тюремной душевой, меняешь

    Проще сделать так, как по мне:
    PHP код:
    stock GivePlayerMoneyPlus(playeridmoney)
    {
        
    pInfo[playerid][pMoney] += money;
        
    ResetPlayerMoney(playerid);
        return 
    GivePlayerMoney(playeridpInfo[playerid][pMoney]);

    Тут ты и логику функции не меняешь (GivePlayerMoney возвращает 0 в случаях, когда игрок не подключён. Ну и во всех других случаях, когда функция не смогла выполнится), и лишних действий никаких.

    Можно ещё код сделать компактнее, перенеся "+= money" в GivePlayerMoney, но просто у меня в этой функции сразу отправляется запрос в БД с обновлением денег:
      Открыть/закрыть
    PHP код:
    stock ac_money_GivePlayerMoney(playeridmoney)
    {
        
    pInfo[playerid][pMoney] += money;
        if(
    moneyUpdatePlayerMoneyInAccount(playerid);// Если в GivePlayerMoney не выдаётся 0 долларов, вызываем функцию, в которой хранится запрос на обновление денег
        
    ResetPlayerMoney(playerid);
        return 
    GivePlayerMoney(playeridpInfo[playerid][pMoney]);
    }
    #if defined _ALS_GivePlayerMoney
        #undef    GivePlayerMoney
    #else
        #define    _ALS_GivePlayerMoney
    #endif
    #define    GivePlayerMoney        ac_money_GivePlayerMoney 

    поэтому код именно такой (а компактность подобному коду, имхо, не повредит)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    m1n1vv (30.09.2016)
  6. #5
    Аватар для _lizard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.02.2016
    Адрес
    Геленджик
    Сообщений
    193
    Репутация:
    26 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение

    Проще сделать так, как по мне:
    PHP код:
    stock GivePlayerMoneyPlus(playeridmoney)
    {
        
    pInfo[playerid][pMoney] += money;
        
    ResetPlayerMoney(playerid);
        return 
    GivePlayerMoney(playeridpInfo[playerid][pMoney]);

    ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво

  7. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от _lizard Посмотреть сообщение
    ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво
    Эмм, нет. Какая сумма бы не была, ты сразу её обновляешь. Попробуй использовать этот код и увидишь, что момент, когда деньги отнимает, практически незаметен
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от _lizard Посмотреть сообщение
    ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво
    Это просто так в игре отображается

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Ндаа и будут всякие гопники хакать эти цифры потом писать почему я не могу купить то и другое,
    объяснять им что они используют читы и сумма их в другом месте будет точная))

    Я бы с нуля поверх стандартного тд сунул свой который не мигал бы, не крутился, не хакался и обновлялся бы 1 функцией всего...
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Я бы с нуля поверх стандартного тд сунул свой который не мигал бы, не крутился, не хакался и обновлялся бы 1 функцией всего...
    Тогда ныли бы те, кто ставит моды на худы.
    А уделять внимание тому, что какой-то читер внезапно станет возмущаться, почему его визуальное бабло не работает, как по мне, не сильно весомая проблема.
    Последний раз редактировалось Nexius_Tailer; 30.09.2016 в 23:30.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  11. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Ндаа и будут всякие гопники хакать эти цифры потом писать почему я не могу купить то и другое,
    объяснять им что они используют читы и сумма их в другом месте будет точная))

    Я бы с нуля поверх стандартного тд сунул свой который не мигал бы, не крутился, не хакался и обновлялся бы 1 функцией всего...
    Сейчас бы о читерах заботиться...
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

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

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

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

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

Ваши права

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