Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
Таблица лидеров
Популярные публикации
Отображаются публикации с наибольшей репутацией на 06/30/20 во всех областях
-
1 баллВ этой теме я расскажу один из способов создания областей спавна лута с помощью инструмента "Economy Editor" который предоставили нам разработчики. 1. Для начала нужно скачать исходники, которые разрабы дают для примера а так же карту в формате PNG для открытия её тулсом, о котором я писал выше - ТЫК . После скачивания нас интересует папка CETool 2. Открываем скачанный файл chernarusplus. В этом файле мы заранее можем создать кастомный usage или же тир. ( рекомендую создавать именно Usage, т.к с тиром происходит что-то не понятное иногда) я для примера создал Test123, так же чуть ниже нам нужно создать layers. Layers'ы это как раз те самые зоные которые мы и будем рисовать чуть позже. Скрин 2. На этом файл сохраняем и пока забываем о нем. 3. Запускаем Economy Editor нажимаешь сверху load выбираем наш скачанный и уже отредактированный chernarusplus . Тут мы видим уже существующие тиры и зоны различные, а так же спавн ИИ. Скрываем все лишнее что бы не мешало нам создавать нашу зоны, нажав на кнопку в левой части интерфейса "hide all" . Далее создаем новую зоны - тыкаем на карандашик так же в левой части экрана после создания нашей зоны называем её как в нашем файле chernarusplus , в моем случае это - usgFlg_Paint-Test123. После выбираем нашу зону кликнув на неё в списке в самом низу и переходим в paint mode в этом моде выделяем на карте те зоны, в которых хотите что бы спавнился ваш лут. После того как нарисовали свою область выходим из режима paint mode сняв галочку. Остается выбран нашу зону в списке далее в окне Layer Properties указать наш ранее созданный флаг или тир, в моем случае ставлю галочку перед Test123. После мы можем сохранить нашу зону. Для этого нажимаем сохраняем, ждем пока он создает и бинарит новую карту экономики. По завершению процесса этого мы увидем в в окне Status - Save done. 4. Теперь в этой же папке CETool появляется папка map в ней лежит наша карта, которую нужно переименовать в areaflags.map, после этот файл заменяем в папке нашего сервера server\mpmissions\dayzOffline.chernarusplus. 5. После замены карты нужно прописать наши зоны в cfglimitsdefinition.xml который лежит по пути server\mpmissions\dayzOffline.chernarusplus. !!! Важно, порядок зон заданный в файле chernarusplus из первого списка очень важен, т.е задаем так же как и расположены наши флаги там. 6. Последний пункт - задаем в Types нашу кастомную зону предмета, которые хотим что бы спавнились в нашей зоне. Так же хочу обратить ваше внимание что если вы выделили область на карте где нет каких либо точек спавна лута( зданий, или других объектов с точками) то и лута там соотвественно не будет.. Данный способ подойдет лишь для того, что бы вы могли более точно распределить лут в выбранной области.
-
1 баллБлин Туплю )))))))) //09.06.2020 modded class ItemBase extends InventoryItem { ref Timer m_TemperatureDecrease; private float m_InitTemperature; private float m_DecreaseTempTime = 10; private float m_TempDecreaseCoef = 1; private float m_DamageTemperaturePlayer = 51; private float m_TempDamageCoef = 0.015; private int m_CurrentLocation = InventoryLocationType.GROUND; // ================================================================================================================== private bool m_DecTempAllow = true; bool IsDecTempAllow() { return m_DecTempAllow; } void SetDecTempAllow(bool value = true) //Uses for stop/start decrease temp if cooking on fireplace etc. //Используем для остановки остывания во время готовки и запуска остывания после прекращения { m_DecTempAllow = value; //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: SetDecTempAllow: " + GetGame().GetTickTime() + ": this: " + this + ": m_DecTempAllow: " + m_DecTempAllow); if (!m_DecTempAllow) { if (m_TemperatureDecrease) { StopTemperatureDecrease(); } } else { TryToStartTempDecrease(); } if (GetInventory().GetCargo()) { SetDecTempAllowToCargo(value); } } void SetDecTempAllowToCargo(bool value = true) //End-to-end call for all inventory in cargo //Сквозной вызов для всего инвентаря { ItemBase item; //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: SetDecTempAllowToCargo: " + GetGame().GetTickTime() + ": this: " + this + ": Items count: " + GetInventory().GetCargo().GetItemCount() + ": m_DecTempAllow: " + m_DecTempAllow); for (int i = 0; i < GetInventory().GetCargo().GetItemCount(); i++) { item = ItemBase.Cast(GetInventory().GetCargo().GetItem(i)); if (item) { if (item.IsDecTempAllow() != value) item.SetDecTempAllow(value); } } } // ================================================================================================================== void ItemBase() { m_InitTemperature = 20; if ( IsInherited(Pot) ) { m_TempDecreaseCoef = m_TempDecreaseCoef * 2; } else if (IsInherited(FireplaceBase)) { m_DecTempAllow = false; } } void ~ItemBase() { if (m_TemperatureDecrease) { StopTemperatureDecrease(); } } // ================================================================================================================== override void AfterStoreLoad() { super.AfterStoreLoad(); if ( !IsInherited(FireplaceBase) ) TryToStartTempDecrease(); } private void TryToStartTempDecrease() { if (GetTemperature() > GetInitTemperature()) { if (GetHierarchyParent()) { if (GetHierarchyParent().IsInherited(PlayerBase)) { PlayerBase player = PlayerBase.Cast(GetHierarchyParent()); if (player) { if (player.GetHumanInventory().GetEntityInHands() == this) { m_CurrentLocation = InventoryLocationType.HANDS; } } else { m_CurrentLocation = -1; //Игрок есть, но он не на сервере! } } } if (m_CurrentLocation != -1) { if (!m_TemperatureDecrease) { //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: TryToStartTempDecrease: " + GetGame().GetTickTime() + ": this: " + this + ": Start decrease temperature: GetTemperature(): " + GetTemperature() + ": GetHierarchyParent(): " + GetHierarchyParent()); StartTemperatureDecrease(); } } } } // ================================================================================================================== override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc,newLoc); if (GetTemperature() > GetInitTemperature()) { if ( !IsInherited(FireplaceBase) ) { m_CurrentLocation = newLoc.GetType(); if (!m_TemperatureDecrease) { m_DecTempAllow = true; //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: " + GetGame().GetTickTime() + ": this: " + this + ": Start decrease temperature: GetTemperature(): " + GetTemperature() + ": newLoc.GetParent(): " + newLoc.GetParent()); StartTemperatureDecrease(); } } } else { if (m_TemperatureDecrease) { //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: " + GetGame().GetTickTime() + ": this: " + this + ": End decrease temperature: GetTemperature(): " + GetTemperature() + ": newLoc.GetParent(): " + newLoc.GetParent()); StopTemperatureDecrease(); } } } // ================================================================================================================== private void StartTemperatureDecrease() { DecreaseTemperature(); m_TemperatureDecrease = new Timer; m_TemperatureDecrease.Run(m_DecreaseTempTime, this, "DecreaseTemperature", NULL, true); } private void StopTemperatureDecrease() { m_CurrentLocation = InventoryLocationType.UNKNOWN; m_TemperatureDecrease.Stop(); m_TemperatureDecrease = NULL; } // == COOLING == void DecreaseTemperature() { if (GetTemperature() > GetInitTemperature()) { if (m_CurrentLocation == InventoryLocationType.HANDS) { if (GetTemperature() >= GetDamageTemperaturePlayer()) { AddTemperatureDamageToPlayer(); } } AddTemperature(-GetTempDecreaseCoef()); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: " + GetGame().GetTickTime() + ": this: " + this + ": Decrease: GetTemperature(): " + GetTemperature()); } else { SetTemperature(GetInitTemperature()); StopTemperatureDecrease(); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: " + GetGame().GetTickTime() + ": this: " + this + ": Stop decrease: GetTemperature(): " + GetTemperature()); } } private bool m_CargoDecTempState = false; void DecreaseCargoTemperature() { ItemBase item; m_CargoDecTempState = false; int item_count = GetInventory().GetCargo().GetItemCount(); for (int i = 0; i < item_count; i++) { item = ItemBase.Cast(GetInventory().GetCargo().GetItem(i)); if (item) { if (item.GetTemperature() > item.GetInitTemperature()) { m_CargoDecTempState = true; item.AddTemperature(-item.GetTempDecreaseCoef()); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: " + GetGame().GetTickTime() + ": this: " + this + ": Decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature()); } else { item.SetTemperature(item.GetInitTemperature()); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: " + GetGame().GetTickTime() + ": this: " + this + ": Stop decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature()); } } } } // == COOLING END == // ================================================================================================================== // == DAMAGE == void AddTemperatureDamageToPlayer() { PlayerBase player = PlayerBase.Cast(GetHierarchyParent()); if (player && player.IsAlive()) { float idmg = GetDamageTemperature(); ItemBase gloves = ItemBase.Cast(player.GetInventory().FindAttachment(InventorySlots.GLOVES)); if (gloves) { gloves.AddHealth("","Health", -idmg); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: AddTemperatureDamageToParent: " + GetGame().GetTickTime() + ": this: " + this + ": player: " + player + ": idmg: " + idmg + ": Gloves Health: " + gloves.GetHealth() + ": Gloves Max Health: " + gloves.GetMaxHealth()); if (gloves.GetHealth() > gloves.GetMaxHealth() * 0.5) { return; } else if (gloves.GetHealth() > gloves.GetMaxHealth() * 0.25) { idmg = idmg * 0.75; } } player.ProcessDirectDamage(DT_CUSTOM, this, "RightHand", "FireDamage", "0.5 0.5 0.5", idmg * 0.42); if (IsInherited(Pot)) player.ProcessDirectDamage(DT_CUSTOM, this, "LeftHand", "FireDamage", "0.5 0.5 0.5", idmg * 0.42); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: AddTemperatureDamageToParent: " + GetGame().GetTickTime() + ": this: " + this + ": player: " + player + ": idmg: " + idmg + ": Health: " + player.GetHealth() + ": RightHand: " + player.GetHealth("RightHand","Health") + ": LeftHand: " + player.GetHealth("LeftHand","Health")); } } float GetDamageTemperaturePlayer() { return m_DamageTemperaturePlayer; } float GetDamageTemperature() { return GetTemperature() * m_TempDamageCoef; } // == DAMAGE END == // ================================================================================================================== float GetInitTemperature() { return m_InitTemperature; } float GetTempDecreaseCoef() { if (!IsUnderRoof()) { return m_TempDecreaseCoef * (1 + GetRainAbove()); } return m_TempDecreaseCoef; } float GetRainAbove() { return GetGame().GetWeather().GetRain().GetActual(); } bool IsUnderRoof() { return MiscGameplayFunctions.IsUnderRoof( this ); } // ================================================================================================================== } // ================================================================================================================== // ================================================================================================================== modded class FireplaceBase extends ItemBase { const float PARAM_COOKING_EQUIP_TEMP_INCREASE = 1; //10 override void DestroyFireplace() { if (m_CookingEquipment) { if (m_CookingEquipment.IsInherited(Pot)) { m_CookingEquipment.SetDecTempAllow(true); } } super.DestroyFireplace(); } //Add cooking equipment override void SetCookingEquipment( ItemBase equipment ) { super.SetCookingEquipment( equipment ); m_CookingEquipment = equipment; if (m_CookingEquipment) { if (m_CookingEquipment.IsInherited(Pot)) { //Print("::: SERVER: [FireplaceBase extends ItemBase: Decreasetemp]: SetCookingEquipment: " + GetGame().GetTickTime() + ": this: " + this + ": m_CookingEquipment " + m_CookingEquipment); if (m_HeatingTimer) { m_CookingEquipment.SetDecTempAllow(false); } else { m_CookingEquipment.SetDecTempAllow(true); } } } } //Start heating override protected void StartHeating() { if (m_CookingEquipment && m_CookingEquipment.IsInherited(Pot)) { //Print("::: SERVER: [FireplaceBase extends ItemBase: Decreasetemp]: StartHeating: " + GetGame().GetTickTime() + ": this: " + this + ": m_CookingEquipment " + m_CookingEquipment); m_CookingEquipment.SetDecTempAllow(false); } super.StartHeating(); } //Stop heating override protected void StopHeating() { super.StopHeating(); if (m_CookingEquipment && m_CookingEquipment.IsInherited(Pot)) { //Print("::: SERVER: [FireplaceBase extends ItemBase: Decreasetemp]: StopHeating: " + GetGame().GetTickTime() + ": this: " + this + ": m_CookingEquipment " + m_CookingEquipment); m_CookingEquipment.SetDecTempAllow(true); } } } Думается над еще подкрутить но народ грит норм потому пока не буду Если есть идеи - пишите сюда
-
1 баллЯ уже нашел, пиши ему в дискорд. Moretti#6981 Сам мониторинг 500р стоит но есть доп фишки за отдельную плату:)
-
1 балл......если он прописан в mapgrouppos.xml -он будет спавнится. Конечно если прописаны точки спавна для обьекта в mapgroupproto.xml (маааленькое замечание, по поводу любви к зоне "usage"....в этой зоне ВСЕ статик обьекты будут ТОЛЬКО с лутом который прописан для неё. Как это работает можете наблюдать в больнице Черногорска, когда и машины и гаражи рядом забиты "медициной")
-
0 баллов
-
Рассылка

thessend