Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Избавление от повторных функций.
Sunday Дата: Понедельник, 14.01.2013, 21:14:31 | Сообщение # 1
Сообщений: 186
Репутация: 24 [ +/- ]
Здравствуйте Форумчане! Подскажите как лучше сделать что бы не захламлять скрип повторным кодом. Когда я выбираю в меню, приобрести Shotgun срабатывает код, дающий мне оружие. Еще есть дополнительная зарегистрированная команда bay_shotgun что бы можно было забиндить покупку, дело в том что в коде одно и тоже по два раза.

Как сделать что бы когда я запускаю зарегистрированную команду bay_shotgun, он выполнял функцию из меню option1 или на оборот, когда я выбираю в меню option1 то он выполняет скрипт cmd_shotgun? По сути разници для меня нет ни какой, но второй вариант был бы предпочтительней в плане удобства и эстетичности скрипта, а то как то криво и глупо это, когда по два раза одни и теже функции в скрипте.

Код
public OnPluginStart()
{
       RegConsoleCmd("bay_shotgun", cmd_shotgun);
}


Код
public ActionMenuHandler(Handle:menu, MenuAction:action, client, itemNum)
{
       if ( action == MenuAction_Select )
       {
        new String:info[32];
        GetMenuItem(menu, itemNum, info, sizeof(info));
        if ( strcmp(info,"option1") == 0 )
        {
         {
          ActionMenu(client);
          if (g_iCredits[client] >= 7)
          {
           if (IsPlayerAlive(client))
           {
            GivePlayerItem(client, "weapon_shotgun");
            g_iCredits[client] -= 7;
            PrintToChat(client, "[SM] \x01Вы купили Дробовик! \x04[7 кр]. \x01Осталось \x04%i кр.", g_iCredits[client]);
           }
           else
           {
            PrintToChat(client, "[SM] \x01В данный момент Вы не можете воспользоваться магазином.");
           }
          }
          else
          {
           PrintToChat(client, "[SM] \x01Недостаточно \x04кредитов\x01, у Вас всего \x04%i кр\x01, необходимо \x047 кр\x01.", g_iCredits[client]);
          }
         }
        }


Код
public Action: cmd_shotgun(client, args)
{
       if (g_iCredits[client] >= 7)
       {
        if (IsPlayerAlive(client))
        {
         GivePlayerItem(client, "weapon_shotgun");
         g_iCredits[client] -= 7;
         PrintToChat(client, "[SM] \x01Вы купили Дробовик! \x04[7 кр]. \x01Осталось \x04%i кр.", g_iCredits[client]);
        }
        else
        {
         PrintToChat(client, "[SM] \x01В данный момент Вы не можете воспользоваться магазином.");
        }
       }
       else
       {
        PrintToChat(client, "[SM] \x01Недостаточно \x04кредитов\x01, у Вас всего \x04%i кр\x01, необходимо \x047 кр\x01.", g_iCredits[client]);
       }
}


Сообщение отредактировал Sunday - Понедельник, 14.01.2013, 21:21:03
 
_wS_ Дата: Понедельник, 14.01.2013, 21:57:46 | Сообщение # 2
Код
bool:TryBuyShotgun(client)
{
     if (!IsPlayerAlive(client))
     {
         PrintToChat(client, "[SM] Вы должны быть живы");
         return false;
     }

     if (g_iCredits[client] < 7)
     {
         PrintToChat(client, "[SM] Вам не хватает %d кр", 7 - g_iCredits[client]);
         return false;
     }

     // Желательно проверять, есть ли у него дробовик на руках.
     // И если есть, не выдавать.

     g_iCredits[client] -= 7;
     GivePlayerItem(client, "weapon_shotgun");
     PrintToChat(client, "[SM] \x01Вы купили Дробовик! \x04[7 кр]. \x01Осталось \x04%d кр.", g_iCredits[client]);

     return true;
}

public Action:cmd_shotgun(client, args)
{
     if (0 < client <= MaxClients) TryBuyShotgun(client);
     return Plugin_Handled;
}

public ActionMenuHandler(Handle:menu, MenuAction:action, client, itemNum)
{
     if (action == MenuAction_Select)
     {
         decl String:info[32];
         if (!GetMenuItem(menu, itemNum, info, 32))
             return;

         if (strcmp(info,"option1") == 0) TryBuyShotgun(client);
     }
}

Использование функций
 
Sunday Дата: Понедельник, 14.01.2013, 23:01:30 | Сообщение # 3
Сообщений: 186
Репутация: 24 [ +/- ]
_wS_ Спасибо Вам огроменное за советы и помощь! Переделываю все полностью по Вашему примеру, глаза не нарадуются! klas


Сообщение отредактировал Sunday - Понедельник, 14.01.2013, 23:02:44
 
  • Страница 1 из 1
  • 1
Поиск: