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

Icon Sign.png

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.

Modding
Modding Introduction Getting Started Пакет тем
Content Modding Content Mods Developing a Content Mod Basic Tutorials Intermediate Tutorials Advanced Tutorials Content Mod Concepts
Code Modding Code Mods Setting up your Development Environment
Property Overview ItemEntityEntity BehaviorsBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity BehaviorsCollectible BehaviorsWorld properties
Workflows & Infrastructure Modding Efficiency TipsMod-engine compatibilityMod ExtensibilityVS Engine
Additional Resources Community Resources Modding API Updates Programming Languages List of server commandsList of client commandsClient startup parametersServer startup parameters
Example ModsAPI DocsGitHub Repository