Перейти к содержанию

Добро пожаловать на проект
Weekly Open Games

Weekly Open Games — это проект для людей, которым интересен хардкорный тип игры. Мы стараемся максимально эффективно использовать структуру, слабые и сильные стороны, а также технику и вооружение различных сторон конфликта, но не ставим перед собой цель провести 100% сбалансированного боестолкновения. Командная игра, командное взаимодействие — фундамент нашего проекта.
О проекте WOG Как начать играть Правила серверов

Рекомендуемые сообщения

Юнитпроцессор бесследно исчез, как теперь делать кастомное снаряжение игроков ? :)

Можно пока пользоваться бисовским арсеналом, последовательность действий:

1) Редактируем инвентарь юнита, при этом не забываем дать ему рацию(должен быть класс ItemRadio,  исправить после редактирования, если это не так), карту, компас, часы, если нужно

2) Сгружаем все в буфер и сохраняем в файл, например tpl\fighter.sqf

3) Редактируем файл

  • а) Заменяем все
    this 

    в коде на 

    _this

б) Добавляем в начало файла строчку 

if (not local _this) exitwith {};

в) Удаляем строчки изменения лица и голоса, которые добавляет Арсенал

 

4) Юниту, который будет с этим снаряжением в поле инициализации в редакторе пишем:

this call compile preprocessfilelinenumbers "tpl\fighter.sqf";

Изменено пользователем Zealot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
@Zealot, я правильно понимаю, что таким образом можно одевать абсолютно любую форму? Т.е. допустим ксатовца в натовскую форму нарядить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Zealot, я правильно понимаю, что таким образом можно одевать абсолютно любую форму? Т.е. допустим ксатовца в натовскую форму нарядить.

Надо попробовать, вроде можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот менять вооружение техники, увеличить количество боеприпасов и дымов в ней, все еще не может. Поэтому вопрос все еще актуален.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прямо в редакторе у юнита прописывай,

Нельзя так! :) Этот код будет выполняться при каждом перезаходе человека в игру, что приведете к куче патронов, тормозам и глюкам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Nkey

Странно, в ините юнита прописывал технике дополнительные дымы, все игралось на сервере, брат жив, зависимость есть. На а3 как-то по-другому все?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот код будет выполняться при каждом перезаходе человека в игру

Нет. Инит объекта выполняется при его создании либо при обновлении инита. В A3 второе невозможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@swatSTEAM, странно. Много раз сталкивались с такой проблемой - при перезаходе кого-то из игроков, у него начинает выполняться инит и добавляет всем остальным игрокам все еще раз. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
@Nkey, ну попробуй в инит юнита засунуть какое-нибудь глобальное бисовское говно (типа bis fnc mp) а в него хинт. Если при перезаходе сработает, то я сильно ошибаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@swatSTEAM

было было, у нас на последних играх, после перезаходов у некоторых игроков по 100+ ракет к рпг было в инвентаре. Причем срабатывает, не побоюсь этого слова, совершенно рандомно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот что на вики написано (подразумевается arma2), не знаю менялось ли что в arma3

 

Order of Initialization
Scripts
  • Server & Players (NOT JIP)
    • While moving to Briefing
      • Unit Init EH runs
      • Unit Init line from editor runs
      • After all units are initialized, init.sqf runs
    • After Briefing
    • if onPlayerConnected was setup in e.g. init.sqf, it will now process all the players connected in order of connected
      • onPlayerConnected will process new players after they are connected to their player body. So JIP player connects, world initializes, he gets control of his character, now the onPlayerConnected fires on the server.
  • JIP Players
    • Same as above, but there's no Briefing this time. init.sqf seems to run after the player gets control of his character

Да касаемо скрипта выше, почему бы сделать не так?

if (local this) then {this call compile preprocessfilelinenumbers "tpl\fighter.sqf";};

Самому проверить что там с инициализацией все руки не доходят

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот результаты теста

Выделенный сервер 2 игрока

Поставил три техники:

Вертолет ~300 метров от игроков

Пантера ~2 км от игроков

Хантер ~3 км от игроков

В инициализации  техники прописал 

вертолету var = [] spawn {sleep 5; hint "test1";};
пантере var = [] spawn {sleep 10; hint "test2";};
хантеру var = [] spawn {sleep 15; hint "test3";};

Стартуем миссию:

я и второй игрок видим все три сообщения

затем второй игрок перезаходит и он видит только одно долго висящее сообщение "test1", остальные сообщения не появляются

Изменено пользователем IHUNTERI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@IHUNTERI

Да ладно? Это вообще жесть тогда.

Раздавайте снаряжение только с серва, в момент, когда он овнер для всех играбельных юнитов. Сервак не перезаходит. :)

Хотя, убери-ка из всех инитов "var =" и протести снова.

Изменено пользователем swatSTEAM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уверен ничего не поменяется, переменная - это всего лишь "ссылка/ярлык".

Дело в том что большинсто команд, меняющих снаряжение юниту игрока, работать будут только на машине игрока.

