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

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

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

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

Мануал Кости как на Самп РП

Статус
В этой теме нельзя размещать новые ответы.

Lucas_Brown

Начинающий
Пользователь
Регистрация
25 Июл 2012
Сообщения
24
Лучшие ответы
0
Репутация
12
Доброго времени суток, господа. Сегодня я решил написать не большой мануал Костей как на Самп-РП (Ну почти как на Самп РП).

Пожалуй начнём:

В начало, ко всем #define добавим:
PHP:
#define DIALOG_PAY (930)
#define MIN_IGROKOV (2)
#define EXIT_DIALOG (933)
#define MIN_STAVKA (1000)// Тут менять ставку минимальную в кости
#define MAX_STAVKA (50000000)// Тут менять ставку максимальную в кости
Ко всем форвардам добавим:
PHP:
forward Random(min,max);
Создадим наши переменные:
PHP:
new TimeStavka[3] = 0;
new Text:KostiBox[3],Text:TableName[3],Text:KostiInfo[3],Text:KostiGameInfo[3],Text:KostiKeyExit,Text:KostiKeyDone,Text:KostiKeyStavka;
new Float:StolCoor[3][3] ={
{1133.4200439,6.5000000,1001.5969849},
{1127.3929443,6.5000000,1001.5969849}, // Тут можно редактировать координаты стола ( не объектов столов!!! )
{1121.9410400,6.5000000,1001.5969849}
};
enum Stol
{
	Gamer[5],
	Stavka,
	Bank,
	Crupe,
	Igrokov,
	GameStart
}
new StolInfo[3][Stol];
В public ongamemodeinit:
PHP:
CreateObject(1824,1133.4200439,6.5000000,1001.5969849,0.0000000,0.0000000,180.0000000); //object(craps_table) (1)
	CreateObject(1824,1127.3929443,6.5000000,1001.5969849,0.0000000,0.0000000,179.9945068); //ставим сами объекты столов
	CreateObject(1824,1121.9410400,6.5000000,1001.5969849,0.0000000,0.0000000,179.9945068); //object(craps_table) (3)
	
	new tabname[16];
	for(new i; i< sizeof(StolCoor);i++)
   	{
    	StolInfo[i][Crupe] = INVALID_PLAYER_ID;
    	for(new h;h<5;h++)
		{
    		StolInfo[i][Gamer][h] = INVALID_PLAYER_ID;
		}
    	StolInfo[i][GameStart] = 0;
    	//----------------------------------------
   		KostiBox[i] = TextDrawCreate(550,160,"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~");
   		TextDrawUseBox(KostiBox[i],1);
   		TextDrawTextSize(KostiBox[i],100.0,100.0);
		TextDrawBoxColor(KostiBox[i],0x00000045);
   		TextDrawAlignment(KostiBox[i],2);

   		format(tabname,sizeof(tabname),"Table %d",i+1);
   		TableName[i] = TextDrawCreate(550,160,tabname);
   		TextDrawFont(TableName[i],0);
   		TextDrawLetterSize(TableName[i],0.500,1.200);
   		TextDrawSetProportional(TableName[i],1);
   		TextDrawColor(TableName[i],0x007fffFF);
   		TextDrawSetOutline(TableName[i],1);
   		TextDrawAlignment(TableName[i],2);

   		KostiInfo[i] = TextDrawCreate(505,180,"1.--___________________--~n~2.--___________________--~n~3.--___________________--~n~4.--___________________--~n~5.--___________________--~n~");
   		TextDrawFont(KostiInfo[i],1);
   		TextDrawLetterSize(KostiInfo[i],0.210,0.78);
   		TextDrawSetProportional(KostiInfo[i],1);
   		TextDrawColor(KostiInfo[i],0xFFFFFFFF);
   		TextDrawSetOutline(KostiInfo[i],0);
   		TextDrawSetShadow(KostiInfo[i],0);

   		KostiGameInfo[i] = TextDrawCreate(505,230,"~w~Bet:_~r~0~n~~w~Bank:_~r~0");
   		TextDrawFont(KostiGameInfo[i],1);
   		TextDrawLetterSize(KostiGameInfo[i],0.250,1.20);
   		TextDrawSetProportional(KostiGameInfo[i],1);
   		TextDrawColor(KostiGameInfo[i],0xFFFFFFFF);
   		TextDrawSetOutline(KostiGameInfo[i],0);
   		TextDrawSetShadow(KostiGameInfo[i],0);
	}
	KostiKeyStavka = TextDrawCreate(550,263,"SET BET");
 	TextDrawFont(KostiKeyStavka,1);
  	TextDrawLetterSize(KostiKeyStavka,0.400,1.40);
   	TextDrawSetProportional(KostiKeyStavka,1);
   	TextDrawColor(KostiKeyStavka,0xFFFFFFFF);
   	TextDrawSetOutline(KostiKeyStavka,1);
   	TextDrawSetShadow(KostiKeyStavka,0);
   	TextDrawAlignment(KostiKeyStavka,2);
   	TextDrawUseBox(KostiKeyStavka,1);
   	TextDrawTextSize(KostiKeyStavka,10,70);
   	TextDrawBoxColor(KostiKeyStavka,0x80808077);
   	TextDrawSetSelectable(KostiKeyStavka,1);

	KostiKeyDone = TextDrawCreate(550,283,"DICE");
 	TextDrawFont(KostiKeyDone,1);
  	TextDrawLetterSize(KostiKeyDone,0.400,1.40);
   	TextDrawSetProportional(KostiKeyDone,1);
   	TextDrawColor(KostiKeyDone,0xFFFFFFFF);
   	TextDrawSetOutline(KostiKeyDone,1);
   	TextDrawSetShadow(KostiKeyDone,0);
   	TextDrawAlignment(KostiKeyDone,2);
   	TextDrawUseBox(KostiKeyDone,1);
   	TextDrawTextSize(KostiKeyDone,10,70);
   	TextDrawBoxColor(KostiKeyDone,0x80808077);
   	TextDrawSetSelectable(KostiKeyDone,1);

	KostiKeyExit = TextDrawCreate(550,303,"EXIT");
 	TextDrawFont(KostiKeyExit,1);
  	TextDrawLetterSize(KostiKeyExit,0.400,1.40);
   	TextDrawSetProportional(KostiKeyExit,1);
   	TextDrawColor(KostiKeyExit,0xFFFFFFFF);
   	TextDrawSetOutline(KostiKeyExit,1);
   	TextDrawSetShadow(KostiKeyExit,0);
   	TextDrawAlignment(KostiKeyExit,2);
   	TextDrawUseBox(KostiKeyExit,1);
   	TextDrawTextSize(KostiKeyExit,10,70);
   	TextDrawBoxColor(KostiKeyExit,0x80808077);
   	TextDrawSetSelectable(KostiKeyExit,1);
   	
	SetTimer("Secund",1000,1);
