Jump to content
DAYZ-CODE.RU - Создай свой игровой сервер

Abra

Members
  • Posts

    31
  • Joined

  • Last visited

  • Отзыв

    0%

Posts posted by Abra

  1. Которые не требуют модов нету, большинство таких локаций используют мод BuilderItems который добавляет свыше 1к объектов которые можно разместить с помощью Dayz Editor.
    Ну и Dayz Editor Loader который загружает маппинг на сервер.
    В теории можно загружать маппинг без клиентских модов, но это нужно разбираться.
    @Captain

    Я так понимаю ты хочешь создать ванильный сервер без модов?

  2. Привет, анимации в Dayz работают в формате .anm. Принцип прост, ты создаёшь анимацию в любом удобном для тебя редакторе после чего переводишь эту анимацию в формат .txa, а после Workbench переводит его в формат .anm что бы движок мог прочитать анимацию в игре. Но там жёсткая привязка по костям, так что нужно использовать скелет который используется в игре. Я с анимацией особо не работал, но у меня получилось кастомное использование предметов в игре путём подменой стандартных анимаций. У меня остались примеры и файлы, так что если интересно, пиши.@ARGT



    На самом деле не так уж и сложно если опустить сам факт анимирования, у меня с этим плохо.

    В 15.05.2025 в 22:26, SkylineMods сказал:

    Он поддерживает FBX, но удачи вам в попытках заставить работать все, что с ним связано, - это очень сложно.

     

  3. Привет, в целом лучше пособие это сама игра, делай по примеру. По поводу переменных если создатель мода продумал этот момент, то можно, а если нет, то придётся делать через костыли. Ты можешь создать свой мод который перезаписывает что-то в другом моде или создать свой.
    Вот простенький скрипт который я юзал года 3 назад

    class SCI_Container extends DeployableContainer_Base
    {
        void SCI_Container()
        {
        }
     
    override bool CanPutIntoHands(EntityAI parent)
    {
        if (super.CanPutIntoHands(parent))
        {
            return false; // Здесь мы возвращаем false, чтобы не разрешить брать в руки
        }
        return false;
    }
    }

    Если есть вопросы, задавай в лс, попробую ответить.
    О, ну и пособие по скриптам:
    https://dayzexplorer.zeroy.com/
    @VClown

  4. Замапить карту очень легко, например через DayzEditor. Со своей картой чуть сложнее, но в целом тоже ничего сложного если разобраться, главное много времени и ещё больше терпения. Насчёт динамических локаций можно сделать на основе ванильных ивентов, по поводу пособий не подскажу, тут уж как-то сам, в инете их много. Если интересует что-то конкретное, то спрашивай, попробую ответить.

    • Like 1
  5. Там в целом ничего сложного, создаешь папку, в ней создаёшь файл config.cpp и пихаешь в него это:
     

    Спойлер
    class CfgPatches
    {
        class HP_Psevdo
        {
            units[] = {};
            weapons[] = {};
            requiredVersion = 0.1;
            requiredAddons[] = {"PseudoGiant_Scripts"};
        };
    };
    class CfgMods
    {
        class HP_Psevdo
        {
            dir = "dir_name_you_mod";
            hideName = 1;
            hidePicture = 1;
            name = "";
            credits = "";
            author = "";
            authorID = "0";
            version = "1.0";
            extra = 0;
            type = "mod";
            dependencies[] = {"World", "Game"};
            class defs
            {
                class worldScriptModule
                {
                    value = "";
                    files[] = {"dir_name_you_mod/scripts/4_World"}; // скрипты если есть        
                };
                class gameScriptModule
                {
                     value = "";
                     files[] = {"dir_name_you_mod/scripts/3_Game"};
                };
            };
        };
    };
     
    class CfgVehicles
    {
        class ZombieMaleBase;                                                                    
     
        class PseudoGiant_Base: ZombieMaleBase
        {
            class DamageSystem
            {
                class GlobalHealth
                {
                    class Health
                    {
                        hitpoints=3500;
                    }
                }
                class DamageZones
                {
                    class Zone_Head
                    {
                        class Health
                        {
                            hitpoints=3500;
                        }
     
                    }
                    class Zone_Torso: Zone_Head
                    {
                        class Health
                        {
                            hitpoints=3500;
                        }
                    }
                    class Zone_Upperlimbs: Zone_Head
                    {
                        class Health
                        {
                            hitpoints=3500;
                        }
                    }
                    class Zone_Lowerlimbs: Zone_Head
                    {
                        class Health
                        {
                            hitpoints=3500;
                        }
                    }
               
                }
            }
        };
    };

    Потом через Addon builder создаешь pbo и подключаешь как мод, главное что бы была правильная архитектура папок на выходе PBO.
    @Name_You_Mod ==> Addons ==> Тут лежит твоё PBO

    А в целом лучше посмотри как это всё сделано в ванильных файлах Dayz,  а так же посмотри гайды, может быть в них даже объяснят что за что отвечает
    @ɪɢʀᴏᴋ

     

  6. weight это просто вес предмета в игре, а прописать модификатор для кастомного эпинифрина  не так муторно как описали выше.
    Для начала в скриптах тебе нужно создать свой класс Модификатора который исходит из EpinephrineMdfr как то так:
     

    Спойлер
    class CutsomEpinephrineMdfr: EpinephrineMdfr
    {
        override void Init()
        {
            m_ID                    = eModifiers.MDF_CUSTOMEPINEPHRINE;  // Уникальный индификатор.
        }
       
        override bool DeactivateCondition(PlayerBase player)
        {
            float attached_time = GetAttachedTime();
           
            if( attached_time >= 600)  // Через сколько действие адреналина закончится.
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    После чего модифицируешь ModifiersManager:
     

    Спойлер
    modded class ModifiersManager
    {
     
        override void Init()
        {
            super.Init();
            AddModifier(new CutsomEpinephrineMdfr);  // Сюда пишешь класс твоего модификатора
        }
    }

    Создаешь свой enum в котором указываешь уникальный ID для модификатора что бы он не пересекался с ванильными:

    Спойлер
    enum eModifiersExtended : eModifiers
    {
        MDF_CUSTOMEPINEPHRINE= 560,
    };

    И в заключении создаешь в скриптах класс твоего эпинефрина, самое главное что бы у твоего класс имя было одинаковое из Config.cpp
    Если в Config.cpp адреналин называется SuperAdrenalin, то и в скриптах он должен называется так же.

    Спойлер
    class SuperAdrenalin: Inventory_Base
    {
        override void SetActions()
        {
            super.SetActions();
           
            AddAction(ActionInjectEpinephrineTarget);
            AddAction(ActionInjectEpinephrineSelf);
        }
       
        override void OnApply(PlayerBase player)
        {
            if (!player)
                return;
            if( player.GetModifiersManager().IsModifierActive(eModifiersExtended.MDF_CUSTOMEPINEPHRINE ) ) // eModifiersExtended откуда мы берём ID модификатора.
            {
                player.GetModifiersManager().DeactivateModifier( eModifiersExtended.MDF_CUSTOMEPINEPHRINE ); // MDF_CUSTOMEPINEPHRINE название применяемого модификатора.
            }
            player.GetModifiersManager().ActivateModifier( eModifiersExtended.MDF_CUSTOMEPINEPHRINE );
        }
    };


    Ну вроде бы всё, будут вопросы, пиши.

  7. Ты же распаковал чужой мод, скорее всего в нём файлы anm и p3d забинарены движком Dayz для его чтения из за чего ты и не можешь повторно запаковать мод. Если бы перепаковать было так просто, это делали бы все.

    В файлах которые ты пытаешься перепаковать примерно такая каша:
     

    Спойлер
    FORM  .'ANIMSET6  .FPS       HEAD  w              Ђ?  Ђ?    ‚     
    Scene_Root{™
    Ѕ#-&?‡SYѕ­P?яяЗB  А7‚     hipuЦЅМв>Щ€%їВ ?юяЗB   8‚  	   headяР¬ѕRў>Vў'Ѕгx„?эяЗB  @8‚     jawъ№±ѕ81ш>а:-ѕnК‘?юяЗB   8‚     leftbrowІQ‘ѕQЈМ>rѕё’?юяЗB   8‚     lefteyeT№’ѕг/>Bбѕь(’?ьяЗB  `8‚     righteye›Еьѕ›Еь>Ѕ7†µ Ђ?эяЗB  @8‚     
    pin_lookatњ°зѕ«rК>HCW>h?Я>яяЗB   7‚     leftsholderПYїПY?ѕјUЂ?ьяЗB  А7‚     leftarm rыѕ±rы>ЖљЧѕ­Є?ыяЗB   8‚     leftforearm‡kї‡k?pтљѕИ,–?ъяЗB   8‚     lefthand чЁѕCK>1В®ѕ;ў?щяЗB   8‚     	leftindexю’®Ѕ“®==Ї]p?чяЗB  @8‚     
    leftindex1¬MёЅ¬Mё=    §gz?чяЗB  `8‚     
    leftindex2Т\’ѕ

     

    Но ты можешь создать свой мод который будет переопределять хп уже существующего ПсевдоГиганта, это самый простой и быстрый способ:
    В конфиг пишем это и ставим нужное хп в строке hitpoints
     

    Спойлер
    class CfgPatches
    {
    	class Custom_PseudoGiant_Scripts
    	{
    		requiredAddons[]=
    		{
                "PseudoGiant_Scripts"
    		};
    
    	};
    };
    
    class CfgVehicles
    {
    	class ZombieMaleBase;                                                                    
     
        class PseudoGiant_Base: ZombieMaleBase
        {
            class DamageSystem
            {
                class GlobalHealth
    			{
    				class Health
    				{
    					hitpoints=3500;
                    }
                }
                class DamageZones
                {
                    class Zone_Head
                    {
                        class Health
                        {
                            hitpoints=3500;
                        }
    
                    }
                    class Zone_Torso: Zone_Head
                    {
                        class Health
                        {
                            hitpoints=3500;
                        }
                    }
                    class Zone_Upperlimbs: Zone_Head
                    {
                        class Health
    					{
    						hitpoints=3500;
                        }
                    }
                    class Zone_Lowerlimbs: Zone_Head
                    {
                        class Health
    					{
    						hitpoints=3500;
                        }
                    }
                
                }
            }
        };
    };

     

    Как-то так. Если что, спрашивай.

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

    class ProxyName_You_Model: ProxyAttachment
        {
            scope = 0;
            inventorySlot = ""; 
            model = "";
        };

    скинь что ты сделал, так более понятно будет в чём конкретно проблема.

  9. Если ты распаковал файлы игры через Dayz Tools, то все конфиги находятся в папке DZ, всё что связанно с одеждой в characters

    Создаешь свой мод на подобии ванили, главное что бы класс совпадал с ванильными иначе работать не будет
    В config.cpp в классе CfgVehicles пишешь

        class Clothing;                                                                    
    
        class Sweater_ColorBase: Clothing
        {
            itemSize[] = {3,2}; // Размер  предмета в инвентаре
            itemsCargoSize[] = {3,3}; // Размер инвентаря в предмете
        };

    Таким образом все свитеры будут иметь твой кастомный размер слотов.
    Как создавать свой мод гайдов полно тут и на ютубе, если нужны подробности пиши в лс. @KPOHOC

     

  10. Нашёл мод за 15 секунд в мастерской, чаще пользуйся поиском, не просто так придуман.
     


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

    @Partak

  11. Урон в Dayz работает от пуль, их перезаписать можно следующем образом:
     

    class CfgPatches
    {
    	class DZ_Custom_Weapons_Projectiles
    	{
    		units[]={};
    		weapons[]={};
    		requiredVersion=0.1;
    		requiredAddons[]=
    		{
    			"DZ_Weapons_Projectiles"
    		};
    	};
    };
    class CfgAmmo
    {
    	class Bullet_556x45: Bullet_Base
    	{
          		class DamageApplied
    		{
              			defaultDamageOverride[]=
    			{
    				{0.87,1}
    			};
    			class Health
    			{
    				damage=110;
    			};
    			class Blood
    			{
    				damage=100;
    			};
    			class Shock
    			{
    				damage=110;
    			};
    		};
          };
    };

    В данном случае мы перезаписываем урон у калибра 556x45
    Class Health это урон по хп.
    Class Blood это урон по крови.
    Class Shock это урон по шоку.
    Если не будет работать напиши, давно не практиковался в написании модов.
    @_winter_cat_

  12. @Kirill57rus  Скорее всего один из модов изменяет хп топорику,  самый лучший способ это узнать от какого мода ноги растут и там править или можно попытаться вправить топорик самим

    Спойлер

     

    class CfgPatches
    {
    	class Sample
    	{
    		units[]={};
    		weapons[]={};
    		requiredVersion=0.1;
    		requiredAddons[]=
    		{
    			"DZ_Weapons_Melee", "DZ_Weapons_Melee_Blade"
    		};
    	};
    };
    
    class CfgVehicles
    {
    	class Inventory_Base;
    	class Hatchet: Inventory_Base
    	{
            class DamageSystem
    		{
    			class GlobalHealth
    			{
    				class Health
    				{
    					hitpoints=150; // Желаемое кол-во хп топорика
                        
    				};
    			};
    		};
        };
    };


    Если узнаешь какой мод меняет хп топорику, то в requiredAddons нужно добавить класс мода что бы наш мод на изменение хп топорика загружался последним и перезаписывал ему хп

     

    • Like 1
  13. Самое простое можно сделать без кассеты добавив объекту звук и зациклить его через PlaySoundSetLoop в скрипте.
    Например можно сделать несколько треков в одной звуковой дорожке минут на 40 и они будут постоянно повторяться, но перед этим нужно создать soundShaders который мы и будем использовать как повторяющийся звук.
     

    Спойлер

    P.S. Дайте знать если нужен будет гайд как создавать статичные звуки, мб напишу в скором времени.

     

    • Like 4
  14. @R0cky  Тогда можно сделать подругому,
     

    Спойлер


    modded class ActionSkinningCB : ActionContinuousBaseCB
    {
        override void CreateActionComponent()
        {
            m_ActionData.m_ActionComponent = new CAContinuousTime( GetDefaultTime() );
        }
        
        float GetDefaultTime()
        {
            string item_type = m_ActionData.m_MainItem.GetType();
            
            switch(item_type)
            {
                case "CombatKnife": 
                    return 15.0;
                break;
            
                case "HuntingKnife": 
                    return 12.0;
                break;
    
                case "Sample": 
                    return 5;
                break;
    
                default:
                    return UATimeSpent.SKIN;
                break
            }
            return -1;
        }
    };


    Здесь мы так же перезаписываем  класс ActionSkinningCB, но добавляем float GetDefaultTime() этот метод определяет продолжительность выполнения действия, так мы сможем назначить количество времени в секундах для определённых ножей.

    • Like 1
  15. @R0cky  В папке Scripts/4_World ты должен создать текстовый документ с форматом .c и в нём прописать этот код

    Спойлер


    modded class ActionSkinningCB
    {
        override void CreateActionComponent()
        {
            m_ActionData.m_ActionComponent = new CAContinuousTime(5);
        }
    };


    Только этот код изменит время резки на всех ножах.

    Так же если в моде ранее небыли прописанны скрипты, то нужно в config.cpp дописать что бы DayZ видел код
    Вот пример:

    Спойлер


    class CfgMods {
    	class sample {
    		dir = "sample";
    		picture = "";
    		action = "";
    		hideName = 1;
    		hidePicture = 1;
    		name = "sample";
    		credits = ;
    		author = ;
    		authorID = "0";
    		version = 1.0;
    		extra = 0;
    		type = "mod";
    		dependencies[] = {"Game", "World", "Mission"};
    		
    		class defs {
    			class gameScriptModule {
    				value = "";
    				files[] = {"sample/scripts/3_Game"};
    			};
    			
    			class worldScriptModule {
    				value = "";
    				files[] = {"sample/scripts/4_World"};
    			};
    			
    			class missionScriptModule {
    				value = "";
    				files[] = {"sample/scripts/5_Mission"};
    			};
    		};
    	};
    };


    Надеюсь я ответил на твой вопрос.

    • Like 1
  16. @R0cky  Это можно сделать через Rvmat nodiffuse_glowing, в DayZ он используется для подсветки прицелов.
    Находиться он по пути dz\weapons\attachments\optics\data\nodiffuse_glowing.rvmat
    Так же можешь сделать свой Rvmat для подсветки текстур, вот гайд где неплохо поясняют за настройку Rvmat-а Тык

    • Like 1
  17. В 18.09.2023 в 18:47, immortal сказал:
      Показать контент

    image.thumb.png.946f7c6d1b19f616a7d160184113c85c.png

    Сделал ретекстур на кеды а они не отображаются в бульдозере, не подтягивает даже ванильные текстуры

    Нужно установить диск /P: и распаковать гейм дату, так же если не настроено, то нужно установить в настройках Object Builder путь для текстур

    Спойлер

    image.png.c9f471781bf6a21f067c2391148ebb7b.png

    Текстуры должны быть в формате ppa и если все условия соблюдены, то текстуры будут подгружаться из диска /P: прямиком в бульдозер.

    • Like 1
  18. Приветствую всех, в этом гайде я постараюсь максимально просто и без воды описать процесс создания своего оружия, если я где-то ошибся или у вас есть вопросы не стесняйтесь высказывать своё мнение.
    Сразу прошу простить меня за оформление, это мой первый гайд и опыт по его написанию у меня не очень большой.


    1.Импорт модели
     


    Для начала нам нужно что? правильно модель, создадите вы сами или позаимствуете её с какой-нибудь игры это не важно, нам подойдёт любая, я для пример возьму ак-74 из игры сталкер.
    Заходим в File>Import>Obj(в зависимости от формата вашей модели) и выбирайте свою модель

    Спойлер

    image.thumb.png.3c12dbb70a89fc6e1d1b4b76afcd1a89.png

    Вот наша модель с которой мы будем работать, обязательно проверьте не отзеркалена ли модель при импорте(такое бывает)

    Спойлер

    image.thumb.png.8e3ac066b03e67fb3c05aedddd76d7fa.png

     

    Спойлер

    image.thumb.png.1befc49c85cee2047c4070f725d4fce4.png

    В данном примере модель отзеркалена от чего и вывернуты полигоны, для корректного отображения мы отразим её по координате X
    image.png.19bbc4bcacaa9c93955f990dfceec597.png
     

    Спойлер

    image.thumb.png.837e5c2f0070b4a2f25fc81038410409.png

    Далее избавимся от ненужных деталей что бы у нас остался только один автомат Калашникова

    Спойлер

    image.thumb.png.a167f1b75a0dd1a90e9c92ee5b9d659b.png

    Наложим текстуры на наш автомат, для этого выделяем всю модель и нажимаем кнопку У русскую или Е английскую, после чего в сплывающем окне во вкладке Texture вписывайте путь до текстуры AK74_Sample\Data\ak74_co.paa

    Спойлер

    image.thumb.png.4c19f4c4162e8d66940523bc690402d1.png

    Если после наложение текстуры она отображается неправильно, отразите так же UV развёртку.
    image.png.6eab94307b19c224f5e84431f1dbccb5.png
    image.png.78d63f1f3e6460e9963ecd6492ab3184.png
     

    Спойлер

    image.thumb.png.5f916cdbe1b05bdd5a8621927d3de1e7.png

    Настроим кости что бы анимации автомата корректно отображались
    В первую очередь назовём всю модель zbytek для того что бы в будущем накладывать ретекстур на автомат
    bolt - так называем затвор для того что бы он отдёргивался при стрельбе и зарядке патрона/магазина

    Спойлер

    image.thumb.png.71babc2c81145c5531a62f40d6e101d6.png

    firemode - для отображение смена режима огня

    Спойлер

    image.thumb.png.bd60d4beb7fff5afbb41fda7c91ca865.png

    mag_release - для отображения скобы магазина

    Спойлер

    image.thumb.png.cdd7ec9e32384b9c1915e1c7ff0344c1.png

    trigger - для анимирования спускания курка при стрельбе

    Спойлер

    image.thumb.png.c146b2aeebc4ac34f67f461595e7be27.png

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


    2.Позиционирование и Прокси
     


    Начнём с правильного позиционирования что бы автомат правильно лежал в руках игрока, для этого создадим прокси автомата 74 из Dayz

    Спойлер

    image.png.e0c8cd196786caf429ef8f1fedcf65f9.png

    В окне нажимаем на Browse и идём по пути \DZ\weapons\firearms\ak101\ak101, для этого у вас должна быть распакована Data Dayz в диске /P

    Спойлер

    image.png.7251fcbafa511e1003d3d9e7520eac59.png

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

    Спойлер

    image.thumb.png.8c4dba59d4fc4f79a7b23d26a947583b.png

    Теперь мы должны зайти в наш Buldozer.
    При запуске мы увидим такую картину, нужно будет поправить положение нашей модели в Object Builder что бы они стояли в друг друге

    Спойлер

    image.thumb.png.728c2941fcf6e3979f3a650b1a3ea97a.png

    Примерно вот так

    Спойлер

    image.thumb.png.7f7f5915f8cf89dd25371d49a3838920.png

    После того как выставили оружие правильно прокси автомата можно удалить, оно нам больше не понадобиться.
    Создаём новый прокси магазина, я возьму прокси магазина от ак74 \DZ\weapons\attachments\magazine\magazine_ak74_30rnd

    Выставим с помощью Object Builder его правильно двигая треугольник и сравнивая с Buldozer
    Должно выглядеть примерно так

    Спойлер

    image.thumb.png.a89d4227638abd8513ad94205f55215f.png

     

    Спойлер

    image.thumb.png.1cd2c9c76dbd945e89a5705c2edc0ae8.png


     


    3.Лоды
     


    С 1 по 4 лод это визуальные лоды, чем выше цифра тем дальше будет отображаться модель, на первом лоде ставим оригинальную модель, а дальше уменьшаем количество полигонов с помощью merge near что бы снизить нагрузку прогрузки оружия на дальних расстояниях для этого нужно перейти во вкладку Point>Merge near, нажимаем Detect, Object Builder сам вычислит правильное уменьшение полигонов и вершин, хотя в некоторых случаях он может определять неправильно и придаться поиграться со значениями самому

    Спойлер

    image.png.ece1e46713ee6a194cdf7805855c4453.png

    View-Pilot - это визуальный лод от первого лица, вставляйте в него модель оружия из первого лода.
    Geometry - лод геометрии, от него зависит как будет вести себя оружие когда его кидают, вставляем сюда наиболее простую модель.
    Создаём квадрат и подстраиваем его грани под нашу модель

    Спойлер

    image.png.96c4a7c839c31e479b4d06ea9b42e536.png

    Нажимаем ОК

    Спойлер

    image.png.f51e86f6220c3faf8d2ed6fbca409c81.png

    Появляется квадрат, его и подстраиваем под нашу модель

    Спойлер

    image.thumb.png.dff20e3207b9f3fcbeebf541c43cc087.png

     

    Спойлер

    image.png.a37a6a4c9d2e0772096513b8dba747a6.png

    Обязательно в окне Named Properties создаём новое свойство, вписываем в Name autocenter, а в Value 0, тем самым мы отключаем авто центровку и наша модель будет всегда там где мы её оставили.
    Далее  укажем квадрат как компонент через инструмент Topology, для этого переходим в Structure>Topology>Find component.
    View Geometry - нужна для возможности подобрать автомат через наведение на него курсора, вставляем туда квадрат из Geomtry lod.
    Fire Geometry - это лод для того что бы пули не пролетали свкозь модель, а попадали в наше оружие, желательно в нём указать более подробную геометрию автомата, но в нашем примере сойдёт геометрия которую мы создали, вставляем ёё так же.
    Memory - точки памяти которые игра использует для для воспроизведения некоторых функций, очень обширная тема и я попробую максимально сжато объяснить как это работает
    boundingbox_max и boundingbox_min указывают границы нашей модели при спавне нашей модели в мире.
    ce_center - указывает центр модели.
    ce_radius - предотвращает спавн модели в стене или под столом, устанавливать её нужно чучуть за boundingbox_max и boundingbox_min
    eye - куда будет прицеливаться игрок при штатном прицеле.
    invview - откуда будет вестись обзор на модель в инвентаре.
    konec hlavne и usti hlavne должны быть на одной оси для правильного вектора вылита пули, если поставить их неправильно, то оружие будет косить при выстреле
    konec hlavne - начало вылета пули.
    usti hlavne место откуда будет выходить Muzzle эффект или же эффект выстрела
    nabojnicestart - место начала вылита пустых гильз
    nabojniceend - сторона и расстояние куда гильзы будут отлетать
    Из за ограничение по изображением постараюсь максимально информативно указать местоположение точек

    Спойлер

    image.thumb.png.2c580cd1a0f75effd7b06a31d6a4407a.png

     


    4. Конфиги и скрипты.
     


    Для начала настроим основной config.cpp

    Спойлер
    class CfgPatches // CfgPatches - это заголовочный класс аддона. Размещается в Config.cpp и содержит информацию о требованиях, содержимом и метаданных, описывающих аддон. Если конфиг не содержит CfgPatches, то он игнорируется при загрузке аддонов при запуске игры.
    {
    	class MyAddon
    	{
    		// Информация для редактора
    		units[] = {};
    		weapons[] = {"AK74_Custom"};
    		requiredVersion = 0.1; // Минимальная совместимая версия. Если версия игры ниже, то при запуске игры будет появляться всплывающее предупреждение.
    		requiredAddons[] = {"DZ_Data","DZ_Scripts"}; // Необходимые аддоны, используемые для установки порядка загрузки. Если какой-либо из аддонов отсутствует, при запуске игры появится всплывающее предупреждение.
    	};
    };
    
    class CfgMods
    {
    	class MyAddon
    	{
    		dir = "AK74";
    		hideName = 1;
    		hidePicture = 1;
    		name = "For the guide"; // Имя вашего мода
    		credits = "For the guide";
    		author = "For the guide";
    		authorID = "0";
    		version = "1.0";
    		extra = 0;
    		type = "mod";
    		dependencies[] = {"World"};
    		class defs
    		{
    			class worldScriptModule
    			{
    				value = "";
    				files[] = {"AK74_Sample\Script\4_World"}; //Путь для скриптов World
    			};
    	    };
    	};
    };
    
    class Mode_Safe;
    class Mode_SemiAuto;
    class Mode_Burst;
    class Mode_FullAuto;
    class OpticsInfoRifle;
    class cfgWeapons
    {
    	class Rifle_Base; //База которую мы подгружаем
    	class AK74_Custom: Rifle_Base //Class нашего оружия, так он будет называться в админ меню при спавне
    	{
    		scope = 2; // Будет ли он доступен для спавна, если указать 0, то заспаванить в ручную его не получиться.
    		displayName = "AK 74"; // название оружия в игре
    		descriptionShort = "5,45-мм автомат Калашникова образца 1974 года"; // Описание автомата
    		model = "AK74_Sample\Data\AK74.p3d"; // Здесь указываем путь к модели иначе оружие будет невидимым и не будет срелять.
    		PPDOFProperties[]={1,0.5,50,160,4,10}; // Настройки размытия
    		attachments[] = {}; // Аттачменты которые будут на оружии, мы их не выставляли, так что пропустит данный код
    		itemSize[] = {7,3}; // Размер в инвентаре
    		weight = 1600; // Вес оружия
    		absorbency = 0; // Будет ли оружие намокать, 0 значит что не убдет
    		repairableWithKits[] = {1}; // Можно ли починить оружие
    		repairCosts[] = {25}; // Сколько будет стоить починка
    		WeaponLength=0.56;
    		barrelArmor=2.743;
    		chamberSize = 1; // Сколько вмещает оружие без магазина
    		chamberedRound = "";
    		chamberableFrom[]= // Какими патронами будет стрелять оружие
    		{
    			"Ammo_545x39",
    			"Ammo_545x39Tracer"
    		};
    		magazines[]= // Какие магазины подходят для оружия
    		{
    			"Mag_AK74_30Rnd",
    			"Mag_AK74_30Rnd_Black",
    			"Mag_AK74_30Rnd_Green",
    			"Mag_AK74_45Rnd"
    		};
    		magazineSwitchTime=0.2;
    		ejectType = 1;
    		recoilModifier[]={1,1,1};
    		swayModifier[]={2.2,2.2,1.2};
    		hiddenSelections[] = {"zbytek","camo","bolt"};
    		hiddenSelectionsTextures[] = 
    		{
    		"AK74_Sample\Data\ak74_co.paa",
    		"AK74_Sample\Data\ak74_co.paa",
    		"AK74_Sample\Data\ak74_co.paa"
        	};
    		modes[] = {"FullAuto","SemiAuto"}; // Указываем режимы огня, описывать подробно в данном гайде всё я не буду, дальше без коментариев
    		class SemiAuto: Mode_SemiAuto
    		{
    			soundSetShot[] = {"AK_Shot_SoundSet","AK_Tail_SoundSet","AK_InteriorTail_SoundSet"};
    			soundSetShotExt[] = {{"AK_silencer_SoundSet","AK_silencerTail_SoundSet","AK_silencerInteriorTail_SoundSet"}};
    			reloadTime=0.12;
    			recoil="recoil_AK74";
    			recoilProne="recoil_AK74_prone";
    			dispersion=0.0020000001;
    			magazineSlot="magazine";
    		};
    		class FullAuto: Mode_FullAuto
    		{
    			soundSetShot[] = {"AK_Shot_SoundSet","AK_Tail_SoundSet","AK_InteriorTail_SoundSet"};
    			soundSetShotExt[] = {{"AK_silencer_SoundSet","AK_silencerTail_SoundSet","AK_silencerInteriorTail_SoundSet"}};
    			reloadTime=0.097999997;
    			recoil="recoil_AK74";
    			recoilProne="recoil_AK74_prone";
    			dispersion=0.0020000001;
    			magazineSlot="magazine";
    		};
    		class Particles
    		{
    			class OnFire
    			{
    				class SmokeCloud
    				{
    					overrideParticle = "weapon_shot_winded_smoke";
    				};
    				class MuzzleFlash
    				{
    					overrideParticle = "weapon_shot_ak74_01";
    					ignoreIfSuppressed = 1;
    					illuminateWorld = 1;
    					positionOffset[]={0,0,0};
    				};
    				class ChamberSmokeBurst
    				{
    					overrideParticle = "weapon_shot_chamber_smoke";
    					overridePoint = "Nabojnicestart";
    					overrideDirectionPoint = "Nabojniceend";
    				};
    			};
    			class OnOverheating
    			{
    				maxOverheatingValue=60;
    				shotsToStartOverheating=25;
    				overheatingDecayInterval=1;
    				class SmokingBarrel1
    				{
    					overrideParticle = "smoking_barrel_small";
    					onlyWithinOverheatLimits[]={0,0.5};
    					positionOffset[]={0.1,0,0};
    					onlyWithinRainLimits[]={0,0.2};
    				};
    				class SmokingBarrelHotSteam
    				{
    					overrideParticle = "smoking_barrel_steam";
    					onlyWithinOverheatLimits[]={0.5,0.80000001};
    					positionOffset[]={0.1,0,0};
    					onlyWithinRainLimits[]={0,0.2};
    				};
    				class SmokingBarrelHotSteamSmall
    				{
    					overrideParticle = "smoking_barrel_steam_small";
    					positionOffset[]={0.30000001,0,0};
    					onlyWithinRainLimits[]={0.5,1};
    				};
    				class OpenChamberSmoke
    				{
    					onlyIfBoltIsOpen = 1;
    					overrideParticle = "smoking_barrel_small";
    					overridePoint = "Nabojnicestart";
    				};
    			};
    			class OnBulletCasingEject
    			{
    				class ChamberSmokeRaise
    				{
    					overrideParticle = "weapon_shot_chamber_smoke_raise";
    					overridePoint = "Nabojnicestart";
    				};
    			};
    		};
    		class OpticsInfo: OpticsInfoRifle
    		{
    			memoryPointCamera = "eye";
    			discreteDistance[] = {50,100,150,200,250,300};
    			discreteDistanceInitIndex = 0;
    			modelOptics = "-";
    			distanceZoomMin = 50;
    			distanceZoomMax = 300;
    		};
    		class DamageSystem
    		{
    			class GlobalHealth
    			{
    				class Health
    				{
    					hitpoints = 250;
    					healthLevels[] = 
                       {
                         {1.0,{""}},
                         {0.7,{""}},
                         {0.5,{""}},
                       };
    				};
    
    			};
    			class GlobalArmor
    			{
    				class Projectile
    				{
    					class Health
    					{
    						damage = 0.1;
    					};
    				};
    			};
    		};
    	};
    };

     

    Рядом с моделью создаём текстовый файл Model.cfg где указываем нужные кости которые мы указывали в самой модели, это нужно для правильной работы анимации оружия

    Спойлер
    class cfgSkeletons
    {
    	class AK74
    	{
    		skeletonInherit = "";
    		isDiscrete = 1;
    		SkeletonBones[]=
    		{
    			"zbytek"	,"",
    			"magazine"	,"",
    			"trigger"	,"",
    			"bolt"	,"",
    			"firemode"	,"",
    			"mag_release"	,""
    		};
    	};
    };
    class CfgModels
    {
    	class Default
    	{
    		sections[] = {};
    		sectionsInherit="";
    		skeletonName = "";
    	};
    	class AK74:Default
    	{
    		skeletonName="AK74";
    		sections[]=
    		{
    			"zbytek"	,"",
    			"magazine"	,"",
    			"trigger"	,"",
    			"bolt"	,"",
    			"firemode"	,"",
    			"mag_release"	,""
    		};
    	}
    }

     

    После настройки нам нужно создать скрипт для разброса, анимации нашего оружия, создаём папки как в class defs, Script>4_World и там создаём наши скрипты формата .c
    Animation.c - Указываем анимацию для нашего оружия

    Спойлер
    modded class ModItemRegisterCallbacks // тут мы модифицируем класс ModItemRegisterCallbacks, важно использовать именно его ведь если использовать PlayerBase анимации будут очень нестабильными
    {
    	override void RegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior ) // Регистрируем анимацию
        {
            super.RegisterFireArms( pType, pBehavior );
        
    		pType.AddItemInHandsProfileIK("AK74_Custom",/*Тут указываем класс который мы указали в config.cpp*/ "dz/anims/workspaces/player/player_main/weapons/player_main_ak101.asi", pBehavior, "dz/anims/anm/player/ik/weapons/ak101.anm","dz/anims/anm/player/reloads/AK101/w_AK101_states.anm");
    	}
    };

     

    Recoil_AK74.c - Тут мы указываем разброс оружия.

    Спойлер
    class AK74_Custom : RifleBoltFree_Base
    {
    	override RecoilBase SpawnRecoilObject()
    	{
    		return new Ak74Recoil(this);
    	}
    };
    
    // Простенький код для указания наследования разброса оружия от Ak74Recoil

     

    5. Заключение.
     


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

    • Like 6
    • Thanks 2
×
×
  • Create New...