У меня есть класс для системы диалога следующим образом
class DIALOGUE(object):
def __init__(self, place, who, sTime, eTime, isActive, mood, menuText, func, repeatable, num):
self.place = place
self.who = who
self.sTime = sTime
self.eTime = eTime
self.isActive = isActive
self.mood = mood
self.menuText = menuText
self.func = func
self.repeatable = repeatable
self.num = num
@property
def ACheck(self):
global Date
if self.sTime == "none":
return True
else:
tHour,tMin = self.sTime.split(":")
if tHour >= Date.Hour and tMin <= Date.Minute:
tHour,tMin = self.eTime.split(":")
if tHour < Date.Hour and tMin < Date.Minute:
return True
return False
@property
def BCheck(self):
global Act
if self.who == Act:
return True
else:
return False
@property
def CCheck(self):
global Location
if self.place == Location:
return True
if self.place == "none":
return True
return False
@property
def DCheck(self):
if self.repeatable:
return True
else:
if self.num > 0:
return False
else:
return True
@property
def CanChat(self):
if self.isActive and self.ACheck and self.BCheck and self.CCheck and self.DCheck:
return True
else:
return False
def SetActive(self):
self.isActive = True
def Do(self):
self.num += 1
renpy.call(self.func)
Большая часть этого должна быть понятна, но я разбираю файл XML в список Экземпляров этого класса.
Пользователю предоставляется список доступных диалогов, в зависимости от того, в каком они месте, в какое время суток и какого NPC они выбрали. Если диалог не повторяется Метод DCheck проверяет, был ли диалог завершен раньше, т. Е. Если диалог не повторяется и self.num > 0
метод вернет False
По сути, он проходит по всем диалогам и выполняет i.CanChat
, и если это значение возвращает True, диалог добавляется в меню
У меня проблема в том, что методы Check не возвращают правильное значение. В частности, DCheck постоянно возвращает True независимо от того, является ли диалог повторяемым или нет, и игнорирует значение self.num
Класс создается в блоке init python:
, а затем файл xml анализируется в отдельном блоке python, который вызывается из начальной метки
Возможно, это что-то действительно простое, но я не могу понять это.
Список экземпляров анализируется следующим образом
Dialogues = []
for j in Dialo:
JPlace = j.find('Place').text
JWho = j.find('Who').text
JsTime = j.find('Start').text
JeTime = j.find('End').text
JMood = int(j.find('Mood').text)
JText = j.find('Text').text
JFunc = j.find('Func').text
JRep = j.find('Rep').text
if JRep == "True":
Jrep = True
else:
Jrep = False
Dialogues.append(DIALOGUE(JPlace, JWho, JsTime, JeTime, False, JMood, JText, JFunc, JRep, 0))
Метод создания меню следующий:
def TalkCheck():
talks = []
talks.append(("Nevermind.", "none"))
for i, q in enumerate(Dialogues):
if q.CanChat:
talks.append((q.menuText,i))
renpy.say(None, "", interact=False)
talkchoice = renpy.display_menu(talks)
if talkchoice <> "none":
talkchoice = int(talkchoice)
Dialogues[talkchoice].Do()