BorizzK

Кастом спавн машины с топливом и тп

Вопрос

Что-то не могу найти способ скриптом залить в машину жидкости (топливо, масло, воду или что еще там нужно)

Никто не подскажет как это сделать?

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


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

9 ответов на этот вопрос

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

Что-то не могу найти способ скриптом залить в машину жидкости (топливо, масло, воду или что еще там нужно)

Никто не подскажет как это сделать?

 

Нашёл метод Fill у класса Car: void Fill( CarFluid fluid, float amount );

Ну и по соседству: float GetFluidCapacity( CarFluid fluid ); — чтоб узнать сколько какой жидкости помещается..

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

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


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


elanc Ага, я тож это нашел сегодня

 

m_Car = EntityAI.Cast(GetGame().CreateObject(m_Car_Class, m_Car_Pos, false, true));

 

Обьект надо даункастить из entity в car,что бы получить доступ к функции

Car car = Car.Cast(m_Car);

 

Затем заливаем горючку

car.Fill(m_Car_Fuel_Type, amount);

Горючка указывается вроде числом - 8192 это бензин ("Gasoline") судя по параметру его конфига type = 8192

Но не сработало

 

Ковыряю

 

Попробую канистру заспавнить, залить в нее бенз и из нее заправить

 

 

 

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

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


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

elanc Ага, я тож это нашел сегодня

 

m_Car = EntityAI.Cast(GetGame().CreateObject(m_Car_Class, m_Car_Pos, false, true));

 

Обьект надо даункастить из entity в car,что бы получить доступ к функции

Car car = Car.Cast(m_Car);

 

Затем заливаем горючку

car.Fill(m_Car_Fuel_Type, amount);

Горючка указывается вроде числом - 8192 это бензин ("Gasoline") судя по параметру его конфига type = 8192

Но не сработало

 

Ковыряю

 

Попробую канистру заспавнить, залить в нее бенз и из нее заправить

 

 

 

 

В том же файле чуть выше есть:

enum CarFluid
{
	FUEL,
	OIL,
	BRAKE,
	COOLANT,
	...
}

т.ч. может стоит попробовать просто FUEL или 0?..

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


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

Проблема решена

 

Car car = Car.Cast(m_Car); 

car.Fill(CarFluid.FUEL, 1);
car.Fill(CarFluid.COOLANT, 1);
car.Fill(CarFluid.OIL, 1);

 

Кол-во жижи имеет тип float и считается в тысячных

от 1.000 максимум до 0.001 минимум


 