Но на кооп миссиях я это так решал

_start_check = (player getvariable "Start_completed");
if (isnil "_start_check") then
{
    // делаем "все что нужно" с юнитом игрока
};
player setVariable ["Start_completed", true, true];
// больше "все что нужно" с юнитом игрока не случится, сколько не перезаходи

При этом не занятые игроками юниты нужно обрабатывать на сервере.

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

Изменено пользователем IHUNTERI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уверен ничего не поменяется, переменная - это всего лишь "ссылка/ярлык".

Дело в том что большинсто команд, меняющих снаряжение юниту игрока, работать будут только на машине игрока.

Но на кооп миссиях я это так решал

_start_check = (player getvariable "Start_completed");
if (isnil "_start_check") then
{
    // делаем "все что нужно" с юнитом игрока
};
player setVariable ["Start_completed", true, true];
// больше "все что нужно" с юнитом игрока не случится, сколько не перезаходи

При этом не занятые игроками юниты нужно обрабатывать на сервере.

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

Мы тоже были уверены, что при параметрах -mod и -beta ничего не изменится, но это же ARMA, при параметре mod, ARMA 2 не подключается, а при beta наоборот, так что полностью быть в чем-то уверенным нельзя

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@IHUNTERI,

На самом деле это хороший способ. У меня так в аддоне маркеров карты заменяются на уникальные. Ну, принцип тот же, основанный на неймспейсе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все еще интересней
5 машин
1 метров 200 от игроков
2 1км
3 2 км
и так далее
предыдущий код изменил на

call {[] spawn {sleep 10; hint "test1";};};

При старте все 5 сообщений один за другим
При перезаходе у второго игрока висит хинт сразу без задержки "test2"
удаляю вторую машину, перезаход, висит "test3"
удаляю третью, висит "test4"
...
удаляю пятую, висит "test1"
:rolleyes:
testMPinit.VR.pbo
Почему так? Есть мысль, что в missions.sqm

class Vehicles
	{
		items=5;
		class Item0
		{
			position[]={4013.7595,5,4347.5742};
			id=2;
			side="EMPTY";
			vehicle="B_MRAP_01_F";
			skill=0.60000002;
			text="car2";
			init="call {[] spawn {sleep 18; hint ""test2"";};};";
		};
		class Item1
		{
			position[]={4009.8037,5,5344.4429};
			id=3;
			side="EMPTY";
			vehicle="B_MRAP_01_F";
			skill=0.60000002;
			text="car3";
			init="call {[] spawn {sleep 20; hint ""test3"";};};";
		};
		class Item2
		{
			position[]={4007.8823,5,6355.3481};
			id=4;
			side="EMPTY";
			vehicle="B_MRAP_01_F";
			skill=0.60000002;
			text="car4";
			init="call {[] spawn {sleep 25; hint ""test4"";};};";
		};
		class Item3
		{
			position[]={4016.853,5,7347.2314};
			id=5;
			side="EMPTY";
			vehicle="B_MRAP_01_F";
			skill=0.60000002;
			text="car5";
			init="call {[] spawn {sleep 30; hint ""test5"";};};";
		};
		class Item4
		{
			position[]={4008.6458,5,3526.2207};
			id=6;
			side="EMPTY";
			vehicle="B_MRAP_01_F";
			skill=0.60000002;
			text="car1";
			init="call {[] spawn {sleep 14; hint ""test1"";};};";
		};
	};
};

Но почему не работает задержка непонятно.

Изменено пользователем IHUNTERI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но почему не работает задержка непонятно.

Курбат с этим сталкивался как-то давно, уже не помню разобрались или нет.

uiSleep пробовал?

Расстояние, кстати, здесь роли не играет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз попробовал

выделенный сервер с persistent=1

5 машин

в инициализацию написал

call {[] spawn {sleep 4; diag_log "car1";};};

в rpt файле отображаются все 5 сообщений

sleep увеличивается с шагом +1

При старте

все ок
"car1"
"car2"
"car3"
"car4"
"car5"

При перезаходе

не ок - sleep не работает 
"car2"
"car3"
"car4"
"car5"
"car1"

uisleep работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@IHUNTERI, Ну, тут скорее всего в какой-то момент игра считает, что прошло бесконечно много игрового времени и пропускает любой слип.

uiSleep же зависит от системного времени. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибка возникающая при выгрыше по потерям или по времени:

 

 
Error in expression <Win']; _isPlayerWin = playerSide in ( [_winner] call bis_fnc_friendlysides );
 
>
  Error position: <_winner] call bis_fnc_friendlysides );
 
>
  Error Неопределенная переменная в выражении: _winner
File WMT_Main\functions\fn_EndMission.sqf, line 11
Error in expression < [_enemy,format[localize "STR_WMT_HLSWinLo>
  Error position: <_enemy,format[localize "STR_WMT_HLSWinLo>
  Error Неопределенная переменная в выражении: _enemy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.