В public onplayerconnect:
PHP:
SetPVarInt(playerid,"GameStol",88);
	SetPVarInt(playerid,"Ochki",88);
	RemoveBuildingForPlayer(playerid, 2964, 1127.1852, 6.80879, 1001.9623, 3.4733372);
	RemoveBuildingForPlayer(playerid, 2964, 1123.3347, 7.79727, 1001.9623, 3.4733372);
	RemoveBuildingForPlayer(playerid, 2964, 1119.3583, 7.03371, 1001.9623, 3.4733372);
в public onplayerdisconnect:
PHP:
new stolid = GetPVarInt(playerid,"GameStol");
	if(stolid != 88 )
	{
	    new g = GetPVarInt(playerid,"Crup");
		TextDrawHideForPlayer(playerid,KostiBox[stolid]);
   		TextDrawHideForPlayer(playerid,TableName[stolid]);
   		TextDrawHideForPlayer(playerid,KostiInfo[stolid]);
   		TextDrawHideForPlayer(playerid,KostiGameInfo[stolid]);
   		TextDrawHideForPlayer(playerid,KostiKeyExit);
   		TextDrawHideForPlayer(playerid,KostiKeyDone);
   		TextDrawHideForPlayer(playerid,KostiKeyStavka);
   		SetPVarInt(playerid,"GameStol",88);
   		SetPVarInt(playerid,"StolReg",88);
   		TogglePlayerControllable(playerid,1);
   		CancelSelectTextDraw(playerid);
   		DelName(playerid,stolid);
   		SetPVarInt(playerid,"Ochki",88);
   		if(g == 1)
  		{
   			StolInfo[stolid][Crupe] = INVALID_PLAYER_ID;
   			StolInfo[stolid][Stavka] = 0;
   		}
	}
