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

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

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

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

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

Как доработать скрипт "запрет на выходиз машины"

И так,есть мод от "Ловца душ" DisableDestroe....Автор (более известный тут под другим именем) доработал его, но....хочется большего.
И так. скрипт запрета выхода из машины
 

modded class ActionGetOutTransport: ActionInteractBase
{

	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{
 		Transport trans = null;
		int crew_index = -1;

		HumanCommandVehicle vehCommand = player.GetCommand_Vehicle();
		if ( vehCommand )
		{
			trans = vehCommand.GetTransport();
			if ( trans )
			{
				crew_index = trans.CrewMemberIndex( player );
				if ( crew_index >= 0 && trans.CrewCanGetThrough( crew_index ) )
				{
					if(GetDDConfig().GetBlockExitCar())
					{
						Object targetObject = target.GetObject();		
						array<Object> nearest_objects = new array<Object>;
						array<CargoBase> proxy_cargos = new array<CargoBase>;

						GetGame().GetObjectsAtPosition(targetObject.GetPosition(), GetDDConfig().GetRadiusBlock(), nearest_objects, proxy_cargos);
						for(int i = 0; i < nearest_objects.Count(); i++)
						{
							Object object = nearest_objects.Get(i);
							if(object.IsInherited(Fence))
							{
								Fence gate = Fence.Cast(object);
								if(gate.FindAttachmentBySlotName("Att_CombinationLock"))
								{
									//проверка владельца
									CombinationLock combination_lock = gate.GetCombinationLock();
									if((combination_lock && combination_lock.IsOwnerLock(player)) && GetDDConfig().GetBuildOwner())
										return true;
										
									if(GetDDConfig().GetShowMessage())
									{
										float distance = vector.Distance(targetObject.GetPosition(), gate.GetPosition());
										int RadiusBlock = GetDDConfig().GetRadiusBlock();
										Param1<string> message = new Param1<string>(string.Format(GetDDConfig().GetMsgCantExitCar(), RadiusBlock-Math.Round(distance)));
										GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message, true, player.GetIdentity());
									}
									return false;
								}
							}
						}
					}
					
				}
					return true;
			}
		}

		return ActionCondition(player, target, item);
	}
};

Тоесть в радиусе который устанавливаем-нельзя выйти из машины рядом с закрытыми воротами, но...на забор не срабатывает.
Кто поможет дописать сей скрипт что бы срабатывало на заборы? Или при наличии "камуфляжной" сетки на заборе-нельзя было выйти из машины.
В связи с тем что я полный дуп в скриптинге-поэтому и прошу.


 

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


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

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

  • 0

Хы

Наводка - UnknownObject - те если object.GetType() не вернет ничего )))

 

Я сделал все с помощью RayCast и давно

свечу в сторону от точки выхода

И никто никогда не выйдет ни в какое дерево ни в какие кусты ни тп

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


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





  • 0

@BorizzK В связи с тем что я полный дуп в скриптинге-поэтому и прошу.

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
modded class ActionGetOutTransport: ActionInteractBase
{

	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{
 		Transport trans = null;
		int crew_index = -1;

		HumanCommandVehicle vehCommand = player.GetCommand_Vehicle();
		if ( vehCommand )
		{
			trans = vehCommand.GetTransport();
			if ( trans )
			{
				crew_index = trans.CrewMemberIndex( player );
				if ( crew_index >= 0 && trans.CrewCanGetThrough( crew_index ) )
				{
					if(GetDDConfig().GetBlockExitCar())
					{
						Object targetObject = target.GetObject();		
						array<Object> nearest_objects = new array<Object>;
						array<CargoBase> proxy_cargos = new array<CargoBase>;

						GetGame().GetObjectsAtPosition(targetObject.GetPosition(), GetDDConfig().GetRadiusBlock(), nearest_objects, proxy_cargos);
						for(int i = 0; i < nearest_objects.Count(); i++)
						{
							Object object = nearest_objects.Get(i);
							if(object.IsInherited(Fence))
							{
								Fence gate = Fence.Cast(object);
								if(gate.FindAttachmentBySlotName("Att_CombinationLock"))
								{
									//проверка владельца
									CombinationLock combination_lock = gate.GetCombinationLock();
									if((combination_lock && combination_lock.IsOwnerLock(player)) && GetDDConfig().GetBuildOwner())
										return true;
										
									if(GetDDConfig().GetShowMessage())
									{
										float distance = vector.Distance(targetObject.GetPosition(), gate.GetPosition());
										int RadiusBlock = GetDDConfig().GetRadiusBlock();
										Param1<string> message = new Param1<string>(string.Format(GetDDConfig().GetMsgCantExitCar(), RadiusBlock-Math.Round(distance)));
										GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message, true, player.GetIdentity());
									}
									return false;
								}
							}
							else if (object.GetType == "" || object.IsBuilding() || object.IsTent())
							{
                                 return false;
                            }
						}
					}
					
				}
					return true;
			}
		}

		return ActionCondition(player, target, item);
	}
};

По  уму надо еще расстояние от точки выхода (а ее можно получить) до обьекта мерять

 

Вот что я добавил

else if (object.GetType == "" || object.IsBuilding() || object.IsTent())
{
  return false;
}

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

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


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

На самом деле надо получить координату точки выхода(есть такое) для конкретного crew index и уже от этого положения собирать обьекты в радиусе 1м

Исключив игроков, саму машину и ее двери, колеса итп и по остальному блочить

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


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

@BorizzK 48 - Undefined function 'IsTent'

Без тента запустился,счас проверю.

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

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


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

Откасть в EntityAI

Я с телепона

Потому по памяти

Может и нет оного в классе object

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


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

Нет,не работает,даёт ввылазить через забор.....

А можно в эту строчку

if(gate.FindAttachmentBySlotName("Att_CombinationLock"))

Вставить и проверку на допустим att_camonet ?

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


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

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

modded class ActionGetOutTransport: ActionInteractBase
{

	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{
 		Transport trans = null;
		int crew_index = -1;

		HumanCommandVehicle vehCommand = player.GetCommand_Vehicle();
		if ( vehCommand )
		{
			trans = vehCommand.GetTransport();
			if ( trans )
			{
				crew_index = trans.CrewMemberIndex( player );
				if ( crew_index >= 0 && trans.CrewCanGetThrough( crew_index ) )
				{
					if(GetDDConfig().GetBlockExitCar())
					{
						Object targetObject = target.GetObject();		
						array<Object> nearest_objects = new array<Object>;
						array<CargoBase> proxy_cargos = new array<CargoBase>;

						GetGame().GetObjectsAtPosition(targetObject.GetPosition(), GetDDConfig().GetRadiusBlock(), nearest_objects, proxy_cargos);
						for(int i = 0; i < nearest_objects.Count(); i++)
						{
							Object object = nearest_objects.Get(i);
							if(object.IsInherited(Fence))
							{
								Fence fence= Fence.Cast(object);
								if(fence.FindAttachmentBySlotName("Wall_Camonet"))
								{
									if(GetDDConfig().GetShowMessage())
									{
										float distance = vector.Distance(targetObject.GetPosition(), fence.GetPosition());
										int RadiusBlock = GetDDConfig().GetRadiusBlock();
										Param1<string> message = new Param1<string>(string.Format(GetDDConfig().GetMsgCantExitCar(), RadiusBlock-Math.Round(distance)));
										GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message, true, player.GetIdentity());
									}
									return false;
								}
							}
						}
					}
					
				}
					return true;
			}
		}

		return ActionCondition(player, target, item);
	}
};

Как их "слить вместе в экстазе".....

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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