Все заводится и ездит )))

 


 

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

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: paranoyk
      Делается это немного нудно,но сравнительно просто (когда есть точки спавна).
      При спавне Land_Wreck_Uaz с помощью оффлайнера получим строку следующего вида.
      SpawnObject( "Land_Wreck_Uaz", "14348.268555 4.133186 13191.887695", "0.000000 0.000000 0.000000" );
      Нам необходимо задать точку для спавна "сетки лута".
      Для этого мы в файл по mapgrouppos.xml прописываем координаты взятые из строчки для спавна объекта (выше).
      <group name="Land_Wreck_Uaz" pos="14348.268555 4.133186 13191.887695" rpy="0.000000 0.000000 0.000000" a="0.000000" />
       
      group name="Land_Wreck_Uaz" pos="14348.268555 4.133186 13191.887695 - координаты запавненого УАЗика.
      rpy="0.000000 0.000000 0.000000" - числовые значения Yaw,Pitch,Roll соответственно. Берём их из всё той же строчки, но важно помнить что они там записаны в обратном порядке.
      a="0.000000"- угол порота сетки относительно угла поворота......короче! (Yaw-90) х (-1) Уже писал,что можно играться с 360 градусами,но пишу всегда полученное значение,проблем нет.

      И главное "сетка лута". Изначально её УАЗик не имеет, пишем её сами в файл mapGroupProto.xml .
       
      <group name="Land_Wreck_Uaz" lootmax="11"> <usage name="...класс вещей для спавна" /> <usage name="...класс вещей для спавна" /> <container name="lootfloor" lootmax="5"> -"контейнер" для описания спавна, максимальное колличество в спавне. <category name="...категория вещей для спавна" /> (возможен тэг- <tag name="floor" /> или <tag name="shelves" /> ) <point pos="0.511211 -0.372110 0.0254000" range="0.244141" height="0.513353" />-левое сиденье <point pos="-0.320921 -0.387334 -0.400000" range="0.310141" height="0.610353" />-правое переднее седение полик <point pos="-0.000921 -0.383194 0.301000" range="0.400186" height="0.590424" />-место за кпп середина <point pos="-0.211211 0.228620 -0.698000" range="0.360231" height="0.520142" />-правая часть капота возле стекла <point pos="0.681211 0.216190 -1.358000" range="0.262781" height="0.621102" />левая часть капота впереди </container> <container name="lootshelves" lootmax="3"> -"контейнер" для описания спавна, максимальное колличество в спавне. <category name="...категория вещей для спавна" /> (возможен тэг- <tag name="floor" /> или <tag name="shelves" /> ) <point pos="-0.406211 -0.098190 -1.131250" range="0.246819" height="0.620459" />-правое переднее крыло <point pos="0.306211 -0.436570 -1.651250" range="0.424141" height="0.810353" />- центр переднего бампера <point pos="0.906211 -0.359570 -1.664250" range="0.124141" height="0.100353" />-слева на бампере </container> <container name="lootweapons" lootmax="3">-"контейнер" для спавна длинногоствольного оружия, максимальное колличество в спавне, патронов и гранат. <category name="weapons" /> <category name="explosives" /> (возможен тэг- <tag name="floor" /> или <tag name="shelves" /> ) <point pos="0.256211 -0.372050 1.264250" range="0.724141" height="1.313353" /> -центр багажника <point pos="0.868211 -0.138190 1.398000" range="0.293625" height="0.605487" />-заднее левое крыло <point pos="-0.506211 -0.108190 1.431250" range="0.250879" height="0.582143" />-заднее правое крыло </container> </group> Вставляем нужные категории,классы и тэги,это практически конструктор.
      К примеру у меня пока выглядит так -
       
      <group name="Land_Wreck_Uaz" lootmax="11"> <usage name="Military" /> <usage name="Industrial" /> <usage name="Office" /> <container name="lootfloor" lootmax="5"> <category name="food" /> <category name="clothes" /> <point pos="0.511211 -0.372110 0.0254000" range="0.244141" height="0.513353" /> <point pos="-0.320921 -0.387334 -0.400000" range="0.310141" height="0.610353" /> <point pos="-0.000921 -0.383194 0.301000" range="0.400186" height="0.590424" /> <point pos="-0.211211 0.228620 -0.698000" range="0.360231" height="0.520142" /> <point pos="0.681211 0.216190 -1.358000" range="0.262781" height="0.621102" /> </container> <container name="lootshelves" lootmax="3"> <category name="tools" /> <category name="vehiclesparts" /> <point pos="-0.406211 -0.098190 -1.131250" range="0.246819" height="0.620459" /> <point pos="0.306211 -0.436570 -1.651250" range="0.424141" height="0.810353" /> <point pos="0.906211 -0.359570 -1.664250" range="0.124141" height="0.100353" /> </container> <container name="lootweapons" lootmax="3"> <category name="weapons" /> <category name="explosives" /> <point pos="0.256211 -0.372050 1.264250" range="0.724141" height="1.313353" /> <point pos="0.868211 -0.138190 1.398000" range="0.293625" height="0.605487" /> <point pos="-0.506211 -0.108190 1.431250" range="0.250879" height="0.582143" /> </container> </group> Также можно даже исключить полностью строчку lootmax="...". Большой разницы я не заметил.
      Сразу скажу,баги стандартные -длинноствол в багажнике может пробить ствол,иногда возможна "левитация" предметов.
      Во общем как то так.
      (возможно позже вылож сетку и для обломков V3S и С130. Решение для "заброшенной колонны" на севере-тоже в процессе.Кому надо-пишите)
    • Автор: iMazdo
      Кто нибудь сталкивался с таким? В радиусе 500 метров сервер засыпаем Truck_01_Chassis при этом данный класс я не нашел вообще нигде.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: zra47
      Забыл где это настраивается спавн лута ? в домах в казарамах и тп
    • Автор: BorizzK
      Накрапал функций (по мотивам того что делали для 0.62 когда-то)
      Проверяем сколько машин на сервере (кстати, кому известны координаты центра Черноруси и макс полезный радиус от центра где могут располагаться объекты?)
      Если машин данного типа достаточно на карте, не спавним
      Если не хватает, перед спавном проверяем нет ли машины рядом (что бы не заспавнить внутрь другой)
      Если все норм, спавним
       
      int CheckNearObjects(vector pos, int radius, string objectClass) //Проверка обьектов поблизости { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); Print("::: SpawnCars.c ::: CheckNearObjects (EntityAI m_Object, int radius) ::: Radius: " + radius.ToString() + ", all nearest_objects: " + nearest_objects.Count().ToString()); for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if ( className == objectClass ) { objectcount++; Print( "::: SpawnCars.c ::: CheckNearestObjects: found object " + objectcount.ToString() + ": " + object.ToString() + ", Type/Class: " + className + " !!!"); } } return objectcount; } int SpawnCar(string m_Car_Class, TVectorArray spawn_Points, int max_Car_Count, float min_Car_Health, float max_Car_Health, bool damageallow) //Спавн машины по заданным параметрам { Print("::: SpawnCars.c ::: SpawnCar(" + m_Car_Class + ", " + spawn_Points.ToString() + ") :::"); vector m_Car_Pos; EntityAI m_Car; int n_Car_Count = 0; int all_Car_Count = 0; int s_Car_Count = 0; array<string> m_Car_Equip_Array = new array<string>; if (m_Car_Class == "OffroadHatchback") { /* Так то же можно m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("CarBattery"); m_Car_Equip_Array.Insert("SparkPlug"); m_Car_Equip_Array.Insert("EngineBelt"); m_Car_Equip_Array.Insert("CarRadiator"); m_Car_Equip_Array.Insert("HatchbackDoors_Driver"); m_Car_Equip_Array.Insert("HatchbackDoors_CoDriver"); m_Car_Equip_Array.Insert("HatchbackHood"); m_Car_Equip_Array.Insert("HatchbackTrunk"); */ //И так можно m_Car_Equip_Array = {"HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel","CarBattery","SparkPlug","SparkPlug","EngineBelt","CarRadiator","HatchbackDoors_Driver","HatchbackDoors_CoDriver","HatchbackHood","HatchbackTrunk"}; //Проверяем m_Car_Equip_Array.Debug(); } /* else if (m_Car_Class == "M3S") { //Тут заполняем массив комплектующими M3S } */ else { Print("::: SpawnCars.c ::: SpawnCar() ::: NO CAR / WRONG CLASS SPECIFIED :::"); return s_Car_Count; } all_Car_Count = CheckNearObjects("7000 0 7000", 20000, m_Car_Class); //Можно отключить если сервер глючит при старте, тогда присовойте all_Car_Count значение - all_Car_Count = 1; (см ниже) //all_Car_Count = 1; for ( int i = 0; i < spawn_Points.Count(); i++ ) { m_Car_Pos = spawn_Points.Get(i); n_Car_Count = CheckNearObjects(m_Car_Pos, 10, m_Car_Class); Print("::: SpawnCars.c ::: n_Car_Count = " + n_Car_Count.ToString()); if (s_Car_Count + all_Car_Count < max_Car_Count) { if (n_Car_Count < 1) { m_Car = EntityAI.Cast(GetGame().CreateObject(m_Car_Class, m_Car_Pos, false, true)); for ( int e = 0; e < m_Car_Equip_Array.Count(); e++ ) { m_Car.GetInventory().CreateAttachment( m_Car_Equip_Array.Get(e) ); } m_Car.SetAllowDamage(damageallow); m_Car.SetHealth("","",Math.RandomInt(min_Car_Health,max_Car_Health)); Print("::: SpawnCars.c ::: Spawned car: " + m_Car.ToString() + ", Position: " + m_Car.GetPosition().ToString()); if (m_Car) { s_Car_Count++; } } else { Print("::: SpawnCars.c ::: Car spawn not allowed at position: " + m_Car_Pos.ToString() + ", becouse nearest car with same class " + m_Car_Class + " found."); } } else { Print("::: SpawnCars.c ::: Car spawn not allowed becouse cars with same class " + m_Car_Class + " >= " + max_Car_Count.ToString()); } } return s_Car_Count; }  
      Подключение
       
      Правим по своему вкусу
      Помещаем код в файл и размещаем в папке доступной серверу
       
      В самом начале init.c
      #include "$CurrentDir:\\путь\\путь\\имя файла с кодом.c
       
      Далее в функции main вызываем спавн
       
      TVectorArray spawn_Points_Niva = {"6063 0 7871"}; //array with positions, for more cars write more positios in to array int SpawnCarsCarsCount = SpawnCar("OffroadHatchback", spawn_Points_Niva, 32, 100, 100, false); //Class, Positions, Max count, min health, max health, damage allow - true/false Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount.ToString()); //это просто каммент  
      Или просто
      int SpawnCarsCarsCount;
      SpawnCarsCarsCount = SpawnCar("M3S", {"6000 0 6000", "7000 0 8000"}, 44, 100, 100, false);
       
      Но для M3S нужно прописать комплектуху в SpawnCar() в массив m_Car_Equip_Array
       
      Ну вобщем разберетесь )))
       
       
      Добавлено:
      Альтернативный вариант от комьюнити:
       
    • Автор: RedLink
      Всем привет.
      Один из разработчиков мода Epoch (Salival's scripts) поделился скриптом для админ-панели Инфистара, чтобы вручную спавнить миссии WAI, DZMS, а также ивенты.
       
      Открываем файл админ-панели Инфистара AT.sqf и ищем код (примерно 289-я строка):
      adminadd = adminadd + [" Force Disconnect (Self)",{(findDisplay 46) closeDisplay 0;},"0","0","0","0",[]]; }; и после нее вставляем:
       
      Где [EVENT] - это ивенты которые хранятся у меня в папке "modules", а "building_supplies" - это наименование файла (пробелов быть не должно).
      Где [HERO]/[BANDIT] - это мисии для Героев/Бандитов. Так же в строке идет наименование папки "hero"/"bandit", и соответственно наименование файла миссии, например "abandoned_trader", которые соответствуют наименованию файла миссии в папке с героем или бандитом.
      Тоже самое и для миссий DZMS - "major"/"minor" - это имя папки миссий, а "SMxxx" - это имя файла миссии.
       
      Далее открываем сам Инфистар - AH.sqf и ищем следующие строки:
      } forEach _arrayforcrate; }; и под ними вставляем:
      if(_option == 8000) then { _mtype = _array select 2; _mname = _array select 3; if (_mtype == "hero" || {_mtype == "bandit"}) then { diag_log format ["%1 (%2) Spawning mission [%3] %4",name (_array select 1),getPlayerUID (_array select 1),_mtype,_mname]; wai_mission_markers set [(count wai_mission_markers), format ["Main%1%2",_mtype,count(wai_mission_data)]]; if (isNil "ai_show_count") then {wai_mission_data = wai_mission_data + [[0,"",[],[0,0,0]]];} else {wai_mission_data = wai_mission_data + [[0,[],[],[],[]]]}; execVM format ["\z\addons\dayz_server\WAI\missions\%1\%2.sqf",_mtype,_mname]; _sl = format['%1 (%2) spawned WAI\missions\%3\%4.sqf',_clientName,_clientUID,_mtype,_mname]; PVAH_WriteLogReq = [_playerObj,toArray _sl]; publicVariableServer 'PVAH_WriteLogReq'; }; if (_mtype == "event") then { [] execVM "\z\addons\dayz_server\modules\" + _mname + ".sqf"; _sl = format['%1 (%2) spawned Event - %3.sqf',_clientName,_clientUID,_mname]; PVAH_WriteLogReq = [_playerObj,toArray _sl]; publicVariableServer 'PVAH_WriteLogReq'; }; if (_mtype == "major" || {_mtype == "minor"}) then { diag_log format ["%1 (%2) Spawning mission [%3] %4",name (_array select 1),getPlayerUID (_array select 1),_mtype,_mname]; execVM format ["\z\addons\dayz_server\DZMS\missions\%1\%2.sqf",_mtype,_mname]; _sl = format['%1 (%2) spawned DZMS\missions\%3\%4.sqf',_clientName,_clientUID,_mtype,_mname]; PVAH_WriteLogReq = [_playerObj,toArray _sl]; publicVariableServer 'PVAH_WriteLogReq'; }; }; Отдельно добавлю, что все миссии, которые спавнит админ, записываются в лог файл и панель Инфистара.
       

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