Моддинг:Команды

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

This page was last verified for Vintage Story version 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


Modding
Green Items require C# coding
Basics

Getting Started | Mod Types | Simple Examples | Theme Pack

Asset System | Textures | Items | Recipes | Blocks | Entities | Model Creator | Animation Basics | VTML & Icons | Mod Packaging & Release | Modinfo | Debugging

Advanced

JSON Patching | Advanced JSON Items | The Remapper | Server-Client Considerations | Compatibility with other mods

Setting Up Your Development Environment (General - Windows - Linux)

Advanced Blocks | Advanced Items | Item-Block Interactions | Block Behavior | Block Entities | Particle Effects | World Access | Inventory Handling | Chat Commands | GUIs | Server-Client Networking | Monkey patching (Harmony)

Data Management

Savegame Data Storage | ModConfig File | Chunk Data Storage | Tree Attribute

Worldgen

WorldGen Concepts | Terrain | Ores | Trees | WorldGen API

Rendering

Shaders and Renderers

Property Overview

Item | Entity | Block | Block Behaviors | Block Classes | Block Entities | Block Entity Behaviors

Workflows & Infrastructure

Modding Efficiency Tips | Mod-engine compatibility | Mod Extensibility | Load Order

Additional Resources

List of server commands | List of client commands | Client startup parameters | Creative Starter Guide | ServerBlockTicking | Bot System | WorldEdit | Cinematic Camera

Example Mods | API Docs | GitHub Repository