Modding:Команды

From Vintage Story Wiki
This page is a translated version of the page Modding:Commands and the translation is 100% complete.
Other languages:

Эта страница проверялась в последний раз для версии Vintage Story 1.15.

Вы когда-нибудь хотели узнать, как добавить команду в игру? Если да, то это правильное место, чтобы получить ответ.

Подготовка

Идея состоит в том, чтобы добавить команду, которая облегчит вашим товарищам поиск вас. Поэтому мы будем создавать некоторые частицы вместе с игровым звуком, чтобы другие могли видеть и слышать, где вы находитесь в данный момент.

Вы можете скачать необходимые ресурсы здесь. Просто извлеките их в каталог модов, и все готово.

Реализация

Прежде всего, вам нужно добавить еще один мод в свое рабочее пространство. Я буду использовать modid here, поэтому я наберу add here в modtools, чтобы создать новый мод. Кроме того, я создам Command.cs в каталоге src.

Как всегда нам нужно создать класс, расширяющий ModSystem:

public class CommandMod : ModSystem
{

}

Команды обрабатываются сервером, поэтому нашему моду нужно загрузиться только на стороне сервера:

        public override bool ShouldLoad(EnumAppSide side)
        {
            return side == EnumAppSide.Server;
        }

Теперь нам нужно зарегистрировать саму команду:

        public override void StartServerSide(ICoreServerAPI api)
        {
            base.StartServerSide(api);
            api.RegisterCommand("here", "spawns particles around the player", "",
                (IServerPlayer player, int groupId, CmdArgs args) =>
                    {

                    }, Privilege.chat);
        }

Эту команду может использовать любой игрок, которому разрешено отправлять сообщения (по умолчанию все). Когда игрок вводит /here, команда будет выполнена. Теперь нам не хватает только самого кода для создания частиц и воспроизведения звука.

        public override void StartServerSide(ICoreServerAPI api)
        {
            base.StartServerSide(api);
            AssetLocation sound = new AssetLocation("here", "sounds/partyhorn"); // Create sound location
            api.RegisterCommand("here", "spawns particles around the player", "",
                (IServerPlayer player, int groupId, CmdArgs args) =>
                    {
                        EntityPlayer byEntity = player.Entity;
                        byEntity.World.PlaySoundAt(sound, byEntity); // Play sound

                        Vec3d pos = byEntity.Pos.XYZ.Add(0, byEntity.EyeHeight, 0); // Setting up position to spawn particles
                        Random rand = new Random();
                        for (int i = 0; i < 100; i++) // Spawn 100 particles
                        {
                            Vec3d realPos = pos.AddCopy(-0.1 + rand.NextDouble() * 0.2, 0, -0.1 + rand.NextDouble() * 0.2);
                            Vec3f velocity = new Vec3f(-0.2F + (float) rand.NextDouble() * 0.4F, 0.4F + (float) rand.NextDouble() * 2F, -0.2F + (float) rand.NextDouble() * 0.4F);
                            byEntity.World.SpawnParticles(1, ColorUtil.ColorFromRgba(255, rand.Next(0, 255), rand.Next(0, 255), rand.Next(0, 255)),
                                realPos, realPos,
                                velocity, velocity, (float) rand.NextDouble()*1 + 1, 0.01F,
                                1, EnumParticleModel.Cube);
                        }
                    }, Privilege.chat);
        }

Если вы хотите узнать больше о том, как использовать частицы, вы можете ознакомиться с этим учебником.

Тестирование

Наконец, мы готовы запустить наш первый тест:

Скачать

Не стесняйтесь попробовать это самостоятельно:

Here_v1.1.zip

 

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.