Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система казино с крупье. (Copy Diamond RP 95%)

xDimasx

Эксперт
Пользователь
Регистрация
1 Фев 2014
Сообщения
1,364
Лучшие ответы
4
Репутация
158
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, "Меню крупье", "{FFFFFF}1. Установить ставку\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 || strval(inputtext) > 10000000) return ShowPlayerDialog(playerid, dCasino+1, DIALOG_STYLE_INPUT, "Управление ставкой", "Введите ставку которую Вы хотите установить за Вашим столом:\n\n{FF0000}Используйте от 1.000$ до 10.000.000$", "Установить", "Отмена"); // Если ставка меньше 1000 или больше 10000000 то выводим диалог
			new tableid = GetPVarInt(playerid,"CasinoTable"); // Узнаем под каким столом находится игрок
			if(Casino_TotalPlayer(tableid) > 0) return SendClientMessage(playerid,0x808080FF,"[Casino]: Недоступно из за игроков за столом."); // Думаю тут всё понятно
			TableInfo[tableid][t_bet] = strval(inputtext); // Устанавливаем ставку для стола
			Casino_Update(tableid); // Обновляем текстдрав стола
		}
Шаг 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] = '•';
        }
    }
}
На этом всё. Еще одна хорошая система готова к использованию на Вашем сервере.
Если после вставки обнаруженны какие-то ошибки,то пишите в теме и я сразу-же исправлю.
 
Последнее редактирование:
Сверху Снизу