Python泥杀功能
Python mud kill function
我正在尝试使用 MUD-PI 制作 MUD,但我一直坚持让房间包含怪物并让 kill 命令知道要为哪个怪物计算攻击
这是我的 kill 命令代码
`elif command == "kill":
if players[id]["room"]["enemy"] == 'True':
if players[id]["room"]["monsterName"].hp >= 0:
mud.send_message(id,"You attack %s for %d damage" % (players[id]["room"]["monsterName"], players[id]["ATK"]))
players[id]["room"]["monsterName"].hp -= players[id]["ATK"]
else:
players[id]["room"]["monsterName"].death()
else:
mud.send_message(id,"You dont see a monster")]
和房间代码
#import monsters
from Monsters import *
# structure defining the rooms in the game. Try adding more rooms to the game!
rooms = {
"Tavern": {
"description": "You're in a cozy tavern warmed by an open fire.",
"exits": { "outside": "Outside" },
},
"Outside": {
"description": "You're standing outside a tavern. there is a troll.",
"exits": { "inside": "Tavern" },
"enemy": 'True',
"monsterName": troll,
}
}
最后是怪物代码
#monsters
import sys,random,os,time
#Troll
class Troll():
def __init__(self):
self.name = "Troll"
self.ATK = 2
self.hp = 10
self.max_hp = 10
def death(self):
mud.send_message(id,"you killed the troll")
self.hp = self.max_hp
troll = Troll()
当我尝试当前代码时出现此错误:
if players[id]["room"]["enemy"] == 'True':
TypeError: string indices must be integers, not str
我想知道是什么导致了这个错误,如果可能的话,我怎样才能让它按照我想要的方式工作。
编辑:我让这个工作,但是当我在游戏中使用命令时,结果是这样的(你攻击)造成 3 点伤害
我想说你攻击了房间里的怪物的名字。
这是我编辑的代码
elif command == "kill":
rm = rooms[players[id]["room"]]
if rm["enemy"] == 'yes':
if rm["monsterName"].hp >= 0:
mud.send_message(id,"You attack %s for %d damage" % (rm["monsterName"], players[id]["ATK"]))
rm["monsterName"].hp -= players[id]["ATK"]
else:
rm["monsterName"].death()
else:
mud.send_message(id,"You dont see a monster")
我还想将命令从 kill 更改为 kill [monsterName] 在这种情况下是巨魔,我试过这样做
elif command == "kill":
mn = params.lower()
rm = rooms[players[id]["room"]]
if rm["enemy"] == 'yes':
if mn in rm["monsterName"]:
monster = rm["monsterName"]
if monster.hp >= 0:
mud.send_message(id,"You attack %s for %d damage" % (rm["monsterName"], players[id]["ATK"]))
monster.hp -= players[id]["ATK"]
else:
monster.death()
else:
mud.send_message(id, "you dont see a %s" % mn)
else:
mud.send_message(id, "you dont see an enemy")
但是当我尝试使用它时出现此错误
if mn in rm["monsterName"]:
TypeError: argument of type 'instance' is not iterable
您已将 enemy
键添加到 rooms
数据结构(即字典),但是当您访问 players[id]["room"]["enemy"]
时,您 不是 访问 rooms
数据结构——您正在访问 players
,而在 players
中,room
值是一个字符串——房间的名称。所以你不能要求它的 "enemy" 索引,因为那是没有意义的,这就是错误 string indices must be integers, not str
的来源。
要修复当前设计的代码中的错误,您必须找到玩家所在的房间,然后访问 房间的 "enemy" 值,并且以类似的方式找到 monsterName
的值。
我正在尝试使用 MUD-PI 制作 MUD,但我一直坚持让房间包含怪物并让 kill 命令知道要为哪个怪物计算攻击
这是我的 kill 命令代码
`elif command == "kill":
if players[id]["room"]["enemy"] == 'True':
if players[id]["room"]["monsterName"].hp >= 0:
mud.send_message(id,"You attack %s for %d damage" % (players[id]["room"]["monsterName"], players[id]["ATK"]))
players[id]["room"]["monsterName"].hp -= players[id]["ATK"]
else:
players[id]["room"]["monsterName"].death()
else:
mud.send_message(id,"You dont see a monster")]
和房间代码
#import monsters
from Monsters import *
# structure defining the rooms in the game. Try adding more rooms to the game!
rooms = {
"Tavern": {
"description": "You're in a cozy tavern warmed by an open fire.",
"exits": { "outside": "Outside" },
},
"Outside": {
"description": "You're standing outside a tavern. there is a troll.",
"exits": { "inside": "Tavern" },
"enemy": 'True',
"monsterName": troll,
}
}
最后是怪物代码
#monsters
import sys,random,os,time
#Troll
class Troll():
def __init__(self):
self.name = "Troll"
self.ATK = 2
self.hp = 10
self.max_hp = 10
def death(self):
mud.send_message(id,"you killed the troll")
self.hp = self.max_hp
troll = Troll()
当我尝试当前代码时出现此错误:
if players[id]["room"]["enemy"] == 'True':
TypeError: string indices must be integers, not str
我想知道是什么导致了这个错误,如果可能的话,我怎样才能让它按照我想要的方式工作。
编辑:我让这个工作,但是当我在游戏中使用命令时,结果是这样的(你攻击)造成 3 点伤害 我想说你攻击了房间里的怪物的名字。
这是我编辑的代码
elif command == "kill":
rm = rooms[players[id]["room"]]
if rm["enemy"] == 'yes':
if rm["monsterName"].hp >= 0:
mud.send_message(id,"You attack %s for %d damage" % (rm["monsterName"], players[id]["ATK"]))
rm["monsterName"].hp -= players[id]["ATK"]
else:
rm["monsterName"].death()
else:
mud.send_message(id,"You dont see a monster")
我还想将命令从 kill 更改为 kill [monsterName] 在这种情况下是巨魔,我试过这样做
elif command == "kill":
mn = params.lower()
rm = rooms[players[id]["room"]]
if rm["enemy"] == 'yes':
if mn in rm["monsterName"]:
monster = rm["monsterName"]
if monster.hp >= 0:
mud.send_message(id,"You attack %s for %d damage" % (rm["monsterName"], players[id]["ATK"]))
monster.hp -= players[id]["ATK"]
else:
monster.death()
else:
mud.send_message(id, "you dont see a %s" % mn)
else:
mud.send_message(id, "you dont see an enemy")
但是当我尝试使用它时出现此错误
if mn in rm["monsterName"]:
TypeError: argument of type 'instance' is not iterable
您已将 enemy
键添加到 rooms
数据结构(即字典),但是当您访问 players[id]["room"]["enemy"]
时,您 不是 访问 rooms
数据结构——您正在访问 players
,而在 players
中,room
值是一个字符串——房间的名称。所以你不能要求它的 "enemy" 索引,因为那是没有意义的,这就是错误 string indices must be integers, not str
的来源。
要修复当前设计的代码中的错误,您必须找到玩家所在的房间,然后访问 房间的 "enemy" 值,并且以类似的方式找到 monsterName
的值。