ソースを参照

Merge branch '153-map-location-by-level' into 'staging'

Fixed #153

See merge request !97
tags/v0.1.3^2
Big Bad Waffle 7年前
コミット
c5cd27d751
6個のファイルの変更50行の追加31行の削除
  1. +6
    -2
      src/server/components/player.js
  2. +4
    -4
      src/server/config/maps/tutorial/map.json
  3. +24
    -21
      src/server/world/instancer.js
  4. +11
    -1
      src/server/world/map.js
  5. +4
    -2
      src/server/world/randomMap.js
  6. +1
    -1
      src/server/world/resourceSpawner.js

+ 6
- 2
src/server/components/player.js ファイルの表示

@@ -150,8 +150,12 @@ define([
physics.removeObject(this.obj, this.obj.x, this.obj.y);

if (!permadeath) {
this.obj.x = this.obj.spawn.x;
this.obj.y = this.obj.spawn.y;
var level = this.obj.stats.values.level;
var spawns = this.obj.spawn;
var spawnPos = ((spawns.find(s => ((s.maxLevel) && (s.maxLevel >= level)))) || (spawns[0]));

this.obj.x = spawnPos.x;
this.obj.y = spawnPos.y;

var syncer = this.obj.syncer;
syncer.o.x = this.obj.x;


+ 4
- 4
src/server/config/maps/tutorial/map.json ファイルの表示

@@ -1085,7 +1085,7 @@
"name":"",
"properties":
{
"cpnNotice":"{\"maxLevel\": 2, \"msg\": \"The seagull's eyes are bloodshot and in its beak you see a glinting locket. It stole your family heirloom!<br \/><br \/>Click on it to target it then press <font class='color-green'>1<\/font> to toggle auto-attack. Remember to stand close if you are a warrior or thief.\"}"
"cpnNotice":"{\"maxLevel\": 1, \"msg\": \"The seagull's eyes are bloodshot and in its beak you see a glinting locket. It stole your family heirloom!<br \/><br \/>Click on it to target it then press <font class='color-green'>1<\/font> to toggle auto-attack. Remember to stand close if you are a warrior or thief.\"}"
},
"rotation":0,
"type":"",
@@ -1130,7 +1130,7 @@
"name":"",
"properties":
{
"cpnNotice":"{\"maxLevel\": 2, \"msg\": \"You can loot items by standing on them then open your inventory with <font class='color-green'>i<\/font>.<br \/><br \/>To equip an item, simply right click the item in your inventory.\"}"
"cpnNotice":"{\"maxLevel\": 2, \"msg\": \"Far to the north, you see a small shack. Civilization!<br \/><br \/>You can read more help by pressing <font class='color-green'>h<\/font>.\"}"
},
"rotation":0,
"type":"",
@@ -1145,7 +1145,7 @@
"name":"",
"properties":
{
"cpnNotice":"{\"maxLevel\": 2, \"msg\": \"The seagull's eyes are bloodshot and in its beak you see a glinting locket. It stole your family heirloom!<br \/><br \/>Click on it to target it then press <font class='color-green'>1<\/font> to toggle auto-attack. Remember to stand close if you are a warrior or thief.\"}"
"cpnNotice":"{\"maxLevel\": 1, \"msg\": \"The seagull's eyes are bloodshot and in its beak you see a glinting locket. It stole your family heirloom!<br \/><br \/>Click on it to target it then press <font class='color-green'>1<\/font> to toggle auto-attack. Remember to stand close if you are a warrior or thief.\"}"
},
"rotation":0,
"type":"",
@@ -1419,7 +1419,7 @@
{
"instanced":"0",
"name":"Test Zone",
"spawn":"{\"x\":60,\"y\":116}"
"spawn":"[{\"maxLevel\":1,\"x\":60,\"y\":116},{\"maxLevel\":2,\"x\":89,\"y\":48}]"
},
"renderorder":"right-down",
"tileheight":8,


+ 24
- 21
src/server/world/instancer.js ファイルの表示

@@ -124,15 +124,14 @@ define([
msg.keepPos = false;
}

var spawnPos = map.getSpawnPos(obj);

if ((!msg.keepPos) || (obj.x == null)) {
obj.x = map.spawn.x;
obj.y = map.spawn.y;
obj.x = spawnPos.x;
obj.y = spawnPos.y;
}

obj.spawn = {
x: map.spawn.x,
y: map.spawn.y
};
obj.spawn = map.spawn;

syncer.queue('onGetMap', map.clientMap, [obj.serverId]);

@@ -312,25 +311,23 @@ define([
msg.keepPos = false;
}

var spawnPos = map.getSpawnPos(obj);

if ((!msg.keepPos) || (obj.x == null)) {
obj.x = map.spawn.x;
obj.y = map.spawn.y;
obj.x = spawnPos.x;
obj.y = spawnPos.y;
}

obj.spawn = {
x: map.spawn.x,
y: map.spawn.y
};
obj.spawn = map.spawn;

if (exists) {
//Keep track of what the connection id is (sent from the server)
obj.serverId = obj.id;
delete obj.id;

obj.spawn = {
x: exists.map.spawn.x,
y: exists.map.spawn.y
};
var spawnPos = exists.map.getSpawnPos(obj);

obj.spawn = exists.map.spawn;

exists.syncer.queue('onGetMap', exists.map.clientMap, [obj.serverId]);

@@ -353,8 +350,10 @@ define([
},
onAddObject: function(keepPos, obj) {
if (!keepPos) {
obj.x = obj.instance.map.spawn.x;
obj.y = obj.instance.map.spawn.y;
var spawnPos = obj.instance.map.getSpawnPos(obj);

obj.x = spawnPos.x;
obj.y = spawnPos.y;
}

obj.instance.spawners.scale(obj.stats.values.level);
@@ -458,7 +457,8 @@ define([
questBuilder: extend(true, {}, questBuilder),
map: {
spawn: extend(true, {}, map.spawn),
clientMap: extend(true, {}, map.clientMap)
clientMap: extend(true, {}, map.clientMap),
getSpawnPos: map.getSpawnPos.bind(map)
}
};

@@ -496,8 +496,11 @@ define([
obj = instance.objects.addObject(objToAdd, this.onAddObject.bind(this, false));
else {
obj = instance.objects.transferObject(objToAdd);
obj.x = instance.map.spawn.x;
obj.y = instance.map.spawn.y;

var spawnPos = instance.map.getSpawnPos(obj);

obj.x = spawnPos.x;
obj.y = spawnPos.y;
instance.questBuilder.obtain(obj);
obj.instance.spawners.scale(obj.stats.values.level);


+ 11
- 1
src/server/world/map.js ファイルの表示

@@ -95,8 +95,11 @@ define([
if (this.instanced)
this.instanced = (this.instanced == '1');

if (mapFile.properties.spawn)
if (mapFile.properties.spawn) {
this.spawn = JSON.parse(mapFile.properties.spawn);
if (!this.spawn.push)
this.spawn = [ this.spawn ];
}
},
create: function() {
this.getMapFile();
@@ -361,6 +364,13 @@ define([
this.objBlueprints.push(obj);
}
}
},

getSpawnPos: function(obj) {
var stats = obj.components.find(c => (c.type == 'stats'));
var level = stats.values.level;

return ((this.spawn.find(s => ((s.maxLevel) && (s.maxLevel >= level)))) || (this.spawn[0]));
}
}



+ 4
- 2
src/server/world/randomMap.js ファイルの表示

@@ -200,8 +200,10 @@ define([
clientMap.collisionMap = _.get2dArray(w, h);

var startTemplate = startRoom.template;
map.spawn.x = startRoom.x + ~~(startTemplate.width / 2);
map.spawn.y = startRoom.y + ~~(startTemplate.height / 2);
map.spawn = [{
x: startRoom.x + ~~(startTemplate.width / 2),
y: startRoom.y + ~~(startTemplate.height / 2)
}];

this.drawRoom(instance, startRoom);



+ 1
- 1
src/server/world/resourceSpawner.js ファイルの表示

@@ -46,7 +46,7 @@ define([
var w = this.physics.width;
var h = this.physics.height;

var spawn = this.map.spawn;
var spawn = this.map.spawn[0];
var x = null;
var y = null;



読み込み中…
キャンセル
保存