В public OnPlayerKeyStateChange:
PHP:
if(newkeys == 16)// казино кости на букву F
    {
   		new s = GetPVarInt(playerid,"GameStol");
   		new stolid = IsPlayerNearStol(playerid);
   		new g = GetPVarInt(playerid,"Crup");
   		if(stolid == -1) return true;
   		new stringer[128];
   		if(StolInfo[stolid][Igrokov] >= 5 && g == 0) return SendClientMessage(playerid,COLOR_GREY,"Стол переполнен!");
   		if(g == 1 && StolInfo[stolid][Crupe] != INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_GREY,"Тут уже работает крупье!");
   		if(s != 88) return SendClientMessage(playerid,COLOR_GREY,"Ты уже зарегистрирован на другом столе!");
   		if(StolInfo[stolid][Crupe] == INVALID_PLAYER_ID && g != 1) return SendClientMessage(playerid,COLOR_GREY,"Данный столик не работает!");
   		TextDrawShowForPlayer(playerid,KostiBox[stolid]);
   		TextDrawShowForPlayer(playerid,TableName[stolid]);
   		TextDrawShowForPlayer(playerid,KostiInfo[stolid]);
   		TextDrawShowForPlayer(playerid,KostiGameInfo[stolid]);
   		TextDrawShowForPlayer(playerid,KostiKeyExit);
   		TextDrawShowForPlayer(playerid,KostiKeyDone);
   		TextDrawShowForPlayer(playerid,KostiKeyStavka);
   		SetPVarInt(playerid,"GameStol",stolid);
   		TogglePlayerControllable(playerid,0);
   		SelectTextDraw(playerid,0x4169e1FF);
		SetNameStol(playerid,stolid);
   		if(g == 1) StolInfo[stolid][Crupe] = playerid;
    }
