Vitalik

Спавн техники

Вопрос

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

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


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

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

Убираешь лимит техники - т.е. оставляешь пустым массив динамического спавна.

Пишешь свой скрипт, который будет

1. При прогрузке сервера искать ОТКРЫТУЮ технику на карте - кол-во.

2. Если кол-во меньше допустимого - п.3

3.

В цикле, от кол-ва техники полученого в п2, до максимума техники -

Создаешь массив точек спавна с радиусами, типа - _Veh_point_Arr = [ [[x,y,z],r], [[x1,y1,z1],r] ];

Создаешь массив разрешенной техники для спавна - _Veh_Arr = ["MMT_CIV", "XXX"];

Рандомно выбираешь технику для спавна.....

Рандомно выбираешь точку из своего массива, и по точке и ее радиусу выбираешь позицию спавна.

Спавнишь.

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


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


Виталик - не надо ничо писать и мучаться. Нужна всего лишь правка серверного скрипта server_functions.sqf

, функция spawn_vehicles



 

Убираешь лимит техники - т.е. оставляешь пустым массив динамического спавна.

 

Зачем убирать лимит? За количество техники же отвечает глобальная переменная MaxVehicleLimit - ты забыл просто.

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


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

Виталик - не надо ничо писать и мучаться. Нужна всего лишь правка серверного скрипта server_functions.sqf

, функция spawn_vehicles

 

 

 

Зачем убирать лимит? За количество техники же отвечает глобальная переменная MaxVehicleLimit - ты забыл просто.

Можно и в сервер функшен изменить координаты спавна техники.

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

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

Так что - по сути все равно свой скрипт писать.

И желательно оставить стандартный файл так как было, чтоб откатить если что, а не ковыряться в нем.

 

Можно и лимит обнулить. Но там какой то глюк был на Саурленде с нулевым лимитом техники.....

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


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

обязательно потом всплывут.

Да как они всплывут? Зачем ему эти головняки? Есть в стандартном скрипте всё.

Вот кусок кода оттуда - 50 на 50 спавн или просто у дороги, или у зданий:

			if ((random 1) > 0.5) then {
				waitUntil {!isNil "BIS_fnc_selectRandom"};
				_position = RoadList call BIS_fnc_selectRandom;
				_position = _position modelToWorld [0,0,0];
				waitUntil {!isNil "BIS_fnc_findSafePos"};
				_position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
			} else {
				waitUntil {!isNil "BIS_fnc_selectRandom"};
				_position = BuildingList call BIS_fnc_selectRandom;
				_position = _position modelToWorld [0,0,0];
				waitUntil {!isNil "BIS_fnc_findSafePos"};
				_position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
			};
 

Меняй в своё удовольствие как хош.. Самое главное - правильно понять функцию http://www.ofpec.com/COMREF/index.php?action=read&id=231#findsafepos

 И откатить - пять пальцев, имея запакованный релиз..

 

ИМХО всё.. Можно, конечно, чётко и подробнейшим образом определить спавн каждой шушлайки.. :smile:

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

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


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

Да как они всплывут? Зачем ему эти головняки? Есть в стандартном скрипте всё.

Вот кусок кода оттуда - 50 на 50 спавн или просто у дороги, или у зданий:

			if ((random 1) > 0.5) then {
				waitUntil {!isNil "BIS_fnc_selectRandom"};
				_position = RoadList call BIS_fnc_selectRandom;
				_position = _position modelToWorld [0,0,0];
				waitUntil {!isNil "BIS_fnc_findSafePos"};
				_position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
			} else {
				waitUntil {!isNil "BIS_fnc_selectRandom"};
				_position = BuildingList call BIS_fnc_selectRandom;
				_position = _position modelToWorld [0,0,0];
				waitUntil {!isNil "BIS_fnc_findSafePos"};
				_position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
			};
 

Меняй в своё удовольствие как хош.. Самое главное - правильно понять функцию http://www.ofpec.com/COMREF/index.php?action=read&id=231#findsafepos

 И откатить - пять пальцев, имея запакованный релиз..

 

ИМХО всё.. Можно, конечно, чётко и подробнейшим образом определить спавн каждой шушлайки.. :smile:

 

Он не про дороги говорит, а про города и побережье - чтоб не было спавна хз где.

И следуя форуму, и его - форума, вопросам) Через недельку появится вопрос - как ограничить спавн в 1 городе по кол-ву, потом будет - как в 1 городе спавнить только технику определенного вида) а в другом другую и т.п.))

А тут рандом, и спавн у зданий и дорого. в бисовской функции это все реализовано то да. Только попробуй юзани например на сауэре ее, и сделай ограничение - спавн только у дорог. 99% всей техники будет в центре карты, при чем в квадрате 500 на 500м, вот такой вот рандом там)

так что - точки, с радиусами, и таже бисовская функция, но в своем скрипте из 10 строк, это проще в реализации, чем в середине стандартного файла делать дописки и изменения.

Но это мое имхо.

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


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

Он не про дороги говорит, а про города и побережье - чтоб не было спавна хз где.

И следуя форуму, и его - форума, вопросам) Через недельку появится вопрос - как ограничить спавн в 1 городе по кол-ву, потом будет - как в 1 городе спавнить только технику определенного вида) а в другом другую и т.п.))

А тут рандом, и спавн у зданий и дорого. в бисовской функции это все реализовано то да. Только попробуй юзани например на сауэре ее, и сделай ограничение - спавн только у дорог. 99% всей техники будет в центре карты, при чем в квадрате 500 на 500м, вот такой вот рандом там)

так что - точки, с радиусами, и таже бисовская функция, но в своем скрипте из 10 строк, это проще в реализации, чем в середине стандартного файла делать дописки и изменения.

Но это мое имхо.

Ну что спасибо за ответы скрипт я конечно написать не смогу если умел бы думаю не создавал бы темы,я же написал в теме может кто уже делал так может поделится опять же не за без платно любая работа должна быть  оплачиваемая,мое мое мнение не можешь сам попроси других,поэтому я выбрал этот форум,либо просто предложите скрипт как это делается с меня + и спасибо большое либо напишите могу сделать такой скрипт и вам стоить это будет столько,если меня устроит я опять же куплю и скажу спасибо большое.  я заметил товарищ часто пишут в темах напишите скрипт я почти уверен если бы умели на этом форуме бы не спрашивали,а вы если умеете предложите свои услуги за умеренную плату я думаю многие примут и вам плюс и им,чем просто писать напишите скрипт.это просто моё мнение   

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: zra47
      Забыл где это настраивается спавн лута ? в домах в казарамах и тп
    • Автор: Loker
      При покупке/продаже техники валюту за технику снимает/начисляет, но сама техника не появляется. 
      В логе возникает следующая ошибка: 
      15:04:28 "Server_PublishVehicle2 error: CLIENT AUTH KEY INCORRECT OR UNRECOGNIZED. PV ARRAY: [[323,[4037.27,11673.5,0.00289917]],"Ural_TK_CIV_EP1",false,"ItemKeyRed1798",B 1-1-B:1 (Player) REMOTE,""]" Как я понял новая проверка в версии мода 1.0.6.2 не может считать какой-то ключ пользователя. Может кто сталкивался с такой ошибкой. Буду рад любому совету. Заранее спасибо.
    • Автор: Akie
      Проблема вот в чем, просто выкидывает из техники через короткое время после залезания в нее и не важно на ходу или нет, на каком месте в ней ты сидишь, просто пофигу, выкидывает и всё, в логах и на сервере, и на клиенте чисто подскажите куда копать пожалуйста
    • Автор: 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
       
      Ну вобщем разберетесь )))
       
       
      Добавлено:
      Альтернативный вариант от комьюнити:
       
    • Автор: BorizzK
      Что-то не могу найти способ скриптом залить в машину жидкости (топливо, масло, воду или что еще там нужно)
      Никто не подскажет как это сделать?