# HG changeset patch # User prock@33b003aa-7bff-0310-803a-e67f0ece8222 # Date 1274981488 0 # Node ID 494c60cf61cf18c08e6200598f3e50c901010969 # Parent b6bd314df28aa9efcf12768418d39103126cdd66 Player can now receive a quest, accept it, and complete it. Quests do not have any requirements (i.e. bring me back an item.. etc etc) to be completed at this time. diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/gui/quest.xml --- a/demos/rpg/gui/quest.xml Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/gui/quest.xml Thu May 27 17:31:28 2010 +0000 @@ -2,7 +2,7 @@ - diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/maps/town_objects.xml --- a/demos/rpg/maps/town_objects.xml Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/maps/town_objects.xml Thu May 27 17:31:28 2010 +0000 @@ -4,4 +4,8 @@ Quiller QUESTGIVER ; warrior ; 1.0 ; 1.0 + + 1 + Test quest ; This is the first quest you will get + diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/scripts/actors/baseactor.py --- a/demos/rpg/scripts/actors/baseactor.py Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/scripts/actors/baseactor.py Thu May 27 17:31:28 2010 +0000 @@ -53,7 +53,12 @@ def execute(self): print "talking to: " + self._dest.instance.getId() - self._source.showQuestDialog() + + if self._dest.haveQuest(): + if not self._dest.activequest: + self._dest.offerNextQuest() + else: + self._dest.completeQuest() ActorStates = {'STAND':0, 'WALK':1, @@ -110,12 +115,73 @@ state = property(_getState, _setState) nextaction = property(_getNextAction, _setNextAction) +class Quest(object): + def __init__(self, owner, questname, questtext): + self._owner = owner + self._name = questname + self._text = questtext + + def _getOwner(self): + return self._owner + + def _getName(self): + return self._name + + def _setName(self, questname): + self._name = questname + + def _getText(self): + return self._text + + def _setText(self, questtext): + self._text = questtext + + owner = property(_getOwner) + name = property(_getName, _setName) + text = property(_getText, _setText) + class QuestGiver(Actor): def __init__(self, gamecontroller, instancename, instanceid=None, createInstance=False): super(QuestGiver, self).__init__(gamecontroller, instancename, instanceid, createInstance) self._type = GameObjectTypes["QUESTGIVER"] self._quests = [] + + self._activequest = None def addQuest(self, quest): - self._quests.append(quest) + self._quests.append(quest) + + def offerNextQuest(self): + if self._activequest: + return + + if len(self._quests) > 0: + self._gamecontroller.guicontroller.showQuestDialog(self) + + def getNextQuest(self): + if len(self._quests) > 0: + return self._quests[0] + + return None + + def activateQuest(self, quest): + self._activequest = quest + + def completeQuest(self): + #@todo check to see if requirements are met + if self._activequest in self._quests: + print "quest completed" + self._quests.remove(self._activequest) + self._activequest = None + else: + #something went wrong + self._activequest = None + + def haveQuest(self): + return len(self._quests) > 0 + + def _getActiveQuest(self): + return self._activequest + + activequest = property(_getActiveQuest) diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/scripts/actors/player.py --- a/demos/rpg/scripts/actors/player.py Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/scripts/actors/player.py Thu May 27 17:31:28 2010 +0000 @@ -37,7 +37,7 @@ def onInstanceActionFinished(self, instance, action): super(PlayerActionListener, self).onInstanceActionFinished(instance, action) if action.getId() == 'walk': - print "player done walking" + pass #self._object.completeAction() class Player(Actor): @@ -48,6 +48,3 @@ self._playeractionlistener = PlayerActionListener(self._gamecontroller, self) self._type = GameObjectTypes["PLAYER"] - - def showQuestDialog(self): - self._gamecontroller.guicontroller.showQuestDialog() diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/scripts/gamecontroller.py --- a/demos/rpg/scripts/gamecontroller.py Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/scripts/gamecontroller.py Thu May 27 17:31:28 2010 +0000 @@ -90,7 +90,6 @@ instances = self._gamecontroller.scene.getInstancesAt(clickpoint) if instances: obj = self._gamecontroller.scene.objectlist[instances[0].getId()] - print obj.type if obj.type == GameObjectTypes["QUESTGIVER"]: action = TalkAction(self._gamecontroller.scene.player, obj) self._gamecontroller.scene.player.nextaction = action diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/scripts/guicontroller.py --- a/demos/rpg/scripts/guicontroller.py Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/scripts/guicontroller.py Thu May 27 17:31:28 2010 +0000 @@ -75,11 +75,17 @@ self._widget.mapEvents(eventMap) class QuestDialog(Window): - def __init__(self, guicontroller): + def __init__(self, guicontroller, questgiver): super(QuestDialog, self).__init__(guicontroller) self._widget = pychan.loadXML('gui/quest.xml') + self._questgiver = questgiver + self._quest = questgiver.getNextQuest() + + self._questname = self._widget.findChild(name="questname") + self._questname.text = unicode(self._quest.name) self._questtext = self._widget.findChild(name="questtext") + self._questtext.text = unicode(self._quest.text) eventMap = { 'accept': self.questAccepted, @@ -90,6 +96,7 @@ def questAccepted(self): print "quest has been accepted" + self._questgiver.activateQuest(self._quest) self._widget.hide() class GUIController(object): @@ -126,6 +133,6 @@ self._credits.widget.hide() self._credits = None - def showQuestDialog(self): - questdlg = QuestDialog(self._gamecontroller) + def showQuestDialog(self, questgiver): + questdlg = QuestDialog(self._gamecontroller, questgiver) questdlg.widget.show() diff -r b6bd314df28a -r 494c60cf61cf demos/rpg/scripts/scene.py --- a/demos/rpg/scripts/scene.py Thu May 27 16:29:07 2010 +0000 +++ b/demos/rpg/scripts/scene.py Thu May 27 17:31:28 2010 +0000 @@ -31,7 +31,7 @@ from fife.extensions.fife_settings import Setting from scripts.actors.baseactor import Actor -from scripts.actors.baseactor import QuestGiver +from scripts.actors.baseactor import QuestGiver, Quest from scripts.actors.player import Player from scripts.objects.baseobject import GameObjectTypes @@ -71,6 +71,12 @@ (objtype, modelname, posx, posy) = objectsettings.get(mapname[0], npc, ["NPC", "warrior", "0", "0"]) if objtype == "QUESTGIVER": actor = QuestGiver(self._gamecontroller, modelname, npc, True) + questcount = objectsettings.get(npc, "questcount", 0) + for x in range(1,questcount+1): + quest = "quest" + str(x) + (qname, qtext) = objectsettings.get(npc, quest, []) + actor.addQuest(Quest(actor, qname, qtext)) + elif objtype == "NPC": actor = Actor(self._gamecontroller, modelname, npc, True)