Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
123new

DayZ Standalone v0.62.142963 Server Files + рабочий респавн персонажа и лута

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

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

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


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

А нормально, что запущенный сервер без игроков грузит проц 2х3.8ГГц на 90-100% или я чего намудил? вроде все по инструкции сделал... И зайти на него смог...)

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


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

scrdefft Ну если он наспавнил машин и хеликрашей - то запросто

Я не стал отключать спавн машин - рестартанул раза 4 - наспавнилось машин в машинах - сел в одну -  завел - они как начали летать ))))

Проц как загрузился на 90% )))

 

CPU Core i5-3570, 16 гиг оперативы (4x4gb) ddr pc3-12800 с разгоном по таймингам  9-9-9-24 + 2ssd samsung 850 pro 256гиг в зеркале на райд-контроллере lsi

 

 

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


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

123new 

Мне кажется при респавне надо обрабатывать возврат состояния из функции lifeState

 

Ведь если старый агент "UNCONSCIOUS", то он еще существует, тк новый не создан

 

Что- то на подобие

 

if ((lifeState _agent == "UNCONSCIOUS") then {

тут нужно добить агента

};

 

Вот только как добить агента....

 

А то в какой-то момент времени на сервере оказывается 2 разных агента с одинаковым UID

 

И еще

 

В процедуре спавна надо бы делать проверку

если такой-то UID (те игрок был убит и валяется на сервере) на сервере есть - то делать задержку

если нет - то она не нужна

 

 

Изменено пользователем BorizzK (история изменений)

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


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

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

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


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

У меня всегда 40-60%

хоть 0 игроков - хоть 10

но - если наспавнить машин и хеликрашей - то начинаются лаги

впрочем у меня это все для тестов и тп

если запущу в продакшн для своих (и не только) - то в виртуалке под вмварью с выделением 16 гиг оперативы и 8 ядер xeon e5-26xx + все лежать будет на быстрой полке 12Gb sas

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

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


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

BorizzK а смысл? если это респавн то в любом случае старый перс под чистку попадает, на то и респавн нужен.

О нагрузке - энскрипт грузит ПК, спавн зомбей, лета и т.п.

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


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

123new 

Если я респавнюсь из UNCONSCIOUS - через 1-2 сек зареспавнившейся перс you are dead и сушите весла - ток перезаходить

 

попробуй сам на своем сервере - сдайся зомбарям и когда наступит UNCONSCIOUS сделай респавн

 

про задержки

на оф-ветке (пабликах)

если заходишь на сервак и не был там более 240сек - задержки нет

не был там от 190 до 240сек - задержка от 30 до 10 сек или около

если не был на серве до 180 сек - задержка 180 сек

 

вроде так

 

 

 

 

Изменено пользователем BorizzK (история изменений)

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


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

123new

 

И вот еще про процедуру респавна

 

_clientRespawn =
{
 ///
 _lifeState = lifeState _agent; - это я добавил
 
 _uid = getClientUID _id;
 
 ///
 diag_log format ["RESPAWN: Player %1 name %2 UID %3 LifeState is %4.", _agent, _name, _uid, _lifeState];  - это я добавил что бы изучить - _lifeState у агента any конечно же пустой, в отличие от норм агента при просто дисконнекте
  

Вобщем с самого начала процедуры переменная _agent получает значение any


 [_uid, _agent] call fnc_dbDestroyProfile;  - вот тут чей профиль убивается? _agent - то = any !!!!!!!! но старый агент с таким же uid с сервера еще не удален... вот и получается хрень


 _id spawnForClient { titleText ["Respawning....","BLACK IN",3];};
 diag_log format["RESPAWN: NEW PLAYER! UID: %1",_uid];

 sleep DZ_TIME_WAITING_SPAWN_PLAYER; - это вообще не работет

 

 _mySkin = DZ_SkinsArray select (floor random (count DZ_SkinsArray)); 
 _pos = posFromSpawnPlayer select (floor random (count posFromSpawnPlayer));
 _agent = createAgent [_mySkin,  _pos, [], 0, "NONE"];

 

 call createFullEquipment;

 _agent call init_newPlayer;
 call init_newBody;
};

 

Это в случае анкунси от зобарей юадед происходит быстро - зомби добивают

А если от пули снайпера? упал и снайпак тебя н видит больше. И помрет твой перс не через 2-3 сек а через минуту и твой новый перс отморозится, а если ты уже в бой вступил?... Пойду проверю...

 

Проверил

респавн для анкунси не работает

Все как выше написал

 

2018/03/19, 23:13:10 "RESPAWN: Player any name CO-LOBOK UID 76561198156927007 LifeState is . ТУТ ДОЛЖЕН БЫТЬ lifeState" - но он пустой по понятной причине
2018/03/19, 23:13:10 "RESPAWN: NEW PLAYER! UID: 76561198156927007"
2018/03/19, 23:13:10 "Recording player CO-LOBOK with 76561198156927007 and agent SurvivorPartsMaleAfrican:2:35718"
2018/03/19, 23:13:10 "KILL LOG: Error: No unit kill yourself" - вот оно

 

ИМХО - при респавне нужно искать на сервере через какую-то функцию агента с таким же uid, получать его agent и грохать принудительно........

 

Изменено пользователем BorizzK (история изменений)

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


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

Вобщем пока удалось добиться следующего

 

С таким кодом респавн из ванкунси проходит и игрок жив

Но тк в процессе ожидания отрабатывается смерть - то пропадает звук - те можно играть но без звука

И ошибка та же

 

Собсно измененный код респавна

_clientRespawn = 
{
	_uid = getClientUID _id;
	//[_uid, _agent] call fnc_dbDestroyProfile;

	sleep 1;

	// from server_data.pbo dbLoadPlayer.sqf - Этот кусок я запихал сюда в надежде что старое подключение получает эвент о смерти
    // но походу это ничего не дает
	// когда респавн из ю а дед - то клиент из массива ироков по ид удаляется, а из ванкунси нет - тк его там уже нет 
	// игра при респавне в ванкунси убивает игрока сама и удаляет из массива игроков
	diag_log format ["SCHEDULER: Current 'connected players' array %1", connectedPlayers];
	diag_log format ["SCHEDULER: Removing respawning clientId %1, name %2", _id, _name];
	_freedPos = connectedPlayers find _id;
	connectedPlayers set [_freedPos,0];
	diag_log format ["SCHEDULER: Updated 'connected players' array %1", connectedPlayers];
	//
	
	diag_log format ["RESPAWN: Player %1 name %2 UID %3", _agent, _name, _uid];	

	if (DZ_TIME_WAITING_SPAWN_PLAYER > 0) then 
    {
		[_id,DZ_TIME_WAITING_SPAWN_PLAYER] spawnForClient {
		
				sTIMER = _this select 1;
				null = [] spawn { while {sTIMER > -1} do {setEVUser -5;};};

				disableUserInput true;
				
				while {sTIMER > -1} do {
					titleText[format["Spawning in %1 seconds... Please wait...",sTIMER],"PLAIN",10e10];
					sTIMER = sTIMER - 1;
					sleep 1;    
				};
				
				disableUserInput false;    
			
				titleText["","PLAIN",10e10];
			};
    };
	
	_id spawnForClient { titleText ["Respawning....","BLACK IN",3];};
	diag_log format["RESPAWN: NEW PLAYER! UID: %1",_uid];

	sleep 1;

	_mySkin = DZ_SkinsArray select (floor random (count DZ_SkinsArray));  
	_pos = posFromSpawnPlayer select (floor random (count posFromSpawnPlayer));
	_agent = createAgent [_mySkin,  _pos, [], 0, "NONE"];

	call createFullEquipment;

	_agent call init_newPlayer;
	call init_newBody;
};

Серверрепорт прилагается

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

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


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

BorizzK на оф пабликах система, связанная с задержками, работает иначе и связана с базой данных персонажа, доступа к который мы не имеем. Т.е. после загрузки игры и поделючения к серверу загрузка передается на клиент игры для подгрузки стартовых настроек персонажа, а также переходит к процедуре чтения с официальной бд сервера, где идут разные параметры, в том числе и определяется queie time, параметр ожидания перед созданием и загрузкой персонажа, и пока это время на стороне клиента не пройдет, непосредственно асинхронная загрузка на сервер не начинается.
В нашей бд персонажа такая фигня не работает, потому мы и вынуждены заниматься такой ерундой, как установить фиксированное время ожидания после загрузки персонажа. Впрочем, я сомневаюсь, что это такая большая проблема для игрока, подождать 10 секунд или 20  - разница не велика.

Теперь о этом

 /// _lifeState = lifeState _agent; - это я добавил
 
 _uid = getClientUID _id;
 
 /// diag_log format ["RESPAWN: Player %1 name %2 UID %3 LifeState is %4.", _agent, _name, _uid, _lifeState];  - это я добавил что бы изучить - _lifeState у агента any конечно же пустой, в отличие от норм агента при просто дисконнекте

lifestate разумеется пустой, потому как уже на первой строке функции respawn параметр agent уже пустой, вообще пустой полностью. Вот добавьте в начале процедуры:
 

 diag_log format ["RESPAWN: AGENT Player %1 name %2 UID %3 ", _agent, _name, _uid];

и увидите в логе такое:

2018/03/20,  1:22:14 "RESPAWN: Player any name TESTPLAYER UID 76561198156927007"

где any как раз таки _agent и есть у вас. Т.е. то о чем я и говорил ранее, игрок жмет респавн, его персонаж автоматически отвязывается от убитого персонажа (agent как раз таки и есть персонаж), и выполняется функция с процедуры из скрипта. А по выполнении ее накладывается процедура события смерти на экран игроку, как следствие выполнения прошлой комманды события смерти.
Вот как ее обработать это вопрос иного характера, но я слышал, что таки добавление паузы при респавне игрока решает эту беду.

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


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, BorizzK сказал:

123new

 

ИМХО - при респавне нужно искать на сервере через какую-то функцию агента с таким же uid, получать его agent и грохать принудительно........

 

это как раз таки сделать вполне можно, ищем так

{
  if ((alive _x) && (_x getVariable["UID",""] == _uid)) then
  {
	_uid = getClientUID _id;	
    _agent = _x;
	//[_uid, _agent] call fnc_dbDestroyProfile;
    _agent setVariable ["bleedingsources","[]"];
    _agent setVariable ["timeOfDeath",diag_tickTime];
    _agent setDamage 1;
  };
} forEach (allMissionObjects "SurvivorBase");

и он сам удалит. Но сомневаюсь что это спасет от наступающего экрана смерти после окончания респавна)

 слову, на системе сохранений от бена все ок? или тот же баг?

