Перейти к содержимому


Фотография

Нужен совет


Лучший Ответ Zlobot , 26 July 2018 - 18:38

Я думаю обновление аддона вам помогут избежать махинации с remoteExec
Как я понял, у вас вся магия происходит на стороне клиента, но вы можете перегнать нужные аргументы на сервак и исполнить код там, а потом так же перегнать все это на клиент той же remoteExec
Главное вам потом не запутаться в расходняках в серверных и клиентских аддонах

Да remoteExec использую для спавна транспорта через сервер. Не понял как это поможет избежать конфигурации CfgMagazines в аддоне? В общем вот вариант через переменную на игроке, в которой сохраняется название класса вызываемого транспорта. Таймер чтобы игрок не затягивал со спавном.

 

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 28

#1 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 23 July 2018 - 13:07

Вот есть у меня такое устройство - "Креатор". Игрок разбирает в нем любой прописанный в конфиге игровой предмет и получает разные ресурсы. В него устанавливаются разные модули, каждый на определенную игровую категорию (инструменты, конструкции, оружие, патроны, броня, рюкзаки, и.т.п.) и в зависимости от установленного модуля и наличия нужных ресурсов игрок может произвести требуемый предмет. Создаваемое помещается в инвентарь креатора, по типу контейнера. Все прекрасно работает.

Но вот понадобилось мне сделать там создание транспорта. Что-то вроде виртуального гаража. Код ищет ближайший транспорт, проверяет нужные условия и игрок через гуи заносит выбранный транспорт в гараж. Сохраняется все в базе данных. И это все работает. 

В гуи есть список транспорта в гараже и при нужном выборе я могу его оттуда изъять(сохраняется название класса транспорта).

А вот тут-то и встал вопрос -  как создать транспорт обратно?

Есть простой вариант - сделать невидимую или даже видимую, вертолетную площадку и спавнить его там, но тут появляются свои трудности, да и способ мне не очень. Я хочу сделать так же как с прочими предметами: появился некий ящик, забираешь его из инвентаря и тащишь его куда хочешь, а потом через его экшен, или еще как, спавнишь выбранный транспорт. Но как прилепить к данному предмету (условно ящику) название выбранного класса транспорта? Ведь он пока не на земле, не является объектом. Можно ли к предмету в инвентаре прикреплять переменные?

Мне пока пришло в голову только сделать глобальную переменную для игрока куда заносить класс вызываемого транспорта и при активации ящика брать его для спавна оттуда. Однако это попахивает извращениями)) Да и если другой игрок завладеет ящиком, то он не сможет его активировать. Хотя это тоже все можно обыграть.

Может кто-нибудь сможет подсказать еще способы решения такой задачи?

Вот сам креатор, чтобы было понятнее, что за монстр.)

Прикрепленные файлы


  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 23 July 2018 - 15:00

В гуи есть список транспорта в гараже и при нужном выборе я могу его оттуда изъять(сохраняется название класса транспорта).
А вот тут-то и встал вопрос -  как создать транспорт обратно?

Что-то я не понял, в чём проблема создать тачку по имеющемуся названию класса?
 

Есть простой вариант - сделать невидимую или даже видимую, вертолетную площадку и спавнить его там, но тут появляются свои трудности, да и способ мне не очень.

Простой вариант со своими трудностями? Это как?
Это на самом деле простой вариант. Да и никаких трудностей я не вижу.
 

Можно ли к предмету в инвентаре прикреплять переменные?

Скорее всего нельзя.
 

Мне пока пришло в голову только сделать глобальную переменную для игрока куда заносить класс вызываемого транспорта и при активации ящика брать его для спавна оттуда. Однако это попахивает извращениями)) Да и если другой игрок завладеет ящиком, то он не сможет его активировать. Хотя это тоже все можно обыграть.

Похоже, это единственный вариант.
 

Да и если другой игрок завладеет ящиком, то он не сможет его активировать.

Можно сохранять значения в объект игрока, тогда можно будет у другого игрока их прочитать.


  • 0

#3 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 23 July 2018 - 15:18

С вертолетной площадкой проблема такая, что придется игроку как-то ее создавать самому. Потому что спавнить транспорт с бисовскими функциями поиска свободного места не вариант. Никогда не угадаешь, где появится и появится ли вообще). Базы у игроков-то могут быть в таких местах, что функция поиска тупо не найдет места. Но вариант с верт.площадкой реализовать можно и я знаю как, но хотелось по другому)).

 

 

Можно сохранять значения в объект игрока, тогда можно будет у другого игрока их прочитать.

 

