Решено Госструктуры | Носилки

  • Привет!
    Для полноценного и удобного использования всего форумного функционала рекомендуем зарегистрироваться на игровом сервере и форуме, после чего привязать игровой аккаунт к форумному.
Статус
В этой теме нельзя размещать новые ответы.

C.Rockwell

Новый участник
16
3
3
1) Ваш ник: Claude Rockwell
2) Ваше предложение: Создание системы носилок для переноса/транспортировки раненых.
3) Описание и смысл вашего предложения: Это система добавляющая в игру механику переноса игроков. Игрок, находящийся в бессознательном состоянии (например, после получения большого урона), может быть поднят и перенесён другими игрокоми с помощью специальных носилок.

4) Чем ваше предложение поможет проекту:

Основная цель это улучшение ролевой игры. Медики или другие структуры могут эвакуировать раненых , доставлять их в больницу или безопасное место. Это добавляет реализма в игровой процесс.

Улучшение командной игры: Система носилок стимулирует командную работу. Один игрок не может эффективно использовать носилки в одиночку; требуется кооператив для переноски раненого.

Новые игровые возможности: Открывает новые игровые возможности, такие как создание медицинских/спасательных отрядов ASGH/SAFD и тактических операций NGSA/SWAT и др.

Интересный геймплей: Добавляет новый интересный элемент в игру, который может разнообразить геймплей и разбавить монотонность.

5) Примеры, наброски идеи (если имеются, для лучшего понимания в реализации вашей идеи):

В игре появляется новый объект носилки. Игрок может взять их, кооперируясь с другим игроком поднять раненого игрока и переносить его. Возможно добавление анимации для большей реалистичности.

Для использования носилок игрок должен быть в специальном состоянии "раненого" (например, после получения большого урона или использования специальной команды). В этом состоянии игрок не может двигаться.

#include <a_samp>

#define MAX_PLAYERS 100 // Максимальное количество игроков на сервере

new g_носилки[MAX_PLAYERS]; // Массив, хранящий ID игроков, несущих носилки
new g_носимые[MAX_PLAYERS]; // Массив, хранящий ID игроков, которых несут на носилках

// Функция создания носилок
CreateNosilki(playerid)
{
if(g_носилки[playerid] != 0) // Если игрок уже несёт носилки, то ничего не делать
{
return 1;
}

// Создание объекта носилок
new objectid = CreateObject(1234, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);

if(objectid == INVALID_OBJECT_ID)
{
return 0;
}

g_носилки[playerid] = objectid;
return 1;
}

// Функция поднятия игрока на носилки
PodnyatNaNosilki(playerid, targetid)
{
if (g_носилки[playerid] == 0)
{
SendClientMessage(playerid, -1, "У Вас нет носилок!");
return 0;
}

if (g_носимые[targetid] != 0)
{
SendClientMessage(playerid, -1, "Этот игрок уже на носилках!");
return 0;
}
//Получаем координаты игрока
new Float:x, Float:y, Float:z;
GetPlayerPos(targetid,x,y,z);

//Устанавливаем игрока в положение на носилках
SetPlayerPos(targetid, x, y, z + 0.5); //Поднимаем немного вверх. Настройте по модели носилок.
SetPlayerInterior(targetid, 0); // устанавливаем интерьер в 0 (чтобы не было проблем с интерьером)
SetPlayerVirtualWorld(targetid,0); // устанавливаем виртуальный мир в 0
AttachPlayerToVehicle(targetid, g_носилки[playerid], 0); // Прикрепляем к объекту носилок


g_носимые[targetid] = playerid;
return 1;
}


// Функция сбросить игрока с носилок
SbrositSNosilok(playerid)
{
if (g_носимые[playerid] != 0)
{
new несущий = g_носимые[playerid];
DetachPlayerFromVehicle(playerid);
g_носимые[playerid] = 0;
SendClientMessage(несущий, -1, "Вы сбросили игрока с носилок.");
}
}



// Обработчик команд
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/nosilki", true) == 0)
{
CreateNosilki(playerid);
return 1;
}
else if (startsWith(cmdtext, "/podnyat "))
{
new targetid;
targetid = strval(cmdtext[8]); //Извлекаем id игрока из текста команды
if(PlayerExists(targetid))
{
PodnyatNaNosilki(playerid, targetid);
return 1;
}
else
{
SendClientMessage(playerid, -1, "Игрок не найден.");
}
}
else if (strcmp(cmdtext, "/sbrosit", true) == 0)
{
SbrositSNosilok(playerid);
return 1;
}
return 0;
}

// Обработчик выхода игрока
public OnPlayerDisconnect(playerid, reason)
{
SbrositSNosilok(playerid); //Сбрасываем игрока с носилок при выходе
if(g_носилки[playerid] != 0) DestroyObject(g_носилки[playerid]); // Удаляем объект носилок, если игрок вышел
g_носилки[playerid] = 0;
return 1;
}
 
Последнее редактирование:
  • Мне нравится
Реакции: luis
Это предложение было закрыто. Голоса больше не принимаются.
Идея хорошая, реализуем в одном из будущих обновлений, возможно с некоторыми правками/улучшениями.

МНЕНИЕ код - капец, непонятно зачем он тут нужен, учитывая что ничем не поможет, т.к. он эстетически некрасивый (кириллица и прочие "прелести"), свою функцию выполнять не будет нормально (не использует стример тот же, ну и прочие плагины), и не встроится никаким образом в пирс (вместо использования уже готовых функ - велосипед, а некоторые функции перепутаны в принципе, что явно намекает на то, что это нигде не тестилось), то есть смысла в использовании даже отдельных частей абсолютно нет
 
  • Влюблён
Реакции: James Bond
Статус
В этой теме нельзя размещать новые ответы.