예제 #1
0
    def _on_cmd_kill(self,
                     e: Event,
                     entity: str = '',
                     args: List[str] = []) -> None:
        role = Stats.text('binding', entity)
        room = Stats.text('at_room', role)

        if not args:
            text = f'  你想要殺誰?'
        else:
            target = self._get_target(room, args[0])

            if not target:
                text = f'  這裡沒有這個人。'
            else:
                name = Stats.text('name', target.role)
                text = f'  你大喝一聲:「{name}納命來。」就朝{name}發起攻擊。'

                attacker = Link(entity, role)

                TimedTask.schedule(Attack(attacker, target),
                                   Attack.TICK_NORMAL)

                TimedTask.schedule(Attack(target, attacker),
                                   Attack.TICK_NORMAL)

        Channel.to_role(entity, Message.TEXT, text)
예제 #2
0
파일: cmd_echo.py 프로젝트: ann884511/muke
    def _on_cmd_echo(self,
                     e: Event,
                     entity: str = '',
                     args: List[str] = []) -> None:
        text = f'ECHO 說:{" ".join(args)}'

        Channel.to_role(entity, Message.TEXT, text)
예제 #3
0
    def _on_text(self, e: Event, entity: str, who: str, text: str) -> None:
        words = text.split()

        if len(words):
            Event.trigger(Event(words[0], self, entity=entity, args=words[1:]))
        else:
            text = f'  你要作什麼?'
            Channel.to_role(entity, Message.TEXT, text)
예제 #4
0
    def _on_cmd_comp(
        self, e: Event, entity: str = '', args: List[str] = []
    ) -> None:
        if not args:
            text=f'Comp:?'
        else:    
            text = f'Comp:{" ".join(args)}'

        Channel.to_role(entity, Message.TEXT, text)
예제 #5
0
    def _on_cmd_inventory(
        self, e: Event, entity: str = '', args: List[str] = []
    ) -> None:
        if not Bag.instance(entity):
            text = f'  你身上沒有東西。'
        else:
            text = f'  你身上有:'

#        for text in inventory:
#            Channel.to_role(entity, Message.TEXT, text)
        Channel.to_role(entity, Message.TEXT, text)
예제 #6
0
    def _on_sign_in(
        self, e: Event, entity: str, user_id: str = '', passwd: str = ''
    ) -> None:
        role = Stats.text('entity', user_id)
        Stats.update_text('binding', entity, role)
        room = Stats.text('at_room', role)
        Stats.list_append('guest', room, Link(entity, role))

        text = f'歡迎來到 MUTE: Multi-User Texting Environment'
        Channel.to_role(entity, Message.SYSTEM, text)

        Event.trigger(Event(Event.CMD_LOOK, self._servant, entity=entity))
예제 #7
0
    def _on_cmd_say(self,
                    e: Event,
                    entity: str = '',
                    args: List[str] = []) -> None:
        if not args:
            text = f'你想說什麼?'

            Channel.to_role(entity, Message.TEXT, text)
        else:
            text = f'{Name.instance(entity).text} 說:{" ".join(args)}'

            role = Role.instance(entity)
            Channel.to_room(role.room, Message.TEXT, text)
예제 #8
0
    def _on_cmd_say(
        self, e: Event, entity: str = '', args: Sequence[str] = []
    ) -> None:
        if not args:
            text = f'  你想說什麼?'

            Channel.to_role(entity, Message.TEXT, text)
        else:
            role = Stats.text('binding', entity)
            room = Stats.text('at_room', role)

            text = f'{Stats.text("name", role)} ({Stats.text("tag", role)}) 說:{" ".join(args)}'

            Channel.to_room(room, Message.TEXT, text)
예제 #9
0
파일: sign_in.py 프로젝트: ann884511/muke
    def _on_sign_in(self,
                    e: Event,
                    entity: str,
                    user_id: str = '',
                    passwd: str = '') -> None:
        role = Role.instance(user_id, name=user_id)

        Name.instance(entity, name=role.name)
        Room.instance(role.room).enter(entity)

        text = f'歡迎來到 MUTE: Multi-User Texting Environment'
        Channel.to_role(entity, Message.SYSTEM, text)

        Event.trigger(Event(Event.CMD_LOOK, self._servant, entity=entity))