Ну это фактически вариант, что и я придумал. Тут есть нюанс, что если игрок уйдет, то ящик останется без бывшего хозяина. Наверное придется реализовывать вариант с переменной у игрока и ограничить спавн по времени. ТНе успел вызвать транспорт за пару минут - ящик распадается. Нестабильный типа)


  • 0

#4 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 23 July 2018 - 15:28

Zlobot, вариант с прикреплением переменных к предметам не прокатит - инвентарь армы работает по принципу «Список классов предметов + их кол-во + число патронов, если это магазин + ссылка на контейнер, если это контейнер (Униформа, оружие ит . д.)». Конечно можно реализовать свой собственный инвентарь поверх этого и тогда это будет возможным, но это сложно.
Вместо этого вы можете сделать такой трюк - к каждому классу теники, который может создать игрок (Не думаю, что их хотя бы 100 набереться), вы можете создать класс предмета, а дальше все просто: вешается действие на игрока, которое проверяет инвентарь на предмет таких «предметов» и, в зависимости от их класса, создает технику прямо перед игроком (Или не создает, сообщая об ошибке (Например, если нет места))

Сообщение отредактировал vlad333000: 23 July 2018 - 15:33

  • 0

#5 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 23 July 2018 - 16:07

Zlobot, вариант с прикреплением переменных к предметам не прокатит - инвентарь армы работает по принципу «Список классов предметов + их кол-во + число патронов, если это магазин + ссылка на контейнер, если это контейнер (Униформа, оружие ит . д.)». Конечно можно реализовать свой собственный инвентарь поверх этого и тогда это будет возможным, но это сложно.
Вместо этого вы можете сделать такой трюк - к каждому классу теники, который может создать игрок (Не думаю, что их хотя бы 100 набереться), вы можете создать класс предмета, а дальше все просто: вешается действие на игрока, которое проверяет инвентарь на предмет таких «предметов» и, в зависимости от их класса, создает технику прямо перед игроком (Или не создает, сообщая об ошибке (Например, если нет места))

Интересный способ! Надо будет попробовать. 


  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 23 July 2018 - 16:08

С вертолетной площадкой проблема такая, что придется игроку как-то ее создавать самому. Потому что спавнить транспорт с бисовскими функциями поиска свободного места не вариант. Никогда не угадаешь, где появится и появится ли вообще). Базы у игроков-то могут быть в таких местах, что функция поиска тупо не найдет места. Но вариант с верт.площадкой реализовать можно и я знаю как, но хотелось по другому)).

Так если игрок может перемещать ящик, то в любом случае придётся что-то использовать для поиска свободного места.
 

 

Можно сохранять значения в объект игрока, тогда можно будет у другого игрока их прочитать.

Ну это фактически вариант, что и я придумал. Тут есть нюанс, что если игрок уйдет, то ящик останется без бывшего хозяина. Наверное придется реализовывать вариант с переменной у игрока и ограничить спавн по времени. ТНе успел вызвать транспорт за пару минут - ящик распадается. Нестабильный типа)

 

А ящик как появляется? То есть если игрока убивают, или он уходит, то создаётся ящик? Или если да, или если нет, то в обработчике соответствующего события перекидывай переменную на ящик.


  • 0

#7 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 23 July 2018 - 16:38

Так если игрок может перемещать ящик, то в любом случае придётся что-то использовать для поиска свободного места. 

А сам игрок и выбирает место куда ставить транспорт. 

 

А ящик как появляется? То есть если игрока убивают, или он уходит, то создаётся ящик? Или если да, или если нет, то в обработчике соответствующего события перекидывай переменную на ящик.

Подразумевалось, что если нес в инвентаре, то да - можно создать модель ящика и бросить на землю. А вот если игрок положит его в какой-нибудь контейнер, то так уже не выйдет. Так что при таком варианте, думаю, ограничение по времени будет надежней.


  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 24 July 2018 - 13:04

По поводу поиска позиций.

Почитайте внимательно это

https://arma3.ru/for...saniiu/?p=25628

Посмотрите видео прилагаемое.

И после внимательно посмотрите в этот прилагаемый пример кода

0 = [] spawn {
    for "_i" from 0 to 1000 do {
        _script = position (allUnits select 0) spawn {
            createVehicle [
                "Land_Loudspeakers_F",
                _this,
                [], 
                0, 
                "NONE"
            ];
        };
        waitUntil {scriptDone _script};
    };
}; 

И увидите что при спавне объекта задаётся позиция игрока, но, объект создаётся на другой позиции.

О чём это говорит?

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

 

Да и в самой арме полно всякого для определения свободных позиций, и скриптовых команд и функций.

 

ЗЫ

Пардон видео нет, там просто скрин)

Ни что не мешает по эксперементировать, так ведь?)


Сообщение отредактировал SteelRat: 24 July 2018 - 13:06

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 24 July 2018 - 14:54

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

, или свои реализации этой функции.


  • 0

#10 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 24 July 2018 - 15:13

На примере выше спавнятся объекты довольно маленькой площади и практически на голом месте. А вы попробуйте заспавнить транспорт (особенно грузовики) где-нибудь в лесу. Конечно, рано или поздно место найдется, но время... Даже функция 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 со всеми настройками часто глючит. А как я сказал, игроки ставят свои базы где попало. Могут в скалах к примеру сделать и тогда алгоритм найдет место которое может оказаться частично под скалой потому что это больная тема - неправильная геометрия некоторых скал. Особенно у CUP, который довольно активно используют на некоторых картах. Именно поэтому хочу сделать чтобы игрок сам ввыбирал место спавна техники и если она бахнет при этом, то тут уж он сам будет виноват.


  • 0

#11 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 24 July 2018 - 15:54

Именно поэтому хочу сделать чтобы игрок сам ввыбирал место спавна техники и если она бахнет при этом, то тут уж он сам будет виноват.

Как раз именно поэтому обычно место создания тачек (а-ля парковка в Wasteland) жёстко задано на сервере.

 

P. S.

Ещё один вариант полуслучайного выбора места создания -- только на дороге. То есть, если поблизости нет дороги, то выводим сообщение, иначе выбираем место и создаём.


Сообщение отредактировал Schatten: 24 July 2018 - 15:56

  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 25 July 2018 - 04:55

На примере выше спавнятся объекты довольно маленькой площади и практически на голом месте. А вы попробуйте заспавнить транспорт (особенно грузовики) где-нибудь в лесу. Конечно, рано или поздно место найдется, но время... Даже функция 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 со всеми настройками часто глючит. А как я сказал, игроки ставят свои базы где попало. Могут в скалах к примеру сделать и тогда алгоритм найдет место которое может оказаться частично под скалой потому что это больная тема - неправильная геометрия некоторых скал. Особенно у CUP, который довольно активно используют на некоторых картах. Именно поэтому хочу сделать чтобы игрок сам ввыбирал место спавна техники и если она бахнет при этом, то тут уж он сам будет виноват.

А можно и Боинг попробовать отспавнить в лес. Тоже видимо зрелищное дело выйдет.

Ну да ладно, шутим. Игроки видимо действительно дебилы, раз кому то в голову придёт мысль вызвать грузовик в лесу.

 

А по делу, нравится вам, или не нравится, хочется или не хочется, а придётся вам, как реализатору идеи, писать код, который будет предусматривать все мыслимые и не мыслимые вероятности при спавне объектов.

Говорите производительность, первое на сколько она важна при вызове тачки игроком, ну 1 сек, ну 2, ну 3 сек ладно, что это решит в данном случае? Да ни чего.

И опять же поиск позиций и производительность, я было производил поиск вообще по радиусам в половину размера Алтиса, да ещё по выборке результата на соответствие условиям, да не одну позицию на запрос, а по десять, правильные параметры для команд поиска, и десяток тестов и ни будет о производительности голова болеть.


  • 0

#13 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 25 July 2018 - 12:45

А по делу, нравится вам, или не нравится, хочется или не хочется, а придётся вам, как реализатору идеи, писать код, который будет предусматривать все мыслимые и не мыслимые вероятности при спавне объектов.

Ну так этим и занимаюсь, по мере способностей.)) И игроки не дебилы, конечно, просто ховают свои базы чтобы другим труднее было найти. Пока они у меня не могут спавнить транспорт и проблемы нету. А вот когда сделаю, тогда и начнется. Способ с фиксированной площадкой самый простой, как я и писал, но не лежит у меня к нему душа)) Сейчас сделал по совету vlad333000 для каждого транспорта свой итем. Оказалось что количество довольно большое - машин больше 120, вертов с пару десятков и еще лодки. Осталось код дописать и проверить как будет))


  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 25 July 2018 - 12:58

Я дурак, или я правильно понимаю, пипл будет носить свои грузовики в рюкзаках?)

В смысле, игрок открывает инвентарь, производит манипуляцию с предметом в инвентаре и спавнится тачка?


 

Оказалось что количество довольно большое - машин больше 120, вертов с пару десятков и еще лодки

Каждый объект имеет обязательные данные внутри себя, один из них "боундинг бокс " , извините за мой английский, определяющий габариты объекта, делаете один предмет, а алгоритм уже внутри отталкиваясь от размеров боундинг бокса определяет вероятную позицию.


Сообщение отредактировал SteelRat: 25 July 2018 - 12:59

  • 0

#15 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 25 July 2018 - 16:25

