From 4521f3af1b06314fd9dfaeb225745118c333ee9d Mon Sep 17 00:00:00 2001 From: Big Bad Waffle Date: Thu, 2 Mar 2017 22:02:54 +0200 Subject: [PATCH] first version of spawnMob phase --- .../config/eventPhases/phaseLocateMob.js | 17 ++++++ .../config/eventPhases/phaseSpawnMob.js | 46 +++++++++++++++ .../config/eventPhases/phaseTemplate.js | 17 ++++++ src/server/config/maps/tutorial/events.js | 2 + src/server/events/events.js | 59 +++++++++++++++++-- src/server/world/mobBuilder.js | 18 +++--- 6 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 src/server/config/eventPhases/phaseLocateMob.js create mode 100644 src/server/config/eventPhases/phaseSpawnMob.js create mode 100644 src/server/config/eventPhases/phaseTemplate.js diff --git a/src/server/config/eventPhases/phaseLocateMob.js b/src/server/config/eventPhases/phaseLocateMob.js new file mode 100644 index 00000000..4e3fbeae --- /dev/null +++ b/src/server/config/eventPhases/phaseLocateMob.js @@ -0,0 +1,17 @@ +define([ + +], function( + +) { + return { + + + init: function() { + + }, + + update: function() { + + } + }; +}); \ No newline at end of file diff --git a/src/server/config/eventPhases/phaseSpawnMob.js b/src/server/config/eventPhases/phaseSpawnMob.js new file mode 100644 index 00000000..e22c0bdb --- /dev/null +++ b/src/server/config/eventPhases/phaseSpawnMob.js @@ -0,0 +1,46 @@ +define([ + '../../world/mobBuilder' +], function( + mobBuilder +) { + return { + spawnRect: null, + mob: null, + + init: function() { + var objects = this.instance.objects; + var spawnRect = this.spawnRect; + + if (!this.mob.push) + this.mob = [ this.mob ]; + + this.mob.forEach(function(l) { + var amount = l.amount || 1; + delete l.amount; + + l.walkDistance = 0; + + for (var i = 0; i < amount; i++) { + var x = spawnRect.x + ~~(Math.random() * spawnRect.w); + var y = spawnRect.y + ~~(Math.random() * spawnRect.h); + + var mob = objects.buildObjects([{ + x: x, + y: y, + sheetName: 'mobs', + cell: l.cell, + name: l.name + }]); + mobBuilder.build(mob, l); + + if (l.id) { + var id = l.id.split('$').join(i); + mob.id = id; + } + } + }); + + this.end = true; + } + }; +}); \ No newline at end of file diff --git a/src/server/config/eventPhases/phaseTemplate.js b/src/server/config/eventPhases/phaseTemplate.js new file mode 100644 index 00000000..103ad0cc --- /dev/null +++ b/src/server/config/eventPhases/phaseTemplate.js @@ -0,0 +1,17 @@ +define([ + +], function( + +) { + return { + end: false, + + init: function() { + + }, + + update: function() { + + } + }; +}); \ No newline at end of file diff --git a/src/server/config/maps/tutorial/events.js b/src/server/config/maps/tutorial/events.js index 44b168d2..34b8cae5 100644 --- a/src/server/config/maps/tutorial/events.js +++ b/src/server/config/maps/tutorial/events.js @@ -14,6 +14,7 @@ module.exports = [{ amount: 5, name: 'thieving imp', level: 5, + cell: 51, id: 'impthief-$', hpMult: 5, dmgMult: 1, @@ -23,6 +24,7 @@ module.exports = [{ }, { name: 'imp kingpin', level: 8, + cell: 52, hpMult: 10, dmgMult: 2 }] diff --git a/src/server/events/events.js b/src/server/events/events.js index 8a27432b..045c72da 100644 --- a/src/server/events/events.js +++ b/src/server/events/events.js @@ -1,7 +1,7 @@ define([ - + '../config/eventPhases/phaseTemplate' ], function( - + phaseTemplate ) { return { configs: null, @@ -19,7 +19,7 @@ define([ return; this.configs = extend(true, [], configs); - this.configs.forEach(c => (c.ttl = 10)); + this.configs.forEach(c => (c.ttl = 5)); }, update: function() { @@ -30,8 +30,10 @@ define([ var cLen = configs.length; for (var i = 0; i < cLen; i++) { var c = configs[i]; - if (c.event) + if (c.event) { + this.updateEvent(c.event); continue; + } else if (c.ttl > 0) { c.ttl--; continue; @@ -42,7 +44,54 @@ define([ }, startEvent: function(config) { - return {}; + var event = { + config: config, + phases: [], + nextPhase: 0 + }; + + return event; + }, + + updateEvent: function(event) { + var currentPhases = event.phases; + var cLen = currentPhases.length; + var stillBusy = false; + for (var i = 0; i < cLen; i++) { + var phase = currentPhases[i]; + if (phase.end) + continue + else { + stillBusy = true; + phase.update(); + } + } + + if (stillBusy) + return; + + var config = event.config; + + var phases = config.phases; + var pLen = phases.length; + for (var i = event.nextPhase; i < pLen; i++) { + var p = phases[i]; + + var phaseFile = 'phase' + p.type[0].toUpperCase() + p.type.substr(1); + var typeTemplate = require('config/eventPhases/' + phaseFile); + var phase = extend(true, { + instance: this.instance + }, phaseTemplate, typeTemplate, p); + + event.phases.push(phase); + + phase.init(); + + event.nextPhase = i + 1; + + if (!p.auto) + break; + } } }; }); \ No newline at end of file diff --git a/src/server/world/mobBuilder.js b/src/server/world/mobBuilder.js index bcc2e368..df2ab273 100644 --- a/src/server/world/mobBuilder.js +++ b/src/server/world/mobBuilder.js @@ -9,7 +9,7 @@ define([ ) { return { build: function(mob, blueprint, scaleDrops, type) { - var typeDefinition = blueprint[type]; + var typeDefinition = blueprint[type] || blueprint; var drops = typeDefinition.drops; @@ -20,15 +20,17 @@ define([ mob.nonSelectable = true; mob.addComponent('effects'); - if (type != 'regular') { - mob.effects.addEffect({ - type: type - }); + if (type) { + if (type != 'regular') { + mob.effects.addEffect({ + type: type + }); - mob['is' + type[0].toUpperCase() + type.substr(1)] = true; + mob['is' + type[0].toUpperCase() + type.substr(1)] = true; - mob.baseName = mob.name; - mob.name = typeDefinition.name || mob.baseName; + mob.baseName = mob.name; + mob.name = typeDefinition.name || mob.baseName; + } } mob.addComponent('stats', {