Изменено пользователем 123new (история изменений)

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


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

123new 

Вы на своем сервере пробовали?

там система сохранения от бена?

 

Я тестил и на Вашей чистой сборке и после внесения изменений - все одно и то же

 

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


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

BorizzK на текущий момент не могу протестировать из-за нехватки времени дома, а также отсутствия возможности в свободное время зайти на сервер, т.к. не дома нахожусь.

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


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

123new 

 

Как я понимаю этот код размещается в начале респавна

 

Это убийство агента методом присвоения соответствующих значений переменным окружения конкретного (найденного по UID) агента?

 

    _agent setVariable ["bleedingsources","[]"];
    _agent setVariable ["timeOfDeath",diag_tickTime];
    _agent setDamage 1;
 

Не помогло

не находится агент

_clientRespawn = 
{

	{
		if ((alive _x) && (_x getVariable["UID",""] == _uid)) then
		{
			_uid = getClientUID _id;	
			_agent = _x;
			//[_uid, _agent] call fnc_dbDestroyProfile;
			_agent setVariable ["bleedingsources","[]"];
			_agent setVariable ["timeOfDeath",diag_tickTime];
			_agent setDamage 1;
			diag_log format ["RESPAWN: Find and deleted old agent %1 with uid %2", _agent, _uid];
		};
	} forEach (allMissionObjects "SurvivorBase");

	_uid = getClientUID _id;
	//[_uid, _agent] call fnc_dbDestroyProfile;

	sleep 1;

	diag_log format ["RESPAWN: Player %1 name %2 UID %3", _agent, _name, _uid];	

	_id spawnForClient { titleText ["Respawning....","BLACK IN",3];};
	diag_log format["RESPAWN: NEW PLAYER! UID: %1",_uid];

	sleep 1;

	_mySkin = DZ_SkinsArray select (floor random (count DZ_SkinsArray));  
	_pos = posFromSpawnPlayer select (floor random (count posFromSpawnPlayer));
	_agent = createAgent [_mySkin,  _pos, [], 0, "NONE"];

	call createFullEquipment;

	_agent call init_newPlayer;
	call init_newBody;
};

 

