F[a]ust
Умник
Ко всем define
Ко всем new
Ко всем Enum's
В OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
В OnPlayerEnterDynamicArea(playerid, areaid)
В OnPlayerLeaveDynamicArea
Добавляем, если у кого то нету OnPlayerEditObject
Далее нам нужен секундный таймер, если у кого то нету, создаем.
В OnGameModeInit
И в свободное место, сам таймер
Добавляем загрузку столов
Ко всем stock's
И команда для добавления стола
В Public OnPlayerSpawn
Таблица
Забыл добавить, в OnGameModeInit
В мануале использовался dc_cmd: http://pawno-info.ru/showthread.php?t=154792
В мануале использовался a_mysql R41-3:
В мануале использовался foreach:
PHP:
#define MSG_PRESSKEY(%0) GameTextForPlayer(%0, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~PRESS ~y~ALT", 2000, 3)
PHP:
new winPlayers[MAX_TABLEDICE][10];
new maxWinDice[MAX_TABLEDICE];
new winCount[MAX_TABLEDICE];
new ComMoney[MAX_TABLEDICE];
PHP:
enum DiceInfo
{
id,
Float:TablePosX,
Float:TablePosY,
Float:TablePosZ,
Float:TablePosA,
object,
bet,
zone,
Text3D:DiceBetLabel,
listPlayersDice[10],
Text:DrawPlayers[11],
Text:DrawDice1[10],
Text:DrawDice2[10],
wait
};
new dInfo[MAX_TABLEDICE][DiceInfo],DiceNum;
PHP:
if (newkeys == KEY_WALK)
{
if(GetPVarInt(playerid, "DiceTableID") != -1 && !GetPVarInt(playerid, "DiceTableClick"))
{
new d = GetPVarInt(playerid, "DiceTableID");
if(GetCountListPlayerDice(d) == 10) return true;
for(new i = 0; i < 11;i ++) TextDrawShowForPlayer( playerid, dInfo[d][DrawPlayers][i]);
SetPVarInt(playerid, "DiceTableClick", true);
UpdateListPlayerDice(d);
}
}
PHP:
for(new i = 0; i < MAX_TABLEDICE; i++)
{
if(areaid == dInfo[i][zone] && GetPVarInt(playerid, "DiceTableID") == -1)
{
SetPVarInt(playerid, "DiceTableID", i);
MSG_PRESSKEY(playerid);
}
}
PHP:
if(GetPVarInt(playerid, "DiceTableID") != -1){
new d = GetPVarInt(playerid, "DiceTableID");
if(dInfo[d][wait] <= 1) return true;
for(new i = 0; i < 11;i ++) TextDrawHideForPlayer(playerid, dInfo[d][DrawPlayers][i]);
SetPVarInt(playerid, "DiceTableID", -1);
SetPVarInt(playerid, "DiceTableClick", false);
UpdateListPlayerDice(d);
return true;
}
PHP:
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
new d = DiceNum, query_string[121+15+120],str[16+30];
if(!playerobject)
{
if(!IsValidObject(objectid))
return 1;
MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
}
if(response == EDIT_RESPONSE_FINAL)
{
dInfo[d][TablePosX] = fX;
dInfo[d][TablePosY] = fY;
dInfo[d][TablePosZ] = fZ;
dInfo[d][TablePosA] = fRotZ;
dInfo[d][bet] = GetPVarInt(playerid, "bet");
format(query_string, sizeof(query_string), "INSERT INTO `dicetable` (`bet`, `TablePosX`, `TablePosY`, `TablePosZ`, `TablePosA`) VALUES ('%d', '%f', '%f', '%f', '%f')", dInfo[d][bet],dInfo[d][TablePosX],dInfo[d][TablePosY],dInfo[d][TablePosZ],dInfo[d][TablePosA]);
mysql_tquery(mysql_connect_ID, query_string, "", "");
dInfo[d][zone] = CreateDynamicCircle(dInfo[d][TablePosX], dInfo[d][TablePosY], 2.4, 0, 0, -1);
format(str,sizeof(str),"{00FF00}Ставка: $%d",dInfo[d][bet]);
dInfo[d][DiceBetLabel] = Create3DTextLabel(str, 0xFFFFFF, dInfo[d][TablePosX], dInfo[d][TablePosY], dInfo[d][TablePosZ], 40.0, 0, 0);
DiceNum++;
CancelEdit(playerid);
SendClientMessage(playerid, -1, "Объект установлен.");
return 1;
}
if(response == EDIT_RESPONSE_CANCEL)
{
SendClientMessage(playerid, -1, "Установка объекта отменена.");
DestroyObject(dInfo[DiceNum][object]);
CancelEdit(playerid);
return 1;
}
return 1;
}
В OnGameModeInit
PHP:
SetTimer("TimerPublic",1000,true);
PHP:
forward TimerPublic();
public TimerPublic()
{
for(new d = 0; d < DiceNum; d++)
{
new count = GetCountListPlayerDice(d),str[60];
if(count >= 2)
{
new a,b;
dInfo[d][wait]--;
format(str, sizeof(str), "~n~~n~~n~~n~~n~~n~~n~~n~~w~ start vie %d sec.", dInfo[d][wait]);
if(dInfo[d][wait] >= 0) for(new i; i < count;i ++) GameTextForPlayer(dInfo[d][listPlayersDice][i], str, 1500, 3);
if(dInfo[d][wait] == 0)
{
for(new i = 0; i < count; i++)
{
a = random(6)+1;b = random(6)+1;
winPlayers[d][i] = a+b;
maxWinDice[d] = winPlayers[d][0];
if(winPlayers[d][i] > maxWinDice[d]) maxWinDice[d] = winPlayers[d][i];
setRotDice(a,dInfo[d][DrawDice1][i]);setRotDice(b,dInfo[d][DrawDice2][i]);
ComMoney[d] += dInfo[d][bet];
GivePlayerMoney(dInfo[d][listPlayersDice][i], -dInfo[d][bet]);
}
for(new i = 0; i < count; i++)
{
if(winPlayers[d][i] == maxWinDice[d])
{
TextDrawColor(dInfo[d][DrawPlayers][i], -16776961);
ApplyAnimation(dInfo[d][listPlayersDice][i], "CASINO", "manwind", 3.5, 0, 1, 1, 1, 1, 1);
winCount[d]++;
}
else ApplyAnimation(dInfo[d][listPlayersDice][i], "CASINO", "cards_lose", 3.5, 0, 1, 1, 1, 1, 1);
}
for(new i = 0; i < count; i++)
{
for(new t = 0; t < count; t++)
{
TextDrawShowForPlayer(dInfo[d][listPlayersDice][i], dInfo[d][DrawDice1][t]);
TextDrawShowForPlayer(dInfo[d][listPlayersDice][i], dInfo[d][DrawDice2][t]);
TextDrawShowForPlayer(dInfo[d][listPlayersDice][i], dInfo[d][DrawPlayers][t]);
}
}
}
if(dInfo[d][wait] == -3)
{
for(new i = 0; i < count; i++)
{
if(winPlayers[d][i] == maxWinDice[d])
{
GivePlayerMoney(dInfo[d][listPlayersDice][i], ComMoney[d]/winCount[d]);
format(str, sizeof(str), "%s выигрывает %d$", pInfo[dInfo[d][listPlayersDice][i]][pName],ComMoney[d]/winCount[d]);
ProxDetector(10, dInfo[d][listPlayersDice][i], str, 0xC2A2DAAA);
}
for(new t = 0; t < 10; t++)
{
TextDrawHideForPlayer(dInfo[d][listPlayersDice][i], dInfo[d][DrawDice1][t]);
TextDrawHideForPlayer(dInfo[d][listPlayersDice][i], dInfo[d][DrawDice2][t]);
}
for(new t = 0; t < 11; t++) TextDrawHideForPlayer(dInfo[d][listPlayersDice][i], dInfo[d][DrawPlayers][t]);
SetPVarInt(dInfo[d][listPlayersDice][i], "DiceTableClick", false);
ClearAllAnims(dInfo[d][listPlayersDice][i]);
}
UpdateListPlayerDice(d); // обновляем текстдравы и переменные
winCount[d] = 0;
ComMoney[d] = 0;
}
}
}
return 1;
}
PHP:
forward LoadDice();
public LoadDice()
{
new time = GetTickCount();
new str[16+30];
cache_get_row_count(DiceNum);
if(DiceNum)
{
for(new d = 0; d < DiceNum; d++)
{
cache_get_value_name_int(d, "id", dInfo[d][id]);
cache_get_value_name_int(d, "bet", dInfo[d][bet]);
cache_get_value_name_float(d, "TablePosX", dInfo[d][TablePosX]);
cache_get_value_name_float(d, "TablePosY", dInfo[d][TablePosY]);
cache_get_value_name_float(d, "TablePosZ", dInfo[d][TablePosZ]);
cache_get_value_name_float(d, "TablePosA", dInfo[d][TablePosA]);
dInfo[d][zone] = CreateDynamicCircle(dInfo[d][TablePosX], dInfo[d][TablePosY], 2.4, 0, 0, -1);
dInfo[d][object] = CreateObject(1824, dInfo[d][TablePosX], dInfo[d][TablePosY], dInfo[d][TablePosZ], 0, 0, dInfo[d][TablePosA]);
format(str,sizeof(str),"{00FF00}Ставка: $%d",dInfo[d][bet]);
dInfo[d][DiceBetLabel] = Create3DTextLabel(str, 0xFFFFFF, dInfo[d][TablePosX], dInfo[d][TablePosY], dInfo[d][TablePosZ], 40.0, 0, 0);
//-----------------------[CreateTextDraw]---------------------------
dInfo[d][DrawPlayers][10] = TextDrawCreate(403.333312, 149.588897, "usebox");
TextDrawLetterSize(dInfo[d][DrawPlayers][10], 0.000000, 22.084983),TextDrawTextSize(dInfo[d][DrawPlayers][10], 233.333312, 0.000000);
TextDrawAlignment(dInfo[d][DrawPlayers][10], 1),TextDrawColor(dInfo[d][DrawPlayers][10], 0);
TextDrawUseBox(dInfo[d][DrawPlayers][10], true),TextDrawBoxColor(dInfo[d][DrawPlayers][10], 102);
TextDrawSetShadow(dInfo[d][DrawPlayers][10], 0),TextDrawSetOutline(dInfo[d][DrawPlayers][10], 0);
TextDrawFont(dInfo[d][DrawPlayers][10], 0);
for(new i = 0; i < 10; i++) dInfo[d][listPlayersDice][i] = -1;
for ( new i, Float: y = 134.0 ; i != 10; i ++ )
{
dInfo[d][DrawPlayers][i] = TextDrawCreate(244.999862, y += 19.0, "-");
TextDrawLetterSize(dInfo[d][DrawPlayers][i], 0.359333, 1.869629),TextDrawTextSize(dInfo[d][DrawPlayers][i], -208.333343, -94.577774);
TextDrawAlignment(dInfo[d][DrawPlayers][i], 1),TextDrawColor(dInfo[d][DrawPlayers][i], -1);
TextDrawUseBox(dInfo[d][DrawPlayers][i], true),TextDrawBoxColor(dInfo[d][DrawPlayers][i], 0);
TextDrawSetShadow(dInfo[d][DrawPlayers][i], 0),TextDrawSetOutline(dInfo[d][DrawPlayers][i], 1);
TextDrawBackgroundColor(dInfo[d][DrawPlayers][i], 51),TextDrawFont(dInfo[d][DrawPlayers][i], 1);
TextDrawSetProportional(dInfo[d][DrawPlayers][i], 1);
dInfo[d][DrawDice1][i] = TextDrawCreate(357.000000, y-3, "LD_SPAC:white");
TextDrawLetterSize(dInfo[d][DrawDice1][i], 0.000000, 0.000000),TextDrawTextSize(dInfo[d][DrawDice1][i], 25.000000, 25.000000);
TextDrawAlignment(dInfo[d][DrawDice1][i], 1),TextDrawColor(dInfo[d][DrawDice1][i], -1);
TextDrawUseBox(dInfo[d][DrawDice1][i], true),TextDrawBoxColor(dInfo[d][DrawDice1][i], 0);
TextDrawSetShadow(dInfo[d][DrawDice1][i], 0),TextDrawSetOutline(dInfo[d][DrawDice1][i], 0);
TextDrawBackgroundColor(dInfo[d][DrawDice1][i], 0x00000000);
TextDrawFont(dInfo[d][DrawDice1][i], 5),TextDrawSetPreviewModel(dInfo[d][DrawDice1][i], 1852);
TextDrawSetPreviewRot(dInfo[d][DrawDice1][i], 176.000000, 0.000000, 90.000000, 1.000000);
dInfo[d][DrawDice2][i] = TextDrawCreate(374.000000, y-3, "LD_SPAC:white");
TextDrawLetterSize(dInfo[d][DrawDice2][i], 0.000000, 0.000000),TextDrawTextSize(dInfo[d][DrawDice2][i], 25.000000, 25.000000);
TextDrawAlignment(dInfo[d][DrawDice2][i], 1),TextDrawColor(dInfo[d][DrawDice2][i], -1);
TextDrawUseBox(dInfo[d][DrawDice2][i], true),TextDrawBoxColor(dInfo[d][DrawDice2][i], 0);
TextDrawSetShadow(dInfo[d][DrawDice2][i], 0),TextDrawSetOutline(dInfo[d][DrawDice2][i], 0);
TextDrawBackgroundColor(dInfo[d][DrawDice2][i], 0x00000000);
TextDrawFont(dInfo[d][DrawDice2][i], 5),TextDrawSetPreviewModel(dInfo[d][DrawDice2][i], 1852);
TextDrawSetPreviewRot(dInfo[d][DrawDice2][i], 176.000000, 0.000000, 90.000000, 1.000000);
}
}
}
printf ( "Столов dice загружено: %d, за %d (ms)", DiceNum,GetTickCount()-time ) ;
new charset[20]; mysql_get_charset(charset);
printf("[ Кодировка ]: %s ",charset);
return true;
}
PHP:
stock GetCountListPlayerDice(idDiceTable)
{
new count;
for(new i = 0; i < 10;i ++) if(dInfo[idDiceTable][listPlayersDice][i] != -1) count++;
return count;
}
stock UpdateListPlayerDice(idDiceTable)
{
new count,name[MAX_PLAYER_NAME];
for(new i = 0; i < 10; i++)
{
dInfo[idDiceTable][listPlayersDice][i] = -1;
TextDrawSetString(dInfo[idDiceTable][DrawPlayers][i], "-");
TextDrawColor(dInfo[idDiceTable][DrawPlayers][i], -1);
}
foreach(Player, i)
{
if(GetPVarInt(i, "DiceTableID") == idDiceTable && GetPVarInt(i, "DiceTableClick"))
{
GetPlayerName(i, name, MAX_PLAYER_NAME);
dInfo[idDiceTable][listPlayersDice][count] = i;
TextDrawSetString(dInfo[idDiceTable][DrawPlayers][count], name);
count++;
}
if(count < 2) dInfo[idDiceTable][wait] = 12;
}
}
stock setRotDice(num,Text:text)
{
if(num == 1) TextDrawSetPreviewRot(text, 90.000000, 0.000000, 0.000000, 1.000000);
else if(num == 2) TextDrawSetPreviewRot(text, 180.000000, 0.000000, 90.000000, 1.000000);
else if(num == 3) TextDrawSetPreviewRot(text, 360.000000, 0.000000, 0.000000, 1.000000);
else if(num == 4) TextDrawSetPreviewRot(text, 180.000000, 0.000000, 0.000000, 1.000000);
else if(num == 5) TextDrawSetPreviewRot(text, 360.000000, 0.000000, 90.000000, 1.000000);
else if(num == 6) TextDrawSetPreviewRot(text, 270.000000, 0.000000, 0.000000, 1.000000);
return true;
}
stock ClearAllAnims(playerid) return ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0);
stock ProxDetector(Float: radius, playerid, string[], colour)
{
new Float: coords[3];
GetPlayerPos(playerid, coords[0], coords[1], coords[2]);
foreach(Player, i)
{
if(GetPlayerDistanceFromPoint(i, coords[0], coords[1], coords[2]) >= radius) continue;
SendClientMessage(i, colour, string);
}
return true;
}
PHP:
CMD:createdice(playerid,params[])
{
if(sscanf(params, "i", params[0])) return SendClientMessage(playerid,-1, "Используем: /createdice [ставка]");
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
dInfo[DiceNum][object] = CreateObject(1824, x+2, y, z, 0, 0, 0);
EditObject(playerid, dInfo[DiceNum][object]);
SetPVarInt(playerid, "bet", params[0]);
return 1;
}
PHP:
SetPVarInt(playerid, "DiceTableID", -1);
PHP:
CREATE TABLE IF NOT EXISTS `dicetable` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`bet` int(10) NOT NULL,
`TablePosX` float NOT NULL,
`TablePosY` float NOT NULL,
`TablePosZ` float NOT NULL,
`TablePosA` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
PHP:
mysql_tquery(mysql_connect_ID,"SELECT * FROM `dicetable`","LoadDice","");
В мануале использовался a_mysql R41-3:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
В мануале использовался foreach:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Последнее редактирование:
