Jump to content


Photo

Вопросы по скриптингу

Arma3 как плотформа для созда Скритпы

  • Please log in to reply
1486 replies to this topic

#1 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 14 March 2013 - 08:40

В этой теме обсуджаются вопросы о проблемах скриптописания и возникших вопрос по написанию миссий в Арме 3 .
  • 2

#2 OFFLINE   Paradox

Paradox

    Ефрейтор

  • Пользователи
  • 40 posts
  • Откуда:Одесса

Posted 14 March 2013 - 18:08

Добрый вечер ! Прошу помощи !
Создал мп миссию с большим списком заданий но при создании хоста , это список tasks никто не видит кроме меня!В чем причина ! Создавал используя модули Create Task .
  • 0

#3 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 14 March 2013 - 18:32

Похоже что данный модуль Create Task (которого не было в предыдущих частей) работает локально на стороне сервера. Но хотелось узнать одну вещь - были ли игроки в вашем отряде? Возможно что только вашему отряду видны задачи миссии.
  • 1

#4 OFFLINE   Paradox

Paradox

    Ефрейтор

  • Пользователи
  • 40 posts
  • Откуда:Одесса

Posted 14 March 2013 - 19:35

Были , что в редакторе , что при создании у меня все работает идеально (все маркеры на карте , переключение задания) а у остальных игроков даже пункт tasks не высвечивается .
Народ ....за дельный (который поможет) совет подарю один Arma 3 Alpha Lite
  • 0

#5 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 14 March 2013 - 19:56

Тогда остается старый способ: использовать createSimpleTask c помощью файлов с расширением .sqf . Здесь кстати

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


  • 1

#6 OFFLINE   outchitel

outchitel

    Рядовой

  • Пользователи
  • 3 posts

Posted 15 March 2013 - 13:14

На днях у меня был вопрос про то ,что в арма3 бисы изменил подход работы с предметами типа карта, gps, радио. Ответ для себя нашел.


Вчера возник другой вопрос.
Есть
контроль для диалогов RscListNBox
Т.е. listbox с тремя (по умолчанию) столбцами.

определяю его
Скрытый текст



Далее создаю класс диалога и класс MyContainer: RscListNBox
Скрытый текст



вызываю диалог, при отработки onload добавляю в MyContainer 3 строки
_pp1 = lnbAddRow [632,["Hello","Pech","Test"]]; 
_pp1 = lnbAddRow [632,["10000\n0","Test","Hello"]];
_pp1 = lnbAddRow [632,["Test","Pech","10000"]];



Строки появляются, НО не так как задумано. Хотел добиться,чтобы во второй строке в первом столбце 10000 и 0 были отображены на разных подстроках (нужный эффект можно наблюдать на оружии в ящиках в дисплее инвентаря в арма3 альфа, где сначала идет изображение оружия, далее название его на двух подстрочках)

Что только не пробовал.
style = ST_MULTI ;
lineSpacing = 1;

уже по идее должны выполнять разбивку на подстрочки.
Но не сработало

Подумал может арма сравнивает величины высоты элемента и высоту строки
выставил,где строка больше элемента в два раза
rowHeight=0.1;
sizeEx=0.05;
тоже мимо не сработало


За вчера и сегодня чего только не перелопатил, не прочитал. Но так и не нашел ответа.


Может кто сталкивался и решил проблему ?

p.s. кстати при использовании не RscListNBox ,а простого RscListBox все тоже самое. Такое ощущение ,что style остается все тем же #define ST_SINGLE 0x00
  • 0

#7 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 15 March 2013 - 21:02

class MyContainer: RscListNBox
{
idc = 632;
onMouseButtondblclick = "['empty','',0,0] execVM 'onclick.sqf'";
colorBackground[] = {0.3,0,0,0.5};
color[] = {0,0,0,1};
x = 5.85 * GUI_GRID_W + GUI_GRID_X;
y = 3 * GUI_GRID_H + GUI_GRID_Y;
w = 15.41593 * GUI_GRID_W;
h = 15.6391 * GUI_GRID_H;
style = ST_FRAME + ST_MULTI;
color[] = {0, 0, 1, 1};
colorFrame[]={0.3,0,0,0.5};
lineSpacing = 1;
borderSize = 0.02;
rowHeight=0.1;
sizeEx=0.05;
sizeEx2=0.04;
};


Стоит убрать дублирование объявление переменной color в классе-наследнике MyContainer. Насчет изображения строк в ListNBox'е не дошли у меня руки правильно отобразить этот элемент.
  • 0

#8 OFFLINE   outchitel

outchitel

    Рядовой

  • Пользователи
  • 3 posts

Posted 16 March 2013 - 12:52

Стоит убрать дублирование объявление переменной color в классе-наследнике MyContainer. Насчет изображения строк в ListNBox'е не дошли у меня руки правильно отобразить этот элемент.

дублирование - мой косяк при копировании, опять же пытался заставить listNbox отобразить фон под элементом как сделано у бисов в арма 3. И игрался с настройками цветов.
Что интересно согласно конфигам бисы в инвентаре используют не ListNBox ,а ListBox . Но роли в данном случае это не играет. В listbox несмотря на style=16 (ST_MULTI) тоже все пишется в одну строчки и если не влезает,то обрубается.
Хочется получить listbox или listNbox как сейчас в инвентаре армы 3. Но никак не получается :(

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

нашел в одном из диалогов 2 свойства у listbox:

itemSpacing = 0.008;
itemBackground[] = {1, 1, 1, 1};

описания ни того ни другого не удалось найти. Однако опытным путем удалось установить,что itemSpacing как и следует из логики - устанавливает расстояние между элементами listBox. Это хорошо видно если установить для listbox возможность множественного выбора элементов и выбрать несколько.
С itemBackground[] = {1, 1, 1, 1}; сложнее точнее непонятно. По логике свойство должно устанавливать цвет фона для каждого элемента (или в качестве бреда цвет фона межэлементного пространства) ,но ни фига. Какой бы я цвет не писал в это свойство, какой бы общий фон не ставил для listbox (даже с подложкой из RscStructuredText для listbox пытался) ни фига - нету никакого эффекта. :(
  • 0

#9 OFFLINE   SpawnRND

SpawnRND

    Рядовой

  • Пользователи
  • 13 posts
  • Откуда:Ростов

Posted 16 March 2013 - 10:50

Спасибо всем за информацию.
Внимание

Если хотите поблагодарить человека то есть кнопка "спасибо"!


  • 0

#10 OFFLINE   Nanowolf

Nanowolf

    Рядовой

  • Пользователи
  • 11 posts
  • Откуда:Nv

Posted 16 March 2013 - 21:22

И удобная
  • 0

#11 OFFLINE   Nanowolf

Nanowolf

    Рядовой

  • Пользователи
  • 11 posts
  • Откуда:Nv

Posted 16 March 2013 - 21:23

Спасибо
Внимание

Если хотите поблагодарить человека то есть кнопка "спасибо"!


  • 0

#12 OFFLINE   Stas200124

Stas200124

    Ст.сержант

  • Пользователи
  • 271 posts
  • Откуда:Москва

Posted 18 March 2013 - 20:04

С созданией миссией столкнулся с такой бедой если реал люди умрут то все респ нельзя а я хочу сделать чтобы умер и опять респ (кстати тоже самое с машинами тоесть взорвал машину она опять появилась там де стояла первоначально) подскажите как так сделать??
  • 0

#13 OFFLINE   Paradox

Paradox

    Ефрейтор

  • Пользователи
  • 40 posts
  • Откуда:Одесса

Posted 19 March 2013 - 04:02

Доброго время суток !
Помогите плиз !
Хотел сделать зону ограничения ! Если игрок выходит из этой зоны то он умирает ! Поставил тригер в активации вписал unit setdamage 1 , активация синими . Как бы работает ..но .. если из зоны выходит даже бот(синих) то я умираю а мне очень необходимо , чтобы умирали только игроки синих при выходе из этой зоны .
  • 0

#14 OFFLINE   Blender

Blender

    Прапорщик

  • Администраторы
  • 615 posts
  • Откуда:Torrevieja, España

Posted 19 March 2013 - 05:34

Если зоной является окружность - то можно сделать так:
1. Поставь маркер типа Ellipse
2. Задай ему имя в поле NAME, например z_restriction
3. Укажи радиус маркера по осям x и y, например 500
4. Создай файл с скриптом и запусти его на стороне сервера:
while {true} do {
  _marker = "z_restriction";
  {
    if (player distance (getMarkerPos _marker) > ((getMarkerSize _marker) select 0) && alive _x) then {
      _x setDamage 1;
    };
    sleep 0.126
  } forEach allUnits;
  sleep 1.231;
};

Файл можно поместить в корень каталога миссии и назвать например z_restriction.sqf
Запустить можно создав в каталоге миссии файл init.sqf, в котором:
if (isServer) then { [] execVM "z_restriction.sqf" };

  • 1

#15 OFFLINE   Melnik

Melnik

    Ст. Прапорщик

  • Пользователи
  • 749 posts
  • Откуда:Россия

Posted 19 March 2013 - 11:09

Тоже задавался таким вопросом. И оказалось очень просто. Так же как в АРМА 2.

Создать респавн типа "BASE"

1. Нужно создать миссию и поставить юнитов.

2. Создать места для респавна с помощью клавиши F6. Создаём маркеры типа эллипс (на их территории будут появятся бойцы)
Маркеры могут быть любого цвета, штриха и размера.

3. ВАЖНО НАЗВАТЬ ИХ:"Respawn_East" (для красных), "Respawn_West" (для синих), "Respawn_Guer" (для независимых) и "Respawn_Civi" (для Гражданских). [ПИШЕМ БЕЗ КАВЫЧЕК]

4. Выходим из игры идём в папку:
C:UsersИМЯDocumentsArmA 3 - для стандартного профиля
C:UsersIИМЯDocumentsArmA 3 Other ProfilesИМЯ ПРОФИЛЯ - если создавали новый

5. Ищем папку:
missions - для одиночных миссий
MPMissions - для мультиплеера

6. В папке будут папки с названиями ваших миссий. В тех миссиях (папках) где нужен респавн вы создаёте (или копируете уже созданный) файл Description.ext
Этот файл создается с помощью простого блокнота.

7. В него вы прописываете всего 2 строчки:

respawn= "BASE";
respawnDelay= 10;

8. Теперь при выборе миссии в статусе будет написано Respawn BASE.

9. Играйте.


________________________________________

PS. Число "10" - это время в секундах до воскрешения. Вы можете смело его менять.
Список всех команд для Description.ext есть тут

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



​Я записывал видео на эту тему. Как залью прикреплю к посту.

Attached Files


Edited by Melnik, 19 March 2013 - 12:48.

  • 3

#16 OFFLINE   Paradox

Paradox

    Ефрейтор

  • Пользователи
  • 40 posts
  • Откуда:Одесса

Posted 19 March 2013 - 13:10

Большое спасибо за помощь ! У меня что-то идет не так . При запуске миссии вне зависимости в тригере я или нет погибаю. И еще при срабатывании умирают все ( игроки и боты).
  • 0

#17 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 19 March 2013 - 13:22

Paradox, попробуйте увеличить размер маркера. У вас срабатывает условие на выполнение убийство нарушителей.
  • 1

#18 OFFLINE   Paradox

Paradox

    Ефрейтор

  • Пользователи
  • 40 posts
  • Откуда:Одесса

Posted 19 March 2013 - 17:50

HarryWorner, спасибо за ответ ! Ставил 250х250 тоже самое ..а мне надо вообще 150х150(( А есть еще какие то варианты ?
  • 0

#19 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 19 March 2013 - 18:05

А есть еще какие то варианты ?

Paradox, замени Player на _x, возможно Блендер написал тебе скрипт навскидку. Можно вместо маркера поставить на карту GameLogic и задать ему название "GameLogic1". Но доступная зона будет круговой:

while {(true)} do {
  {
    if ( (_x distance GameLogic1 > 150) and (alive _x) ) then
    {
      _x setDamage 1;
    };
    sleep 0.1
  } forEach allUnits;
  sleep 1;
};

  • 1

#20 OFFLINE   Paradox

Paradox

    Ефрейтор

  • Пользователи
  • 40 posts
  • Откуда:Одесса

Posted 19 March 2013 - 23:19

Спасибо ) сейчас буду пробовать.

А скрипт поместить в документ sqf ?
  • 0




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