Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
222Orbita

Серверостроение – Начальный сет одежды

Доброго времени суток! Знающие ребята, подскажите, пожалуйста, как в версии 1.19 изменить свою стартовую одежду. Именно изменить, а не добавить. Добавлять я знаю как в файле init.c, а вот именно изменить недопираю. Весь Интернет уже перерыл, все советы по старым версиям – не подходит. Спасибо!

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


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

Рекомендованные сообщения

  • 0
itemClothing = player.FindAttachmentBySlotName( "Body" );

это не конкретный сет одежды. Это поиск вещи в конкретном слоте игрока на персонаже

Далее через

if (itemClothing)

идет проверка того, найдена ли вещи при этой проверке. если найдена - блок сработает, если нет - не сработает.

Сами стартовые шмотки (футболка, штаны, башмаки и т.п., т.е. то что игрок может настроить в гл меню игры на свой новый персонаж)  к моменту обработки стартового лута в init.c миссии уже на игроке имеются. Потому варианта, как выше написал, два всего:

1) удалять все шмотки с игрока  - комманда:

player.RemoveAllItems();

и затем выдавать нужные шмотки уже от имени сервера так, как вам надо.

player.GetInventory().CreateInInventory("какая-то футболка");
player.GetInventory().CreateInInventory("какие-то штаны");
player.GetInventory().CreateInInventory("какие-то башмаки");

2) искать вещи в нужном вам слоте игрока и удалять их, если там она есть, а потом на ее место спавнить нужное вам от имени сервера. 

itemClothing = player.FindAttachmentBySlotName( "Body" );
if(itemClothing)
{
GetGame().ObjectDelete(itemClothing);
player.GetInventory().CreateInInventory("какая-то футболка");
}

 

А то что выше вам дали - можно либо как образец использовать - там такие же комманды выдачи лута, рандомы под наборы сетов и т.п. Все это подойдет.

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

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


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





  • 0

1. найти вещь на игроке в слоте нужном

2. удалить

3. соспавнить нужное

или попросту обнулить лут игрока и соспавнить нужное.

разумеется это все тот же инит

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
10 часов назад, 123new сказал:

1. найти вещь на игроке в слоте нужном

2. удалить

3. соспавнить нужное

или попросту обнулить лут игрока и соспавнить нужное.

разумеется это все тот же инит

Не, это лут, а мне нужно именно сет одежды. Если добавлять, или изменять в слотах, то он просто добавляет в инвентарь. А мне нужно, чтобы сразу одет был в нужное.

7 часов назад, Melnikov сказал:

CustomSpawnPlayerConfig от замечательного человека: @123new Ссылка

Видел я это на ютубе. Во-первых: это для старой версии (скрипт init не совпадает), а во-вторых: это под конкретного игрока, а мне нужно для вех.

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


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

В 1.19 есть конкретный сет стартовой одежды, он прописан как "Body".

itemClothing = player.FindAttachmentBySlotName( "Body" );

Стартовый шмот берётся конкретно из этого значения (я так понял).

Вот его-то и нужно изменить.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
37 минут назад, 123new сказал:

itemClothing = player.FindAttachmentBySlotName( "Body" );


itemClothing = player.FindAttachmentBySlotName( "Body" );

это не конкретный сет одежды. Это поиск вещи в конкретном слоте игрока на персонаже

Далее через

if (itemClothing)


if (itemClothing)

идет проверка того, найдена ли вещи при этой проверке. если найдена - блок сработает, если нет - не сработает.

Сами стартовые шмотки (футболка, штаны, башмаки и т.п., т.е. то что игрок может настроить в гл меню игры на свой новый персонаж)  к моменту обработки стартового лута в init.c миссии уже на игроке имеются. Потому варианта, как выше написал, два всего:

1) удалять все шмотки с игрока  - комманда:

player.RemoveAllItems();


player.RemoveAllItems();

и затем выдавать нужные шмотки уже от имени сервера так, как вам надо.

player.GetInventory().CreateInInventory("какая-то футболка"); player.GetInventory().CreateInInventory("какие-то штаны"); player.GetInventory().CreateInInventory("какие-то башмаки");


player.GetInventory().CreateInInventory("какая-то футболка");
player.GetInventory().CreateInInventory("какие-то штаны");
player.GetInventory().CreateInInventory("какие-то башмаки");

2) искать вещи в нужном вам слоте игрока и удалять их, если там она есть, а потом на ее место спавнить нужное вам от имени сервера. 

itemClothing = player.FindAttachmentBySlotName( "Body" ); if(itemClothing) { GetGame().ObjectDelete(itemClothing); player.GetInventory().CreateInInventory("какая-то футболка"); }


itemClothing = player.FindAttachmentBySlotName( "Body" );
if(itemClothing)
{
GetGame().ObjectDelete(itemClothing);
player.GetInventory().CreateInInventory("какая-то футболка");
}

 

А то что выше вам дали - можно либо как образец использовать - там такие же комманды выдачи лута, рандомы под наборы сетов и т.п. Все это подойдет.

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

Ну, вот теперь ясно и понятно. Спасибо!

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
8 часов назад, 222Orbita сказал:

Не, это лут, а мне нужно именно сет одежды. Если добавлять, или изменять в слотах, то он просто добавляет в инвентарь. А мне нужно, чтобы сразу одет был в нужное.

Видел я это на ютубе. Во-первых: это для старой версии (скрипт init не совпадает), а во-вторых: это под конкретного игрока, а мне нужно для вех.

Это отлично работает и на последней версии dayz... Сам щас пользуюсь и не жалуюсь... А пару строк добавить в дэфолт инит миссии, это не проблема...

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


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

