Zakhar_Extreme
Player
1. Ваш игровой ник: Zakhar_Extreme.
2. Улучшение по части(мод, карта, форум): мод.
3. Опишите Ваше улучшение: На данный момент команда /demote доступна организации Правительство и ФСБ с 9-го ранга.
Проблемы команды:
1. Нельзя уволить 1-е ранги.
2. Нельзя понизить / уволить 7 + ранги.
3. После 2-х использований появляется cooldown на 10 минут.
4. Можно понижать только сотрудников МВД / Армии.
Что же, мои рекомендации по улучшению изложены ниже.
- Теперь команда /demote сможет не только понижать, но и увольнять.
- Использование: /demote ( id ) ( Причина ) ( 1 - понизить / 2 - уволить )
- Команда /demote будет понижать / увольнять сотрудников с 1-ые по 8-е ранги ( Для 9-их рангов Правительства / ФСБ )
Примечание: Если команду использует лидер Правительства / ФСБ, то он может уволить 1-е - 9-е ранги.
- Команда /demote сможет уволить сотрудника любой организации. То есть, лидер / заместитель смогут понизить / уволить сотрудника Правительства / ФСБ включительно.
Почему вы должны добавить данное улучшение:
- Правительство / ФСБ приобретут власть и будут уполномочены наказывать нарушитель, не писав жалобу на нарушителя.
Пример кода:
pawn
#include <a_samp>
enum ePlayerData {
pRank,
pOrgType // 0 - правительство, 1 - ФСБ
}
new PlayerData[MAX_PLAYERS][ePlayerData];
// Команда /demote
public OnPlayerCommandText(playerid, cmdtext[]) {
if (strcmp(cmdtext, "/demote", true) == 0) {
// Проверяем количество аргументов
new id, reason[128], action;
if (sscanf(cmdtext[8], "ii s[128]", id, action, reason)) {
SendClientMessage(playerid, COLOR_RED, "Использование: /demote (id игрока) (Причина) (1 - понизить, 2 - уволить)");
return 1;
}
if (id < 0 id >= MAX_PLAYERS) {
SendClientMessage(playerid, COLOR_RED, "Неверный ID игрока.");
return 1;
}
if (!IsPlayerConnected(id)) {
SendClientMessage(playerid, COLOR_RED, "Игрок не подключён.");
return 1;
}
// Проверяем, имеет ли игрок право использовать команду
if (!(PlayerData[playerid][pRank] == 9 PlayerData[playerid][pRank] == 10)) {
SendClientMessage(playerid, COLOR_RED, "У вас нет прав для использования этой команды.");
return 1;
}
// Проверяем ранг целевого игрока
if (action == 1) { // Понизить
if (PlayerData[id][pRank] > 1) {
PlayerData[id][pRank]--;
SendClientMessage(playerid, COLOR_GREEN, "Игрок понижен.");
} else { // Увольнение для 1 ранга
PlayerData[id][pRank] = 0; // Увольняется
SendClientMessage(playerid, COLOR_GREEN, "Игрок успешно уволен.");
}
} else if (action == 2) { // Увольнение
PlayerData[id][pRank] = 0; // Увольняется
SendClientMessage(playerid, COLOR_GREEN, "Игрок успешно уволен.");
} else {
SendClientMessage(playerid, COLOR_RED, "Неверное действие. Используйте 1 для понижения и 2 для увольнения.");
return 1;
}
// Здесь можно добавить код для логирования причины увольнения/понижения
format(string, sizeof(string), "Игрок %d был %s по причине: %s", id, (action == 1 ? "понижен" : "уволен"), reason);
SendClientMessageToAll(COLOR_YELLOW, string);
return 1;
}
return 0;
}
Поясню:
1. Проверка прав: Перед выполнением команд, код проверяет, имеет ли игрок право использовать /demote с помощью сравнения ранга.
2. Обработка аргументов: Используется sscanf для извлечения ID игрока, действия и причины.
3. Логика понижения/увольнения: Если выполняется понижение и игрок больше 1-го ранга, его ранг понижается. Если игрок 1-го ранга, он увольняется. Если выбирается увольнение, ранг устанавливается в 0.
4. Уведомление всех о действии: После изменения статуса игрока, сообщение отправляется всем игрокам.
4. Примеры реализации(фотографии, видео): -
2. Улучшение по части(мод, карта, форум): мод.
3. Опишите Ваше улучшение: На данный момент команда /demote доступна организации Правительство и ФСБ с 9-го ранга.
Проблемы команды:
1. Нельзя уволить 1-е ранги.
2. Нельзя понизить / уволить 7 + ранги.
3. После 2-х использований появляется cooldown на 10 минут.
4. Можно понижать только сотрудников МВД / Армии.
Что же, мои рекомендации по улучшению изложены ниже.
- Теперь команда /demote сможет не только понижать, но и увольнять.
- Использование: /demote ( id ) ( Причина ) ( 1 - понизить / 2 - уволить )
- Команда /demote будет понижать / увольнять сотрудников с 1-ые по 8-е ранги ( Для 9-их рангов Правительства / ФСБ )
Примечание: Если команду использует лидер Правительства / ФСБ, то он может уволить 1-е - 9-е ранги.
- Команда /demote сможет уволить сотрудника любой организации. То есть, лидер / заместитель смогут понизить / уволить сотрудника Правительства / ФСБ включительно.
Почему вы должны добавить данное улучшение:
- Правительство / ФСБ приобретут власть и будут уполномочены наказывать нарушитель, не писав жалобу на нарушителя.
Пример кода:
pawn
#include <a_samp>
enum ePlayerData {
pRank,
pOrgType // 0 - правительство, 1 - ФСБ
}
new PlayerData[MAX_PLAYERS][ePlayerData];
// Команда /demote
public OnPlayerCommandText(playerid, cmdtext[]) {
if (strcmp(cmdtext, "/demote", true) == 0) {
// Проверяем количество аргументов
new id, reason[128], action;
if (sscanf(cmdtext[8], "ii s[128]", id, action, reason)) {
SendClientMessage(playerid, COLOR_RED, "Использование: /demote (id игрока) (Причина) (1 - понизить, 2 - уволить)");
return 1;
}
if (id < 0 id >= MAX_PLAYERS) {
SendClientMessage(playerid, COLOR_RED, "Неверный ID игрока.");
return 1;
}
if (!IsPlayerConnected(id)) {
SendClientMessage(playerid, COLOR_RED, "Игрок не подключён.");
return 1;
}
// Проверяем, имеет ли игрок право использовать команду
if (!(PlayerData[playerid][pRank] == 9 PlayerData[playerid][pRank] == 10)) {
SendClientMessage(playerid, COLOR_RED, "У вас нет прав для использования этой команды.");
return 1;
}
// Проверяем ранг целевого игрока
if (action == 1) { // Понизить
if (PlayerData[id][pRank] > 1) {
PlayerData[id][pRank]--;
SendClientMessage(playerid, COLOR_GREEN, "Игрок понижен.");
} else { // Увольнение для 1 ранга
PlayerData[id][pRank] = 0; // Увольняется
SendClientMessage(playerid, COLOR_GREEN, "Игрок успешно уволен.");
}
} else if (action == 2) { // Увольнение
PlayerData[id][pRank] = 0; // Увольняется
SendClientMessage(playerid, COLOR_GREEN, "Игрок успешно уволен.");
} else {
SendClientMessage(playerid, COLOR_RED, "Неверное действие. Используйте 1 для понижения и 2 для увольнения.");
return 1;
}
// Здесь можно добавить код для логирования причины увольнения/понижения
format(string, sizeof(string), "Игрок %d был %s по причине: %s", id, (action == 1 ? "понижен" : "уволен"), reason);
SendClientMessageToAll(COLOR_YELLOW, string);
return 1;
}
return 0;
}
Поясню:
1. Проверка прав: Перед выполнением команд, код проверяет, имеет ли игрок право использовать /demote с помощью сравнения ранга.
2. Обработка аргументов: Используется sscanf для извлечения ID игрока, действия и причины.
3. Логика понижения/увольнения: Если выполняется понижение и игрок больше 1-го ранга, его ранг понижается. Если игрок 1-го ранга, он увольняется. Если выбирается увольнение, ранг устанавливается в 0.
4. Уведомление всех о действии: После изменения статуса игрока, сообщение отправляется всем игрокам.
4. Примеры реализации(фотографии, видео): -