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

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

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

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

Мануал Игра в кости[Dice] Копия Galaxy rpg 90%

F[a]ust

Умник
Ко всем define
PHP:
#define MSG_PRESSKEY(%0)       GameTextForPlayer(%0, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~PRESS ~y~ALT", 2000, 3)
Ко всем new
PHP:
new winPlayers[MAX_TABLEDICE][10];                                             
new maxWinDice[MAX_TABLEDICE];                                           
new winCount[MAX_TABLEDICE];                                           
new ComMoney[MAX_TABLEDICE];
Ко всем Enum's

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;
В OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
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);
		}
	}
В OnPlayerEnterDynamicArea(playerid, areaid)

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);
		}
	}
В OnPlayerLeaveDynamicArea

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;
	}
Добавляем, если у кого то нету OnPlayerEditObject
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;
}
Ко всем stock's

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;
}
В Public OnPlayerSpawn

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 ;
Забыл добавить, в OnGameModeInit
PHP:
mysql_tquery(mysql_connect_ID,"SELECT * FROM `dicetable`","LoadDice","");
В мануале использовался dc_cmd: http://pawno-info.ru/showthread.php?t=154792
В мануале использовался a_mysql R41-3:
В мануале использовался foreach:

 
Последнее редактирование:
Сверху Снизу