Все работает в разных вариантах. Хочешь конретный всем, хочешь рандом, хочешь по steamid. Если вдруг перестало работать - пересоздайте заново CustomSpawnPlayerConfig.txt !!!

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 часа назад, PMoo сказал:

Все работает в разных вариантах. Хочешь конретный всем, хочешь рандом, хочешь по steamid. Если вдруг перестало работать - пересоздайте заново CustomSpawnPlayerConfig.txt !!!

Он его не использует... Говоря что он не работает, хотя это не совсем так...

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
6 часов назад, Melnikov сказал:

Он его не использует... Говоря что он не работает, хотя это не совсем так...

Этот вариант тоже рабочий – проверил, но мне, как оказалось, проще в init.c прописать, просто нужно было чуть-чуть повнимательнее быть. Вот мой рабочий пример:

override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
    {
        EntityAI itemClothing;
        EntityAI itemEnt;
        ItemBase itemBs;
        float rand;

        itemClothing = player.FindAttachmentBySlotName( "Body" );
        if ( itemClothing )
        {
            GetGame().ObjectDelete( itemClothing );
                        
            itemEnt = player.GetInventory().CreateInInventory( "BeanieHat_Black" );
            itemEnt = player.GetInventory().CreateInInventory( "WorkingGloves_Black" );
            itemClothing = player.GetInventory().CreateInInventory( "QuiltedJacket_Black" );
            itemEnt = itemClothing.GetInventory().CreateInInventory( "BandageDressing" );
            if ( Class.CastTo( itemBs, itemEnt ) )
                itemBs.SetQuantity( 4 );

            string chemlightArray[] = { "Chemlight_White", "Chemlight_Yellow", "Chemlight_Green", "Chemlight_Red" };
            int rndIndex = Math.RandomInt( 0, 4 );
            itemEnt = itemClothing.GetInventory().CreateInInventory( chemlightArray[rndIndex] );
            SetRandomHealth( itemEnt );

            rand = Math.RandomFloatInclusive( 0.0, 1.0 );
            if ( rand < 0.35 )
                itemEnt = itemClothing.GetInventory().CreateInInventory( "Apple" );
            else if ( rand > 0.65 )
                itemEnt = itemClothing.GetInventory().CreateInInventory( "Pear" );
            else
                itemEnt = itemClothing.GetInventory().CreateInInventory( "Plum" );
            
            SetRandomHealth( itemClothing );
            SetRandomHealth( itemEnt );
        }
        
        itemClothing = player.FindAttachmentBySlotName( "Legs" );
        if ( itemClothing )
        {    
            GetGame().ObjectDelete( itemClothing );
                        
            itemClothing = player.GetInventory().CreateInInventory( "Jeans_Black" );
            
            SetRandomHealth( itemClothing );
        }
        itemClothing = player.FindAttachmentBySlotName( "Feet" );
        if ( itemClothing )
        {    
            GetGame().ObjectDelete( itemClothing );
                        
            itemEnt = player.GetInventory().CreateInInventory( "HikingBoots_Black" );
            
            SetRandomHealth( itemEnt );
        }
    }

 

Изменено пользователем 123new
вставка кода в спец тег для вставки (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 часов назад, PMoo сказал:

Все работает в разных вариантах. Хочешь конретный всем, хочешь рандом, хочешь по steamid. Если вдруг перестало работать - пересоздайте заново CustomSpawnPlayerConfig.txt !!!

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

1) Герой перестаёт видеть некоторые вещи через Tab;

2) При взаимодействии с трейдером, денежные купюры зачастую просто не ложатся в инвентарь, а падаю под ноги;

3) При взаимодействии с банкоматом, денежные средства, добавленные на счёт, через две минуты просто списываются в неизвестном направлении.

По-этому отказался от такого варианта.

Через простую прописку в init.c всё работает замечательно.

Изменено пользователем 222Orbita
Исправление ошибок (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 часов назад, Melnikov сказал:

Он его не использует... Говоря что он не работает, хотя это не совсем так...

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

Скрипт анализирует наличие конфига в корректной директории и его правильность заполнения. Нет конфига = скрипт отключился. Конфиг с ошибками заполнения (например, нужного тега нет, или больше их, либо лишние символы присутствуют) = скрипт отключился. О всем этом он пишет в script.log насколько это возможно. Скрипт не допускает комментариев и пустых строк. Только прямое заполнение.

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

Скрипт не может зависеть ни коим образом от хостинга и т.п., так как сервер работает одинаковым образом. Тем не менее, у каждого хостинга, особенно в web панелью и ftp доступом, могут быть свои особенности редактирования и размещения файлов, предоставленные вам для доступа и редактирования, и вот это уже влиять может напрямую. Но по этому поводу рекоммендую сначала разобраться в структуре расположения файлов сервера на хостинге, а также перейти от web-панели на FTP доступ, посредством  прямого выкачивания текстовых файлов и непосредственного редактирования на своем компьютере в notepad++. 

2 часа назад, 222Orbita сказал:

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

1) Герой перестаёт видеть некоторые вещи через Tab;

2) При взаимодействии с трейдером, денежные купюры зачастую просто не ложатся в инвентарь, а падаю под ноги;

3) При взаимодействии с банкоматом, денежные средства, добавленные на счёт, через две минуты просто списываются в неизвестном направлении.

По-этому отказался от такого варианта.

Через простую прописку в init.c всё работает замечательно.

скрипт не может вызывать такие баги при всем желании. Это технически не возможно вообще ни коим образом. Ищите проблему в другом моде или чужой работе, предмете с какого-либо другого мода. Говорю вам как человек, знакомый с языком игры на уровне любителя.

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

×
×
  • Создать...

Важная информация

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