Изменено пользователем BorizzK (история изменений)

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


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

BorizzK это поиск всех живых ((alive _x) - поиск живых) персонажей среди имеющихся на сервере с привязанным uid к нему ((_x getVariable["UID",""] == _uid) - сверка текущего uid персонажа с тем, что зада персонажу при его передаче управления игроку, процедуры init_new_player  и init_new_body примерно на память задает это значение). А если агент и найдется, он убивается принудительно без записи в лог:

_agent setVariable ["bleedingsources","[]"];
			_agent setVariable ["timeOfDeath",diag_tickTime];

эти комманды в event_player_killed обозначены
 

    _agent setDamage 1;

непосредственно убийство персонажа, нанесение 100% урона на персонажа.

Если хотите, продублируйте, раскомментировав

[_uid, _agent] call fnc_dbDestroyProfile;

 

А по поводу сборки бена я не просто так спросил. Видите ли, у него эти функции переписаны, и насколько я вчера видел, функция удаления сейва персонажа с базы fnc_dbDestroyProfile там не требует от игрока его agent

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


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

123new да, спасибо, я разобрался что к чему

вобщем ищецо все

 

 

_uid = getClientUID _id; забыл перед добавить и _uid был пуст потому не искалось

 

 _uid = getClientUID _id;
 //[_uid, _agent] call fnc_dbDestroyProfile;


 {
  diag_log format ["RESPAWN: Look for agent %1 and compare current UID %2 with agent UID %3", _x, _uid, _x getVariable["UID",""]];
  if ((alive _x) && (_x getVariable["UID",""] == _uid)) then
  {
   _uid = getClientUID _id; 
   _agent = _x;
   //[_uid, _agent] call fnc_dbDestroyProfile;
   _agent setVariable ["bleedingsources","[]"];
   _agent setVariable ["timeOfDeath",diag_tickTime];
   _agent setDamage 1;
   diag_log format ["RESPAWN: Find and deleted old agent %1 with uid %2", _agent, _uid];
  };
 } forEach (allMissionObjects "SurvivorBase");

