Трудовая книжка (в ролевых серверах SA‑MP часто называют Labor Book или ТК) – один из ключевых документов персонажа. Она фиксирует историю трудоустройства‚ полученные навыки и стаж. На многих RP‑серверах игроки могут показать её другим персонажам‚ используя специальную команду. В этой статье мы разберём всё‚ что нужно знать о команде /wbook (или её аналогах) – от синтаксиса до типичных ошибок.
Содержание
- Что такое трудовая книжка в RP‑серверах
- Общая информация о команде
/wbook - Синтаксис и параметры
- Примеры использования
- Пример серверного скрипта (Pawn)
- Типичные ошибки и их исправление
- Связанные команды
- FAQ
Что такое трудовая книжка в RP‑серверах
Трудовая книжка – это виртуальный документ‚ в котором храниться:
- Дата начала и окончания работы в каждом месте.
- Должность и уровень квалификации.
- Полученные навыки (например‚ владение оружием‚ медицинские навыки‚ водительские права).
- Сведения о работодателе и рекомендациях.
На некоторых серверах (например‚ Diamond RP‚ Arizona RP) трудовая книжка уже полностью интегрирована в игровую экономику‚ а её просмотр/показ является частью «реального» взаимодействия между персонажами.
Общая информация о команде /wbook
Команда /wbook (иногда /laborbook или /showbook) позволяет игроку открыть свою трудовую книжку и показать её другому игроку. В большинстве реализаций команда имеет два режима:
- Самостоятельный просмотр – игрок открывает книжку только для себя.
- Показ другому игроку – игрок указывает ID персонажа‚ которому хочет показать книжку.
Внутри скриптов SA‑MP команда реализуется через обработчик CMD:wbook в файле script.pwn. Ниже – типичный шаблон‚ найденный в открытых репозиториях.
Синтаксис и параметры
| Синтаксис | Описание |
|---|---|
/wbook | Открывает собственную трудовую книжку (без указания получателя). |
/wbook <ID_игрока> | Показывает книжку игроку с указанным ID. |
Важно: большинство серверов требуют‚ чтобы у вызывающего игрока был активный «предложенный» запрос (например‚ wbook_proposalid_player_wbook)‚ иначе команда вернёт сообщение «У вас нет активных предложений!». Это сделано для предотвращения спама.
Примеры использования
Показать свою книжку самому себе
/wbook После ввода команды игрок получит диалоговое окно с историей трудоустройства.
Показать книжку другому игроку
/wbook 12 Где 12 – ID игрока‚ которому вы хотите показать книжку. Если у вас нет активного предложения‚ вы увидите сообщение:
У вас нет активных предложений! Пример «ролевой» сценария
Игрок John подходит к работодателю Mike и говорит:
/me достает из рюкзака трудовую книжку и протягивает её Mike Затем вводит:
/wbook 5 где 5 – ID Mike. После подтверждения Mike увидит окно с вашими записями и сможет принять решение о найме.
Пример серверного скрипта (Pawn)
Ниже – минимальный рабочий пример реализации команды /wbook в стиле Advance Role Play. Вы можете адаптировать его под свой сервер.
/--------------------------------------------------------------
CMD:wbook – показать трудовую книжку
--------------------------------------------------------------/
CMD:wbook(playerid‚ params[])
{
// Если игрок нажал клавишу «Y» (KEY_YES) в диалоге
if (newkeys == KEY_YES)
{
// Проверяем‚ что у игрока есть валидный ID
if (id_player_wbook == INVALID_PLAYER_ID ||
playerid_wbook == INVALID_PLAYER_ID ||
playerid_wbook == playerid)
{
SendClientMessage(playerid‚ -1‚ "У вас нет активных предложений!");
return 1;
}
// Проверяем‚ что у игрока действительно есть предложение
if (!wbook_proposalid_player_wbook)
{
SendClientMessage(playerid‚ 0xFF6600AA‚ "У вас нет активных предложений!");
return 1;
}
// Получаем имя игрока‚ которому показываем книжку
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid_wbook‚ player_name‚ sizeof(player_name));
// Формируем строку с датой и временем (пример)
new str[128];
format(str‚ sizeof(str)‚ "Трудовая книжка %s (ID: %d)"‚ player_name‚ playerid_wbook);
// Открываем диалоговое окно (пример)
ShowPlayerDialog(playerid‚ DIALOG_WBOOK‚ DIALOG_STYLE_MSGBOX‚
"Трудовая книжка"‚ str‚ "OK"‚ "");
// Логируем действие
printf("[WBOOK] %s (ID %d) показал трудовую книжку игроку %s (ID %d)"‚
GetPlayerName(playerid)‚ playerid‚
player_name‚ playerid_wbook);
}
return 1;
}
Ключевые моменты:
- Проверка
INVALID_PLAYER_IDзащищает от ошибок‚ когда ID не найден. - Переменная
wbook_proposalid_player_wbookотвечает за «активность» предложения. - Функция
ShowPlayerDialogвыводит окно с данными книжки.
Типичные ошибки и их исправление
| Ошибка | Причина | Решение |
|---|---|---|
| «У вас нет активных предложений!» | Переменная wbook_proposalid_player_wbook равна false. | Убедитесь‚ что перед вызовом /wbook вы создали предложение (обычно через /offer или аналог). |
| «Invalid player ID» (ID игрока не найден) | В параметре указан неверный ID или игрок вышел из сервера. | Проверьте‚ что игрок онлайн‚ используйте IsPlayerConnected(id) перед вызовом. |
| Команда не реагирует (ничего не происходит) | Скрипт не зарегистрировал обработчик CMD:wbook или конфликтует с другими плагинами. | Перепроверьте OnPlayerCommandText и порядок загрузки плагинов. |
| Окно не открывается‚ но в консоли есть сообщение об ошибке | Недостаточно места в буфере str (переполнение). | Увеличьте размер массива (например‚ str[256]). |
Связанные команды
- /pass – показать паспорт.
- /lic – показать лицензии и права.
- /med – показать медицинскую карту.
- /skill или /skil – показать навыки персонажа.
- /pay – передать деньги (часто используется совместно с показом ТК при найме).
- /hi – пожать руку (может использоваться как «приветствие» перед показом ТК).
Эти команды часто вызываются в цепочке ролевых действий: сначала игрок приветствует‚ потом показывает паспорт‚ затем трудовую книжку и‚ наконец‚ передаёт деньги за работу.
FAQ
- Можно ли открыть трудовую книжку без команды?
Да‚ некоторые серверы позволяют открыть её через меню «Инвентарь» (обычно клавишаF2)‚ но команда/wbookостаётся самым быстрым способом. - Почему на сервере Arizona RP команда не работает?
На этом сервере трудовая книжка была перенесена в «электронный» формат и открывается только через лаунчер. Нужно обновить клиентскую часть до версии 2.0+ и использовать/wbookпосле перезапуска. - Можно ли показать ТК нескольким игрокам одновременно?
Стандартный скрипт поддерживает только одного получателя. Для массового показа требуется модификация: использовать циклforeachпо массиву ID и отправлять диалог каждому игроку. - Как добавить в ТК новую запись (например‚ повышение квалификации)?
На стороне сервера вызывается функцияAddLaborBookEntry(playerid‚ "Название работы"‚ "Дата начала"‚ "Дата окончания"‚ "Навыки"). Реализацию ищите в файлеlaborbook.pwnвашего проекта. - Что делать‚ если после обновления сервера команда выдает ошибку «undefined variable»?
Проверьте‚ что в файлеscript.pwnобъявлены все глобальные переменные:new wbook_proposalid_player_wbook[MAX_PLAYERS];иnew id_player_wbook[MAX_PLAYERS];. После добавления – перекомпилируйте скрипт.
Команда /wbook – один из базовых инструментов ролевого взаимодействия в SA‑MP. Правильное её использование делает процесс найма‚ проверки квалификации и обмена документами более реалистичным и удобным. Следуя рекомендациям из этой статьи‚ вы сможете:
- Без ошибок показывать свою трудовую книжку другим игрокам.
- Отлаживать серверный скрипт и устранять типичные проблемы.
- Интегрировать ТК в более сложные ролевые сценарии (платёж‚ проверка навыков‚ увольнение).
Не забывайте поддерживать актуальность клиентской части (особенно после обновлений серверов типа Arizona RP) и проверять‚ что у вас есть активные предложения перед вызовом команды. Удачной игры и успешных карьерных ростов в мире San Andreas!