Cortez |
Дата: Вторник, 22.01.2013, 00:04 | Сообщение # 1
|
Боец
Сообщений: 136
Статус: Offline
|
Собственно, хорошая система для проведения лоттерей на серверах. Приступим. Для начала стоит засунуть в enum pInfo строку, отображающую номер купленного билета:
Далее ко всем new стоит добавить переменную JackPot'a
Далее. Мы же хотим, чтобы он сохранялся? Правильно, хотим! Поэтому, добавим в 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; }
Всех благодарю за просмотр. Я надеюсь, что вы чему не будь научитесь из урока.
Сообщение отредактировал Cortez - Вторник, 22.01.2013, 00:05 |
|
|
|