예제 #10
0
    def _on_cmd_exit(self,
                     e: Event,
                     entity: str = '',
                     args: List[str] = []) -> None:
        luckynumber = random.randint(0, 100)
        if args:
            text = f'請不要輸入參數'

            Channel.to_role(entity, Message.TEXT, text)
        else:
            text = f'{Name.instance(entity).text} 的幸運數字{" ".join(str(luckynumber))}請記住這個號碼'

            role = Role.instance(entity)
            Channel.to_room(role.room, Message.TEXT, text)
예제 #11
0
    def _on_cmd_score(self,
                      e: Event,
                      entity: str = '',
                      args: List[str] = []) -> None:
        score = [
            f'你目前的狀態是:', f'  姓名:{Name.instance(entity).text}',
            f'  等級:{Level.instance(entity).value}',
            f'  攻擊力:{AtkPower.instance(entity).value}',
            f'  防禦力:{DefPower.instance(entity).value}',
            f'  血量:{HitPoint.instance(entity).value}/{HitPoint.instance(entity).max_value}',
            f'  經驗值:{ExpPoint.instance(entity).value}'
        ]

        for text in score:
            Channel.to_role(entity, Message.TEXT, text)
예제 #12
0
파일: cmd_guess.py 프로젝트: ann884511/muke
 def _on_cmd_guess(self,
                   e: Event,
                   entity: str = '',
                   args: List[str] = []) -> None:
     if not args:
         text = f'張三 說:請猜一個數字(1~10)'
         #Channel.to_role(entity, Message.TEXT, text)
     else:
         s = args[0]
         if s != '1':
             text = f'張三 說:猜錯囉,在猜一次'
         else:
             text = f'Echo 說: {"答對了"}'
         role = Role.instance(entity)
     Channel.to_role(entity, Message.TEXT, text)
예제 #13
0
파일: cmd_look.py 프로젝트: ann884511/muke
    def _on_cmd_look(
        self, e: Event, entity: str = '', args: List[str] = []
    ) -> None:
        role = Role.instance(entity)

        if not args:
            text = [
                *self._room_desc(role.room),
                self._room_passer(role.room),
                self._room_exit(role.room)
            ]
        else:
            text = self._look_at(role.room, args[0])

        for line in text:
            Channel.to_role(entity, Message.TEXT, line)
예제 #14
0
    def _on_cmd_score(
        self, e: Event, entity: str = '', args: Sequence[str] = []
    ) -> None:
        role = Stats.text('binding', entity)

        score = [
            f'你目前的狀態是:',
            f'  姓名:{Stats.text("name", role)}',
            f'  等級:{Stats.value("level", role)}',
            f'  攻擊力:{Stats.attack_power(role)}',
            f'  防禦力:{Stats.defence_power(role)}',
            f'  血量:{HitPoint.value(role)}/{HitPoint.max(role)}',
            f'  經驗值:{Stats.value("exp_point", role)}/(...)'
        ]

        for text in score:
            Channel.to_role(entity, Message.TEXT, text)
예제 #15
0
파일: cmd_move.py 프로젝트: ann884511/muke
    def _on_cmd_move(
        self, e: Event, entity: str = '', args: List[str] = []
    ) -> None:
        role = Role.instance(entity)
        exit = Exit.instance(role.room)

        room = exit.to(e.type[0])

        if None != room:
            Room.instance(role.room).leave(entity)
            Room.instance(room).enter(entity)

            role.enter(room)

            Event.trigger(Event(Event.CMD_LOOK, self._servant, entity=entity))
        else:
            Channel.to_role(entity, Message.TEXT, f'  這裡沒有出口')
예제 #16
0
    def _on_cmd_move(
        self, e: Event, entity: str = '', args: Sequence[str] = []
    ) -> None:
        role = Stats.text('binding', entity)
        at = Stats.text('at_room', role)
        exit = Stats.text('exit', at)

        try:
            room = exit[e.type[0]]

            Stats.list_remove('guest', at, Link(entity, role))
            Stats.update_text('at_room', role, room)
            Stats.list_append('guest', room, Link(entity, role))

            Event.trigger(Event(Event.CMD_LOOK, self._servant, entity=entity))
        except KeyError:
            Channel.to_role(entity, Message.TEXT, f'  這裡沒有出口')
