1. Sol Casino
Бонус за регистрацию: 80 Бесплатных Спинов ( Ссылка на Бесплатный Бонус )
Бонус за первый депозит: 150% за пополнение на €/$/₽ 1000 ( Ссылка на регистрацию )
2. Rox Casino
Бонус за регистрацию: 40 Бесплатных Спинов ( Ссылка на Бесплатный Бонус )
Бонус за первый депозит: 100% за пополнение на €/$/₽ 200 ( Ссылка на регистрацию )
3. Jet Casino
Бонус за регистрацию: 200 Бесплатных Спинов ( Ссылка на Бесплатный Бонус )
Бонус за первый депозит: 200% за пополнение на €/$/₽ 300 ( Ссылка на регистрацию )
4. Fresh Casino
Бонус за регистрацию: 200 Бесплатных Спинов ( Ссылка на Бесплатный Бонус )
Бонус за первый депозит: 200% за пополнение на €/$/₽ 1000 ( Ссылка на регистрацию )
5. Izzi Casino
Бонус за регистрацию: 70 Бесплатных Спинов ( Ссылка на Бесплатный Бонус )
Бонус за первый депозит: 150% за пополнение на €/$/₽ 1000 ( Ссылка на регистрацию )
6. Legzo Casino
Бонус за регистрацию: 60 Бесплатных Спинов ( Ссылка на Бесплатный Бонус )
Бонус за первый депозит: 100% за пополнение на €/$/₽ 1000 ( Ссылка на регистрацию )
Система казино с крупье. (Copy Diamond RP 95%)
Hello world!
Очередная система которая подойдёт для Вашего сервера как для стабильного использования так и для основы.
Как обычно буду ждать людей которые неповторимые,уникальные и вообще все должны ровняться к их коду.
В этот раз я выкладываю мануал по вставлению системы казино схожей с Diamond RolePlay.
Весь код подписываю для новичков что-бы им было понятнее что за что отвечает.
Система требует плагина
STREAMER!
Видео системы + описание:
Посмотрели видео про систему и готовы к вставлению в свой мод?
Тогда приступим.Шаг 1 | В начало мода добавляем:
PHP:
#define dCasino (8575) // ID диалога отвечающего за казино (у Вас может быть занят и поменяйте на свой) #define MAX_TABLE (8) // Максимальное количество столов
new CasinoEnter[2], // Вход/Выход в казино arCasinoTable[MAX_TABLE], // Переменная отвечающая за зоны со столами. CasinoTimer[MAX_TABLE], // Таймер для каждого стола CrupiePick, // Пикап с формой крупье TotalCrupie, // Счётчик крупье на работе Text:TD_CASINO[MAX_TABLE][8], // Текстдравы с казино Text:TD_CASINO2[3]; // Текстдравы с казино
enum TableInformation t_players[4], // Максимальное количество игроков за столом t_bet, // Ставка за столом t_crup, // Крупье за столом bool:t_status, // Статус игры за столом step // Переменная используемая после старта игры ; new TableInfo[MAX_TABLE][TableInformation]; // Переменная для занесения и получения информации со стола
Шаг 2 | В OnGameModeInit добавляем:
PHP:
for(new i; i < MAX_TABLE; i++) TableInfo[i][t_players][0] = TableInfo[i][t_players][1] = TableInfo[i][t_players][2] = TableInfo[i][t_players][3] = TableInfo[i][t_crup] = INVALID_PLAYER_ID; // Обнуляем всех игроков и крупье для стола TableInfo[i][step] = 20,TableInfo[i][t_bet] = 0,TableInfo[i][t_status] = false; // Обнуляем переменные на нужные параметры.
new russtring[64]; for(new t; t < MAX_TABLE; t++) TD_CASINO[t][0] = TextDrawCreate(191.000045, 202.270294, "usebox"); TextDrawLetterSize(TD_CASINO[t][0], 0.000000, 8.256170); TextDrawTextSize(TD_CASINO[t][0], 40.000003, 0.000000); TextDrawAlignment(TD_CASINO[t][0], 1); TextDrawColor(TD_CASINO[t][0], 0); TextDrawUseBox(TD_CASINO[t][0], true); TextDrawBoxColor(TD_CASINO[t][0], 512819072); TextDrawSetShadow(TD_CASINO[t][0], 0); TextDrawSetOutline(TD_CASINO[t][0], 0); TextDrawFont(TD_CASINO[t][0], 0);
TD_CASINO[t][1] = TextDrawCreate(189.999984, 203.514801, "usebox"); TextDrawLetterSize(TD_CASINO[t][1], 0.000000, 7.954113); TextDrawTextSize(TD_CASINO[t][1], 41.000000, 0.000000); TextDrawAlignment(TD_CASINO[t][1], 1); TextDrawColor(TD_CASINO[t][1], 0); TextDrawUseBox(TD_CASINO[t][1], true); TextDrawBoxColor(TD_CASINO[t][1], 136); TextDrawSetShadow(TD_CASINO[t][1], 0); TextDrawSetOutline(TD_CASINO[t][1], 0); TextDrawFont(TD_CASINO[t][1], 0);
format(russtring,sizeof(russtring),"Table %d",t+1); TD_CASINO[t][2] = TextDrawCreate(187.999877, 187.496215, russtring); TextDrawLetterSize(TD_CASINO[t][2], 0.550333, 1.649776); TextDrawAlignment(TD_CASINO[t][2], 3); TextDrawColor(TD_CASINO[t][2], -1); TextDrawUseBox(TD_CASINO[t][2], true); TextDrawBoxColor(TD_CASINO[t][2], 0); TextDrawSetShadow(TD_CASINO[t][2], 0); TextDrawSetOutline(TD_CASINO[t][2], 1); TextDrawBackgroundColor(TD_CASINO[t][2], 51); TextDrawFont(TD_CASINO[t][2], 0); TextDrawSetProportional(TD_CASINO[t][2], 1);
TD_CASINO[t][3] = TextDrawCreate(45.000034, 202.844451, "_"); TextDrawLetterSize(TD_CASINO[t][3], 0.300666, 1.500443); TextDrawAlignment(TD_CASINO[t][3], 1); TextDrawColor(TD_CASINO[t][3], -1); TextDrawSetShadow(TD_CASINO[t][3], 0); TextDrawSetOutline(TD_CASINO[t][3], 0); TextDrawBackgroundColor(TD_CASINO[t][3], 51); TextDrawFont(TD_CASINO[t][3], 2); TextDrawSetProportional(TD_CASINO[t][3], 1);
TD_CASINO[t][4] = TextDrawCreate(182.666656, 246.655563, "usebox"); TextDrawLetterSize(TD_CASINO[t][4], 0.000000, 2.231892); TextDrawTextSize(TD_CASINO[t][4], 139.000000, 0.000000); TextDrawAlignment(TD_CASINO[t][4], 1); TextDrawColor(TD_CASINO[t][4], 0); TextDrawUseBox(TD_CASINO[t][4], true); TextDrawBoxColor(TD_CASINO[t][4], 85); TextDrawSetShadow(TD_CASINO[t][4], 0); TextDrawSetOutline(TD_CASINO[t][4], 0); TextDrawFont(TD_CASINO[t][4], 0);
TD_CASINO[t][5] = TextDrawCreate(129.333297, 246.655548, "usebox"); TextDrawLetterSize(TD_CASINO[t][5], 0.000000, 2.219134); TextDrawTextSize(TD_CASINO[t][5], 85.666656, 0.000000); TextDrawAlignment(TD_CASINO[t][5], 1); TextDrawColor(TD_CASINO[t][5], 0); TextDrawUseBox(TD_CASINO[t][5], true); TextDrawBoxColor(TD_CASINO[t][5], 85); TextDrawSetShadow(TD_CASINO[t][5], 0); TextDrawSetOutline(TD_CASINO[t][5], 0); TextDrawFont(TD_CASINO[t][5], 0);
TD_CASINO[t][6] = TextDrawCreate(90.333305, 248.889007, "BET"); TextDrawLetterSize(TD_CASINO[t][6], 0.449999, 1.600000); TextDrawAlignment(TD_CASINO[t][6], 1); TextDrawColor(TD_CASINO[t][6], -1); TextDrawSetShadow(TD_CASINO[t][6], 0); TextDrawSetOutline(TD_CASINO[t][6], 1); TextDrawBackgroundColor(TD_CASINO[t][6], 51); TextDrawFont(TD_CASINO[t][6], 2); TextDrawSetProportional(TD_CASINO[t][6], 1); TextDrawSetSelectable(TD_CASINO[t][6], true);
TD_CASINO[t][7] = TextDrawCreate(143.333312, 248.474105, "EXIT"); TextDrawLetterSize(TD_CASINO[t][7], 0.400666, 1.620740); TextDrawAlignment(TD_CASINO[t][7], 1); TextDrawColor(TD_CASINO[t][7], -1); TextDrawSetShadow(TD_CASINO[t][7], 0); TextDrawSetOutline(TD_CASINO[t][7], 1); TextDrawBackgroundColor(TD_CASINO[t][7], 51); TextDrawFont(TD_CASINO[t][7], 2); TextDrawSetProportional(TD_CASINO[t][7], 1); TextDrawSetSelectable(TD_CASINO[t][7], true);
TD_CASINO2[0] = TextDrawCreate(186.333358, 231.722396, "usebox"); TextDrawLetterSize(TD_CASINO2[0], 0.000000, 5.192800); TextDrawTextSize(TD_CASINO2[0], 14.000000, 0.000000); TextDrawAlignment(TD_CASINO2[0], 1); TextDrawColor(TD_CASINO2[0], 0); TextDrawUseBox(TD_CASINO2[0], true); TextDrawBoxColor(TD_CASINO2[0], 136); TextDrawSetShadow(TD_CASINO2[0], 0); TextDrawSetOutline(TD_CASINO2[0], 0); TextDrawFont(TD_CASINO2[0], 0);
format(russtring,sizeof(russtring),"Казино:"),RussianString(russtring); TD_CASINO2[1] = TextDrawCreate(19.000007, 231.051788, russtring); TextDrawLetterSize(TD_CASINO2[1], 0.200333, 1.114666); TextDrawAlignment(TD_CASINO2[1], 1); TextDrawColor(TD_CASINO2[1], -1); TextDrawUseBox(TD_CASINO2[1], true); TextDrawBoxColor(TD_CASINO2[1], 0); TextDrawSetShadow(TD_CASINO2[1], 0); TextDrawSetOutline(TD_CASINO2[1], 1); TextDrawBackgroundColor(TD_CASINO2[1], 51); TextDrawFont(TD_CASINO2[1], 2); TextDrawSetProportional(TD_CASINO2[1], 1);
format(russtring,sizeof(russtring),"Нажмите ~g~ENTER ~w~,для начала игры."),RussianString(russtring); TD_CASINO2[2] = TextDrawCreate(27.666664, 251.377716,russtring); TextDrawLetterSize(TD_CASINO2[2], 0.252000, 1.309629); TextDrawAlignment(TD_CASINO2[2], 1); TextDrawColor(TD_CASINO2[2], -1); TextDrawSetShadow(TD_CASINO2[2], 0); TextDrawSetOutline(TD_CASINO2[2], 0); TextDrawBackgroundColor(TD_CASINO2[2], 51); TextDrawFont(TD_CASINO2[2], 1); TextDrawSetProportional(TD_CASINO2[2], 1);
arCasinoTable[0] = CreateDynamicSphere(1134.7911,8.9401,1002.0859,1.5,84,12); // Зона 1 стола arCasinoTable[1] = CreateDynamicSphere(1130.7679,8.9388,1002.0765,1.5,84,12); // Зона 2 стола arCasinoTable[2] = CreateDynamicSphere(1127.1974,10.6244,1002.0779,1.5,84,12); // Зона 3 стола arCasinoTable[3] = CreateDynamicSphere(1123.1827,10.6287,1002.0828,1.5,84,12); // Зона 4 стола arCasinoTable[4] = CreateDynamicSphere(1119.0936,10.6281,1002.0785,1.5,84,12); // Зона 5 стола arCasinoTable[5] = CreateDynamicSphere(1123.2678,-12.0488,1003.0643,1.5,84,12); // Зона 6 стола arCasinoTable[6] = CreateDynamicSphere(1119.4989,-12.2548,1003.0643,1.5,84,12); // Зона 7 стола arCasinoTable[7] = CreateDynamicSphere(1115.1686,-12.7207,1003.0643,1.5,84,12); // Зона 8 стола CrupiePick = CreateDynamicPickup(1275,23,1081.6989,-7.8721,1000.6797,84,12); // Пикап с раздевалкой для крупье CasinoEnter[0] = CreateDynamicPickup(1318,23,1965.0454,1623.2830,12.8616); // Вход в казино CasinoEnter[1] = CreateDynamicPickup(1318,23,1133.1960,-15.8325,1000.6797,84,12); // Выход в казино
Шаг 3 | В OnPlayerConnect вставляем:
PHP:
SetPVarInt(playerid, "CasinoTable", -1); // Обнуляем игроку номер стола SetPVarInt(playerid, "SelectTextDrawEnter", 0); // Деактивируем кликабельность игроку
Шаг 4 | В OnPlayerUpdate вставляем:
PHP:
if(GetPVarInt(playerid, "SelectTextDrawEnter")) SelectTextDraw(playerid, 0xFFFFFFFF); // Если у игрока активирована клибкальность и он закрыл её,то включаем снова. if(GetPVarInt(playerid, "CRUPIE") != 0 && !IsPlayerInRangeOfPoint(playerid,500.0,1094.6656,-0.2508,1000.6797)) SetPlayerSkin(playerid,GetPVarInt(playerid,"CRUPIE")),DeletePVar(playerid,"CRUPIE"),SendClientMessage(playerid, 0x808080FF, "[Casino]: Вы потеряли форму крупье."); // Если крупье вышел в форме из казино.
Шаг 5 | В OnPlayerPickUpDynamicPickup вставляем:
PHP:
if(pickupid == CasinoEnter[0]) // Если игрок встал на пикап с входом SetPlayerPos(playerid,1133.0704,-11.3286,1000.6797); // Кординаты внутри интеръера SetPlayerFacingAngle(playerid,0.4840); // Поворот головы SetPlayerInterior(playerid,12); // ID интеръера с казино SetPlayerVirtualWorld(playerid,84); // Вирт мир if(pickupid == CasinoEnter[1]) // Если игрок встал на пикап с выходом SetPlayerPos(playerid,1969.1742,1622.9893,12.8636); // Кординаты на улице SetPlayerFacingAngle(playerid,268.7483); // Поворот головы SetPlayerInterior(playerid,0); // ID интеръера с казино SetPlayerVirtualWorld(playerid,0); // Вирт мир if(pickupid == CrupiePick) // Если игрок встал на пикап с формой крупье if(TotalCrupie >= 10) return SendClientMessage(playerid,0x808080FF,"[Casino]: Превышен лимит крупье на работе."); // Если на работе больше 10 крупье,то выводим сообщение. if(GetPVarInt(playerid,"CRUPIE") == 0) SendClientMessage(playerid,0x008000FF,"Вы взяли форму крупье."),SetPVarInt(playerid,"CRUPIE",GetPlayerSkin(playerid)),SetPlayerSkin(playerid,171),TotalCrupie++; // Если игрок не является на работе,то выдаём форму else SendClientMessage(playerid,0x008000FF,"Вы положили форму крупье."),SetPlayerSkin(playerid,GetPVarInt(playerid,"CRUPIE")),DeletePVar(playerid,"CRUPIE"),TotalCrupie–; // А иначе забираем форму
Шаг 6 | В OnPlayerDisconnect вставляем:
PHP:
if(GetPVarInt(playerid,"CasinoTable") != -1) // Если игрок находится за столом new tableid = GetPVarInt(playerid,"CasinoTable"); // Узнаем номер стола игрока for(new i; i < 4; i++) // Проходим все 4 места за столом if(TableInfo[tableid][t_players][i] == playerid) // Если игрок обнаружен за определенным слотом стола GivePlayerMoney(playerid,TableInfo[tableid][t_bet]); // Возвращаем деньги со ставки игроку (функция GivePlayerMoney может быть другая) TableInfo[tableid][t_players][i] = INVALID_PLAYER_ID; // Обнуляем игрока под указанным столом if(GetPVarInt(playerid,"CRUPIE") != 0) TableInfo[tableid][t_crup] = INVALID_PLAYER_ID,TotalCrupie–; // Если из игры вышел крупье,то обнуляем крупье за столом. Casino_Update(tableid); // Обновляем текстдрав стола
Шаг 7 | В OnPlayerEnterDynamicArea вставляем:
PHP:
for(new i; i < sizeof(arCasinoTable); i++) // Обходим количество столов if(areaid == arCasinoTable[i]) for(new td; td < 3; td++) TextDrawShowForPlayer(playerid, TD_CASINO2[td]); // Если игрок находится в зоне из одного стола,то показываем ему текстдравы
Шаг 8 | В OnPlayerLeaveDynamicArea вставляем:
PHP:
for(new i; i < sizeof(arCasinoTable); i++) // Обходим количество столов if(areaid == arCasinoTable[i]) for(new td; td < 3; td++) TextDrawHideForPlayer(playerid, TD_CASINO2[td]); // Если игрок не находся возле стола,то прячем от него текстдравы
Шаг 9 | В OnPlayerClickTextDraw вставляем:
PHP:
if(GetPVarInt(playerid,"CasinoTable") != -1) // Если игрок находится за столом new tableid = GetPVarInt(playerid,"CasinoTable"),string[128]; // Узнаем номер стола за которым находится игрок и создаём массив для оповещений ниже if(clickedid == TD_CASINO[tableid][6]) // Если игрок нажал на ‘BET’ if(GetPVarInt(playerid,"CasinoFLOOD") > gettime()) return true; // Если не прошло 2 секунды после последнего нажатия,то ничего не делаем.
if(TableInfo[tableid][t_status] == true) return SendClientMessage(playerid,0x808080FF,"[Casino]: Вы не можете воспользоваться этим во время игры."); // Думаю здесь всё понятно if(GetPVarInt(playerid,"CRUPIE") != 0) return ShowPlayerDialog(playerid, dCasino, DIALOG_STYLE_LIST, "Меню крупье", "FFFFFF1. Установить ставку\n2. Удалить ставку\n3. FF0000Запустить рулетку", "Выбрать", "Отмена"); // Если игрок за столом является крупье,то показываем ему диалог.
if(TableInfo[tableid][t_bet] == 0) return SendClientMessage(playerid,0x808080FF,"[Casino]: За данным столом нет ставки."); // Думаю здесь всё понятно if(Casino_GetPlayerID(tableid,playerid) != -1) return SendClientMessage(playerid,0x808080FF,"[Casino]: Вы уже сделали ставку."); // Думаю здесь всё понятно if(Casino_TotalPlayer(tableid) == 4) return SendClientMessage(playerid,0x808080FF,"[Casino]: За столом недостаточно мест."); // Думаю здесь всё понятно if(GetPlayerMoney(playerid) < TableInfo[tableid][t_bet]) return SendClientMessage(playerid, 0x808080FF, "[Крупье]: У Вас недостаточно денег"); // Функция GetPlayerMoney может быть другая.
SetPVarInt(playerid,"CasinoFLOOD",gettime()+2); // Выставляем антифлуд на 2 секунды
format(string,sizeof(string),"[Крупье]: Вы успешно разместили свою ставку в размере %d$",TableInfo[tableid][t_bet]); // Форматируем оповещение SendClientMessage(playerid,0x008000FF,string); // Выводим оповещение игроку GivePlayerMoney(playerid,-TableInfo[tableid][t_bet]); // Забираем деньги у игрока за ставку (функция GivePlayerMoney у Вас может быть другая) TableInfo[tableid][t_players][Casino_GetSlot(tableid)] = playerid; // Присваиваем ид игрока столу под свободный слот Casino_Update(tableid); // Обновляем текстдрав
if(clickedid == TD_CASINO[tableid][7]) // Если игрок нажал на ‘EXIT’ if(TableInfo[tableid][t_status] == true && Casino_GetPlayerID(tableid,playerid) != -1) return SendClientMessage(playerid,0x808080FF,"[Casino]: Вы не можете воспользоваться этим во время игры."); // Думаю здесь всё понятно if(TableInfo[tableid][t_status] == true && TableInfo[tableid][t_crup] == playerid) return SendClientMessage(playerid,0x808080FF,"[Casino]: Вы не можете воспользоваться этим во время игры."); // Думаю здесь всё понятно if(GetPVarInt(playerid,"CRUPIE") != 0) TableInfo[tableid][t_crup] = INVALID_PLAYER_ID; // Если игрок вышел со стола будучи крупье,то обнуляем место крупье. for(new i; i < 8; i++) TextDrawHideForPlayer(playerid, TD_CASINO[tableid][i]); // Прячем текстдравы с казино для игрока for(new i; i < 3; i++) TextDrawShowForPlayer(playerid, TD_CASINO2[i]); // Показываем текстдрав с информацией возле стола for(new i; i < 4; i++) // Обходим слоты игроков за столом if(TableInfo[tableid][t_players][i] == playerid) // Если игрок найден под одним из слотов format(string,sizeof(string),"[Крупье]: Вы успешно забрали свою ставку в размере %d$",TableInfo[tableid][t_bet]); // Форматируем оповещение SendClientMessage(playerid,0x008000FF,string); // Выводим оповещение игроку GivePlayerMoney(playerid,TableInfo[tableid][t_bet]); // Возвращаем деньги игроку (GivePlayerMoney может быть другая) TableInfo[tableid][t_players][i] = INVALID_PLAYER_ID; // Обнуляем игрока под слотом Casino_Update(tableid); // Обновляем текстдрав стола SetPVarInt(playerid, "SelectTextDrawEnter", 0),SetPVarInt(playerid, "CasinoTable", -1),CancelSelectTextDraw(playerid); // Обнуляем нажатие на текстдравы,номер стола для игрока и убираем кликабельность.
Шаг 10 | В OnPlayerKeyStateChange вставляем:
PHP:
if(newkeys == 16) // Если игрок нажал Enter for(new t; t < sizeof(arCasinoTable); t++) // Обходим все столы if(IsPlayerInDynamicArea(playerid, arCasinoTable[t])) // Если игрок находится в зоне возле стола if(GetPVarInt(playerid,"CRUPIE") != 0) // Если игрок является крупье if(TableInfo[t][t_crup] != INVALID_PLAYER_ID) return SendClientMessage(playerid,0x808080FF,"Данный стол уже занят!"); // Думаю тут всё понятно TableInfo[t][t_crup] = playerid; // Присваиваем ид крупье для стола new string[128]; // Массив для оповещения ниже format(string,sizeof(string),"Вы успешно заняли стол №%d. Для управления столом нажмите на кнопку ‘BET’",t+1); // Форматируем оповещение SendClientMessage(playerid,0x808080FF,string); // Выводим оповещение for(new i; i < 3; i++) TextDrawHideForPlayer(playerid, TD_CASINO2[i]); // Прячем текстдравы с оповещение возле стола for(new i; i < 8; i++) TextDrawShowForPlayer(playerid, TD_CASINO[t][i]); // Показываем текстдрав самого стола SelectTextDraw(playerid, 0xFFFFFFFF),SetPVarInt(playerid, "SelectTextDrawEnter", 1),SetPVarInt(playerid,"CasinoTable",t); // Включаем кликабельность,статус нажатого текстдрава и присваиваем значение под каким столом игрок
Шаг 11 | В OnDialogResponse вставляем:
PHP:
case dCasino: // Диалог с меню казино для крупье (у Вас может быть if(dialogid == dCasino) если не используете switch(dialogid)) if(!response) return true; // Если игрок нажал ОТМЕНА то ничего не делаем new tableid = GetPVarInt(playerid,"CasinoTable"); // Узнаем под каким столом находится игрок switch(listitem) case 0: if(Casino_TotalPlayer(tableid) > 0) return SendClientMessage(playerid,0x808080FF,"[Casino]: Недоступно из за игроков за столом."); // Думаю здесь всё понятно ShowPlayerDialog(playerid, dCasino+1, DIALOG_STYLE_INPUT, "Управление ставкой", "Введите ставку которую Вы хотите установить за Вашим столом:\n\nИспользуйте от 1.000$ до 10.000.000$", "Установить", "Отмена"); // Думаю здесь тоже понятно case 1: if(Casino_TotalPlayer(tableid) > 0) return SendClientMessage(playerid,0x808080FF,"[Casino]: Недоступно из за игроков за столом."); // Думаю тут всё понятно if(TableInfo[tableid][t_bet] == 0) return SendClientMessage(playerid,0x808080FF,"[Casino]: За столом не установлена ставка."); // Думаю тут всё понятно TableInfo[tableid][t_bet] = 0,Casino_Update(tableid); // Обнуляем ставку и обновляем текстдрав стола SendClientMessage(playerid,0x008000FF,"[Casino]: Вы успешно удалили ставку."); // Выводим оповещение case 2: if(Casino_TotalPlayer(tableid) < 2) return SendClientMessage(playerid,0x808080FF,"[Casino]: За столом недостаточно игроков"); // Думаю тут всё понятно CasinoTimer[tableid] = SetTimerEx("Casino_Start", 500, true, "d", tableid); // Запускаем таймер для стола TableInfo[tableid][t_status] = true; // Устанавливаем статус игры на столе SendClientMessage(playerid,0x008000FF,"[Casino]: Вы успешно запустили рулетку.."); // Выводим оповещение case dCasino+1: // Диалог с меню казино для крупье (у Вас может быть if(dialogid == dCasino+1) если не используете switch(dialogid)) if(!response) return true; // Если игрок нажал ОТМЕНА то ничего не делаем if(strval(inputtext) < 1000
Шаг 12 | В конец мода добавляем:
PHP:
forward Casino_Start(tableid); public Casino_Start(tableid) // Паблик для работы с таймером (местами можете оптимизировать если необходимо) new string[128]; // Создаём массив для дальнейших форматов if(TableInfo[tableid][step] == 0) // Если время за столом подошло к концу for(new i; i < 4; i++) // Обходим всех игроков за столом if(TableInfo[tableid][t_players][i] != INVALID_PLAYER_ID && Casino_GetPlayerID(tableid,TableInfo[tableid][t_players][i]) != -1) // Если за столом есть игрок и его слот не ровняется -1 SetPVarInt(TableInfo[tableid][t_players][i],"WINNER",random(20)); // Выставляем игроку победное число по окончанию игры format(string,sizeof(string),"%d",GetPVarInt(TableInfo[tableid][t_players][i],"WINNER")); // Форматируем победное число игроку GameTextForPlayer(TableInfo[tableid][t_players][i], string, 1000, 3); // Показываем победное число игроку PlayerPlaySound(TableInfo[tableid][t_players][i], 33403, 0.0, 0.0, 0.0); // Производим звук для игрока
new maxs,winid = -1; // Переменные для определения победителя for(new i; i < GetMaxPlayers(); i++) // Обходим всех игроков на сервере if(GetPVarInt(i,"CasinoTable") == tableid && Casino_GetPlayerID(tableid,i) != -1) // Если игрок находится за нужным столом и его слот не ровняется -1 new v = GetPVarInt(i,"WINNER"); // Достаём победное число игрока if(v > maxs) maxs = v,winid = i; // Если победное число игрока больше чем текущее,то присваиваем его ид как победный if(i != winid && i != TableInfo[tableid][t_crup]) // Если игрок находится за столом и не ровняется крупье format(string,sizeof(string),"[Крупье]: Вы проиграли FF4500%d$1E90FF. Ваше число: FF4500%d",TableInfo[tableid][t_bet],GetPVarInt(i,"WINNER")); // Форматируем текст SendClientMessage(i,0x1E90FFFF,string); // Отправляем текст PlayerPlaySound(i, 1058, 0.0, 0.0, 0.0); // Производим звук для игрока if(GetPVarInt(i,"CasinoTable") == tableid && Casino_GetPlayerID(tableid,i) == -1) // Если игрок находится за столом но не в игре format(string,sizeof(string),"%d",TableInfo[tableid][step]); // Форматируем текст со временем GameTextForPlayer(i, string, 1000, 3); // Выводим тескт со временем игроку
if(TableInfo[tableid][t_crup] != INVALID_PLAYER_ID) // Если за столом находится крупье new crupiemoney = ((TableInfo[tableid][t_bet]*Casino_TotalPlayer(tableid))/100)*1; // Вычисляем 1% для крупье от банка игры GivePlayerMoney(TableInfo[tableid][t_crup],crupiemoney); // Выдаём деньги крупье за игру (функция GivePlayerMoney может быть другая) format(string,sizeof(string),"[Casino]: Вы получили %d$ от банка %d$",crupiemoney,TableInfo[tableid][t_bet]*Casino_TotalPlayer(tableid)); // Форматируем текст SendClientMessage(TableInfo[tableid][t_crup],0x008000FF,string); // Выводим текст
new prize = ((TableInfo[tableid][t_bet]*Casino_TotalPlayer(tableid))/100)*95; // Вычисляем 95% от банка победителю GivePlayerMoney(winid,prize); // Выдаём деньги победителю format(string,sizeof(string),"[Крупье]: Вы выиграли FF4500%d$ 1E90FF с числом FF4500%d",prize,GetPVarInt(winid,"WINNER")); // Форматируем текст SendClientMessage(winid,0x1E90FFFF,string); // Выводим текст PlayerPlaySound(winid, 1085, 0.0, 0.0, 0.0); // Производим звук для победителя
format(string, sizeof(string), "%s выиграл в кости. Выпавшее число: %d",GetName(winid),GetPVarInt(winid,"WINNER")); // Форматируем текст (GetName у вас может быть другой) ProxDetector(15.0,winid,0xDD90FFAA,0xDD90FFAA,0xDD90FFAA,0xDD90FFAA,0xDD90FFAA); // Выводим текст в радиусе 15 (проверьте наличие функции ProxDetector)
for(new i; i < 4; i++) DeletePVar(TableInfo[tableid][t_players][i],"WINNER"),TableInfo[tableid][t_players][i] = INVALID_PLAYER_ID; // Обнуляем игроков за столом TableInfo[tableid][step] = 20,TableInfo[tableid][t_bet] = 0,TableInfo[tableid][t_status] = false; // Выставляем нужные значения переменных для стола KillTimer(CasinoTimer[tableid]),Casino_Update(tableid); // Убиваем таймер и обновляем текстдрав стола else // Время не подошло к концу? for(new i; i < 4; i++) // Обходим всех игроков за столом if(TableInfo[tableid][t_players][i] != INVALID_PLAYER_ID && Casino_GetPlayerID(tableid,TableInfo[tableid][t_players][i]) != -1) // Если за столом найден игрок и его слот не ровняется -1 format(string,sizeof(string),"%d",random(20)); // Форматируем ему текст с рандомным числом GameTextForPlayer(TableInfo[tableid][t_players][i], string, 1000, 3); // Показываем ему текст PlayerPlaySound(TableInfo[tableid][t_players][i], 33403, 0.0, 0.0, 0.0); // Производим ему звук for(new i; i < GetMaxPlayers(); i++) // Проходим всех игроков if(GetPVarInt(i,"CasinoTable") == tableid && Casino_GetPlayerID(tableid,i) == -1) // Если игрок находится возле стола но не в игре format(string,sizeof(string),"%d",TableInfo[tableid][step]); // Форматируем ему текст со временем до окончания GameTextForPlayer(i, string, 1000, 3); // Выводим ему текст TableInfo[tableid][step]–; // Минус одна секунда return true;
stock Casino_GetSlot(tableid) // Выводим свободный слот за столом new slot = -1; for(new i; i < 4; i++) if(TableInfo[tableid][t_players][i] == INVALID_PLAYER_ID && slot == -1) slot = i; return slot;
stock Casino_GetPlayerID(tableid,playerid) // Получаем слот на столе игрока new plid = -1; for(new i; i < 4; i++) if(TableInfo[tableid][t_players][i] == playerid) plid = i; return plid;
stock Casino_TotalPlayer(tableid) // Получаем общее количество игроков на столом new total; for(new i; i < 4; i++) if(TableInfo[tableid][t_players][i] != INVALID_PLAYER_ID) total++; return total;
stock Casino_Update(tableid) // Обновление текстдрава за столом new string[128]; format(string,sizeof(string),"~w~Ставка: ~g~%d$~n~~w~Игроки: ~y~%d/4",TableInfo[tableid][t_bet],Casino_TotalPlayer(tableid)),RussianString(string); TextDrawSetString(TD_CASINO[tableid][3],string);
stock RussianString(string[]) // Русификация текста (не моя) for(new i; i<strlen(string); i++) switch(string[i]) case ‘А’,’а’: string[i] = ‘A’; case ‘Б’,’б’: string[i] = ‘—’; case ‘В’,’в’: string[i] = ‘B’; case ‘Г’,’г’: string[i] = ‘‚’; case ‘Д’,’д’: string[i] = ‘ѓ’; case ‘Е’,’е’: string[i] = ‘E’; case ‘Ё’,’ё’: string[i] = ‘E’; case ‘Ж’,’ж’: string[i] = ‘„’; case ‘З’,’з’: string[i] = ‘€’; case ‘И’,’и’: string[i] = ‘…’; case ‘Й’,’й’: string[i] = ‘†’; case ‘К’,’к’: string[i] = ‘K’; case ‘Л’,’л’: string[i] = ‘‡’; case ‘М’,’м’: string[i] = ‘M’; case ‘Н’,’н’: string[i] = ‘H’; case ‘О’,’о’: string[i] = ‘O’; case ‘П’,’п’: string[i] = ‘Њ’; case ‘Р’,’р’: string[i] = ‘P’; case ‘С’,’с’: string[i] = ‘C’; case ‘Т’,’т’: string[i] = ‘T’; case ‘У’,’у’: string[i] = ‘Y’; case ‘Ф’,’ф’: string[i] = ‘Ѓ’; case ‘Х’,’х’: string[i] = ‘X’; case ‘Ц’,’ц’: string[i] = ‘‰’; case ‘Ч’,’ч’: string[i] = ‘Ќ’; case ‘Ш’,’ш’: string[i] = ‘Ћ’; case ‘Щ’,’щ’: string[i] = ‘Љ’; case ‘Ъ’,’ъ’: string[i] = ‘ђ’; case ‘Ы’,’ы’: string[i] = ‘‘’; case ‘Ь’,’ь’: string[i] = ‘’’; case ‘Э’,’э’: string[i] = ‘“’; case ‘Ю’,’ю’: string[i] = ‘”’; case ‘Я’,’я’: string[i] = ‘•’;
На этом всё. Еще одна хорошая система готова к использованию на Вашем сервере.
Если после вставки обнаруженны какие-то ошибки,то пишите в теме и я сразу-же исправлю.