- Регистрация
- 19 Мар 2013
- Сообщения
- 51
- Лучшие ответы
- 0
- Репутация
- 14
Здравствуйте, вот понадобилось мне тут мэра выбрать. Решил все сделать по РП, написал не большую систему.
Сначала нужно добавить две команды в public OnPlayerCommandText
Теперь добавить ко всем new:
С этим разобрались. Далее нужно добавить несколько функций в самый конец мода.
Теперь нужно добавить диалоговое окно:
Теперь добавим переменную в enum pInfo
Потом в public OnPlayerLogin(playerid), public OnPlayerRegister(playerid) и в паблик, который сохраняет аккаунт игрока. На пример public OnPlayerUpdate_GF(playerid)
Теперь опишу правила применения.
1. Добавляем в мод все, что я сказал, компилируем, исправляем полученные ошибки(если будут).
2. Говорим игрокам место регистрации и команду "/registration".
3. Как только наберется нужное количество кандидатов, записываете их имена вместо Ник Мэра 1, Ник Мэра 2 и т.д.
4. Говорим игрокам про команду "/vote".
5. Считаем голоса и ставим нового мэра.
Эсли не жалко дайте +
Сначала нужно добавить две команды в 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;
}
}
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();
}
}
}
PHP:
enum pInfo
{
pVote,
};
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;
}
1. Добавляем в мод все, что я сказал, компилируем, исправляем полученные ошибки(если будут).
2. Говорим игрокам место регистрации и команду "/registration".
3. Как только наберется нужное количество кандидатов, записываете их имена вместо Ник Мэра 1, Ник Мэра 2 и т.д.
4. Говорим игрокам про команду "/vote".
5. Считаем голоса и ставим нового мэра.
Эсли не жалко дайте +
Последнее редактирование: