Создание лоттереи, проводимой администраторами - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
Создание лоттереи, проводимой администраторами
Cortez Дата: Вторник, 22.01.2013, 00:04 | Сообщение # 1
Боец
Сообщений: 136
Статус: Offline
Собственно, хорошая система для проведения лоттерей на серверах.
Приступим. Для начала стоит засунуть в enum pInfo строку, отображающую номер купленного билета:
Код
pLottoNr,


Далее ко всем new стоит добавить переменную JackPot'a
Код
new Jackpot;


Далее. Мы же хотим, чтобы он сохранялся? Правильно, хотим! Поэтому, добавим в OnGameModeInit взятие Jackpot'a из файла
Код
new File = iniOpen("jackpot.ini");//Открываем файл. Если Вы его не создали, он его не откроет.
iniGetInt(File,"Jackpot",Jackpot);//Возьмем значение
iniClose(File);//и закроем файл


Теперь стоит позаботиться о покупке этого самого билета (комментарии в коде)
if(strcmp(cmd, "/lotto", true) == 0)//Проверяем совпадение на команду
Код
        {
              if(IsPlayerConnected(playerid))//если человек проходил проверку коннекта, то..
              {
                  if(PlayerInfo[playerid][pLottoNr] > 0)//если у человека уже есть лоттерейный билет, то есть он больше нуля, то..
                  {//Вы можете убрать скобки
                     return SendClientMessage(playerid, COLOR_GREY, "   У Вас уже есть Лотерейный Билет !");//возвращаем сообщение
                  }
                  if(GetPlayerMoney(playerid) < 1500)//Если у человека меньше 1500 на руках, то..
                  {//опять же скобки можно убрать
                     return SendClientMessage(playerid, COLOR_GREY, "   Вы нуждаетесь в 1500$ для Лотерейного Билета !");//возвращаем сообщение
                  }//Все беды учли. Теперь сама команда

                  tmp = strtok(cmdtext, idx);//Берем фразу после пробела
                          if(!strlen(tmp)) {//Если она пуста
                     return SendClientMessage(playerid, COLOR_WHITE," Используйте: /lotto [number]");
                          }
                          if(strval(tmp) < 1 || strval(tmp) > 40) return SendClientMessage(playerid, COLOR_GREY, "   Лотерейный номер не ниже 1 или выше 40 !"); //Если численное значение элемента не подходит под условие
                          format(string, sizeof(string), "* Вы купили Лотерейный Билет с числом: %d.", lottonr);// С человеком все хорошо: у него есть деньги, не билета и он хочет оный от еденицы до сорока, то выдадим ему билет
                          SendClientMessage(playerid, COLOR_LIGHTBLUE, string);//и напишем сообщение, что выдали
                          GivePlayerMoney(playerid, - 1500);//и заберем деньги
                          PlayerInfo[playerid][pLottoNr] = strval(tmp);//и заберем значение   
              }
              return 1;
          }


Билет мы купили. Теперь стоит организовать само лотто
Ко всем forward'am стоит засунуть это:
Код
forward Lotto(number);


Вот команда для начала лотто:
Код
        if(strcmp(cmd, "/startlotto", true) == 0)//Если введенный cmd совпал со /startlotto, то..
          {
              if(IsPlayerConnected(playerid))
              {
                  if(PlayerInfo[playerid][pAdmin] >= 6)//Если уровень администраторского поста есть 6 или выше, то..
                  {
                      SendClientMessageToAll(COLOR_WHITE, "Лоттерея началась");//сообщаем о лоттерее
                      new rand = random(40) + 1;//Выбираем рандомно выигрышный билет
                      Lotto(rand);//Запускаем лотто   
                  }
                  else return SendClientMessage(playerid, COLOR_GREY, "   Вы не уполномочены использовать эту команду !");
              }
                  return 1;
          }
public Lotto(number)//Наш паблик
{
          new bool:JackpotFallen = false; //Переменная для создания счета лоттереи
          new string[256];//переменная для форматирования строки
          new winner[MAX_PLAYER_NAME];//переменная для победителя и его имени
          format(string, sizeof(string), "{FFA100}Лоттерея {FF0000}VW RP:{FFFFFF} Сегодня Выигрышный номер {FF0000}%d", number);//Форматируем строку о выигрышном номере
      SendClientMessageToAll(COLOR_WHITE, string);// Отправляем ее всем
      for(new i = 0; i < MAX_PLAYERS; i++)//Теперь нам нужен цикл, чтобы найти счастливчика
          {
                  if(IsPlayerConnected(i))//Если человек с идом 'i' онлайн, то..
                  {
                    if(PlayerInfo[i][pLottoNr] == number)// Если номер билета совпал с его номером, то..
                    {
                     JackpotFallen = true;//Выдаем переменной значение правды, чтоб потом обнулить лоттерею.
                     GetPlayerName(i, winner, sizeof(winner));//Забираем имя счастливчика...
                     format(string, sizeof(string), "{FFA100}Лоттерея {FF0000}VW RP:{FFFFFF} %s игрок выиграл $%d!", winner, Jackpot);//...форматируем с ним строку
                     SendClientMessageToAll(COLOR_WHITE, string);//И выводи ее
                     format(string, sizeof(string), "* Вы выйграли $%d денег", Jackpot);//Форматируем строку для него
                     SendClientMessage(i, COLOR_YELLOW, string);//И выводим ее
                     GivePlayerMoney(i, Jackpot);//Выдаем ему JackPot
                    }
                    else   SendClientMessage(i, COLOR_LIGHTBLUE, "* Ваш лотерейный билет проиграл.");//Это если номер билета не совпал
                          PlayerInfo[i][pLottoNr] = 0;//Обнуляем билет
                  }
          }
          if(JackpotFallen)//Если был победитель, то...
          {
              new rand = random(225000); rand += 415789;//Устанавливаем новую сумму
              Jackpot = rand;//Устанавливаем новый JackPot
              format(string, sizeof(string), "Новости лотереи: Установлен новый джекпот $%d.", Jackpot);//Форматируем для него строку
                  SendClientMessageToAll(COLOR_WHITE, string);
          }
          else
          {
              new rand = random(215000); rand += 122158;//Устанавливаем новую сумму
              Jackpot += rand;// прибавляем к JackPot'y
              format(string, sizeof(string), "Новости лотереи: Джекпот поднят до $%d.", Jackpot);
                  SendClientMessageToAll(COLOR_WHITE, string);//И выводи мсообщение об этом
          }
new File = iniOpen("jackpot.ini");//Открываем файл.   
iniSetInt(File,"Jackpot",Jackpot);//Устанавливаем значение
iniClose(File);//и закроем файл
          return 1;
}


Всех благодарю за просмотр. Я надеюсь, что вы чему не будь научитесь из урока.

Прикрепления: 1494694.gif (14.5 Kb)


Сообщение отредактировал Cortez - Вторник, 22.01.2013, 00:05
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума