Доступ к архиву

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

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

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

Выборы мэра без форума.

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

slonplutalov

Умник
Здравствуйте, вот понадобилось мне тут мэра выбрать. Решил все сделать по РП, написал не большую систему.
Сначала нужно добавить две команды в public OnPlayerCommandText
PHP:
if(strcmp(cmd, "/vote", true) == 0) // Команда выбора мэра, лучше сразу не говорить про нее, а подождать, пока будут кандидаты
	{
		if(IsPlayerConnected(playerid))
                {
			if(PlayerToPoint(50, playerid, 362.3129,173.7937,1008.3828))// Проверяем, в мэрии ли игрок
			{
				Voting(playerid); //Всовываем ему меню выбора мэра.
			}
			else
			{
    			SendClientMessage(playerid, COLOR_GRAD2, "Вы не в здании Мэрии!"); // Если он не в мэрии, ругаемся на него
			}
			return 1;
		}
	}
	if(strcmp(cmd, "/registration", true) == 0) // Выдвинуть свою кандидатуру на пост мэра.
	{
		if(IsPlayerConnected(playerid))
        {
			if(PlayerToPoint(50, playerid, 362.3129,173.7937,1008.3828)) // В мэрии ли игрок
			{
				RegistrationPlayer(playerid); // Регистрируем его кандидатуту
				SendClientMessage(playerid, COLOR_BLUE, "Вы выдвинули свою кандидатуру!"); // Оповещаем его об этом
			}
			else
			{
    			SendClientMessage(playerid, COLOR_GRAD2, "Вы не в здании Мэрии!"); // Ругаемся за то, что он не в мэрии.
			}
			return 1;
		}
	}
Теперь добавить ко всем new:
PHP:
new Mayor_Nick_1, Mayor_Nick_2, Mayor_Nick_3, Mayor_Nick_4, Mayor_Nick_5, Mayor_Nick_6, Mayor_Nick_7;
С этим разобрались. Далее нужно добавить несколько функций в самый конец мода.

PHP:
stock Voting(playerid) // Меню выбора мэра
{
	if(PlayerInfo[playerid][pLevel] >= 2) // Против подтасовки. Если игрок только что зарегистрировался, голосовать не может
	{
		if(PlayerInfo[playerid][pVote] == 0) // Если не голосовал, продолжаем
		{
			ShowPlayerDialog(playerid, 16545, DIALOG_STYLE_LIST, "Выборы", " Ник мэра 1\n Ник мэра 2\n Ник мэра 3\n Ник мэра 4\n Ник мэра 5\n Ник мэра 6\n Ник мэра 7", "Выбор", "Отмена"); // Диалог голосования
			PlayerInfo[playerid][pVote] = 1; // Думаю, это понятно
                        SendClientMessage(playerid, COLOR_BLUE, "Вы проголосовали за кандидата.");
		}
		else
		{
		    SendClientMessage(playerid, COLOR_BLUE, "Вы уже голосовали!"); // Ругаемся на то, что он голосовал
		}
	}
	else
	{
	    SendClientMessage(playerid, COLOR_RED, "Головать можно с 2х лет в штате!"); // Если еще малой, посылаем его
	}
}
PHP:
stock VoteUpdate() // Запись голосов в файл
{
    new coordsstring[MAX_PLAYER_NAME];
    format(coordsstring, sizeof(coordsstring), "%d|%d|%d|%d|%d|%d|%d", Mayor_Nick_1, Mayor_Nick_2, Mayor_Nick_3, Mayor_Nick_4, Mayor_Nick_5, Mayor_Nick_6, Mayor_Nick_7);
    new File: file2 = fopen("logs/votemayors.cfg", io_write);
    fwrite(file2, coordsstring);
    fclose(file2);
}
PHP:
stock VoteLoad() // Выставляем кол-во голосов в переменные после рестарта
{
	new arrCoords[19][256];
	new strFromFile2[256];
	new File: file = fopen("logs/votemayors.cfg", io_read);
	if (file)
	{
		fread(file, strFromFile2);
		split(strFromFile2, arrCoords, '|');
		Mayor_Nick_1= strval(arrCoords[0]);
		Mayor_Nick_2= strval(arrCoords[1]);
		Mayor_Nick_3= strval(arrCoords[2]);
		Mayor_Nick_4= strval(arrCoords[3]);
		Mayor_Nick_5= strval(arrCoords[4]);
		Mayor_Nick_6= strval(arrCoords[5]);
		Mayor_Nick_7= strval(arrCoords[6]);
		printf("Mayors Load");
		fclose(file);
	}
}
PHP:
stock RegistrationPlayer(playerid) // Регистрируем кандидатуру после команды /registration
{
	new Mayor[MAX_PLAYER_NAME];
    new coordsstring[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Mayor, sizeof(Mayor));
    format(coordsstring, sizeof(coordsstring), "%s\n", Mayor);
    new File: file2 = fopen("logs/mayors.cfg", io_append); // Открываем файл для до записи файла
    fwrite(file2, coordsstring);
    fclose(file2);
}
Теперь нужно добавить диалоговое окно:

PHP:
if(dialogid == 16545) // Выборы мэра
	{
	    if(response)
		{
		    if(listitem == 0)
		    {
                Mayor_Nick_1 += 1;
                VoteUpdate();
		    }
		    if(listitem == 1)
		    {
		        Mayor_Nick_2 += 1;
		        VoteUpdate();
		    }
		    if(listitem == 2)
		    {
		        Mayor_Nick_3 += 1;
		        VoteUpdate();
		    }
		    if(listitem == 3)
		    {
		        Mayor_Nick_4 += 1;
		        VoteUpdate();
		    }
		    if(listitem == 4)
		    {
		        Mayor_Nick_5 += 1;
		        VoteUpdate();
		    }
		    if(listitem == 5)
		    {
		        Mayor_Nick_6 += 1;
		        VoteUpdate();
		    }
		    if(listitem == 6)
		    {
		        Mayor_Nick_7 += 1;
		        VoteUpdate();
		    }
		}
	}
Теперь добавим переменную в enum pInfo

PHP:
enum pInfo
{
	pVote,
};
Потом в public OnPlayerLogin(playerid), public OnPlayerRegister(playerid) и в паблик, который сохраняет аккаунт игрока. На пример public OnPlayerUpdate_GF(playerid)

Если нет функции PlayerToPoint, вот:
PHP:
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
	{
		new Float:oldposx, Float:oldposy, Float:oldposz;
		new Float:tempposx, Float:tempposy, Float:tempposz;
		GetPlayerPos(playerid, oldposx, oldposy, oldposz);
		tempposx = (oldposx -x);
		tempposy = (oldposy -y);
		tempposz = (oldposz -z);
		if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
		{
			return 1;
		}
	}
	return 0;
}
И последнее. Нужно вписать VoteLoad(); в public OnGameModeInit()

PHP:
public OnGameModeInit()
{
	VoteLoad();
}
Теперь опишу правила применения.
1. Добавляем в мод все, что я сказал, компилируем, исправляем полученные ошибки(если будут).
2. Говорим игрокам место регистрации и команду "/registration".
3. Как только наберется нужное количество кандидатов, записываете их имена вместо Ник Мэра 1, Ник Мэра 2 и т.д.
4. Говорим игрокам про команду "/vote".
5. Считаем голоса и ставим нового мэра.

P.S. Предварительно нужно создать в папке scriptfiles папку logs, если ее нету и 2 файла в папке logs(mayors.cfg, votemayors.cfg).
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу