Всем привет! У меня возник вопрос по классам в ренпае, основную суть проблемы я написал в комментариях, надеюсь я правильно смог изложить суть проблемы. ##################################################################################################################
## define events = EventHandler() ## Инициализация до метки старта
##
## $ events.create_event('introduction', dict(cond1 = False), 10) ## создание события
##
## $ events.activate_event('introduction', 'cond1') ## Устанавливает True
##
## $ events.deactivate_event('introduction', 'cond1') ## Устанавливает False
##
## $ events.set_event('introduction', 'cond1', (day)) ## Активирует, устанавливает, и прыгает если все True
##
## $ events.block_event('introduction') ## Блокирует событие от дальнейшего выполнения
##
## $ events.raise_events() ## Выводит в журнал информацию о событиях
##
## $ events.raise_event('introduction') ## Выводит информацию о заданном событии
##
##################################################################################################################
##
## Прыжок осуществляется мгновенно, без проверки переменной (day)
## скорей всего я ошибся в какой либо из функций, но сам понять не могу
## т.к. RenPy отличается синтаксисом от Python и функции пишутся по разному
##
## $ events.create_event('introduction', dict(cond1 = False), 10) == из этого события следует, что оно должно
## произойти по истечению десяти дней и переместить игрока к метке introduction.
##
## $ events.set_event('introduction', 'cond1', (day)) == это событие должно запустить предыдущее, но этого не
## происходит, а просто совершается прыжок, без учета значения переменой (day)
##
## Надеюсь я смог понятно изложить проблему...
##
##################################################################################################################
init -10 python:
Error = Exception ## Вызов журнала трассировки для просмотра информации о событии
# Инициализация системы событий
class Event(object):
def __init__(self, name, conditions, day, label = None): ### day - сам добавил
self.name = name
self.conditions = conditions
self.day = day ### Добавил по правилам, но почему-то не работает
self.blocked = False
if label == None:
self.label = name
else:
self.label = label
# Инициализация событий
class EventHandler(object):
global day ### Думал поможет для вызова переменной из скрипта, но нет
def __init__(self):
self.events = dict()
# Создает событие
def create_event(self, name, conditions, day, label = None): ### day - сам добавил
if name in self.events.keys():
return
self.events['%s'%name] = Event(name, conditions, day, label)
# Устанавливает события True, а так же проверяет события
# и повторяет попытку перехода к метке, если все условия True.
def set_event(self, name, condition, day): ### day - сам добавил
if name not in self.events.keys():
raise Error, "Событие %s не существует!"%name
if condition not in self.events[name].conditions.keys():
raise Error, "Условие %s для события %s не существует!"%(condition, name)
if self.events[name].blocked == True:
return
self.events[name].conditions[condition] = True
# Если все условия установлены как True, то совершить прыжок.
if all(v == True for v in self.events[name].conditions.itervalues()):
if renpy.has_label(self.events[name].label):
if (day) == day: ### Вот и проблема, неправильное чтение из скрипта(???но почему???)
renpy.jump(self.events[name].label)
else:
raise Error, "Метка %s не существует! "%self.events[name].label
# Устанавливает значение true, без использования прыжка.
def activate_event(self, name, condition, day):
if name not in self.events.keys():
raise Error, "Событие %s не существует!"%name
if condition not in self.events[name].conditions.keys():
raise Error, "Условие %s для события %s не существует!"%(condition, name)
self.events[name].conditions[condition] = True
# Устанавливает значение False для данного события.
def deactivate_event(self, name, condition, day):
if name not in self.events.keys():
raise Error, "Событие %s не существует!"%name
if condition not in self.events[name].conditions.keys():
raise Error, "Условие %s для события %s не существует!"%(condition, name)
self.events[name].conditions[condition] = False
# Блокирует событие, применяется вместо удаления
# (событие никогда не будет делать прыжок).
def block_event(self, name):
if name not in self.events.keys():
raise Error, "Событие %s не существует!"%name
self.events[name].blocked = True