class TulingWXBot(WXBot): pattern_join=re.compile(r"^(join) ([a-zA-Z]{1,4})( [1-6])?$") pattern_atk=re.compile(r"^(a) ([a-zA-Z]{1,4})$") pattern_skl=re.compile(r"^(k)( [a-zA-Z]{1,4})?$") pattern_mov=re.compile(r"^([udlr])([0-9]+)$") def __init__(self): WXBot.__init__(self) self.m=Map() self.group_id='' self.robot_switch = True def get_id(self,pname): pid_ghost='' pid_real='' if not(pname in self.m.names): return None if self.m.names[pname]==[]: return None for player_id in self.m.names[pname]: player=self.m.players[player_id] if player.character==0: pid_ghost=player_id else: pid_real=player_id if pid_ghost!='': return pid_ghost else: return pid_real def handle_msg_all(self, msg): if msg['msg_type_id'] == 1 and msg['content']['type'] == 0: if re.search(r"restart",msg['content']['data'])!=None: self.m=Map() self.robot_switch=True self.send_msg_by_uid(u"游戏重新启动!",self.group_id) if not self.robot_switch: # and msg['msg_type_id'] != 1 return if msg['msg_type_id'] == 3 and msg['content']['type'] == 0: # group text message if 'detail' in msg['content']: src_id=msg['content']['user']['id'] self.group_id=msg['user']['id'] if msg['content']['type'] == 0: # text message mm=msg['content']['desc'] result_join=re.match(self.pattern_join,mm) if result_join!=None: src_name=result_join.group(2) if src_id in self.m.players: self.send_msg_by_uid("@"+src_name+'\n'+"已经加入!",self.group_id) else: if src_name in self.m.names: self.send_msg_by_uid("@"+src_name+'\n'+"名字已存在!",self.group_id) return p = Player(src_id,src_name) self.m.addplayer(p) self.send_msg_by_uid("@"+src_name+'\n'+"加入成功!",self.group_id) #else: #self.send_msg_by_uid("sorry,错误的名字格式不利于游戏平衡\n正确格式:1至4个英文字母",self.group_id) elif msg['msg_type_id'] == 4 and msg['content']['type'] == 0: src_id=msg['user']['id'] mm=msg['content']['data'] result_atk=re.match(self.pattern_atk,mm) result_skl=re.match(self.pattern_skl,mm) result_mov=re.match(self.pattern_mov,mm) if mm == 's': if src_id in self.m.players: self.send_msg_by_uid(self.m.getplayerinfo(src_id), src_id) elif result_mov!=None: if src_id in self.m.players: self.send_msg_by_uid(self.m.moveplayer(src_id,mm), src_id) elif result_atk!=None: pid=self.get_id(result_atk.group(2)) if pid==None or src_id==pid: self.send_msg_by_uid("无效攻击!",src_id) return msga=self.m.attackplayer(src_id,pid) self.send_msg_by_uid(msga[0],src_id) self.send_msg_by_uid(msga[1],pid) self.send_msg_by_uid(msga[2],self.group_id) elif result_skl!=None: pid=self.get_id(result_skl.group(2)) if pid!=None: pid=pid[1:] if src_id in self.m.players==False: return msgk=self.m.castskill(src_id,pid) self.send_msg_by_uid(msgk[0],src_id) if msgk[1]!=(): for victim in msgk[1][1]: self.send_msg_by_uid(msgk[1][0],victim) self.send_msg_by_uid(msgk[2],self.group_id) if self.m.event_death!=[]: for event in self.m.event_death: if event[0].character!=0: self.send_msg_by_uid(u"竞争就是这么残酷,杀手永远无情,唯有活到最后,才是真的王者!\n\n"+event[0].name+u'被'+event[1].name+event[2],self.group_id) self.send_msg_by_uid(u"很遗憾!你出局了!凶手:"+event[1].name,event[0].id) self.m.event_death=[] if len(self.m.players)<=1: for winner in self.m.players.values(): self.send_msg_by_uid(u"Winner Winner, Chicken Dinner!\n恭喜"+winner.name+u'!'+'\n\n等待造物主xzq授权重新开始游戏...',self.group_id) self.robot_switch = False