Skip to content
op-hui edited this page Sep 4, 2015 · 4 revisions

В evennia можно создавать свои команды. Это довольно просто, следует унаследоваться от класса Command

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

Опишем класс

# -*- coding: utf-8 -*-
# АХТУНГ, если вы в питоне используете русские буквы, как описано ниже, первой строчкой файла должна быть # -*- coding: utf-8 -*-


# Создаем собственный класс CmdFap унаследованный от Command

class CmdTelebon(Command):
        # название команды
        key = "телебонькать"
        # так же команду можно вызывать через alias, алиасом может быть несколько
        aliases = ["телебонить"] 
        locks = "cmd:all()"
        help_category = "General"

        def parse(self):
            "Very trivial parser" 
            self.target = self.args.strip() 

        def func(self):
            caller = self.caller
            # Определяем как была использована команда 
            if not self.target or self.target == "here":
                # использована без аргумента объекта, телебонькам себе!

                # создаем строку, которую увидят все игроки локации
                string = "%s телебонькает." % caller.name
                # отслыаем в локацию оповещение, что ты телебонькаешь
                caller.location.msg_contents(string, exclude=caller)
                caller.msg("Ты телебонькаешь")
            else:
                # Если команда вызвана телебонькать <объекту>
                target = caller.search(self.target)
            
                # Проверяем, если объекта на кого ты телебонькаешь нету - то ничего не делаем
                if not target:  
                    # caller.search handles error messages
                    return
                # Объект есть, создаем сообщение, и отправляем его объекту на кого ты телебонькаешь
                string = "%s телебонькает на тебя!" % caller.name
                target.msg(string)
                # Сообщение тому, кто телебонькает
                string = "Ты телебонькаешь на %s." % target.name
                caller.msg(string)
                # Сообщение в локацию, что бы все увидели кто на кого телебонькает
                string = "%s фапает на %s." % (caller.name, target.name)           
                caller.location.msg_contents(string, exclude=[caller,target])

Добавляем этот класс в файл

mudach/commands/command.py

Далее, открываем файл

mudach/commands/default_cmdsets.py

Ищем класс

PlayerCmdSet

Этот класс отвечает за набор команд, доступный игроку и добавляем нашу кастномную команду телебонить в метод at_cmdset_creation

#импортируем команду из файла commands.py
from commands.command import CmdTelebon

class PlayerCmdSet(default_cmds.PlayerCmdSet):
    """
    This is the cmdset available to the Player at all times. It is
    combined with the `CharacterCmdSet` when the Player puppets a
    Character. It holds game-account-specific commands, channel
    commands, etc.
    """
    key = "DefaultPlayer"

    def at_cmdset_creation(self):
        """
        Populates the cmdset
        """
        super(PlayerCmdSet, self).at_cmdset_creation()
        #
        # Добавляем возможность Игроку пользоваться командой телебонь
        #
        self.add(cmdTelebon())