diff --git a/src/client/ui/templates/talk/talk.js b/src/client/ui/templates/talk/talk.js index 596c9994..21e606ee 100644 --- a/src/client/ui/templates/talk/talk.js +++ b/src/client/ui/templates/talk/talk.js @@ -18,6 +18,11 @@ define([ postRender: function() { this.onEvent('onGetTalk', this.onGetTalk.bind(this)); + this.onEvent('onRezone', this.onRezone.bind(this)); + }, + + onRezone: function() { + this.hide(); }, onGetTalk: function(dialogue) { diff --git a/src/server/components/dialogue.js b/src/server/components/dialogue.js index 403760eb..991e3a94 100644 --- a/src/server/components/dialogue.js +++ b/src/server/components/dialogue.js @@ -95,8 +95,18 @@ define([ if (stateConfig.cpn) { var cpn = sourceObj[stateConfig.cpn]; - cpn[stateConfig.method].apply(cpn, stateConfig.args); - return; + var newArgs = extend(true, [], stateConfig.args); + newArgs.push(this.obj); + var result = cpn[stateConfig.method].apply(cpn, newArgs); + + if (stateConfig.goto) { + if (result) + return this.getState(sourceObj, stateConfig.goto.success); + else + return this.getState(sourceObj, stateConfig.goto.failure); + } + else + return null; } var result = { @@ -158,6 +168,26 @@ define([ return { type: 'dialogue' }; + }, + + //These don't belong here, but I can't figure out where to put them right now + //They are actions that can be performed while chatting with someone + teleport: function(msg) { + this.obj.syncer.set(true, 'dialogue', 'state', null); + + var portal = extend(true, {}, require('./components/portal'), msg); + portal.collisionEnter(this.obj); + }, + + getItem: function(msg, source) { + var inventory = this.obj.inventory; + var exists = inventory.items.find(i => (i.name == msg.item.name)); + if (!exists) { + inventory.getItem(msg.item); + return true; + } + else + return false; } }; }); \ No newline at end of file