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)
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)
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)
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)
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)
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))
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)
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)
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))
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)
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)
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)
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)
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)
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' 這裡沒有出口')
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' 這裡沒有出口')
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)
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)
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) )
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))
def _on_any(self, e: Event, entity: str, **kwargs) -> None: text = f' 你要作什麼?' Channel.to_role(entity, Message.TEXT, text)
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)