예제 #17
0
    def _on_cmd_inventory(self,
                          e: Event,
                          entity: str = '',
                          args: List[str] = []) -> None:
        items = [
            item for bag in Baggage.instance(entity).items
            for item in Baggage.instance(bag).items
        ]

        if not items:
            inventory = [f'  你身上沒有東西。']
        else:
            inventory = [f'你身上帶著有:']

            for item in items:
                inventory.append(f'  {Name.instance(item).text}')

        for text in inventory:
            Channel.to_role(entity, Message.TEXT, text)
예제 #18
0
    def _on_cmd_combat(self,
                       e: Event,
                       entity: str = '',
                       args: List[str] = []) -> None:
        role = Role.instance(entity)

        if not args:
            text = f'  你想要殺誰?'
        else:
            target = Passer.instance(role.room).with_tag(args[0])

            if not target:
                text = f'  這裡沒有這個人。'
            else:
                name = Name.instance(Genus.instance(target)).text
                text = f'  你大喝一聲:「{name}納命來。」就朝{name}發起攻擊。'

                Attack.instance().enlist(entity, target)

        Channel.to_role(entity, Message.TEXT, text)
예제 #19
0
    def update(self) -> bool:
        attacker = self._attacker
        defender = self._defender

        damage = random.randint(1, Stats.attack_power(attacker.role))

        hp = HitPoint.value(defender.role) - damage
        HitPoint.update(defender.role, hp if hp > 0 else 0)

        if not HitPoint.value(defender.role):
            if attacker.entity:
                Channel.to_role(
                    attacker.entity,
                    Message.TEXT,
                    f'  [{Stats.text("name", defender.role)}]被'
                    f'[{Stats.text("name", attacker.role)}] 殺死了。'
                )

            if defender.entity:
                Channel.to_role(
                    defender.entity,
                    Message.TEXT,
                    f'  [{Stats.text("name", defender.role)}]被'
                    f'[{Stats.text("name", attacker.role)}] 殺死了。'
                )

            TimedTask.schedule(
                HealOverTime(attacker.role, HealOverTime.HEAL_DEFAULT),
                HealOverTime.TICK_NORMAL
            )
        else:
            if attacker.entity:
                Channel.to_role(
                    attacker.entity,
                    Message.TEXT,
                    f'  你對[{Stats.text("name", defender.role)}]'
                    f'的普通攻擊造成了 {damage}點傷害。'
                )

            if defender.entity:
                Channel.to_role(
                    defender.entity,
                    Message.TEXT,
                    f'  [{Stats.text("name", attacker.role)}]'
                    f'對你的普通攻擊造成了 {damage}點傷害。'
                )

        return not (
            HitPoint.value(defender.role) and HitPoint.value(attacker.role)
        )
예제 #20
0
파일: attack.py 프로젝트: ann884511/muke
    def _attack(self, attacker: str, defender: str) -> bool:
        damage = random.randint(1, AtkPower.instance(attacker).value)
        HitPoint.instance(defender).lose(damage)

        Channel.to_role(
            attacker,
            Message.TEXT,
            f'  你對[{Name.instance(Genus.instance(defender)).text}]'
            f'的普通攻擊造成了{damage}點傷害。'
        )

        Channel.to_role(
            defender,
            Message.TEXT,
            f'  [{Name.instance(Genus.instance(attacker)).text}]'
            f'對你的普通攻擊造成了{damage}點傷害。'
        )

        if not HitPoint.instance(defender).value:
            Channel.to_role(
                attacker,
                Message.TEXT,
                f'  [{Name.instance(Genus.instance(defender)).text}]被'
                f'[{Name.instance(Genus.instance(attacker)).text}]殺死了。'
            )

            Channel.to_role(
                defender,
                Message.TEXT,
                f'  [{Name.instance(Genus.instance(defender)).text}] 被'
                f'[{Name.instance(Genus.instance(attacker)).text}] 殺死了。'
            )

#            Event.trigger(
#                Event(
#                    Event.DEATH, Servant.instance(),
                    #entity=defender
#                )
#            )

            Regen.instance().enlist(HitPoint.instance(attacker))
예제 #21
0
    def _on_any(self, e: Event, entity: str, **kwargs) -> None:
        text = f'  你要作什麼?'

        Channel.to_role(entity, Message.TEXT, text)
예제 #22
0
파일: sign_in.py 프로젝트: ann884511/muke
    def _on_reception(self, e: Event, entity: str) -> None:
        text = f'歡迎來到 MUTE: Multi-User Texting Environment'
        Channel.to_role(entity, Message.TEXT, text)

        Channel.ask_role(entity, Message.SIGN_IN)