теперь все ищется, но при входе через 1-2 сек старый агент с таким же уид дохнет и новый агент с таким же уид то же юадед

 

мне кажется нужно старому агенту другой UID присвоить в этом коде

 

_agent setVariable ["UID","0"];

 

ща попробую вот так

 

	_uid = getClientUID _id;
{
		diag_log format ["RESPAWN: Look for agent %1 and compare current UID %2 with agent UID %3", _x, _uid, _x getVariable["UID",""]];
		if ((alive _x) && (_x getVariable["UID",""] == _uid)) then
		{
			_uid = getClientUID _id;	
			_agent = _x;
			_agent setVariable ["UID","0"];
			diag_log format ["RESPAWN: New UID for %1 is %2", _agent, _agent getVariable["UID",""]];
			_agent setVariable ["bleedingsources","[]"];
			_agent setVariable ["timeOfDeath",diag_tickTime];
			_agent setDamage 1;
			diag_log format ["RESPAWN: Find and deleted old agent %1 with uid %2", _agent, _uid];
		};
	} forEach (allMissionObjects "SurvivorBase");

 

 

 

Изменено пользователем BorizzK (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
57 минут назад, 123new сказал:

А по поводу сборки бена я не просто так спросил. Видите ли, у него эти функции переписаны, и насколько я вчера видел, функция удаления сейва персонажа с базы fnc_dbDestroyProfile там не требует от игрока его agent

Это понятно из кода

там вызывается enscript процедура DataBaseDelete из DataBase.c которая грохает файлы в папке PlayerSaves\alive\...UID...

но только файлы

сама папка остается

над будет это подправить

 

наваять процедуру удаления папки с профилем и вызывать  ее в fnc_dbDestroyProfile

 

P.S. Я кстати там нашел ошибочку в процедуре DataBaseRead в 107 строке 

file_name = "$FILENAME$.sqf"; - в конце отсутствовал ;

в script.log ругань была

 

P.S.2. enscript C# похож походу

 

P.S.3. А что там рядом за файлики с ассемблерным кодом делают?

Изменено пользователем BorizzK (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, BorizzK сказал:

теперь все ищется, но при входе через 1-2 сек старый агент с таким же уид дохнет и новый агент с таким же уид то же юадед

 

мне кажется нужно старому агенту другой UID присвоить в этом коде

 

_agent setVariable ["UID","0"];

 

 

вы опять меня не поняли, вне результата вашего действия после окончания респавна на ваш экран (по id вашему на сервере, не по uid и не по agent) выдается окно о смерти, т.к. в случае респавна вы эту смерть и вызываете, а игрой предусмотрена эта процедура, поумолчанию в случае смерти выдавать на экран надпись с отключением экрана, звукоов и т.п. Не сервер это выдает, а игра сама распознает поумолчанию. И сколько бы вы ни химичили с убийством персонажа, будет это окно в любом случае, поскольку это остаточный эффект игры из-за не официальной базы данных сервера и костыля в виде dbloadplayer с отвязкой от неработающей официальной базы данных персонажа.

1 час назад, BorizzK сказал:

Это понятно из кода

там вызывается enscript процедура DataBaseDelete из DataBase.c которая грохает файлы в папке PlayerSaves\alive\...UID...

но только файлы

сама папка остается

над будет это подправить

как? Если в enscript v 0.62 не имеется и по сей день функции удаления папки? воообще нет даже намека на это?
Да и чем вам пустая папка так мешает? Персонаж в любом случае новый создастся и запишется нормально.
enscript это вообще близкий родственник c++ и сильно похожий, но как ни крути, а его синтаксис и комманды задаются именно его языком, а не его родственником c++

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


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

123new 

Ну если по id на сервере, не по uid и не по agent - то надо придумать как сменить id...

Или перед началом респавна сделать задержку на 5-10 секунд....

 

Изменено пользователем BorizzK (история изменений)

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


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

BorizzK смена id или сброс всех сценариев, назначенных на id игрока в текущей активной сессии делается просто банальным перезаходом на сервер. id выдает сам сервер на момент подключения игрока, и каким он будет зависит лишь от самого exe сервера игры. С перезаходом он может как смениться, так и остаться тем же. Это как номер в списке таблицы на момент наличия игрока на сервере.
Перед началом респавна также нельзя задержку, почему? так как загрузка, респавн и отключение игрока - процесс асинхронный.

Изменено пользователем 123new (история изменений)

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


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

Значит в данном контексте нормальный респавн игрока из ванкунсии вопрос не решаемый...

 

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


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

123new

Как Вариант - нужно найти процедуру отправляющую эвент юадед клиенту (который получая этот эвент выводит его на экран и тд итп) и там делать проверку ванкунссии и респавн/переподключение клиента, и, если клиент респавнится не отправлять этот эвент клиенту...

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

 

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


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

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

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


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

Кое что нашел

Скрин юадед описан в классе dead в файле brain_player_client.fsm который изначально лежит в /addons/modules_dayz.pbo/fsm

 

   class dead
    {
      name = "dead";
      init = /*%FSM<STATEINIT""">*/"titleText [""You are dead"",""BLACK OUT"",10];" \n
       ""/*%FSM</STATEINIT""">*/;
      precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
      class Links
      {
      };
    };

 

Но пока это все

 

буду дальше рыть 

 

 

Кстати - заинтересовал меня скриптик один

player_queued.sqf

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

 

надо будет изучить переменную player_queued_isrunning (true / false) как и с чем она связана и на что влияет...

Изменено пользователем BorizzK (история изменений)

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


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Troy1
      Всем привет. пишу мод и столкнулся с проблемой в реализации.
      Суть: Пытаюсь сделать проверку, если игрок стоит прям у окна или у дверного проёма он должен получать урон.
      Делал вот так.
      int wallHits = 0; float d = 2.2; // Дистанция до стены. Если стена дальше — считаем, что там окно или проем. // 8 направлений "снежинкой" для проверки стен вокруг игрока // Используем Vector(x, y, z) для точности ref array<vector> checkDirs = { Vector(d,0,0), Vector(-d,0,0), Vector(0,0,d), Vector(0,0,-d), Vector(d,0,d), Vector(-d,0,-d), Vector(d,0,-d), Vector(-d,0,d) }; foreach (vector dir : checkDirs) { // Пускаем горизонтальные лучи от позиции игрока (from) if (DayZPhysics.RayCastBullet(from, from + dir, collisionLayerMask, this, hitObject, hitPosition, hitNormal, hitFraction)) { // ПРОВЕРКА: Это должна быть вертикальная стена (Y нормали < 0.5) // Чтобы не засчитать низкий потолок за стену if (Math.AbsFloat(hitNormal[1]) < 0.5) { wallHits++; } } } // УСЛОВИЕ БЕЗОПАСНОСТИ: // В комнате wallHits будет 6-8. У окна или в проеме — 1-4. if (wallHits < 5) { hasSafeCeiling = false; // Слишком открытое пространство (окно/дверь) } Пытался менять дистанции, но всё ровно не как не хочет работать.
      Что я делаю не так, или я вообще делаю не то?
      Мне нужно проверять игрока, в укрытии он или нет.
      С высотой я разобрался, а вот с боковыми лучами у меня траблы и не во всех помещениях работает как нужно.
      В некоторых помещениях вообще не работает, удаляешь строки проверки, начинает работать и то по высоте.
      Просто забегаешь по навес и игрок под защитой, так не должно быть.
      Помогите пожалуйста  решить задачу.
    • Автор: Troy1
      Всем привет. Суть в чём, пишу мод на событие и когда происходит событие, параллельно должна меняться скорость ветра, не могу понять как заставить скрипт управлять силой ветра. Понижать силу ветра получилось сделать, а вот повышать не как. Только после перезагрузки сервера сила ветра задаётся в нужном значение.
      Как сделать, что бы по вызову функции менялась сила ветра в большую или в меньшую сторону?
      protected void SetWind(float wind, float time) { if (!g_Game) return; Weather m_Weather = g_Game.GetWeather(); if (!m_Weather) return; m_Weather.SetWindMaximumSpeed(wind); m_Weather.SetWind(Vector(1/Math.Sqrt(3), 1/Math.Sqrt(3), 1/Math.Sqrt(3)) * wind); m_Weather.SetWindSpeed(wind); m_Weather.SetWindFunctionParams(1.0, 1.0, -1); } Это скрипт на понижение силы ветра.
      Работает понижение силы ветра в том случае, если до этого сила ветра была выше.
      Пример:
      Изначально на сервере сила ветра = 20 m/s А нужно понизить до 10 m/s
      Только в этом случае сработает скрипт который я приложил выше.
      Помогите пожалуйста решить этот вопрос.
      За ранние благодарю.
    • Автор: Troy1
      Пока ждал помощи, решил вопрос!
      Тема закрыта!!!
    • Автор: magliner
      Привет ! Ну вот моя история с вопросом в конце.. Я фанат Дэйз ванилы черноруси, заколебало сидеть на бездушных серверах со слабой админкой и терять лут от софтеров, решил создать под свои скромные запросы около ванильный сервер.. Нашел хорошего исполнителя, быстро и четко запустили отладили и ВОТ я имею СВОЙ сервер.. клас! вечер восторга и изучения
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Наш выбор

×
×
  • Создать...

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

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.

Поддержка