- Регистрация
- 25 Июл 2012
- Сообщения
- 24
- Лучшие ответы
- 0
- Репутация
- 12
Доброго времени суток, господа. Сегодня я решил написать не большой мануал Костей как на Самп-РП (Ну почти как на Самп РП).
Пожалуй начнём:
В начало, ко всем #define добавим:
Ко всем форвардам добавим:
Создадим наши переменные:
В public ongamemodeinit:
В public onplayerconnect:
в public onplayerdisconnect:
В public OnPlayerKeyStateChange:
В public onplayerclicktextdraw:
И внизу мода создадим наши новые функции:
Вот и всё! Ваше Казино готово. Казино находится в интерьере Casino Rich, при желании можете поменять координаты.
Скриншот:
Чуть не забыл, чтобы устроиться крупье - дайте PVar Crup значение 1.
Пример:
Пожалуй начнём:
В начало, ко всем #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];
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);
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);
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;
}
}
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;
}
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;
}