В public onplayerclicktextdraw:
PHP:
new stringer[256];
	if(clickedid == KostiKeyExit)
    {
   		new g = GetPVarInt(playerid,"Crup");
   		new stolid = GetPVarInt(playerid,"GameStol");
   		if(StolInfo[stolid][GameStart] == 1) return SendClientMessage(playerid,COLOR_GREY,"Игра запущена! Выйти нельзя.");
   		if(GetPVarInt(playerid,"StolReg") != 88) return ShowPlayerDialog(playerid,EXIT_DIALOG,0,"Вы уверены?","На кону стоит Ваша ставка, при выходе она сгорит.\nВы уверены что хотите закончить игру?","Да","Отмена");
   		if(StolInfo[stolid][Stavka] > 0 && g == 1 && StolInfo[stolid][Igrokov] >= MIN_IGROKOV) return SendClientMessage(playerid,COLOR_GREY,"Вы не можете покинуть стол! Вы уже запустили игру!");
		TextDrawHideForPlayer(playerid,KostiBox[stolid]);
   		TextDrawHideForPlayer(playerid,TableName[stolid]);
   		TextDrawHideForPlayer(playerid,KostiInfo[stolid]);
   		TextDrawHideForPlayer(playerid,KostiGameInfo[stolid]);
   		TextDrawHideForPlayer(playerid,KostiKeyExit);
   		TextDrawHideForPlayer(playerid,KostiKeyDone);
   		TextDrawHideForPlayer(playerid,KostiKeyStavka);
   		SetPVarInt(playerid,"GameStol",88);
   		SetPVarInt(playerid,"StolReg",88);
   		TogglePlayerControllable(playerid,1);
   		CancelSelectTextDraw(playerid);
   		DelName(playerid,stolid);
   		SetPVarInt(playerid,"Ochki",88);
   		if(g == 1)
  		{
   			StolInfo[stolid][Crupe] = INVALID_PLAYER_ID;
   			StolInfo[stolid][Stavka] = 0;
   		}
    }
    if(clickedid == KostiKeyStavka)
    {
  		new stolid = GetPVarInt(playerid,"GameStol");
  		new g = GetPVarInt(playerid,"Crup");
    	if(stolid == GetPVarInt(playerid,"StolReg")) return SendClientMessage(playerid,COLOR_GREY,"Ты уже поставил ставку!");
    	if(g != 1 && StolInfo[stolid][Stavka] == 0) return SendClientMessage(playerid,COLOR_GREY,"Ожидайте. Крупье не установил ставку");
    	if(g != 1 && PlayerInfo[playerid][pCash] < StolInfo[stolid][Stavka]) return SendClientMessage(playerid,0xFFFFFFFF,"У Вас нету средств на игру!");
		if(g != 1) {if(StolInfo[stolid][Igrokov] >= 5) return SendClientMessage(playerid,COLOR_GREY,"Стол переполнен!");}
		//if(g == 1 && StolInfo[stolid][Stavka] != 0) return SendClientMessage(playerid,COLOR_GREY,"Ставка уже была установлена!");
    	format(stringer,sizeof(stringer),"{FFFFFF}Ставка должна быть не менее %d вирт\nи не более %d вирт. Введите сумму ставки",MIN_STAVKA,MAX_STAVKA);
   		if(g == 1) return ShowPlayerDialog(playerid,DIALOG_PAY,1,"Установка ставки для игры:",stringer,"Далее","Отмена");
    	PlayerInfo[playerid][pCash]-=StolInfo[stolid][Stavka];
    	StolInfo[stolid][Bank] += StolInfo[stolid][Stavka];
    	SetPVarInt(playerid,"StolReg",stolid);
    }
    if(clickedid == KostiKeyDone)
    {
    	new stolid = GetPVarInt(playerid,"GameStol");
    	new g = GetPVarInt(playerid,"Crup");
    	new test2 = 0;
		if(g == 1)
		{
			if(StolInfo[stolid][Igrokov] >= MIN_IGROKOV)
			{
			    foreach(new i : Player)
			    {
			        if(GetPVarInt(i,"StolReg") == stolid) test2++;
				}
				if(test2 < 2) return SendClientMessage(playerid,COLOR_GREY,"Игроки не установили ставки");
   				if(StolInfo[stolid][GameStart] == 1) return SendClientMessage(playerid,COLOR_GREY,"Игра уже запущена");
				TimeStavka[stolid] = 30; StolInfo[stolid][GameStart] = 1;
				SendClientMessage(stolid,COLOR_GREY,"Время пошло.У Вас есть 30 секунд,чтобы сделать ход");
			}
			else SendClientMessage(playerid,COLOR_GREY,"Не хватает игроков для старта!");
			return 1;
		}
		else
		{
		    if(StolInfo[stolid][GameStart] == 0) return SendClientMessage(playerid,COLOR_GREY,"В данный момент нельзя кинуть кости");
	  		if(GetPVarInt(playerid,"Ochki") != 88) return SendClientMessage(playerid,COLOR_GREY,"Вы уже кидали кубики в этом раунде!");
      		new vip = Random(2,12);
      		new str[144];
			new test = 0;
			format(str,sizeof(str),"%s бросил(а) игральные кости на стол, выпало %d очков из 12",PlayerInfo[playerid][pNames],vip);
			foreach(new i : Player)
	 		{
			    if(GetPVarInt(i,"GameStol") == GetPVarInt(playerid,"GameStol") && g == 0) SendClientMessage(i,COLOR_INDIGO,str);
			}
			SetPVarInt(playerid,"Ochki",vip);
            foreach(new i : Player)
	 		{
				if(GetPVarInt(i,"StolReg") == GetPVarInt(playerid,"StolReg") && GetPVarInt(i,"Ochki") == 88 && GetPVarInt(i,"Crup") == 0) test++;
			}
			if(test == 0) ShowItog(GetPVarInt(playerid,"StolReg"));
		}
    }
