Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама



**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18
  1. #1
    Аватар для m1n1vv
    Пользователь

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

    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
    Сообщений
    338
    Репутация:
    11 ±
    К чему переменная AmountPlus?
    Судя по коду, при каждой передаче money, переменная увеличивается на +1, вопрос зачем? И если игрок получит больше 255 раз money, будет кое что не очень хорошее). Т.к. char, только 0..255

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    258
    Репутация:
    23 ±
    Цитата Сообщение от 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
    Адрес
    Восточный Мордор
    Сообщений
    3,168
    Репутация:
    1274 ±
    А общее дублирование кода к чему?

    То бишь это
    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 

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    11.02.2016
    Адрес
    Геленджик
    Сообщений
    191
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,168
    Репутация:
    1274 ±
    Цитата Сообщение от _lizard Посмотреть сообщение
    ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво
    Эмм, нет. Какая сумма бы не была, ты сразу её обновляешь. Попробуй использовать этот код и увидишь, что момент, когда деньги отнимает, практически незаметен
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

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

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

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

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

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

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

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

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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