Я дурак, или я правильно понимаю, пипл будет носить свои грузовики в рюкзаках?)

В смысле, игрок открывает инвентарь, производит манипуляцию с предметом в инвентаре и спавнится тачка?


 

Оказалось что количество довольно большое - машин больше 120, вертов с пару десятков и еще лодки

Каждый объект имеет обязательные данные внутри себя, один из них "боундинг бокс " , извините за мой английский, определяющий габариты объекта, делаете один предмет, а алгоритм уже внутри отталкиваясь от размеров боундинг бокса определяет вероятную позицию.

Да, все верно. Ящик с "упакаванным" транспортом игрок тащит в рюкзаке. Там типа нанороботы и необходимые ресурсы. Будующее же епть! ) Про габариты объектов я в курсе, не понял только при чем они? Если Вы про алгоритм поиска места, тогда ясно.


  • 0

#16 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 сообщений
  • Откуда:SPB

Отправлено 25 July 2018 - 18:18


Да, все верно. Ящик с "упакаванным" транспортом игрок тащит в рюкзаке.

По человечьи, это называется - создание(КРАФТ). Без мозгое..и, нанороботов и дартов вейдеров.

А если загуглить крафт в А3, то вопрос создания и т.п. отпадет.

А уже при крафте пусть там сервер, по классу создания из БД выдергивает ранее сохраненный транспорт.


  • 0

#17 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 26 July 2018 - 12:12

Что есть крафт, мне известно. Игроки в моде могут крафтить по рецептам больше 100 предметов (начиная от медицины и кончая конструкциями), но это так сказать, "ручной" крафт. А тут агрегат,который добывается на вражеской базе и в котором, в зависимости от установленного модуля крафтится определенный предмет. Продукт более развитых технологий. Гараж решил прилепить к нему чтобы не плодить лишнего. Ваше предложение это вариант предложенного vlad333000, только вместо создаваемых в конфиге предметов, придется сделать тоже самое в рецептах крафта.

Что же касается самой идеи vlad333000, я ее сделал и проверил. Все работает. Есть один недостаток - все пришлось конфигурировать в аддоне. Если прописываю класс CfgMagazines в config.cpp сервера или миссии то в игре этих предметов нет. А конфигурировать подобное в аддоне не очень удобно, если понадобится расширить ассортимент транспорта или убрать, то придется обновлять сам аддон. Может кто подскажет почему не получается сделать это в config.cpp сервера?


  • 0

#18 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 сообщений
  • Откуда:SPB

Отправлено 26 July 2018 - 13:08


Гараж решил прилепить к нему

Гараж это тоже крафт. Создание по некоторым условиям. Где эти условия прописаны вообще без разницы, - в массиве sqf скрипта\hpp файле аддона...

И твой ящик тоже создает предмет - крафтит. А что там за модуль на нем, это дело 100500ое.

 

1. Если ящиков в инвентаре может быть несколько - то выдавать меню - какой именно установить.

2. При установке - отправлять на сервер - какой именно ящик ставим.

3. на сервере -

ящик setVariable ["я крафтовый ящик", ["умею крафтить А", "Умею крафтить Б"], true];

ящик setVariable ["а еще в меня запихали", [ ["SUV", ...], ["LADA",... ] ], true];


  • 0

#19 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 26 July 2018 - 13:30

 


Гараж решил прилепить к нему

Гараж это тоже крафт. Создание по некоторым условиям. Где эти условия прописаны вообще без разницы, - в массиве sqf скрипта\hpp файле аддона...

И твой ящик тоже создает предмет - крафтит. А что там за модуль на нем, это дело 100500ое.

 

1. Если ящиков в инвентаре может быть несколько - то выдавать меню - какой именно установить.

2. При установке - отправлять на сервер - какой именно ящик ставим.

3. на сервере -

ящик setVariable ["я крафтовый ящик", ["умею крафтить А", "Умею крафтить Б"], true];

ящик setVariable ["а еще в меня запихали", [ ["SUV", ...], ["LADA",... ] ], true];

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


  • 0

#20 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 сообщений
  • Откуда:SPB

Отправлено 26 July 2018 - 14:38


а как передать требуемое в инвентарь игрока

В инвентарь игрока ниче передавать не надо. Хранить надо на сервере в БД(или если это SP, то в локальной БД, да хоть в профайле, если это опять же SP). А при вызове меню, запрашивать его содержимое, с сервера\БД, и сервер должен вернуть все что туда напихали - СУВ такой то, с таким то содержимым, и т.д. и т.п. и уже в зависимости от выбора в меню, опять же просить сервер создать этот объект, ну и удалить его из меню и БД.

И не надо заниматься изобретением велосипедов.


  • 0




Яндекс.Метрика