И внизу мода создадим наши новые функции:
PHP:
stock SetNameStol(playerid,stolid)
{
	SetPVarInt(playerid,"StolReg",88);
    if(StolInfo[stolid][Gamer][0] == INVALID_PLAYER_ID && GetPVarInt(playerid,"Crup") == 0) {StolInfo[stolid][Gamer][0] = playerid, StolInfo[stolid][Igrokov]++; return 1;}
    if(StolInfo[stolid][Gamer][1] == INVALID_PLAYER_ID && GetPVarInt(playerid,"Crup") == 0) {StolInfo[stolid][Gamer][1] = playerid, StolInfo[stolid][Igrokov]++; return 1;}
    if(StolInfo[stolid][Gamer][2] == INVALID_PLAYER_ID && GetPVarInt(playerid,"Crup") == 0) {StolInfo[stolid][Gamer][2]= playerid, StolInfo[stolid][Igrokov]++; return 1;}
    if(StolInfo[stolid][Gamer][3] == INVALID_PLAYER_ID && GetPVarInt(playerid,"Crup") == 0) {StolInfo[stolid][Gamer][3] = playerid, StolInfo[stolid][Igrokov]++; return 1;}
    if(StolInfo[stolid][Gamer][4] == INVALID_PLAYER_ID && GetPVarInt(playerid,"Crup") == 0) {StolInfo[stolid][Gamer][4] = playerid, StolInfo[stolid][Igrokov]++; return 1;}
 	return 0;
}
stock DelName(playerid,stolid)
{
	if(StolInfo[stolid][Gamer][0] == playerid) {StolInfo[stolid][Gamer][0] = INVALID_PLAYER_ID;StolInfo[stolid][Igrokov]--; return 1;}
    if(StolInfo[stolid][Gamer][1] == playerid) {StolInfo[stolid][Gamer][1] = INVALID_PLAYER_ID;StolInfo[stolid][Igrokov]--;  return 1;}
    if(StolInfo[stolid][Gamer][2] == playerid) {StolInfo[stolid][Gamer][2] = INVALID_PLAYER_ID;StolInfo[stolid][Igrokov]--;  return 1;}
    if(StolInfo[stolid][Gamer][3]== playerid) {StolInfo[stolid][Gamer][3] = INVALID_PLAYER_ID;StolInfo[stolid][Igrokov]--;  return 1;}
    if(StolInfo[stolid][Gamer][4] == playerid) {StolInfo[stolid][Gamer][4] = INVALID_PLAYER_ID;StolInfo[stolid][Igrokov]--;  return 1;}
 	return 0;
}
stock GetCasinName(ids)
{
	new name[64];
 	if(ids == INVALID_PLAYER_ID) name = "~w~--____________________";
 	else
 	{
 		GetPlayerName(ids,name,sizeof(name));
 		new v = 20 - strlen(name);
 		for(new g;g<v;g++)
 		{
 			strcat(name,"_",sizeof(name));
 		}
 	}
 	return name;
}
forward Secund();
public Secund()
{
	for(new i;i<3;i++)
 	{
   		if(TimeStavka[i] > 0)
	    {
   			TimeStavka[i] --;
   			for(new g;g<GetMaxPlayers();g++)
	 		{
	    		if(GetPVarInt(g,"GameStol") == i && GetPVarInt(g,"Ochki") == 88)
				{
	    			new str[144];
	    			format(str,sizeof(str),"~g~%d",TimeStavka[i]);
        			GameTextForPlayer(g,str,1200,6);
        			if(TimeStavka[i] == 1 && GetPVarInt(g,"StolReg") == i)
					{
       	 				new vip = random(11)+1;
	  					format(str,sizeof(str),"%s бросил(а) игральные кости на стол, выпало %d очков из 12",PlayerInfo[g][pNames],vip);
	  					SendClientMessage(g,COLOR_INDIGO,str);
	  					SetPVarInt(g,"Ochki",vip);
	  					ShowItog(i);
      				}
	  			}
	 	 	}
	  	}
   	}
   	for(new s;s<3;s++)
   	{
    	new str[256],sstr[40];
    	format(str,sizeof(str),"Bet: %d ~g~$~n~~w~Bank: %d ~g~$",StolInfo[s][Stavka],StolInfo[s][Bank]);
    	TextDrawSetString(KostiGameInfo[s],str);
    	format(str,sizeof(str),"");
    	for(new i = 0;i<5;i++)
    	{
    		new text[15];
			text = "~w~--";
    		if(GetPVarInt(StolInfo[s][Gamer][i],"StolReg") == s) text = "~w~++";
    		if(GetPVarInt(StolInfo[s][Gamer][i],"Ochki") != 88) format(text,sizeof(text),"%d",GetPVarInt(StolInfo[s][Gamer][i],"Ochki"));
    		format(sstr,sizeof(sstr),"~w~%d. %s%s~n~",i+1,GetCasinName(StolInfo[s][Gamer][i]),text);
    		strcat(str,sstr,256);
 		}
    	TextDrawSetString(KostiInfo[s],str);
	}
}
stock ShowItog(stolid)
{
	new maxs = 0,ids = -1;
  	for(new i = 0;i<GetMaxPlayers();i++)
  	{
   		if(GetPVarInt(i,"StolReg") == stolid && GetPVarInt(i,"Ochki") < 88)
   		{
     		new v = GetPVarInt(i,"Ochki");
     		if(v > maxs) { maxs = v; ids = i; }
 		}
  	}
  	new name[25];
  	GetPlayerName(ids,name,sizeof(name));
  	new str[144];
  	format(str,sizeof(str),"%s побеждает. Колличество очков: %d",name,maxs);
  	PlayerInfo[ids][pCash]+=StolInfo[stolid][Bank];
  	for(new i;i<GetMaxPlayers();i++)
  	{
   		if(GetPVarInt(i,"GameStol") == stolid)
   		{
    		SendClientMessage(i,COLOR_INDIGO,str);
    		SetPVarInt(i,"Ochki",88);
    		SetPVarInt(i,"StolReg",88);
   		}
  	}
	TimeStavka[stolid] = 0;
  	StolInfo[stolid][Stavka] = 0;
  	StolInfo[stolid][Bank] = 0;
  	StolInfo[stolid][GameStart] = 0;
  	return 1;
}

public Random(min, max)
{
	new a = random(max - min) + min;
	return a;
}

stock IsPlayerNearStol(playerid)
{
  for(new i;i<sizeof(StolCoor);i++)
  {
  	if(GetPlayerDistanceFromPoint(playerid,StolCoor[i][0],StolCoor[i][1],StolCoor[i][2]) < 4.0) return i;
  }
  return -1;
}

Вот и всё! Ваше Казино готово. Казино находится в интерьере Casino Rich, при желании можете поменять координаты.

Скриншот:

Чуть не забыл, чтобы устроиться крупье - дайте PVar Crup значение 1.
Пример:
PHP:
CMD:crup(playerid,params[])
{
	SetPVarInt(playerid,"Crup",1);
	SendClientMessage(playerid,-1,"Вы устроились крупье!");
	return 1;
}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу