Таблица лидеров


Популярные публикации

Отображаются публикации с наибольшей репутацией начиная с 15.09.2019 во всех областях

  1. 3 балла
    elanc

    Бочки

    Короче, на крафт кожи набросал: modded class Barrel_ColorBase : Container_Base { override void DetermineAction ( PlayerBase player ) { ItemBase ingredient; EntityAI item; if( GetQuantity() >= 10000 ) { // проверяем количество жидкости в бочке, иначе нет смысла продолжать int item_count = GetInventory().GetCargo().GetItemCount(); // получаем количество вещей в бочке for (int i = 0; i < item_count; i++) // перебираем вещи по их индексу в бочке { item = GetInventory().GetCargo().GetItem(i); // получаем объект вещи if(GetGame().ObjectIsKindOf (item, "GardenLime")) // проверяем, известь ли это { ingredient = ItemBase.Cast( item ); // пробуем привести ее к классу ItemBase, т.к. TanPelts() как аргумент требует объект именно этого класса if( ingredient ) // если удалось… { TanPelts(ingredient, player); // вызываем волшебную функцию «дубления»: если процесс пошел, то бочка будет заблокирована на время операции! открыть ее нельзя будет! Param1<string> m_MesParam = new Param1<string>("В бочке началась магия!"); // эта и строка ниже необязательны… GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MesParam, true, player.GetIdentity()); // …просто информируем игрока } break; // вываливаемся из цикла, т.к. мы нашли известь и нам незачем дальше перебирать весь инвентарь бочки } } } Close(); // закрываем крышку бочки } } Это как рабочий пример… Проверил на сервере.
  2. 3 балла
    elanc

    Бочки

    Вот что вы гадаете? Берете gear_containers.pbo, извлекаете config.bin, разбинариваете его, открываете, находите описание класса Barrel_ColorBase и видите строку randomQuantity=2; Т.е. так и должно быть, что наполненность бочки при появлении определяется случайным образом. Продолжаем про часть «нельзя крафтить». Идете в директорию dta, распаковываете scripts.pbo, идете в директорию scripts\4_World\Classes\UserActionsComponent\Actions\Interact, открываете ActionCloseBarrel.c, в методе OnExecuteServer() видим вызов метода DetermineAction() для объекта класса Barrel_ColorBase. Идете в директорию scripts\4_World\Entities\ItemBase, открываете файл Barrel_ColorBase.c, находите метод DetermineAction() и читаете код. slot_id = InventorySlots.GetSlotIdFromString("Lime"); // найти у бочки слот "Lime" ingredient = ItemBase.Cast( GetInventory().FindAttachment(slot_id) ); // получаем предмет, находящийся в слоту "Lime" if ( ingredient && GetQuantity() > 10000 ) // если в слоту "Lime" что-то лежит и наполненность бочки жидкость больше 10000... { TanPelts(ingredient, player); // вызываем метод "задубить шкуру" } Возвращаемся в описание класса Barrel_ColorBase в разбинаренном config.bin и видим, что у класса нет attachments[], т.ч. сейчас чисто физически нельзя поместить в слот бочки "Lime" известь, потому что слот этот не прописан! Вот поэтому и не работает крафт! Хотите включить крафт? Перепишите метод DetermineAction(), чтоб известь искалась не в слоте "Lime", а в Cargo бочки.
  3. 3 балла
    BorizzK

    Кровоточат персонажи на серве

    Taiga irkutsk38 Причина в следующем На стороне сервера регится сетевая переменная для синхронизации На клиенте не регится или регится не там или регится криво Тк от сервера клиенту летит поток бит и обратно то же - там все строго в определенном порядке Каждая переменная (точнее ее значение) имеет смещение в потоке в зависимости от порядка их регистрации Тк в модах и тп они регятся в одних и тех же местах - порядок не нарушается и одинаков с обеих сторон Но стоит зарегить переменные для клиента и сервера в разных местах (например в условии проверки типа if (GetGame().IsClent()) на клиенте а на сервере в if (GetGame().IsServer())) смещения могут быть разными и значение этой сетевой переменной может прилетать в совсем другую переменную на клиенте или сервере Про кровоток - тк IsBleeding булево - то она 1 бит - 0 false, 1 true - на ее место например прилетает другая со значением 1 или этот бит явлется куском другой - и персонаж кровоточит - но тк BleedingBits не установлен на сервере - то кровь не уходит В большинстве случаев это происходит по причине - народ взял клиент-серверный мод и запулил его только на сервере как серверный не отрезав клиентскую часть и не убрав регистрацию сетевых переменных Прямой пример - MedicalAttention либо любая админка которую на серверу подключили и у админов то же, а у других клиентов нет или отключена проверка сигнатур на сервере и на клиенте какой-то мод не взлетел - а мод этот регит сетевые переменные на сервере порядок потока данных нарушается и начинается свистопляска ЗЫ Если криво обходться с RPC - то глюков может быть на порядки больше Потому надо внимательно следить за такими вещами надеюсь доходчиво обьяснил... сорри за сумбур
  4. 2 балла
    BorizzK

    ZomBerry Admin Tools

    Кстати в VPP DaOn прописал свой стим ид прям в скрипте жостко в админы те где стоит ВПП он зайдет и будет иметь права админа потому рекомендую его УИД итп жостко забанить в серверном блэклисте или/и в баттлай
  5. 2 балла
    BorizzK

    Гром и молния

    DimitriPokki гром и молния работают - это storm сначала должен установиться определенный уровень плохой погоды затем уровень дождя и только при условии что оно все совпало и появился шанс грозы - она произойдет
  6. 2 балла
    BorizzK

    Ошибки в РПТ и ядра процессора

    Gizda number of logical CPU cores - лшические ядра а не физические следовательно если у Вас скажем i7-7700 - у него 4 двухпоточных ядра (HT) - значит логических 8, однако параметр -cpuCount= нужен для ограничения кол-ва ядер которые использует сервер. По умолчанию он задействует кол-во ядер указанное в файле dayzsetting.xml, а смистема уже сама распараллеливает насколько я вижу. <jobsystem globalqueue="4096" threadqueue="1024"> <pc maxcores="2" reservedcores="1" /> <ps4 threadcount="4" /> <xb1 threadcount="4" /> </jobsystem> Я у себя для теста сделал так <jobsystem globalqueue="8192" threadqueue="2048"> <pc maxcores="4" reservedcores="2" /> <ps4 threadcount="4" /> <xb1 threadcount="4" /> </jobsystem> те увеличил на 2 однако при таких параметрах памяти серверу надо выделить правильное кол-во памяти иначе будут непонятные выключения сервера - не краши. Методом тыка пришел к такому расчету необходимое кол-во памяти = maxcores * globalqueue + reservedcores * threadqueue + 1024mb для самого двигла Те в моем случае 4 * 8192 + 2 * 2048 + 1024 = 37888 В таком случае непонятных выключений не происходит Только зачем серверу столько ресурсов? Начал все плавно понижать и нашел золотую середину для моего случая <jobsystem globalqueue="6144" threadqueue="1536"> <pc maxcores="2" reservedcores="2" /> <ps4 threadcount="4" /> <xb1 threadcount="4" /> </jobsystem> Памяти выделил 16384 те расчетное 15360 + 1024 Все ровно сейчас - фпс ниже 1000 не падает - редко до 800-600 падает при наплыве народа но крашей нет Все это мое ИМХО ЗЫ Продолжаю эксперименты
  7. 2 балла
    BorizzK

    Игнорирование модов

    Тоха сделайте свой мод 1шт в который впихните все нужные вашем серверу и в стим под именем сервера
  8. 2 балла
    DrTauren

    Система записок

    Да было уже это. Вырезали. Вернут позже думаю... Году к 2025 А вариант всегда есть. Главное начать. Или вон на рынке закажи, кто-нибудь точно сделает
  9. 2 балла
    BorizzK

    Ключи от автомобиля

    NoNameUltima И чо? Особенно покородило - Использвать Ключь - c мягким знаком
  10. 2 балла
    ZigoFrend

    Флаги, их значение и Tier, прошу помощи.

    123new Solariuse Вот скриншоты Tier 1 Tier 2 Tier 3 Tier 4
  11. 2 балла
    BorizzK

    VPPAdminsTools

    danisimus ну если у игроков она не стоит вместе с модами - будет кровь течь
  12. 2 балла
    BorizzK

    Не есть ни пить при помехе на лице

    paranoyk антилифт пока не дадут возможность моддидь некоторые классы - не выйдет полноценно организовать
  13. 2 балла
    123new

    >>>Установка сторонних модов<<<

    1. Подписаться на моде в стим. Например на этот https://steamcommunity.com/sharedfiles/filedetails/?id=1866298408 https://steamcommunity.com/sharedfiles/filedetails/?id=1866298408 Как видим, в ссылке id есть - это уникальный id продукта в мастерской. 2. Далее после докачки стимом заходим в: {папка стима или библиотеки стим, где стоит DayZ}\steamapps\workshop\content\221100 и ищем папку с ранее скопированным id 3. Найденную папку копируем на сервер ну и называем как хотим, например, называем так: "@Creepy Zombies" 4. В параметрах запуска сервера дописываем: "-mod=Creepy Zombies;" 5. Из папки мода файлик формата .bikey помещаем в папку keys сервера игры 6. Включаем этот же мод на стороне клиента игры в лаунчере и входим на свой сервер. 7. Если все сделали правильно, будет работать. Сразу скажу о нескольких но: 1. Описанная выше установка является лишь типичной базовой для всех модов, для добавления новых вещей с мода спавн или настройкик аких-то систем требуются дополнительные действия, описанные обычно в стим на странице автора модификации 2. некоторые моды также требуют дополнительных модов, см внимательно страницу о них в стиме. Их также необходимо отдельно копировать и добавлять на сервер и клиент игры. 3. Некоторые моды могут быть не рабочим по причине того, что их могли не обновить до актуальной версии игры, либо вы забыли подключить дополнительные моды при старте или произвести их дополнительную настройку (см. п.1). Как правило, если инструкции по настройке этих модов нет, а информация о работоспособности их сомнительна, рекоммендую забыть о таком моде.
  14. 2 балла
    paranoyk

    Спавн лута в обломках УАЗ,V3S.

    Делается это немного нудно,но сравнительно просто (когда есть точки спавна). При спавне 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. Решение для "заброшенной колонны" на севере-тоже в процессе.Кому надо-пишите)
  15. 2 балла
    elanc

    Спав лута в вещах.

    Мда.. Ох уж эти новоиспеченные «администраторы-программисты».. Голова только для того, чтобы есть в неё.. EntityAI itemEnt; — вот вы определили переменную с именем itemEnt и типом EntityAI EntityAI itemIn; — вот еще одну того же типа ItemBase itemBs; — вот вы определили переменную с именем itemBS и типом ItemBase Дальше интереснее: EntityAI item... — тут вы определяете ещё одну переменную типа EntityAI с именем item = player.GetInventory().CreateInInventory( "CombatBoots_Green"); — и задаете ей значение, которое возвращает метод CreateInInventory() На данный момент мы получаем 4 переменных, три из которых не инициализированы, т.е.: в item у нас находится «адрес» созданных нами ботинок, а в itemEnt, itemIn, itemBs условно пусто (на самом деле там мусор и обращение к ним скорее вызовет непредсказуемый результат, вплоть до краша сервера) Дальше: itemBs = ItemBase.Cast(itemEnt); — вы берете переменную itemEnt и пытаетесь привести её к типу переменной itemBs, но смысла в этой операции нет, потому что в itemEnt ничего нет (кроме мусора)! И тут наша «вишенка на торт»: SetHealth(itemEnt, 20); — тут вы вызываете функцию SetHealth(), которая возможно и определена у вас (в родных скриптах DayZ такой нет) и передаете ей одним из аргументов переменную itemEnt. Смотрим выше и узнаем, что эта переменная определена, но никак не инициализирована! Уж если что и передавать аргументом в эту функцию, то переменную item, ведь в ней хранится адрес созданных ботинок! Опять же, я более чем уверен, что в первую очередь сервер ругается на отсутствие функции SetHealth(). Ведь на самом деле есть метод SetHealth() у класса EntityAI и вызывать его следует так: itemVar.SetHealth("","",value); — где itemVar является переменной типа EntityAI, а value — переменная целочисленного типа или целое число. В итоге, включив мозг, мы получаем рабочий код в виде: EntityAI item; // определили переменную item = player.GetInventory().CreateInInventory( "CombatBoots_Green"); // сохранили в нее результат выполнения метода (в случае удачи там «адрес», неудачи — NULL) if( item ) // проверили, есть ли у переменной значение неравное NULL (т.е. убедились, что ботинки создались) { item.SetHealth("","",20); // ну и вызвали метод, который позволяет нам выставить условное здоровье }
  16. 2 балла
    AntonivkA

    DayZ LootEdit

    нажми на кнопочку Release, открой спойлер и будет тебе архив с exe-шником.
  17. 2 балла
    Gizda

    DayZ LootEdit

    DayZLootEdit-v0.1.zip
  18. 2 балла
    имхо нефиг ссылки тут оставлять, и писать цены и тз надо внятно. а если работы много и нужен программист - 120 000₽ по трудовой.
  19. 2 балла
    BorizzK

    Помогите пожалуйста с модам Banking

    irkutsk38 obj.SetOrientation( obj.GetOrientation() ); Иногда не канает Надо продольно обьект наклонить тудой сюдой что бы если коллизия есть сервер ее отрезольвил иначе так и будет нагружен ее обработкой в своем дурацком и так загруженном шедулере я не шучу void ResetCollision(Object object) { if (object) { vector roll = object.GetOrientation(); object.SetOrientation(roll); roll[2] = roll[2] - 1; object.SetOrientation(roll); roll[2] = roll[2] + 1; object.SetOrientation(roll); } }
  20. 2 балла
    irkutsk38

    Помогите пожалуйста с модам Banking

    @NeRVanaфайл init.c пример:
  21. 1 балл
    Vladislavfaddeevich

    Логирование

    123new VehicleLogs https://steamcommunity.com/sharedfiles/filedetails/?id=1865838759
  22. 1 балл
    BorizzK

    Редактирование слотов авто в моде

    selahaher да Все верно Но должно быть и на клиенте и на сервере
  23. 1 балл
    irkutsk38

    Error Client contains PBO which is not part of server data

    @Situativnoкупить игру dayz и будет тебе DayZ Tools. А моды ты как про писовал в старт батнике?
  24. 1 балл
    BorizzK

    ZomBerry Admin Tools

    NoNameUltima Лучше перебдеть Ибо доверять нельзя никому... Мне можно.
  25. 1 балл
    И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно! Описание: Скрипт, добавляющий админу сервера возможность указывать для каждого игрока индивидуальный скин спавна, его персональную точку спавна и один из имеющихся на сервере стартовых наборов с лутом, которые можно составить самим. Если указано несколько точек спавна и/или наборов лута, то будет выбран один из предложенных вариантов рандомно. Также, любой из названных параметров можно отключить в скрипте и сделать его стандартным, как он есть поумолчанию на сервере. Дополнительно - есть возможность назначить свой набор стартового лута для всех игроков на сервере не из списка скрипта! Нам понадобится: 1. Сервер DayZ 1.0, сделанный по одному из гайдов: 2. Notepad++ 3. Немножечко трезвого ума и понимания того, что мы делаем, и как прописывается лут на новом языке enfusion Установка: Перед установкой: Обратите внимание, что имя 'стандартной' миссии сервера при загрузки со Steam называется: 'dayzOffline.chernarusplus'. На хостингах имя этой папки может отличаться. Если это так, то вам в информации ниже необходимо заменить 'dayzOffline.chernarusplus' на имя вашей папки миссии сервера, иначе вы не сможете запустить сервер игры! 1. По пути: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в созданную нами папку 2 файла Script.cSets.c или создать их самим со следующим содержанием: Script.c /* Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна Автор: 123new */ class CustomSpawnPlayerConfig { private string Location_Directory_config = "$profile:"; // Расположение папки с конфигом скрипта private string Location_filename_config = "CustomSpawnPlayerConfig.txt"; // имя файла с конфигом скрипта private string default_log_block_name = "[CustomSpawnPlayerConfig] "; // Стандартный блок скрипта для идентификации с script.log private string disable_read_parameter = "0"; // Стандартное значение (без кавычек) для обозначения в файле конфига скрипта неиспользование параметра private string block_split_parameters_config = "|"; // Символ, обозначающий разделение параметров при чтении файла конфига private string block_split_multi_parameters_config = ";"; // Символ, обозначающий перечисление в одной ячейке параметра нескольких параметров при чтении файла конфига private bool enabled_loading_custom_spawnpoints = true; // Параметр, включающий и отключающий возможность использования приватной точки спавна для каждого игрока. В случае отключения кастомная точка спавна будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! private bool enabled_loading_custom_sets = true; // Параметр, включающий и отключающий возможность использования приватного сета для каждого игроков. В случае отключения выдача сетов будет отключена для всех поумолчанию, вне зависимости от данных в конфиге, будет выдаваться только сет для всех игроков! private bool enabled_loading_custom_skins = true; // Параметр, включающий и отключающий возможность использования индивидуального стартового скина игрока для каждого игрока. В случае отключения эта возможность будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! // ------------------------------------------------------------ // ---------------- NEXT CODE DON'T EDIT ----------------- // ------------------------------------------------------------ ref map<string, ref array<vector>> players_spawnpoints = new map<string, ref array<vector> >; ref map<string, ref array<int>> players_sets = new map<string, ref array<int> >; ref map<string, string> players_skins = new map<string, string>; private bool enabled_loaded_successfull_config = false; string Log_CustomSpawnPlayerConfig_GetDateTime() { private int year, month, day, hour, minute, second; GetYearMonthDay(year, month, day); GetHourMinuteSecond(hour, minute, second); string returned_message = "[" + day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2) + "] "; return returned_message; } bool Check_coords_disable(vector coord) { private bool ret_zn = false; private float pos_x = coord[0]; private float pos_y = coord[1]; private float pos_z = coord[2]; if ((pos_x == 0.0) & (pos_y == 0.0) & (pos_z == 0.0)) { ret_zn = true; } return ret_zn; } vector Set_Read_coords_disable() { return Vector(0.0, 0.0, 0.0); } void CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig initialize start!"); Read_Update_Config(); } void ~CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig work end, class closed!"); } void Read_Update_Config() { private string name_block_work = "[ReadAndUpdateSettings] "; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + " Started Reading config!"); private array<string> readed_lines_config = ReadFileConfig(); private bool check_normal_read = AnaliseFileConfig(readed_lines_config); if (check_normal_read) { LoadFileConfig(readed_lines_config); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config readed successfull!"); enabled_loaded_successfull_config = true; } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config read failed, work script disabled for players!"); enabled_loaded_successfull_config = false; } } array<string> ReadFileConfig() { private string name_block_work = "[ReadFileConfig] "; private array<string> readed_lines_config = new array<string>; readed_lines_config.Clear(); if (FileExist ( (Location_Directory_config + Location_filename_config) ) ) { private string line_content; FileHandle file = OpenFile((Location_Directory_config + Location_filename_config), FileMode.READ); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Open file config: " + (Location_Directory_config + Location_filename_config)); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { readed_lines_config.Insert( line_content); } CloseFile(file); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T OPEN FILE CONFIG : " + (Location_Directory_config + Location_filename_config)); } //readed_lines_config.Debug(); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T FOUND FILE CONFIG OR DIRECTORY: " + (Location_Directory_config + Location_filename_config)); } return readed_lines_config; } bool AnaliseFileConfig(array<string> readed_lines_config) { private bool return_zn = true; private string name_block_work = "[AnaliseFileConfig] "; if (readed_lines_config.Count() > 0) { foreach (string line : readed_lines_config) { if (line.Contains(block_split_parameters_config)) { private array<string> splited_line = new array<string>; line.Split( block_split_parameters_config, splited_line ); if (splited_line.Count() == 4) { private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); if ((UID_player == "") || (default_skin_player == "") || (sets_numbers_player == "") || (points_spawn_player == "")) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Lines in Readed file is not correct, please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file is have incorrect count parameters with a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file can't have a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Config file is empty, fix your config script!"); return_zn = false; } return return_zn; } void LoadFileConfig(array<string> readed_lines_config) { private string name_block_work = "[LoadFileConfig] "; players_spawnpoints.Clear(); players_sets.Clear(); players_skins.Clear(); foreach (string line : readed_lines_config) { private array<string> splited_line = new array<string>; splited_line.Clear(); line.Split( block_split_parameters_config, splited_line ); private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); private array<vector> temp_players_spawnpoints = new array<vector>; temp_players_spawnpoints.Clear(); array<int> temp_players_sets = new array<int>; temp_players_sets.Clear(); array<string> temp_players_spawnpoints_string = new array<string>; temp_players_spawnpoints_string.Clear(); array<string> temp_players_sets_string = new array<string>; temp_players_sets_string.Clear(); if (points_spawn_player.Contains(block_split_multi_parameters_config)) { points_spawn_player.Split( block_split_multi_parameters_config, temp_players_spawnpoints_string ); } else { temp_players_spawnpoints_string.Insert(points_spawn_player); } foreach (string line_spawnpoint : temp_players_spawnpoints_string) { if (line_spawnpoint == disable_read_parameter) { temp_players_spawnpoints.Insert(Set_Read_coords_disable()); } else { temp_players_spawnpoints.Insert(line_spawnpoint.ToVector()); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_spawnpoints.Count().ToString() + " spawnpoints."); if (sets_numbers_player.Contains(block_split_multi_parameters_config)) { sets_numbers_player.Split( block_split_multi_parameters_config, temp_players_sets_string ); } else { temp_players_sets_string.Insert(sets_numbers_player); } foreach (string line_set : temp_players_sets_string) { if (line_set == disable_read_parameter) { temp_players_sets.Insert(0); } else { temp_players_sets.Insert(line_set.ToInt()); } } if (default_skin_player == disable_read_parameter) { default_skin_player = "0"; } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_sets.Count().ToString() + " sets."); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Detected for " + UID_player + " skin " + default_skin_player); players_spawnpoints.Insert(UID_player,temp_players_spawnpoints); players_sets.Insert(UID_player,temp_players_sets); players_skins.Insert(UID_player,default_skin_player); } } vector Load_And_Check_Spawnpoints(PlayerIdentity identity, vector pos_default) { private string name_block_work = "[Load_And_Check_Spawnpoints] "; private vector retun_pos = pos_default; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_spawnpoints) { if ((players_spawnpoints.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_spawnpoints.Contains(UID_P)) { private array<vector> readed_lines_config = new array<vector>; readed_lines_config = players_spawnpoints.Get(UID_P); private vector retun_pos_check = readed_lines_config.GetRandomElement(); if (Check_coords_disable(retun_pos_check)) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private spawn point. Will be used default spawn point!"); } else { retun_pos = retun_pos_check; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private spawn point: " + retun_pos.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private spawnpoint for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private spawnpoints is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal spawnpoints from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn point: " + retun_pos.ToString()); return retun_pos; } string Load_And_Check_SpawnSkin_Player(PlayerIdentity identity, string characterName) { private string name_block_work = "[SelectStartSkinPlayer] "; private string retun_skin = characterName; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_skins) { if (players_skins.Count() > 0) { if (players_skins.Contains(UID_P)) { private string readed_skin = players_skins.Get(UID_P); if (readed_skin == "0") { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private skin setting, will be used default setting game!"); } else { retun_skin = readed_skin; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private skin setting: " + retun_skin); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private skin setting for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private skin setting is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal skin player settings from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used skin: " + retun_skin); return retun_skin; } void Load_And_Check_StartLoadout(PlayerBase player) { private string name_block_work = "[SelectStartSetPlayer] "; private int use_set_id = -1; private PlayerIdentity identity = player.GetIdentity(); if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_sets) { if ((players_sets.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_sets.Contains(UID_P)) { private array<int> readed_lines_config = new array<int>; readed_lines_config.Clear(); readed_lines_config = players_sets.Get(UID_P); private int chek_use_set_id = readed_lines_config.GetRandomElement(); if (chek_use_set_id == 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private set numbers. Will be used default set player! "); } else { use_set_id = chek_use_set_id; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private set number is: " + use_set_id.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private sets for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private sets is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal loadout sets player settings from config file script! Will be used default loadout!"); } if (use_set_id >= 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn set with number is: " + use_set_id.ToString()); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn default start set without number. "); } StartSetsPlayers.StartSetsPlayer(player, use_set_id); } } }; Sets.c class StartSetsPlayersConfig { void StartSetsPlayer(PlayerBase player,int use_set_id) { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку (не корректно работает, пишет краш лог) itemCreated = player.GetInventory().CreateInInventory("CoyoteBag_Green"); // Выдаем рюкзак if (itemCreated) // Проверяем, создался ли рюкзак { SetRandomHealthItem(itemCreated); // Выдаем рюкзаку рандомное качество itemCreated1 = itemCreated.GetInventory().CreateInInventory("Apple"); // Добавляем в инвентарь созданного рюкзака яблоко if (itemCreated1) // Проверяем, создалось ли яблоко в рюкзаке { SetRandomHealthItem(itemCreated1); // Выдаем яблоку рандомное качество } itemCreated1 = NULL; // Обнуляем значение переменной после работы с ней itemCreated1 = itemCreated.GetInventory().CreateInInventory("Rag"); // Выдаем игроку бинты в рюкзак if (itemCreated1) // Проверяем, создались ли бинты в рюкзаке { itemCasted = ItemBase.Cast(itemCreated1); // Выполняем преобразование в другой класс для работы с нужной нам функцией itemCasted.SetQuantity(4); // Определяем количество для созданных бинтов как 4 штуки SetRandomHealthItem(itemCreated); // Выдаем бинтам рандомное качество } itemCreated1 = NULL; // Обнуляем значение переменной после работы с ней } itemCreated = NULL; // Обнуляем значение переменной после работы с ней itemCreated = player.GetInventory().CreateInInventory("TTSKOPants"); // Выдаем игроку штаны itemCreated = NULL; // Обнуляем значение переменной после работы с ней itemCreated = player.GetInventory().CreateInInventory("TTsKOJacket_Camo"); // Выдаем игроку куртку itemCreated = NULL; // Обнуляем значение переменной после работы с ней itemCreated = player.GetInventory().CreateInInventory("CombatBoots_Black"); // Выдаем игроку обувь itemCreated = NULL; // Обнуляем значение переменной после работы с ней //itemCasted = ItemBase.Cast(itemCreated); // Строка не нужна, закоментирована. используется для изменения класса EntityAI в ItemBase (чтобы нужные операции были доступны) itemCreated = player.GetInventory().CreateInInventory("CombatKnife"); // Выдаем игроку ножик в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("FNX45"); // Выдаем игроку FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = NULL; // Обнуляем значение переменной itemCreated = player.GetHumanInventory().CreateInHands("akm"); // Выдаем игроку AKM в руки if (itemCreated) // Проверяем, создался ли АКМ { itemCreated.GetInventory().CreateAttachment( "PSO11Optic" ); // Выдаем игроку на AKM оптику ПСО 11 и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodBttstck" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_Suppressor" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим } break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, если хотите назначить - добавляйте здесь!) { //player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку break; } } } void SetRandomHealthItem(EntityAI itemCreated) { if ( itemCreated ) { private int rndHlt = Math.RandomInt(55,100); itemCreated.SetHealth("","",rndHlt); } } } 2. В файле: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Script.c" #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Sets.c" ref CustomSpawnPlayerConfig My_Custom_Spawn_Parameters = new CustomSpawnPlayerConfig(); ref StartSetsPlayersConfig StartSetsPlayers = new StartSetsPlayersConfig(); Чтобы получилось примерно так 3. В функции: void main() перед ее закрывающей скобкой '}' добавить: GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(My_Custom_Spawn_Parameters.Read_Update_Config, 120000, true); // Обновление настроек скрипта кастомных спавнов, 1 минута = 60000 где 120000 - 2 минуты. Эта функция будет обновлять конфигурацию скрипта через указанное вами время в процессе работы сервера постоянно. 4. В функции: CreateCharacter после ее открывающей скобки '{' добавить: pos = My_Custom_Spawn_Parameters.Load_And_Check_Spawnpoints(identity, pos); characterName = My_Custom_Spawn_Parameters.Load_And_Check_SpawnSkin_Player(identity, characterName); 5. В функции: StartingEquipSetup перед ее закрывающей скобкой '}' добавить: My_Custom_Spawn_Parameters.Load_And_Check_StartLoadout(player); 6. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt и заполнить его данными по следующему формату: UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam Skin_player - точный id скина игрока (можно указать 0 для отключения опции) sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции) points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции) Пример: CustomSpawnPlayerConfig.txt 76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0 7. В файле Sets.c в папке: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше) Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет! P.S. В функции выдачи сетов опция 'player.RemoveAllItems();' работает, но пишет ошибку в scripts.log и crash.log. Причину так и не смог выяснить, на старых патчах игры работало нормально. Возможно это временное явление! Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
  26. 1 балл
    paranoyk

    Спавн Предметов / Модовых мутантов по координатам

    iMan Хм,вроде же понятно даже мне. <position>fixed</position> - позиция берётся из файла для спавна жывотного. И чем он в момент спана будет заниматься (насколько я понял названия точек спавна) <position>player</position> - в зависимости от расстояния до игрока.
  27. 1 балл
    irkutsk38

    Логирование

    @Vladislavfaddeevichстрока 9 после мода @DayZ-Expansion-Notifications добавляешь -servermod= https://sqfbin.com/dedodiqexuyilekivihe
  28. 1 балл
    Equadro

    Бочки

    BorizzK а я Никита, я бы тоже кому-нибудь впихнул
  29. 1 балл
    h4rdpr0

    Не ест, не пьет, не принимает таблетки...

    Viknow Было когда-то такое,проверь чтобы в server.cfg был параметр veryfysignatures=2,скорее всего тебя пускает на сервер без какого-то мода.А если все моды есть и этот параметр работает,нужно создать заного сервер и постепенно добовлять моды и проверять все ли работает или нет!
  30. 1 балл
    irkutsk38

    Экран загрузки

    @Tony Там ничего сложного нет. Создаешь картинку формате .paa размером 2048x1024 (лично у меня). Файле ModdedDayZGame.c редактируешь (строки 8,55 и 66) путь картинке куда его положил. строки 8,55 и 66. Строку 9 //m_ImageBackground.LoadMaskTexture(""); можно закомментировать. modded class LoadingScreen { void LoadingScreen(DayZGame game) { Class.CastTo(m_ImageLogoMid, m_WidgetRoot.FindAnyWidget("ImageLogoMid")); Class.CastTo(m_ImageLogoCorner, m_WidgetRoot.FindAnyWidget("ImageLogoCorner")); m_ImageLogoMid.Show(false); m_ImageLogoCorner.Show(false); m_ImageBackground.LoadImageFile(0, "LoadingScreen/img/dayz.paa"); //m_ImageBackground.LoadMaskTexture(""); ProgressAsync.SetUserData(m_ImageBackground); } override void Show() { Widget lIcon = m_ImageBackground; Widget pText = m_ProgressLoading; m_ProgressText.SetText(""); m_ProgressLoading.SetCurrent( 0.0 ); m_ImageBackground.SetMaskProgress( 0.0 ); if ( !m_WidgetRoot.IsVisible() ) { if ( m_DayZGame.GetUIManager().IsDialogVisible() ) { m_DayZGame.GetUIManager().HideDialog(); } if ( m_DayZGame.GetMissionState() == DayZGame.MISSION_STATE_MAINMENU ) { m_ImageWidgetBackground.Show( true ); m_TextWidgetStatus.Show(true); } else { m_ImageWidgetBackground.Show( true ); m_TextWidgetStatus.Show(false); } m_WidgetRoot.Show( true ); m_TextWidgetTitle.SetText( "" ); m_TextWidgetStatus.SetText( "" ); } ProgressAsync.SetProgressData(pText); ProgressAsync.SetUserData(lIcon); } } modded class LoginQueueBase { override Widget Init() { Widget w = super.Init(); ImageWidget imageWidgetBackground = ImageWidget.Cast( layoutRoot.FindAnyWidget("Background") ); imageWidgetBackground.LoadMaskTexture(""); imageWidgetBackground.LoadImageFile(0, "LoadingScreen/img/dayz.paa"); return w; } } modded class LoginTimeBase { override Widget Init() { Widget w = super.Init(); ImageWidget imageWidgetBackground = ImageWidget.Cast( layoutRoot.FindAnyWidget("Background") ); imageWidgetBackground.LoadMaskTexture(""); imageWidgetBackground.LoadImageFile(0, "LoadingScreen/img/dayz.paa"); return w; } }
  31. 1 балл
    123new

    Размещение своих объектов на карте

    Много вопросов на данную тему наблюдаю от новичков, попробую прояснить немного сей вопрос. Предположим. что вы уже знаете на каких координатах вам надо спавнить определенное здание или объект\животное\бота, с каким углом поворота. И так. эта тема для вас. Если вы с расставили их с модифицированной версии Offline (Offline by Arksenor это называется), то вы получили и нашли код вида: GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13260.040039 0.0 3670.984131").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13262.756836 0.0 3645.180176").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13265.441406 0.0 3619.531982").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13268.124023 0.0 3593.995361").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13270.844727 0.0 3568.186523").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13273.514648 0.0 3542.561279").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13276.195313 0.0 3517.048828").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13278.399414 0.0 3496.097900").SetOrientation("-96.000000 0.000000 0.000000"); Здесь (по примеру первой строки) 1 значение в скобках - id постройки/объекта, 2 значение - координаты в формате X Y Z, разделенные пробелом, 3 - значение поворота примерно в том же формате. Как это делать в Offline - статья от автора Offine: https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Add-custom-objects-to-your-server-or-mission И так, инструкция: 1. Добавляем в начало init.c файла в вашей mpmissions следующий код: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\spawn_buildings.c" 2. Создаем в папке вашей активной mpmissions файлик spawn_buildings.c и заполняем его следующей информацией. void SpawnObject( string type, vector position, vector orientation ) { private string NameBlockLog = "[CreateObject] "; private string InfoLog = ""; if(type != "") { auto obj = GetGame().CreateObject( type, "0 0 0" ); if(obj) { if ((position[0] != 0) && (position[1] != 0) && (position[2] != 0)) { obj.SetPosition( position ); obj.SetOrientation( orientation ); obj.Update(); if (obj.CanAffectPathgraph()) { obj.SetAffectPathgraph(true, false); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GetGame().UpdatePathgraphRegionByObject, 100, false, obj); } InfoLog = "[Type: '" + obj.GetType() + "' Position: '" + obj.GetPosition().ToString() + "' Orientation: '" + obj.GetOrientation().ToString() + "']"; Write_Log(NameBlockLog + " Object has been created successfully! Info " + InfoLog); } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed position. Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed type. Info " + InfoLog); } } void Write_Log(string message) { Print(String(message)); } 3. Открываем созданный нами файл, и в конце файла дописываем следующее: void SpawnAirfeeldBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } void SpawnKrasnoBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } Где после void - название функции идет, а между открытыми скобками вызов спавна самих зданий на указанных координатах. На примере 1 строки: Land_CementWorks_ExpeditionB - id постройки (type) 13251.875000 0.0 3748.525879 - координаты в формате X Y Z -96.000000 0.000000 0.000000 - значение поворота в формате X Y Z Внимание: id постройки и координаты в примере указаны не верные и требуют подключения дополнительной модификации для корректной работы!!! Координаты не соответствуют названию функции!!! 4. открываем в MpMissions в папке с вашей активной миссией init.c и перед ЗАКРЫВАЮЩЕЙ скобкой '}' дописываем нужную нам функцию (это будет активация спавна на карте): SpawnAirfeeldBuildings(); 5. Готово, Запускайте сервер, и в scripts.log вы увидите процедуру спавна ваших зданий и увидите, спавнятся ли они на карте или нет. Можно написать конечно и более готовую, универсальную систему спавна на карте со считыванием конфигурации из файла, но я считаю это лишним. Как заполнить добавленные здания лутом на карте: вариант 1: https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Enable-loot-for-custom-placed-objects вариант 2: вручную заполнить xml-файл mapgrouppos.xml в mpmssions данными о местоположении зданий, где rpy - значение поворота здания в формате Z Y X С помощью данной статьи вы можете разместить любой элемент игры(постройку, животное, зомби, бота), доступный к спавну через любую модификацию-админ. панель. Очень полезный мод в этом смысле BuilderItems, с его помощью можно творить поистину интересные локации!
  32. 1 балл
    123new

    спавн предмета

    в init.c не в начале файла а вот тут, я же сказал, перед ЗАКРЫВАЮЩЕЙ скобкой Ну и мало просто MyFNC.c положить рядом с init.c, его еще через include надо подцепить вверху файла
  33. 1 балл
    123new

    спавн предмета

    ElBorodos в конце main допиши перед закрывающей скобкой просто и будет работать. Код по сути верен, но можно даже пограммотнее сделать так void MyFNC() { private auto createdObject; private float rand = Math.RandomFloatInclusive(0.0, 1.0); private string type_obj = ""; private vector coords_obj; if ( rand < 0.35 ) { type_obj = "ID_Объекта"; coords_obj = "X Y Z"; } else { if ( rand > 0.65 ) { type_obj = "ID_Объекта"; coords_obj = "X Y Z"; } else { type_obj = "ID_Объекта"; coords_obj = "X Y Z"; } } createdObject = GetGame().CreateObject(type_obj, coords_obj); if(createdObject) {Print("Object " + createdObject.ToString() + " is created! ");} }
  34. 1 балл
    paranoyk

    Добавление нового класса в events

    BorizzK Дык в том и прикол всего лишь названии, как оказалось. Вот разницу ни как не раскусил,что статик что анимал-всё одинаково,возможно в какой момент отрабатывает спавнер. (боярышник пьют бегемоты!причём не занюхивая даже мануфактурой) Вы бы видели как эти парнокопытные о патча к патчу двигают особо важные обьекты-туалеты,прям с завидным постоянством..... И кроме того, я считаю что - Бегемоты должны быть повешены! Ceterum censeo hippos esse alterum suspendit!!!
  35. 1 балл
    BorizzK

    Добавление нового класса в events

    paranoyk в маленьких пузырьках... задумался... не боярышник ли? ))) там же тебе и ответ 3:17:24.967 valid types are: 13:17:24.967 01 - Vehicle 13:17:24.967 02 - Static 13:17:24.967 03 - Loot 13:17:24.967 04 - Infected 13:17:24.967 05 - Animal 13:17:24.967 06 - Ambient 13:17:24.967 07 - Item 13:17:24.967 08 - Trajectory назови эвент StaticShitEvent думаю заработает ну и в параметрах класснейм КАКАШКИ
  36. 1 балл
    BorizzK

    Бочки

    Hongar воду надо выпить )))))))))))))
  37. 1 балл
    Viknow

    Какие порты открыть?

    Awe я у себя в роутере открывал только 2302 порт и всё. Сначала мой сервер был не виден в сети, после того, как я купил у провайдера статический ip адрес (100 руб/месяц), он теперь виден для всех. Дополнительно никаких портов не открывал.
  38. 1 балл
    BorizzK

    Спавн модельки NPC

    ElBorodos так же как обьект EntityAI Ent = EntityAI.Cast(GetGame().CreateObject("SurvivorM_Lewis",координаты)); Ent.GetInventory().CreateInInventory("BallisticHelmet_Green"); итд итп
  39. 1 балл
    Equadro

    Не есть ни пить при помехе на лице

    OskarDallas зашем насяльнике?
  40. 1 балл
    Viknow

    Запуск сервака .

    Я столько промучался с открытием портов, но так сервак и не появился в сети интернета. Я заказал у своего провайдера статичный ip адрес и мой сервак сразу стал виден. С другом уже протестировали))
  41. 1 балл
    123new

    Помогите с модом [Airdrop]

    DedK4stet скриншот уведомлений можешь дать о которых говоришь?
  42. 1 балл
    123new

    Помогите с модом [Airdrop]

    DedK4stet как понять отформатировать? картинку изменить? текст уведомления? что?
  43. 1 балл
    BorizzK

    Помогите пожалуйста с модам Banking

    NeRVana Ну блин вы даете Поиск по фруму - установка обьектов выдаст горку вариантов а так пишете все в init.c в функции main() в самом конце - это если втупую если не втупую - опять же поиск рулит вот хотя бы
  44. 1 балл
    BorizzK

    Поношенное оружие при спавне

    paranoyk ты как маленький 4_World\Entities\ItemBase\Edible_Base Apple.c override void EEOnCECreate() { int rand = Math.RandomInt(0,10); float hp = GetMaxHealth()*0.1; Print( hp ); if ( rand > 6 ) { ChangeFoodStage( FoodStageType.ROTTEN ); SetHealth( "", "", hp ); } else if ( rand > 2 ) { ChangeFoodStage( FoodStageType.DRIED ); SetHealth( "", "", GetMaxHealth()*0.4 ); } } при создании мире выполняется эта функция но ток 1 раз для конкретного яблока
  45. 1 балл
    Hongar

    Редактирование стамины

    Доброго дня, ребят подскажите в чем дело. После патча 1.05 при изменения параметра стамины, в игре персонаж ведет себя непонятно, при прицеливание с оружием в руках камера двигается влево.
  46. 1 балл
    dosserua

    Спавн внутри здания

    gerFid зайди в папку mpmissions\dayzOffline.chernarusplus там есть файл cfgplayerspawnpoints.xml - он отвечает за точки спавна игроков можешь удалить все точки если хочешь что бы только на твоих спавнились, или просто свои добавить в список существующих. Что бы узнать координаты можешь воспользоваться браузерной картой, если у тебя админка Zomberry Tools тогда просто в админ карте наведись и снизу будут координаты. А если Community Online Tools, тогда сам стань туда где хочешь чтобы спавнились игроки, включи режим Player Managment и глянь координаты на которых ты стоишь.\ А и еще после изменения удали файл spawnpoints.bin что находится в \mpmissions\dayzOffline.chernarusplus\storage_1 Надеюсь помог:) Всего хорошего!
  47. 1 балл
    dosserua

    Спавн лута-вынос мозга.

    Ты не описал что значит строка deloot="0" Я методом тыка разобрался и понял у себя на тест сервере. deloot - если значение 0 то оружие будет в указанных зонах из тэгов, если 1, то только на хеликрашах в указанных зонах Tier 1 2 3 или 4 ну или всех Tier.
  48. 1 балл
    BorizzK

    Настройка стартового лута игроков

    kaike200 Это SQF - забудте про него в DayZ Тут enScript itemEnt = player.GetInventory().CreateInInventory( "akm" ); itemBs = ItemBase.Cast(itemEnt); itemEnt.GetInventory().CreateAttachment( "PSO11Optic" ); itemEnt.GetInventory().CreateAttachment( "AK_PlasticBttstck_Black" ); itemEnt.GetInventory().CreateAttachment( "AK_RailHndgrd_Black" ); itemEnt.GetInventory().CreateAttachment( "AK_Suppressor" ); itemEnt.GetInventory().CreateAttachment( "AtlasBipod" ); создание АКМ а вообще курить форум глубоко тем навалом как и готовых решений
  49. 1 балл
    RedLink

    Спавн миссий и ивентов через админ-панель Инфистара

    Изменения для актуальной версии WAI 2,2,6 заменить на
  50. 1 балл
    123new

    DaRT 2.1 (DayZ Admin rCon Tool для Windows)

    mailkazan создайте 2 файла BEServer.cfg и BEServer_x64.cfg и заполните их одинаковыми данными: RConPassword {ваш rcon пароль} RestrictRCon 0 например, вот так: RConPassword 12345678 RestrictRCon 0 кстати, информация об этом есть тут