Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
Таблица лидеров
Популярные публикации
Отображаются публикации с наибольшей репутацией на 11/23/18 в Сообщения
-
1 балл
Готовая сборка DayZ Standalone 0.63 от DaOne v0.2
Андрей214124 отреагировал на DrTauren за сообщение в теме
Ниже можно бесплатно скачать сборку сервера DayZ Standalone 0.63, о которой мечтает каждый новичок или просто ленивый админ Практически все основные функции уже есть тут и вы можете легко их изменять Особенности сборки: Включение\отключение сообщений о входе\выходе игроков на сервер (файл Settings.C) Включение\отключение кастомного стартового лута для игроков Эта функция позволяет настроить спавны с предустановленным рандомным снаряжением. Для настройки типа предметов для спавна используйте папку "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/LoadOuts". Каждая категория в отдельном .txt-файле. Если вы хотите удалить элемент или добавить, убедитесь, что вы следуете тому же макету кода, что и в файле. Скрипт будет случайным образом выбирать элемент из каждой категории. Если вы хотите удалить определенную категорию, просто оставьте файл пустым или удалите его. Вы можете изменять стартовый лут во время работы сервера! После внесения правок просто войдите в игру как администратор и используйте команду администратора /Update Loadouts Включение\отключение спавна сразу с оружием Эта функция позволяет дать оружие при появлении. Для редактирования типов оружия, зайдите в следующий файл: "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/DayZSurvival.C" (строка 352). Эта функция является рандомизатором. Это может быть полезно: SpawnGunIn( PlayerBase player, string ClassName, bool isPrimary, TstringArray Attachments, TstringArray Extras). Примечание: значение типа bool isPrimary стоит выставлять как 'true' если вы желаете сделать оружие основным Включение отключение усталости (стамины) В строку запуска добавьте -DisableStamina чтобы отключить усталость Кастомные сейфзоны с бессмертием Эта функция позволяет разместить безопасную зону в любом месте на карте с радиусом, который вы хотите. Для изменения сейфзон вам нужен этот файл: "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/SafeZoneFunctions" Возможность добавлять свои здания на карту Эта функция - простой способ разместить свой собственный код зданий в определённом месте, а не в главном блоке, дабы его не засорять. Редактировать это дело в файле: "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/BuildingSpawner.c".Не имеет значения, как вы создаете свои здания или устанавливаете их направление и т. д. Просто убедитесь, что скрипт находится внутри Void (), чтобы он выполнялся при запуске сервера. Хороший способ получить импортированные здания - использовать COM (Community Offline Mode). Вы можете размещать здания и извлекать их информацию. Админка через чат Просто добавьте свой steam64ID в файл "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/Admins.txt". Установить пароль администратора сервера в файле server.cfg, в игре войти в систему, используя пароль. #login myPassword Система отслеживания очков игроков и трекер активности убийств с временными метками Эта функция создает два файла в профиле сервера (если вы используете командную строку -instance, она будет размещена там), профиль сервера находится в папке Documents по умолчанию (там, где находятся ваши логи). Эта фича обеспечивает подробный журнал убийств и записывает статистику игроков, такую как общее количество смертей и общее количество убийств на сервере. Данная функция реализована в рамках мода. Сообщения об убийствах и смертях в чате Свои сообщения при входе Случайные предустановленные сообщения всплывающие для всех игроков. Для изменения сообщений используйте файл "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/MOTDMessages.c" Установка: 1) Качаем архив: DZMods-master.zip 2) Открываем папку с сервером и создаём в ней папку с любым вашим названием 3) Открываем папку mpmissions и копируем туда файл DayZSurvival.chernarusplus из архива. Если вы изменяли xml файлы с лутом, то убедитесь что вы заменили те, что в DayZSurvival.chernarusplus на свои. Папка db не содержит модифицированных файлов 4) Конфиг сервера serverDZ.cfg находится в корневой папке, скопируйте его в папку, созданную в первом шаге установки. Открываем конфиг и в самом низу видим: dayzOffline.chernarusplus. Заменяем на DayZSurvival.chernarusplus и сохраняем файл. 5) Копируем файл ModdedScripts из архива в корневую папку сервера (где .exe файл). 6) Добавляем в командную строку сервера это: -mod=ModdedScripts -config=NameOfFolderFromStep1\serverDZ.cfg -profiles=NameOfFolderFromStep1 -name=myServerName Параметр -name меняет название сервера и выводит его в чате когда игрок умирает\заходит\выходит, а также в прочих сообщениях. Если вы хотите активировать любые другие моды, указанные в списке функций, просто добавьте командную строку к тому, что запускает ваш сервер. На этом всё Не забываем про + Таким образом бесплатно получаете сборку сервера, в то время как за практически то же самое люди требуют деньги. https://github.com/Da0ne/DZMods -
1 балл
Нужна помощь по массивам.
BorizzK отреагировал на
NoNameUltima за сообщение в теме
BorizzK //! Returns low and high bits of networkID. //! This id is shared between client and server for whole server-client session. proto void GetNetworkID( out int lowBits, out int highBits ); -
1 балл
Нужна помощь по массивам.
123new отреагировал на
NoNameUltima за сообщение в теме
int A = 1; ref int B; B = A; A = 10; Print (B); ну и так же можешь продолжить A = NULL; Print(B); ..... -
1 балл
Куплю отладку и настройку сервера
123new отреагировал на
NoNameUltima за сообщение в теме
Satir45 А сервер тетриса? или какой еще игры? -
1 балл
Нужна помощь по массивам.
BorizzK отреагировал на
NoNameUltima за сообщение в теме
BorizzK "Строго говоря, такой массив не реализован в языке C++. Есть некоторая его замена, обладающая рядом функций динамического массива." "Благодаря такой конструкции можно инициализировать массив любого размера, но изменять размер выделенной на него памяти в ходе работы невозможно. Можно только полностью освободить занимаемое массивом место. Это делается с помощью функции delete. Для нашего примера это выглядит так" Выкинь это. Нет там никакой динамики. Статика это. т.к. размерность задана. -
1 балл
Нужна помощь по массивам.
BorizzK отреагировал на
NoNameUltima за сообщение в теме
Какую? Если ты переменную создаешь - ОБЪЯВЛЯЕШЬ, как в любом нормальном языке программирования - дельфи\си var MyVar: String; или string MyVar; Ты что сразу можешь получить ее значение? Ну попробуй... Есть объявление. И есть - ИНИЦИАЛИЗАЦИЯ. string MyVar;//Объявление MyVar = "...";//Инициализация В С допустимо сразу инициализировать string MyVar = "..."; Хотя лучше все переменные, всегда описывать вверху процедуру\функции\класса, а не создавать когда и где тебе хочется в теле. т.к. при длинном листинге может привести к серьезной путанице. Как и в любом другом языке - СТАТИЧНОГО. - имеющего статичные 10 элементов. *Технически и в С и в Дельфи(хз как там в других языках), при объявлении переменной, она может быть и инициализирована(т.е.какое то значение может и быть), а может там будет "МУСОР". т.е. при таком написании string MyVar; Print(MyVar); ты можешь получить и ошибку т.к. NULL а можешь вообще хз что, т.к. в памяти которую заняла MyVar мог остаться "мусор". И последнее Param - имя которое используется в движке энфорса. А ты опять со своими задвигами. По негласному стандарту, твоя переменная именуется так - array<string> strings; Ну или если тебе надо как тип ее создать typedef, то TStrings -
1 балл
Нужна помощь по массивам.
123new отреагировал на
NoNameUltima за сообщение в теме
Во 1. Это статический массив. т.к. указана размерность. Во 2. Если ты и далее будешь имена так давать " то далеко не уедешь, как и с ini В 3. А создавать перед добавлением не надо? array<string> m_Ingredients = new array<string>; -
1 баллОбновленный вариант моих скриптиков при проверке машинок рядом с координатами заодно можно грохать дубли что бы на координате осталась только одна // Spawn car scripts for server init phase. // Author: Borizz.K (s-platoon.ru) int CheckNearObjects(vector pos, int radius, string objectClass, bool delmultiplied) //Проверка обьектов поблизости //+ возможность удаления размноженных { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; pos[1] = GetGame().SurfaceY( pos[0], pos[2] ); GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); Print("::: CheckNearObjects (vector pos, int radius, string objectClass) ::: 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 ) { if (delmultiplied && object.GetPosition()[0] == pos[0] && object.GetPosition()[2] == pos[2]) { Print("::: CheckNearestObjects ::: found and delete multiplied object " + objectcount + ": " + object.ToString() + ", Type/Class: " + className + ", Pos: " + object.GetPosition().ToString()); GetGame().ObjectDelete(object); if (objectcount > 0) { objectcount--;; } } else { objectcount++; Print("::: CheckNearObjects: found object " + objectcount + ": " + object.ToString() + ", Type/Class: " + className + ", Pos: " + object.GetPosition().ToString()); } } } return objectcount; } void DelMultipliedObjects(vector pos, int radius, string objectClass) //Cleanup multiple nested objects with same class! { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; array<Object> scan_objects = new array<Object>; array<Object> removable_objects = new array<Object>; Object object; string className; vector objectPos; Object m_object; string m_className; vector m_objectPos; int objectcount = 0; int m_objectcount = 0; bool m_contains; pos[1] = GetGame().SurfaceY( pos[0], pos[2] ); GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); Print("::: DelMultipliedObjects (vector pos, int radius, string objectClass) ::: Radius: " + radius + ", all nearest_objects: " + nearest_objects.Count().ToString()); //Find objects like objectClass and put in to array for future compare for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if (className == objectClass) { objectcount++; Print("::: DelMultipliedObjects: found object " + objectcount + ": " + object.ToString() + ", Type/Class: " + className + ", Pos: " + object.GetPosition().ToString()); scan_objects.Insert(object); } } //scan_objects.Debug(); //Compare objects, find multiple objects with same position and put in to array for future delete for ( i = 0; i < scan_objects.Count(); i++ ) { object = scan_objects.Get(i); objectPos = object.GetPosition(); for ( int j = i + 1; j < scan_objects.Count(); j++ ) { m_object = scan_objects.Get(j); for ( int k = 0; k < removable_objects.Count(); k++ ) { if (removable_objects.Get(k) == m_object) { m_contains = true; //Print("::: DelMultipliedObjects: object " + j + ": " + m_object.ToString() + " already in removable_objects!"); break; } else { m_contains = false; } } if (!m_contains) { m_objectPos = m_object.GetPosition(); //Print("::: DelMultipliedObjects: compare object " + (i + 1) + ": " + object.ToString() + " => object " + j + ": " + m_object.ToString()); if ((object != m_object) && (objectPos[0] == m_objectPos[0] && objectPos[2] == m_objectPos[2])) { m_objectcount++; Print("::: DelMultipliedObjects: found multiplied object " + m_objectcount + ": " + m_object.ToString() + ",Pos: " + m_objectPos.ToString()); removable_objects.Insert(m_object); } } } } //removable_objects.Debug(); //Delete finded multiplied objects for ( i = 0; i < removable_objects.Count(); i++ ) { m_object = removable_objects.Get(i); Print("::: DelMultipliedObjects: delete multiplied object " + (i + 1) + ": " + m_object.ToString() + ",Pos: " + m_object.GetPosition().ToString()); GetGame().ObjectDelete(m_object); } } int SpawnCar(string m_Car_Class, TVectorArray spawn_Points, int max_Car_Count, float min_Car_Health, float max_Car_Health, bool damageallow, bool checkdoubles, bool delmultiplied) //Спавн машины по заданным параметрам { 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>; array<string> m_Car_Adds_Array = new array<string>; float flamount =0; //All cars check parameters! vector w_Center = "7500 0 7500"; w_Center[1] = GetGame().SurfaceY( w_Center[0], w_Center[2] ); int w_ScanRadius = 20000; if (m_Car_Class == "OffroadHatchback") { m_Car_Equip_Array = {"HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel","CarBattery","SparkPlug","SparkPlug","EngineBelt","CarRadiator","HatchbackDoors_Driver","HatchbackDoors_CoDriver","HatchbackHood","HatchbackTrunk","HeadlightH7","HeadlightH7"}; m_Car_Adds_Array = {"CanisterGasoline"}; flamount = 1000; //fluid amount } else if (m_Car_Class == "M3S") { //Тут заполняем массив комплектующими M3S flamount = 1000; } else { Print("::: SpawnCars.c ::: SpawnCar() ::: NO CAR / WRONG CLASS SPECIFIED :::"); return s_Car_Count; } if (m_Car_Equip_Array.Count() < 1) { return s_Car_Count; } all_Car_Count = CheckNearObjects(w_Center, w_ScanRadius, m_Car_Class, false); //Warinig! Very heavy load ram of your server. Need additional 8Gb RAM !!! DelMultipliedObjects(w_Center, w_ScanRadius, m_Car_Class); Print("::: SpawnCars.c ::: SpawnCar() ::: All cars " + m_Car_Class + " on server: " + all_Car_Count); for ( int i = 0; i < spawn_Points.Count(); i++ ) { m_Car_Pos = spawn_Points.Get(i); if (checkdoubles) { n_Car_Count = CheckNearObjects(m_Car_Pos, 10, m_Car_Class, delmultiplied); } else { n_Car_Count = CheckNearObjects(m_Car_Pos, 10, m_Car_Class, false); } if (n_Car_Count > 0) { Print("::: SpawnCars.c ::: Near cars " + m_Car_Class + " at selected pos " + m_Car_Pos.ToString() + ": " + n_Car_Count); } if (s_Car_Count + all_Car_Count < max_Car_Count) { if (n_Car_Count < 1) { Print("::: SpawnCars.c ::: Spawn: " + m_Car_Class + ", Pos: " + m_Car_Pos.ToString()); 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++ ) //Attachments { m_Car.GetInventory().CreateAttachment( m_Car_Equip_Array.Get(e) ); } for ( int a = 0; a < m_Car_Adds_Array.Count(); a++ ) //Adds //TEST { m_Car.GetInventory().CreateAttachment( m_Car_Adds_Array.Get(a) ); } if (m_Car) { Car car = Car.Cast(m_Car); car.Fill(CarFluid.FUEL, flamount); //add fuel car.Fill(CarFluid.COOLANT, flamount); //add antifreeze car.Fill(CarFluid.OIL, flamount); //add engine oil car.Fill(CarFluid.BRAKE, flamount);//add brake fluid m_Car.SetAllowDamage(damageallow); m_Car.SetHealth("","",Math.RandomInt(min_Car_Health,max_Car_Health)); 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); } } return s_Car_Count; } void SpawnCars() //Вызов спавна машин { 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, 34, 100, 100, false, true, false); //Class, Positions, Max count, min health, max health, damage allow - true/false, check duplicates - true/false, delete dublicates - true/false Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount); SpawnCarsCarsCount = SpawnCar("M3S", {"6000 0 6000"}, 34, 100, 100, false, true, false); //Class, Positions, Max count, min health, max health, damage allow - true/false Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount); } Кроме того накатал обещанную ранее функцию которая проверяет в радиусе обьекты, ищет обьекты определенного класса, затем проверяет сколько одинаковых обьектов с одинаковыми координатами и если их более 1, грохает все оставляя только один. void DelMultipliedObjects(vector pos, int radius, string objectClass) //Cleanup multiple nested objects with same class! { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; array<Object> scan_objects = new array<Object>; array<Object> removable_objects = new array<Object>; Object object; string className; vector objectPos; Object m_object; string m_className; vector m_objectPos; int objectcount = 0; int m_objectcount = 0; bool m_contains; pos[1] = GetGame().SurfaceY( pos[0], pos[2] ); GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); Print("::: DelMultipliedObjects (vector pos, int radius, string objectClass) ::: Radius: " + radius + ", all nearest_objects: " + nearest_objects.Count().ToString()); //Find objects like objectClass and put in to array for future compare for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if (className == objectClass) { objectcount++; Print("::: DelMultipliedObjects: found object " + objectcount + ": " + object.ToString() + ", Type/Class: " + className + ", Pos: " + object.GetPosition().ToString()); scan_objects.Insert(object); } } //scan_objects.Debug(); //Compare objects, find multiple objects with same position and put in to array for future delete for ( i = 0; i < scan_objects.Count(); i++ ) { object = scan_objects.Get(i); objectPos = object.GetPosition(); for ( int j = i + 1; j < scan_objects.Count(); j++ ) { m_object = scan_objects.Get(j); for ( int k = 0; k < removable_objects.Count(); k++ ) { if (removable_objects.Get(k) == m_object) { m_contains = true; //Print("::: DelMultipliedObjects: object " + j + ": " + m_object.ToString() + " already in removable_objects!"); break; } else { m_contains = false; } } if (!m_contains) { m_objectPos = m_object.GetPosition(); //Print("::: DelMultipliedObjects: compare object " + (i + 1) + ": " + object.ToString() + " => object " + j + ": " + m_object.ToString()); if ((object != m_object) && (objectPos[0] == m_objectPos[0] && objectPos[2] == m_objectPos[2])) { m_objectcount++; Print("::: DelMultipliedObjects: found multiplied object " + m_objectcount + ": " + m_object.ToString() + ",Pos: " + m_objectPos.ToString()); removable_objects.Insert(m_object); } } } } //removable_objects.Debug(); //Delete finded multiplied objects for ( i = 0; i < removable_objects.Count(); i++ ) { m_object = removable_objects.Get(i); Print("::: DelMultipliedObjects: delete multiplied object " + (i + 1) + ": " + m_object.ToString() + ",Pos: " + m_object.GetPosition().ToString()); GetGame().ObjectDelete(m_object); } } Вызывается просто например нам надо найти все нивы стоящие друг в друге на всем сервере и грохнуть все лишние, оставив на позиции только одну vector w_Center = "7500 0 7500"; w_Center[1] = GetGame().SurfaceY( w_Center[0], w_Center[2] ); int w_ScanRadius = 20000; m_Car_Class = "OffroadHatchback"; DelMultipliedObjects(w_Center, w_ScanRadius, m_Car_Class); Результаты работы выводятся в script.log Вроде работает... Нужна правда доработка циклов сравнения элементов массива, но чет голова не варит, пртому займусь позже
-
1 баллGermantis BorizzK Сделал на основе этого мини-скрипт с конфигом. Уж не знаю удачный вариант или нет, в общем, вот, может кому пригодится. Установка: 1. Создаем в вашей MpMission папку 'CarScript' 2. Помещаем в эту папку 2 файла Spawn_Cars_Functions.cConfig_CarScript.c 3. Открываем init.c и добавляем в самом верху файла такое: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CarScript\Config_CarScript.c" #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CarScript\Spawn_Cars_Functions.c" где dayzOffline.chernarusplus - имя папки с вашей mpmissions активной (на хостингах оно может меняться, внимательнее!!) и после строки weather.SetWindMaximumSpeed(30); weather.SetWindFunctionParams(0.1, 1.0, 50); добавляем строку GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(Run_Spawn_Cars, 1000, false); // spawn cars script Получится примерно вот так: 4. В Config_CarScript.c настраиваем авто по примерам. Пояснения в файле есть. ref array<string> coord_center_and_distance_search_cars_around_center_map_array = {"7000 0 7000","20000"}; Важно: Указанная выше строка - опция сканирования авто на сервере, т.е. координата центра карты и радиус от точки на сканирование. Чем больше радиус - тем больше грузит сервер ПК при сканировании. Являются ли введенные данные лучшим и эталонным вариантом не уверен, но что есть, то есть. При указанных значениях сервер загружает память компьютера до 15-16Гб в момент сканирования. Далее идут массивы с деталями транспорта и точками спавна по названиям. Можно делать свои, можно использовать имеющиеся. Точки спавна стоят официальные! Ниже в идет функция с блоками: Type_Car_Array.Insert("OffroadHatchback"); //Class car Array_Parameters_Spawn_Cars.Insert("OffroadHatchback",Niva_Parameters_Spawn); //Class car, Massive name with Parameters spawn car Array_Configs_Details_Car.Insert("OffroadHatchback",Niva_Details_Array); //Class car, Massive name with Details car Array_Configs_SpawnPoints_Car.Insert("OffroadHatchback",Niva_SpawnPoints_Array); //Class car, Massive name with Points spawn car Заполняются примерно одинаково для каждого типа авто, 1 строка - добавляем правильно написанный класс авто, 2 добавляем класс авто и параметры спавна авто, 3 массив - класс авто и детали в авто, 4 массив - класс авто и точки спавна авто. Далее 4 блока - минимумы и максимумы (подряд) для заполнения авто соответственно топливом, антифризом, маслом и тормозной жидкостью. Думаю не сильно сложно, разберетесь. Корректно ли создан скрипт не могу сказать, это мой взгляд на скрипт спавна авто. P.S. Перед установкой не забываем отключить официальный спавнер транспорта игры, в events.xml удаляем блоки, связанные с авто вообще. Официальный events текущего патча на момент публикации с удаленными блоками спавна авто: events.xml Спасибо BorizK за информацию о необходимых функциях
-
1 балл
-
Рассылка
