def ataque(self,dados): defesa = 0 dano = 0 npc = False try: usuario = dados[0] atacado = dados[1] except: return "Erro tente: /ataque Inimigo" try: self.atacante = Personagem.get(Personagem.usuario == usuario) except IntegrityError: return "ERRO, "+usuario+" não possui personagem" try: self.atacado = Npc.get(Npc.nome == atacado) defesa = self.atacado.resiliencia npc = True except : try: self.atacado = Personagem.get(Personagem.nome == atacado) try: defesa = self.defesa() except IntegrityError: pass except: return "Erro: "+atacado+" inexistente" dex = self.atacante.destreza + randint(1,20) agi = self.atacado.agilidade + randint(1,20) if (agi > dex): return "%s Esquivou de %s\n[AGI: %d, DEX: %d]" %(self.atacado.nome,self.atacante.nome,agi,dex) try: dano = self.dano() except IntegrityError: pass dmg =(dano - defesa) if dmg > 0: self.atacado.vida = self.atacado.vida - dmg if self.atacado.save() : resultado = "%s recebeu :collision: %d, ficando com %d/%d de vida" %(self.atacado.nome, dmg,self.atacado.vida, self.atacado.vidamax ) if self.atacado.vida <= 0: resultado += "\n %s morreu. :skull:" % self.atacado.nome if npc: self.atacado.delete_instance() return resultado else: return "%s deu %d de dano, %s que defendeu :beginner: com %d"%(self.atacante.nome,dano,self.atacado.nome, defesa)
def deletarPersonagem(self, dados): if not MestreControle.mestre(dados[0]): return "Você não é mestre :kissing_heart:" try: personagem = Personagem.get( Personagem.nome == dados[1]) # type: Personagem except: return "Personagem não encontrado" personagem.delete_instance() return "%s Desapareceu do mapa " % (personagem.nome)
def dormir(self, dados): try: personagem = Personagem.get( Personagem.usuario == dados[0]) # type: Personagem except: return "Personagem não encontrado" personagem.vida = personagem.vidamax personagem.save() return "%s Vida: [%d / %d ] :heart:" % ( personagem.nome, personagem.vida, personagem.vidamax)
def levelup(self, dados): if not MestreControle.mestre(dados[0]): return "Você não é mestre :kissing_heart:" try: personagem = Personagem.get( Personagem.nome == dados[1]) # type: Personagem except: return "Personagem não encontrado" personagem.pontos += 5 personagem.vida = personagem.vidamax personagem.nivel += 1 personagem.save() return "%s nivel: %d possui: %d pontos não distibuidos" % ( personagem.nome, personagem.nivel, personagem.pontos)
def cria(dados): """ :type dados: list """ try: pe = Personagem.get(Personagem.usuario == dados[0]) except: try: nome = dados[1] usuario = dados[0] classe = dados[2] except: return "Erro, tente : /criapersonagem Nome Classe" forca = randint(5, 20) inteligencia = randint(5, 20) resiliencia = randint(10, 20) destreza = randint(5, 20) agilidade = randint(5, 20) vida = resiliencia * 10 mao1 = Item.create(nome="graveto", ataque=5, defesa=0) mao2 = Item.create(nome="tabua", ataque=0, defesa=5) peito = Item.create(nome="Camisa_rasgada", ataque=0, defesa=2) perna = Item.create(nome="tanga", ataque=0, defesa=2) cabeca = Item.create(nome="cabeça", ataque=0, defesa=0) sapato = Item.create(nome="sapato", ataque=0, defesa=1) try: personagem = Personagem.create(vida=vida, vidamax=vida, usuario=usuario, nome=nome, classe=classe, cabeca=cabeca, bra_dir=mao1, bra_esq=mao2, peito=peito, perna=perna, sapato=sapato, forca=forca, inteligencia=inteligencia, resiliencia=resiliencia, destreza=destreza, agilidade=agilidade) except: return "Erro ao criar personagem" return "criado: %s classe: %s " % (personagem.nome, personagem.classe) return "Você possui já um personagem: %s " % pe.nome
def ataquenpc(self, dados): if not MestreControle.mestre(dados[0]): return "Você não é mestre" defesa = 0 dano = 0 npc = False try: npc = dados[1] atacado = dados[2] except: return "Erro tente: /npcataque npc personagem" try: self.atacante = Npc.get(Npc.nome == npc) except : return "ERRO, " + npc + " não é um npc" try: self.atacado = Npc.get(Npc.nome == atacado) defesa = self.atacado.resiliencia npc = True except: try: self.atacado = Personagem.get(Personagem.nome == atacado) try: defesa = self.defesa() except : return "Erro na defesa" except : return "Erro: " + atacado + " inexistente" dex = self.atacante.destreza + randint(1, 20) agi = self.atacado.agilidade + randint(1, 20) if (agi > dex): return "%s Esquivou de %s\n[AGI: %d, DEX: %d]" %(self.atacado.nome,self.atacante.nome,agi,dex) dano = (self.atacante.forca + randint(1, self.atacante.nivel)) dmg = (dano - defesa) if dmg > 0: self.atacado.vida = self.atacado.vida - dmg if self.atacado.save(): resultado = str(self.atacado.nome) + " recebeu " + str(dmg) + " e ficou com: " + str( self.atacado.vida) + " de vida" if self.atacado.vida <= 0: resultado += "\n %s morreu." % self.atacado.nome if npc: self.atacado.delete_instance() return resultado else: return "%s não teve dano suficiente para atingir %s [atk/def](%d/%d)" % ( self.atacante.nome, self.atacado.nome, dano, defesa)
def ficha(self, dados): try: personagem = Personagem.get(Personagem.usuario == dados[0]) except: return "Você não possui personagem" return "Ficha: " + personagem.nome + " Vida : " + str( personagem.vida ) + "\n Classe: " + personagem.classe + " Nivel: " + str( personagem.nivel) + "\n for: " + str( personagem.forca) + "\n agi: " + str( personagem.agilidade) + "\n des: " + str( personagem.destreza) + "\n int: " + str( personagem.inteligencia) + "\n res: " + str( personagem.resiliencia ) + "\n Pontos não distribuidos: " + str( personagem.pontos)
def darPontos(self, dados): # /doar personagem quantidade if not MestreControle.mestre(dados[0]): return "Você não é mestre :kissing_heart:" try: quantidade = int(dados[2]) except: return "Errp, tente: /doar personagem quantidade" try: personagem = Personagem.get( Personagem.nome == dados[1]) # type: Personagem except: return "Personagem não encontrado" personagem.pontos += quantidade personagem.save() return "%s, %d possui: %d pontos não distibuidos" % (personagem.nome, personagem.pontos)
def inventario(self, dado): # /saco saco = [] try: pe = Personagem.get(Personagem.usuario == dado[0]) except: return "%s não possui personagem cadastrado" % (dado[0]) try: query = (Item.select().join(Inventario).join(Personagem).where( Personagem.nome == pe.nome)) for item in query: saco.append(item) except: return "Erro ao listar itens" frase = " Itens de %s:\n" % (pe.nome) for i in saco: frase += " - %s [ATK: %d / DEF: %d ]\n" % (i.nome, i.ataque, i.defesa) return frase
def addatributo(self, dados): # /add atributo quantidade try: usuario = dados[0] atributo = dados[1] quantidade = int(dados[2]) except: return "Erro faltando dados: /add atributo quantidade" try: personagem = Personagem.get(Personagem.usuario == usuario) except: return "Personagem não encontrado" emoji = "" if personagem.pontos < quantidade: return "Você possui %d pontos" % personagem.pontos x = atributo[0].lower() if x == "a": emoji = " :running:" personagem.agilidade += quantidade elif x == "d": emoji = " :dart:" personagem.destreza += quantidade elif x == "f": emoji = " :muscle:" personagem.forca += quantidade elif x == "i": emoji = " :mortar_board:" personagem.inteligencia += quantidade elif x == "r": emoji = " :beginner: :heart:" personagem.resiliencia += quantidade personagem.vidamax = personagem.resiliencia * 10 personagem.vida = personagem.vidamax else: return "Não existe atributo: %s ,tente: (agi,des,for,int,res)" % atributo personagem.pontos -= quantidade personagem.save() return "%s adicionou %d em %s %s.\n restam %d pontos" % ( personagem.nome, quantidade, atributo, emoji, personagem.pontos)
def pegaDrop(self,dado): #/pega Item pego = None drops = [] drop = any try: item = dado[1] except : return "Esqueceu o item a ser pego" try: drops = Drop.select(Drop, Item).join(Item) except: return "erro ao listar Drops" if len(drops)>0: for i in drops: if i.item.nome == item: pego = i.item drop = i if pego is None: return "%s não está no drop." %(item) else: return "não tem drop" try: per = Personagem.get(Personagem.usuario == dado[0]) except: return "%s não possui um personagem"%(dado[0]) try: inv = Inventario() inv.create( item = pego, personagem = per ) except: return "Erro ao pegar item :(" drop.delete_instance() return "%s pegou %s [ATK: %d / DEF: %d ] do drop" %(per.nome,pego.nome,pego.ataque, pego.defesa )
def equipamentos(dados): usuario = dados[0] try: person = Personagem.get(Personagem.usuario == usuario) except: return "Você não possui personagem cadastrado :disappointed:" try: lista = [ Item.get_by_id(person.cabeca), Item.get_by_id(person.bra_dir), Item.get_by_id(person.bra_esq), Item.get_by_id(person.peito), Item.get_by_id(person.perna), Item.get_by_id(person.sapato) ] except: return "Erro ao listar seus itens :disappointed:" frase = "Equipamentos: \n" nomes = ["cabeça", "direita", "esquerda", "peito", "calça", "sapato"] for i in range(len(lista)): frase += " - %s => %s [ATK: %d , DEF: %d]\n" % ( nomes[i], lista[i].nome, lista[i].ataque, lista[i].defesa) return frase
def interage(self, dados): # 0 1 1:len(dados-2) :len(dados-1) #/interagir ação objeto erro = " não existe, tente: /ação jogar pedra" try: objeto = Objetos.get(Objetos.nome == dados[-1]) except: return "Objeto " + erro try: personagem = Personagem.get(Personagem.usuario == dados[0]) except: return "Personagem? " + erro d20 = random.randint(1, 20) frase = "" if d20 > objeto.dificuldade: frase += "%s %s %s :+1:\n Tirou %d de %d" % ( personagem.nome, " ".join( dados[1:-1]), objeto.nome, d20, objeto.dificuldade) else: frase += "%s não %s %s :-1:\n Tirou %d de %d" % ( personagem.nome, " ".join( dados[1:-1]), objeto.nome, d20, objeto.dificuldade) objeto.delete_instance() return frase
def getPersonagem(self, nome): try: return Personagem.get(Personagem.usuario == nome) except : return None
def equipar(self, dado): # /equipar item local saco = [] inventario = Inventario try: equipamento = dado[1] posicao = dado[2] usuario = dado[0] except: return "Erro, tente:\n /equipar item posição: \n :skull: cabeça \n :jeans: perna\n :mans_shoe: pé\n :shirt: peito\n :point_right: direita \n :point_left: esquerda" try: pe = Personagem.get(Personagem.usuario == usuario) except: return "%s não possui personagem cadastrado :kissing_heart:" % usuario try: '''pe.inventario = (Item .select() .join(Inventario) .join(Personagem) .where(Personagem.nome == pe.nome))''' pe.inventario = (Inventario.select( Inventario, Personagem, Item).join(Personagem).switch(Inventario).join(Item)) except: return "Erro ao listar itens" for i in pe.inventario: if equipamento == i.item.nome: segura = Item mod = "" if posicao in [ "cabeça", "cabeca", "top", "capacete", "elmo", "1" ]: segura = pe.cabeca mod = "cabeca" pe.cabeca = i.item elif posicao in ["calça", "perna", "calca", "5"]: segura = pe.perna mod = "perna" pe.perna = i.item elif posicao in ["peito", "armadura", "4"]: segura = pe.peito mod = "peito" pe.peito = i.item elif posicao in ["pe", "sapato", "foot", "pé", "6"]: segura = pe.sapato mod = "sapato" pe.sapato = i.item elif posicao in [ "direito", "direita", "mão_direita", "mao_direita", "braço_direito", "2" ]: segura = pe.bra_dir mod = "bra_dir" pe.bra_dir = i.item elif posicao in [ "esquerda", "esquerdo", "mao_esquerda", "braço_esquerdo", "mão_esquerda", "3" ]: segura = pe.bra_esq mod = "bra_esq" pe.bra_esq = i.item else: return "Escolha uma posição para colocar %s: \n :skull: cabeça \n :jeans: perna\n :mans_shoe: pé\n :shirt: peito\n :point_right: direita \n :point_left: esquerda" % ( dado[1]) try: i.item = segura i.save() except IntegrityError: return "Erro ao trocar itens :mask:" try: pe.save() except IntegrityError: return "Erro ao equipar itens :mask:" return "Equipado! :ok_hand:" return "Você não possui %s em seu inventario" % dado[1]