@@ -1 +0,0 @@ | |||
Subproject commit 9ec64b54627ed5185b31832aefbcb7195b8240a9 |
@@ -1,9 +0,0 @@ | |||
module.exports = { | |||
id: 'pumpkinSailor', | |||
name: 'The Pumpkin Sailor', | |||
description: 'The Pumpkin Sailor scours the seas in search of lost souls that were doomed to roam the open waters alone.', | |||
rewards: { | |||
} | |||
}; |
@@ -1,244 +0,0 @@ | |||
module.exports = { | |||
name: 'Event: Halloween', | |||
mapOffset: { | |||
x: 23, | |||
y: 86 | |||
}, | |||
extraScripts: [ | |||
'maps/fjolarok/events/halloween.js', | |||
'mtx/summonPumpkinSkeleton.js', | |||
'spells/spellScatterPumpkinPieces.js' | |||
], | |||
mapFile: null, | |||
mapW: null, | |||
mapH: null, | |||
init: function () { | |||
this.mapFile = require('./maps/fjolarok/map'); | |||
this.mapW = this.mapFile.width; | |||
this.mapH = this.mapFile.height; | |||
this.events.on('onBeforeGetFactions', this.onBeforeGetFactions.bind(this)); | |||
this.events.on('onBeforeGetSkins', this.onBeforeGetSkins.bind(this)); | |||
this.events.on('onBeforeGetEventList', this.onBeforeGetEventList.bind(this)); | |||
//this.events.on('onBeforeGetQuests', this.onBeforeGetQuests.bind(this)); | |||
//this.events.on('onBeforeGetDialogue', this.onBeforeGetDialogue.bind(this)); | |||
this.events.on('onBeforeGetResourceList', this.onBeforeGetResourceList.bind(this)); | |||
//this.events.on('onAfterGetZone', this.onAfterGetZone.bind(this)); | |||
//this.events.on('onBeforeBuildLayerTile', this.onBeforeBuildLayerTile.bind(this)); | |||
//this.events.on('onAfterGetLayerObjects', this.onAfterGetLayerObjects.bind(this)); | |||
this.events.on('onBeforeGetMtxList', this.onBeforeGetMtxList.bind(this)); | |||
this.events.on('onBeforeGetAnimations', this.onBeforeGetAnimations.bind(this)); | |||
//this.events.on('onBeforeGetHerbConfig', this.onBeforeGetHerbConfig.bind(this)); | |||
this.events.on('onBeforeGetSpellsInfo', this.beforeGetSpellsInfo.bind(this)); | |||
this.events.on('onBeforeGetSpellsConfig', this.beforeGetSpellsConfig.bind(this)); | |||
this.events.on('onBeforeGetSpellTemplate', this.beforeGetSpellTemplate.bind(this)); | |||
}, | |||
beforeGetSpellsInfo: function (spells) { | |||
spells.push({ | |||
name: 'scatter pumpkin pieces', | |||
type: 'scatterPumpkinPieces', | |||
animation: 'melee', | |||
particles: { | |||
color: { | |||
start: ['ff4252', 'b34b3a'], | |||
end: ['b34b3a', 'ff4252'] | |||
}, | |||
scale: { | |||
start: { | |||
min: 2, | |||
max: 14 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 8 | |||
} | |||
}, | |||
lifetime: { | |||
min: 1, | |||
max: 3 | |||
}, | |||
alpha: { | |||
start: 0.7, | |||
end: 0 | |||
}, | |||
randomScale: true, | |||
randomColor: true, | |||
chance: 0.6 | |||
} | |||
}); | |||
}, | |||
beforeGetSpellsConfig: function (spells) { | |||
spells['scatter pumpkin pieces'] = { | |||
statType: ['str'], | |||
statMult: 0.1, | |||
auto: true, | |||
cdMax: 7, | |||
manaCost: 0, | |||
random: { | |||
} | |||
}; | |||
}, | |||
beforeGetSpellTemplate: function (spell) { | |||
if (spell.type === 'ScatterPumpkinPieces') | |||
spell.template = require('./spells/spellScatterPumpkinPieces.js'); | |||
}, | |||
onBeforeGetFactions: function (mappings) { | |||
extend(mappings, { | |||
pumpkinSailor: './factions/pumpkinSailor' | |||
}); | |||
}, | |||
onBeforeGetSkins: function (skins) { | |||
skins['3.0'] = { | |||
name: 'Pumpkin-Head Necromancer', | |||
sprite: [0, 0], | |||
spritesheet: `${this.folderName}/images/skins.png` | |||
}; | |||
}, | |||
onBeforeGetHerbConfig: function (herbs) { | |||
extend(herbs, { | |||
'Tiny Pumpkin': { | |||
sheetName: 'objects', | |||
cell: 167, | |||
itemSprite: [3, 3], | |||
itemName: 'Candy Corn', | |||
itemSheet: `${this.folderName}/images/items.png`, | |||
itemAmount: [1, 1] | |||
}, | |||
Pumpkin: { | |||
sheetName: 'objects', | |||
cell: 159, | |||
itemSprite: [3, 3], | |||
itemName: 'Candy Corn', | |||
itemSheet: `${this.folderName}/images/items.png`, | |||
itemAmount: [2, 3] | |||
}, | |||
'Giant Pumpkin': { | |||
sheetName: 'objects', | |||
cell: 158, | |||
itemSprite: [3, 3], | |||
itemName: 'Candy Corn', | |||
itemSheet: `${this.folderName}/images/items.png`, | |||
itemAmount: [2, 5] | |||
} | |||
}); | |||
}, | |||
onBeforeGetAnimations: function (animations) { | |||
//Skeleton animations | |||
let mobsheet = `${this.folderName}/images/mobs.png`; | |||
if (!animations.mobs[mobsheet]) | |||
animations.mobs[mobsheet] = {}; | |||
animations.mobs[mobsheet]['0'] = { | |||
melee: { | |||
spritesheet: mobsheet, | |||
row: 1, | |||
col: 0, | |||
frames: 2, | |||
frameDelay: 5 | |||
}, | |||
spawn: { | |||
spritesheet: mobsheet, | |||
row: 2, | |||
col: 0, | |||
frames: 3, | |||
frameDelay: 4, | |||
hideSprite: true, | |||
type: 'attackAnimation' | |||
}, | |||
death: { | |||
spritesheet: mobsheet, | |||
row: 3, | |||
col: 0, | |||
frames: 4, | |||
frameDelay: 4, | |||
type: 'attackAnimation' | |||
} | |||
}; | |||
}, | |||
onBeforeGetResourceList: function (list) { | |||
list.push(`${this.folderName}/images/mobs.png`); | |||
list.push(`${this.folderName}/images/bosses.png`); | |||
list.push(`${this.folderName}/images/skins.png`); | |||
}, | |||
onBeforeGetMtxList: function (list) { | |||
list.summonPumpkinSkeleton = this.relativeFolderName + '/mtx/summonPumpkinSkeleton'; | |||
list.hauntedIceSpear = this.relativeFolderName + '/mtx/hauntedIceSpear'; | |||
}, | |||
onAfterGetLayerObjects: function (info) { | |||
if (info.map !== 'fjolarok') | |||
return; | |||
let layer = this.mapFile.layers.find(l => (l.name === info.layer)); | |||
if (layer) { | |||
let offset = this.mapOffset; | |||
let mapScale = this.mapFile.tilesets[0].tileheight; | |||
layer.objects.forEach(function (l) { | |||
let newO = extend({}, l); | |||
newO.x += (offset.x * mapScale); | |||
newO.y += (offset.y * mapScale); | |||
info.objects.push(newO); | |||
}, this); | |||
} | |||
}, | |||
onBeforeBuildLayerTile: function (info) { | |||
if (info.map !== 'fjolarok') | |||
return; | |||
let offset = this.mapOffset; | |||
let x = info.x; | |||
let y = info.y; | |||
if ((x - offset.x < 0) || (y - offset.y < 0) || (x - offset.x >= this.mapW) || (y - offset.y >= this.mapH)) | |||
return; | |||
let i = ((y - offset.y) * this.mapW) + (x - offset.x); | |||
let layer = this.mapFile.layers.find(l => (l.name === info.layer)); | |||
if (layer) | |||
info.cell = layer.data[i]; | |||
}, | |||
onBeforeGetEventList: function (zone, list) { | |||
if (zone !== 'fjolarok') | |||
return; | |||
list.push('../' + this.relativeFolderName + '/maps/fjolarok/events/halloween.js'); | |||
list.push('../' + this.relativeFolderName + '/maps/fjolarok/events/halloweenBoss.js'); | |||
}, | |||
onAfterGetZone: function (zone, config) { | |||
try { | |||
let modZone = require('./maps/' + zone + '/zone.js'); | |||
extend(config, modZone); | |||
} catch (e) { | |||
} | |||
}, | |||
onBeforeGetDialogue: function (zone, config) { | |||
try { | |||
let modDialogue = require('./maps/' + zone + '/dialogues.js'); | |||
extend(config, modDialogue); | |||
} catch (e) { | |||
} | |||
} | |||
}; |
@@ -1,106 +0,0 @@ | |||
module.exports = { | |||
'the pumpkin sailor': { | |||
1: { | |||
msg: [{ | |||
msg: 'Soul\'s greeting to you.', | |||
options: [1.1, 1.2, 1.3, 1.4] | |||
}], | |||
options: { | |||
1.1: { | |||
msg: 'Who are you?', | |||
goto: '2' | |||
}, | |||
1.2: { | |||
msg: 'Have you found anything worth selling?', | |||
goto: 'tradeBuy' | |||
}, | |||
1.3: { | |||
msg: 'I have some items you might have use for..', | |||
goto: 'tradeSell' | |||
}, | |||
1.4: { | |||
msg: 'I sold you something by accident.', | |||
goto: 'tradeBuyback' | |||
} | |||
} | |||
}, | |||
2: { | |||
msg: [{ | |||
msg: 'Most call me the Pumpkin Sailor. Some call me the Sailor of Souls. You can call me either.', | |||
options: [2.1] | |||
}], | |||
options: { | |||
2.1: { | |||
msg: 'Souls? What kind of souls?', | |||
goto: '3' | |||
} | |||
} | |||
}, | |||
3: { | |||
msg: [{ | |||
msg: 'Why, human souls! The sea claims without mercy and once in its cold grasp, few ever escape. I do what I can to gather the few I can track down; store them in these jars here.', | |||
options: [3.1] | |||
}], | |||
options: { | |||
3.1: { | |||
msg: 'Then what?', | |||
goto: '4' | |||
} | |||
} | |||
}, | |||
4: { | |||
msg: [{ | |||
msg: 'Well, a soul wants to return home; to be at rest. Once ashore, they are free to find their final resting place.', | |||
options: [4.1] | |||
}], | |||
options: { | |||
4.1: { | |||
msg: 'How do they find their way back?', | |||
goto: '5' | |||
} | |||
} | |||
}, | |||
5: { | |||
msg: [{ | |||
msg: 'Their loved ones put out pumpkins, carved with their family runes. The souls simply look for something familiar. Unfortunately, they are easily fooled too.', | |||
options: [5.1] | |||
}], | |||
options: { | |||
5.1: { | |||
msg: 'Who would fool them?', | |||
goto: '6' | |||
} | |||
} | |||
}, | |||
6: { | |||
msg: [{ | |||
msg: 'I am not without enemies. There are those who would display forged runes; clever replications meant to lure and trap souls. Lord Squash, is one such. A foul creature; powerful and fearful.', | |||
options: [] | |||
}], | |||
options: { | |||
} | |||
}, | |||
tradeBuy: { | |||
cpn: 'trade', | |||
method: 'startBuy', | |||
args: [{ | |||
targetName: 'the pumpkin sailor' | |||
}] | |||
}, | |||
tradeSell: { | |||
cpn: 'trade', | |||
method: 'startSell', | |||
args: [{ | |||
targetName: 'the pumpkin sailor' | |||
}] | |||
}, | |||
tradeBuyback: { | |||
cpn: 'trade', | |||
method: 'startBuyback', | |||
args: [{ | |||
targetName: 'the pumpkin sailor' | |||
}] | |||
} | |||
} | |||
}; |
@@ -1,112 +0,0 @@ | |||
module.exports = { | |||
name: 'Soul\'s Moor', | |||
description: 'The Pumpkin Sailor has returned to the shores of the living.', | |||
distance: -1, | |||
cron: '* * 1-31 9 *', | |||
durationEvent: true, | |||
disabled: false, | |||
events: { | |||
}, | |||
helpers: { | |||
}, | |||
phases: [{ | |||
type: 'hookEvents', | |||
events: { | |||
beforeGatherResource: function (gatherResult, gatherer) { | |||
let itemName = gatherResult.blueprint.itemName; | |||
if ((!itemName) || (itemName.toLowerCase() !== 'candy corn')) | |||
return; | |||
gatherer.reputation.getReputation('pumpkinSailor', 40); | |||
//Spawn a Nibbler? | |||
let roll = Math.random(); | |||
if (roll < 0.15) { | |||
let obj = gatherResult.obj; | |||
let spellbook = obj.spellbook; | |||
if (!spellbook) { | |||
spellbook = obj.addComponent('spellbook'); | |||
spellbook.addSpell('summonSkeleton'); | |||
let spell = spellbook.spells[0]; | |||
spell.killMinionsOnDeath = false; | |||
spell.hpPercent = 100; | |||
spell.damagePercent = 100; | |||
let level = gatherer.stats.values.level; | |||
let hp = ((level * 15) + level) * 2; | |||
let str = ((level * 14.9) + ((level - 1) * 31.49)); | |||
if (level < 10) | |||
str *= [0.1, 0.2, 0.4, 0.7, 1, 1, 1, 1, 1][level - 1]; | |||
obj.addComponent('stats', { | |||
values: { | |||
hpMax: hp, | |||
hp: hp, | |||
str: str * 1.2, | |||
level: level | |||
} | |||
}); | |||
obj.addComponent('aggro', { | |||
faction: 'lordSquash' | |||
}); | |||
} | |||
let pos = obj.instance.physics.getClosestPos(obj.x, obj.y, obj.x, obj.y); | |||
spellbook.spells[0].cast({ | |||
target: { | |||
x: pos.x, | |||
y: pos.y | |||
} | |||
}); | |||
let summoned = spellbook.spells[0].minions[0]; | |||
summoned.name = 'Soul Nibbler'; | |||
summoned.aggro.list.push({ | |||
obj: gatherer, | |||
threat: 1 | |||
}); | |||
summoned.sheetName = 'server/mods/event-halloween/images/mobs.png'; | |||
summoned.cell = 0; | |||
summoned.inventory.blueprint = { | |||
noRandom: true, | |||
rolls: 2, | |||
chance: 100, | |||
blueprints: [{ | |||
chance: 3, | |||
name: 'Summon Pumpkin Skeleton', | |||
type: 'mtx', | |||
effects: [{ | |||
mtx: 'summonPumpkinSkeleton' | |||
}], | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
sprite: [3, 0], | |||
noSpell: true, | |||
noDrop: true, | |||
noDestroy: true, | |||
noSalvage: true | |||
}, { | |||
chance: 100, | |||
name: 'Candy Corn', | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
material: true, | |||
noSpell: true, | |||
sprite: [3, 3], | |||
quantity: [1, 5] | |||
}] | |||
}; | |||
} | |||
}, | |||
beforeCompleteAutoquest: function (quest, character) { | |||
} | |||
} | |||
}] | |||
}; |
@@ -1,156 +0,0 @@ | |||
module.exports = { | |||
name: 'Beware Lord Squash', | |||
description: 'Lord Squash haunts the island. Stop him in the name of the Pumpkin Sailor.', | |||
distance: -1, | |||
cron: '0 */2 1-31 9 *', | |||
disabled: false, | |||
events: { | |||
}, | |||
helpers: { | |||
}, | |||
phases: [{ | |||
type: 'spawnMob', | |||
spawnRect: { | |||
x: 63, | |||
y: 34 | |||
}, | |||
mobs: [{ | |||
name: 'Lord Squash', | |||
level: 10, | |||
attackable: true, | |||
cell: 0, | |||
sheetName: 'server/mods/event-halloween/images/bosses.png', | |||
id: 'lordSquash', | |||
hpMult: 55, | |||
dmgMult: 40, | |||
grantRep: { | |||
pumpkinSailor: 2000 | |||
}, | |||
pos: { | |||
x: 0, | |||
y: 0 | |||
}, | |||
drops: { | |||
chance: 100, | |||
rolls: 2, | |||
noRandom: true, | |||
blueprints: [{ | |||
chance: 5, | |||
name: 'Haunted Ice Spear', | |||
type: 'mtx', | |||
effects: [{ | |||
mtx: 'hauntedIceSpear' | |||
}], | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
sprite: [3, 0], | |||
noSpell: true, | |||
noDrop: true, | |||
noDestroy: true, | |||
noSalvage: true | |||
}, { | |||
chance: 100, | |||
name: 'Candy Corn', | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
material: true, | |||
sprite: [3, 3], | |||
noSpell: true, | |||
quantity: [30, 60] | |||
}] | |||
}, | |||
properties: { | |||
cpnBumpAnimation: { | |||
type: 'bumpAnimation', | |||
simplify: function () { | |||
return { | |||
type: 'bumpAnimation', | |||
infinite: true, | |||
deltaX: 0, | |||
deltaY: -1, | |||
updateCdMax: 4 | |||
}; | |||
} | |||
} | |||
}, | |||
chats: { | |||
global: true, | |||
chance: 1, | |||
cdMax: 350, | |||
chats: [{ | |||
msg: 'Souls! Souls! Delicious Souls!' | |||
}, { | |||
msg: '*Gobble Gobble Gobble*' | |||
}, { | |||
msg: 'Come, Sailor. I will be your match!' | |||
}] | |||
}, | |||
spells: [{ | |||
type: 'scatterPumpkinPieces' | |||
}, { | |||
type: 'projectile', | |||
row: 3, | |||
col: 4, | |||
shootAll: true, | |||
particles: { | |||
color: { | |||
start: ['51fc9a', '48edff'], | |||
end: ['48edff', '51fc9a'] | |||
}, | |||
scale: { | |||
start: { | |||
min: 2, | |||
max: 12 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 6 | |||
} | |||
}, | |||
lifetime: { | |||
min: 2, | |||
max: 4 | |||
}, | |||
alpha: { | |||
start: 0.7, | |||
end: 0 | |||
}, | |||
speed: { | |||
start: { | |||
min: 4, | |||
max: 24 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 12 | |||
} | |||
}, | |||
startRotation: { | |||
min: 0, | |||
max: 360 | |||
}, | |||
rotationSpeed: { | |||
min: 0, | |||
max: 360 | |||
}, | |||
randomScale: true, | |||
randomColor: true, | |||
randomSpeed: true, | |||
chance: 0.55, | |||
spawnType: 'circle', | |||
spawnCircle: { | |||
x: 0, | |||
y: 0, | |||
r: 8 | |||
} | |||
} | |||
}] | |||
}] | |||
}, { | |||
type: 'killMob', | |||
mobs: ['lordSquash'] | |||
}] | |||
}; |
@@ -1,523 +0,0 @@ | |||
{ "backgroundcolor":"#32222e", | |||
"height":34, | |||
"layers":[ | |||
{ | |||
"data":[384, 384, 384, 384, 384, 384, 377, 377, 377, 377, 377, 384, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 390, 384, 384, 377, 384, 384, 384, 377, 377, 377, 384, 377, 377, 377, 377, 377, 377, 384, 384, 384, 384, 384, 384, 377, 377, 377, 390, 384, 384, 384, 384, 384, 384, 384, 377, 377, 377, 377, 377, 377, 384, 384, 384, 384, 384, 377, 384, 384, 384, 384, 384, 384, 390, 390, 384, 384, 377, 517, 517, 384, 384, 517, 517, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 390, 390, 390, 384, 384, 517, 517, 517, 517, 384, 517, 517, 384, 384, 384, 384, 384, 384, 384, 384, 377, 384, 384, 377, 384, 384, 390, 390, 390, 384, 377, 517, 384, 517, 517, 517, 384, 517, 384, 384, 377, 377, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 342, 390, 390, 390, 384, 384, 384, 384, 517, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 342, 342, 390, 390, 390, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 390, 390, 390, 390, 390, 390, 390, 390, 384, 342, 342, 342, 342, 390, 390, 390, 384, 384, 384, 384, 384, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 342, 342, 342, 390, 390, 390, 173, 384, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 342, 342, 342, 342, 342, 342, 173, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 390, 342, 342, 526, 526, 526, 173, 526, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 342, 342, 342, 342, 509, 509, 509, 526, 342, 390, 342, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 342, 342, 342, 509, 509, 509, 509, 509, 526, 526, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 342, 526, 509, 509, 509, 517, 509, 509, 509, 526, 342, 342, 390, 342, 390, 390, 342, 390, 390, 390, 390, 390, 342, 390, 342, 342, 342, 526, 509, 509, 517, 517, 517, 509, 509, 406, 526, 342, 342, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 342, 342, 526, 526, 509, 509, 509, 517, 406, 517, 509, 508, 516, 526, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 509, 509, 509, 517, 509, 508, 516, 491, 491, 526, 526, 342, 390, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 509, 509, 509, 508, 516, 491, 491, 491, 408, 526, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 406, 508, 516, 491, 491, 491, 491, 491, 491, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 516, 491, 491, 491, 491, 491, 491, 491, 408, 526, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 491, 491, 491, 491, 408, 491, 491, 491, 491, 526, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 408, 491, 491, 491, 491, 491, 491, 508, 516, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 491, 491, 491, 491, 491, 508, 516, 509, 509, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 408, 491, 491, 508, 516, 509, 509, 406, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 491, 508, 516, 509, 408, 509, 509, 509, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 516, 509, 509, 509, 339, 509, 509, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 509, 406, 509, 509, 406, 509, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 342, 526, 526, 509, 509, 509, 509, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 526, 526, 526, 526, 526, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 526, 526, 342, 342, 0, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 0, 0, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 0, 0, 0, 0, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 0, 0, 0, 0, 0, 0], | |||
"height":34, | |||
"name":"tiles", | |||
"opacity":0.550000011920929, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":26, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 683, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |||
"height":34, | |||
"name":"doodads", | |||
"opacity":1, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":26, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 79, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 80, 0, 80, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 208, 208, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 587, 0, 0, 0, 0, 205, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 408, 75, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 76, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 671, 205, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 671, 205, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 206, 548, 0, 0, 0, 77, 0, 0, 0, 559, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 670, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 206, 670, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 77, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 206, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 207, 207, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |||
"height":34, | |||
"name":"walls", | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"tileset":"walls" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":26, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"mobs", | |||
"objects":[ | |||
{ | |||
"gid":788, | |||
"height":24, | |||
"id":663, | |||
"name":"the pumpkin sailor", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":24, | |||
"x":56, | |||
"y":40 | |||
}], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"faction":"2", | |||
"tileset":"mobs" | |||
}, | |||
"propertytypes": | |||
{ | |||
"faction":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"objects", | |||
"objects":[ | |||
{ | |||
"gid":712, | |||
"height":24, | |||
"id":660, | |||
"name":"", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":24, | |||
"x":56, | |||
"y":144 | |||
}, | |||
{ | |||
"gid":711, | |||
"height":24, | |||
"id":661, | |||
"name":"", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":24, | |||
"x":152, | |||
"y":240 | |||
}, | |||
{ | |||
"gid":665, | |||
"height":8, | |||
"id":668, | |||
"name":"|greencandle", | |||
"properties": | |||
{ | |||
"cpnAggro":"{ \"faction\": 1}" | |||
}, | |||
"propertytypes": | |||
{ | |||
"cpnAggro":"string" | |||
}, | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":40, | |||
"y":40 | |||
}, | |||
{ | |||
"gid":665, | |||
"height":8, | |||
"id":670, | |||
"name":"|greencandle", | |||
"properties": | |||
{ | |||
"cpnAggro":"{ \"faction\": 1}" | |||
}, | |||
"propertytypes": | |||
{ | |||
"cpnAggro":"string" | |||
}, | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":152, | |||
"y":200 | |||
}, | |||
{ | |||
"gid":665, | |||
"height":8, | |||
"id":671, | |||
"name":"|greencandle", | |||
"properties": | |||
{ | |||
"cpnAggro":"{ \"faction\": 1}" | |||
}, | |||
"propertytypes": | |||
{ | |||
"cpnAggro":"string" | |||
}, | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":128, | |||
"y":224 | |||
}, | |||
{ | |||
"gid":665, | |||
"height":8, | |||
"id":674, | |||
"name":"|greencandle", | |||
"properties": | |||
{ | |||
"cpnAggro":"{ \"faction\": 1}" | |||
}, | |||
"propertytypes": | |||
{ | |||
"cpnAggro":"string" | |||
}, | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":56, | |||
"y":160 | |||
}, | |||
{ | |||
"gid":665, | |||
"height":8, | |||
"id":675, | |||
"name":"|greencandle", | |||
"properties": | |||
{ | |||
"cpnAggro":"{ \"faction\": 1}" | |||
}, | |||
"propertytypes": | |||
{ | |||
"cpnAggro":"string" | |||
}, | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":88, | |||
"y":128 | |||
}], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"blocking":"1", | |||
"tileset":"objects" | |||
}, | |||
"propertytypes": | |||
{ | |||
"blocking":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"clientObjects", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"notices", | |||
"objects":[ | |||
{ | |||
"height":24, | |||
"id":666, | |||
"name":"shopCaptain", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":24, | |||
"x":56, | |||
"y":24 | |||
}, | |||
{ | |||
"height":24, | |||
"id":667, | |||
"name":"shopCaptain", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":24, | |||
"x":56, | |||
"y":24 | |||
}], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"rooms", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}], | |||
"nextobjectid":676, | |||
"orientation":"orthogonal", | |||
"properties": | |||
{ | |||
"instanced":"0", | |||
"name":"Test Zone", | |||
"spawn":"[{\"maxLevel\":1,\"x\":60,\"y\":116},{\"maxLevel\":999,\"x\":89,\"y\":48}]" | |||
}, | |||
"propertytypes": | |||
{ | |||
"instanced":"string", | |||
"name":"string", | |||
"spawn":"string" | |||
}, | |||
"renderorder":"right-down", | |||
"tileheight":8, | |||
"tilesets":[ | |||
{ | |||
"columns":8, | |||
"firstgid":1, | |||
"image":"..\/..\/..\/..\/..\/client\/images\/walls.png", | |||
"imageheight":256, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"walls", | |||
"spacing":0, | |||
"tilecount":256, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"2": | |||
{ | |||
"probability":0.600000023841858 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.800000011920929 | |||
}, | |||
"3": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"4": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"50": | |||
{ | |||
"probability":0.400000005960464 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.100000001490116 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":257, | |||
"image":"..\/..\/..\/..\/..\/client\/images\/mobs.png", | |||
"imageheight":80, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"mobs", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":8, | |||
"tileproperties": | |||
{ | |||
"19": | |||
{ | |||
"portal":"midgaard-inn-room_2,1" | |||
} | |||
}, | |||
"tilepropertytypes": | |||
{ | |||
"19": | |||
{ | |||
"portal":"string" | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":337, | |||
"image":"..\/..\/..\/..\/..\/client\/images\/tiles.png", | |||
"imageheight":192, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"tiles", | |||
"spacing":0, | |||
"tilecount":192, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":2 | |||
}, | |||
"11": | |||
{ | |||
"probability":4 | |||
}, | |||
"14": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"2": | |||
{ | |||
"probability":4 | |||
}, | |||
"23": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"24": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"3": | |||
{ | |||
"probability":7 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":10 | |||
}, | |||
"38": | |||
{ | |||
"probability":3 | |||
}, | |||
"39": | |||
{ | |||
"probability":3 | |||
}, | |||
"40": | |||
{ | |||
"probability":15 | |||
}, | |||
"41": | |||
{ | |||
"probability":2 | |||
}, | |||
"42": | |||
{ | |||
"probability":26 | |||
}, | |||
"47": | |||
{ | |||
"probability":10 | |||
}, | |||
"5": | |||
{ | |||
"probability":0.00999999977648258 | |||
}, | |||
"54": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"6": | |||
{ | |||
"probability":0.00499999988824129 | |||
}, | |||
"7": | |||
{ | |||
"probability":0.100000001490116 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"9": | |||
{ | |||
"probability":4 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":529, | |||
"image":"..\/..\/..\/..\/..\/client\/images\/objects.png", | |||
"imageheight":176, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"objects", | |||
"spacing":0, | |||
"tilecount":176, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"42": | |||
{ | |||
"probability":5 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":705, | |||
"image":"..\/..\/..\/..\/..\/client\/images\/bigObjects.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bigObjects", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":785, | |||
"image":"..\/..\/..\/..\/..\/client\/images\/bosses.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bosses", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}], | |||
"tilewidth":8, | |||
"type":"map", | |||
"version":"2017.05.26", | |||
"width":26 | |||
} |
@@ -1,3 +0,0 @@ | |||
module.exports = { | |||
infini: [] | |||
}; |
@@ -1,202 +0,0 @@ | |||
module.exports = { | |||
resources: { | |||
'Tiny Pumpkin': { | |||
type: 'herb', | |||
max: 4 | |||
}, | |||
Pumpkin: { | |||
type: 'herb', | |||
max: 2 | |||
}, | |||
'Giant Pumpkin': { | |||
type: 'herb', | |||
max: 1 | |||
} | |||
}, | |||
mobs: { | |||
'the pumpkin sailor': { | |||
level: 25, | |||
walkDistance: 0, | |||
attackable: false, | |||
regular: { | |||
drops: { | |||
chance: 75, | |||
rolls: 1 | |||
} | |||
}, | |||
rare: { | |||
count: 0 | |||
}, | |||
properties: { | |||
cpnTrade: { | |||
items: { | |||
min: 0, | |||
max: 0 | |||
}, | |||
forceItems: [{ | |||
type: 'skin', | |||
id: '3.0', | |||
infinite: true, | |||
worth: { | |||
currency: 'Candy Corn', | |||
amount: 1200 | |||
}, | |||
factions: [{ | |||
id: 'pumpkinSailor', | |||
tier: 6 | |||
}] | |||
}, { | |||
name: 'Signet of Witching', | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
sprite: [0, 0], | |||
slot: 'finger', | |||
type: 'Ring', | |||
level: 10, | |||
quality: 3, | |||
worth: { | |||
currency: 'Candy Corn', | |||
amount: 400 | |||
}, | |||
stats: { | |||
int: 50, | |||
regenMana: 8 | |||
}, | |||
factions: [{ | |||
id: 'pumpkinSailor', | |||
tier: 5 | |||
}], | |||
infinite: true, | |||
noSalvage: true, | |||
noDrop: true, | |||
noDestroy: true | |||
}, { | |||
name: 'Banshee\'s Will', | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
sprite: [0, 0], | |||
slot: 'finger', | |||
type: 'Ring', | |||
level: 10, | |||
quality: 3, | |||
worth: { | |||
currency: 'Candy Corn', | |||
amount: 400 | |||
}, | |||
stats: { | |||
str: 25, | |||
int: 25, | |||
regenHp: 10 | |||
}, | |||
factions: [{ | |||
id: 'pumpkinSailor', | |||
tier: 5 | |||
}], | |||
infinite: true, | |||
noSalvage: true, | |||
noDrop: true, | |||
noDestroy: true | |||
}, { | |||
name: 'Black Cat\'s Grace', | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
sprite: [0, 0], | |||
slot: 'finger', | |||
type: 'Ring', | |||
level: 10, | |||
quality: 3, | |||
worth: { | |||
currency: 'Candy Corn', | |||
amount: 400 | |||
}, | |||
stats: { | |||
dex: 50, | |||
addCritChance: 90 | |||
}, | |||
factions: [{ | |||
id: 'pumpkinSailor', | |||
tier: 5 | |||
}], | |||
infinite: true, | |||
noSalvage: true, | |||
noDrop: true, | |||
noDestroy: true | |||
}, { | |||
name: 'Dead Man\'s Band', | |||
spritesheet: 'server/mods/event-halloween/images/items.png', | |||
sprite: [0, 0], | |||
slot: 'finger', | |||
type: 'Ring', | |||
level: 10, | |||
quality: 3, | |||
worth: { | |||
currency: 'Candy Corn', | |||
amount: 400 | |||
}, | |||
stats: { | |||
str: 50, | |||
armor: 350 | |||
}, | |||
factions: [{ | |||
id: 'pumpkinSailor', | |||
tier: 5 | |||
}], | |||
infinite: true, | |||
noSalvage: true, | |||
noDrop: true, | |||
noDestroy: true | |||
}], | |||
level: { | |||
min: 1, | |||
max: 5 | |||
}, | |||
markup: { | |||
buy: 0.25, | |||
sell: 2.5 | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
objects: { | |||
shopcaptain: { | |||
properties: { | |||
cpnNotice: { | |||
actions: { | |||
enter: { | |||
cpn: 'dialogue', | |||
method: 'talk', | |||
args: [{ | |||
targetName: 'the pumpkin sailor' | |||
}] | |||
}, | |||
exit: { | |||
cpn: 'dialogue', | |||
method: 'stopTalk' | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
greencandle: { | |||
components: { | |||
cpnLight: { | |||
simplify: function () { | |||
return { | |||
type: 'light', | |||
blueprint: { | |||
color: { | |||
start: ['80f643'], | |||
end: ['4ac441', '51fc9a', 'd07840'] | |||
}, | |||
lifetime: { | |||
min: 2, | |||
max: 6 | |||
} | |||
} | |||
}; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
}; |
@@ -1,62 +0,0 @@ | |||
module.exports = { | |||
events: { | |||
beforeSpawnProjectile: function (item, spell, projectileConfig) { | |||
if (spell.name.toLowerCase() !== 'ice spear') | |||
return; | |||
let cpnProjectile = projectileConfig.components.find(c => (c.type === 'projectile')); | |||
cpnProjectile.particles = { | |||
color: { | |||
start: ['51fc9a', '48edff'], | |||
end: ['48edff', '51fc9a'] | |||
}, | |||
scale: { | |||
start: { | |||
min: 2, | |||
max: 12 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 6 | |||
} | |||
}, | |||
lifetime: { | |||
min: 2, | |||
max: 4 | |||
}, | |||
alpha: { | |||
start: 0.7, | |||
end: 0 | |||
}, | |||
speed: { | |||
start: { | |||
min: 4, | |||
max: 24 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 12 | |||
} | |||
}, | |||
startRotation: { | |||
min: 0, | |||
max: 360 | |||
}, | |||
rotationSpeed: { | |||
min: 0, | |||
max: 360 | |||
}, | |||
randomScale: true, | |||
randomColor: true, | |||
randomSpeed: true, | |||
chance: 0.55, | |||
spawnType: 'circle', | |||
spawnCircle: { | |||
x: 0, | |||
y: 0, | |||
r: 8 | |||
} | |||
}; | |||
} | |||
} | |||
}; |
@@ -1,8 +0,0 @@ | |||
module.exports = { | |||
events: { | |||
beforeSummonMinion: function (item, minion) { | |||
minion.sheetName = 'server/mods/event-halloween/images/mobs.png'; | |||
minion.cell = 0; | |||
} | |||
} | |||
}; |
@@ -1,190 +0,0 @@ | |||
let cpnPumpkinChunk = { | |||
type: 'pumpkinChunk', | |||
caster: null, | |||
isRotten: false, | |||
ttl: 250, | |||
update: function () { | |||
this.ttl--; | |||
if (this.ttl === 0) | |||
this.obj.destroyed = true; | |||
}, | |||
collisionEnter: function (o) { | |||
if (!o.player) | |||
return; | |||
this.obj.destroyed = true; | |||
if (this.isRotten) { | |||
let drainCounts = this.caster.spellbook.spells.find(s => (s.type === 'scatterPumpkinPieces')).drainCounts; | |||
if (drainCounts[o.name]) | |||
drainCounts[o.name] += 2; | |||
else | |||
drainCounts[o.name] = 1; | |||
o.effects.addEffect({ | |||
type: 'lifeDrain', | |||
ttl: 10, | |||
amount: drainCounts[o.name], | |||
caster: this.caster | |||
}); | |||
} else { | |||
o.effects.addEffect({ | |||
type: 'frenzy', | |||
ttl: 40, | |||
newCd: 2 | |||
}); | |||
} | |||
} | |||
}; | |||
module.exports = { | |||
type: 'scatterPumpkinPieces', | |||
cdMax: 20, | |||
manaCost: 0, | |||
spread: 5, | |||
range: 10, | |||
speed: 250, | |||
drainCounts: {}, | |||
cast: function (action) { | |||
return this.shootChunk(action); | |||
}, | |||
shootChunk: function (action) { | |||
let obj = this.obj; | |||
let physics = obj.instance.physics; | |||
let spread = this.spread; | |||
let toX = obj.x + ~~(Math.random() * spread * 2) - spread; | |||
let toY = obj.y + ~~(Math.random() * spread * 2) - spread; | |||
let target = physics.getClosestPos( | |||
obj.x, | |||
obj.y, | |||
toX, | |||
toY | |||
); | |||
if (!target) | |||
return false; | |||
let ttl = (Math.sqrt(Math.pow(target.x - obj.x, 2) + Math.pow(target.y - obj.y, 2)) * this.speed) - 50; | |||
let isRotten = (Math.random() < 0.3); | |||
let particles = null; | |||
if (!isRotten) { | |||
particles = { | |||
color: { | |||
start: ['ffeb38', 'db5538'], | |||
end: ['d43346', '763b3b'] | |||
}, | |||
scale: { | |||
start: { | |||
min: 4, | |||
max: 8 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 4 | |||
} | |||
}, | |||
lifetime: { | |||
min: 2, | |||
max: 4 | |||
}, | |||
alpha: { | |||
start: 0.7, | |||
end: 0 | |||
}, | |||
randomScale: true, | |||
randomColor: true, | |||
chance: 0.6 | |||
}; | |||
} else { | |||
particles = { | |||
color: { | |||
start: ['fc66f7', 'a24eff'], | |||
end: ['533399', '393268'] | |||
}, | |||
scale: { | |||
start: { | |||
min: 4, | |||
max: 8 | |||
}, | |||
end: { | |||
min: 0, | |||
max: 4 | |||
} | |||
}, | |||
lifetime: { | |||
min: 2, | |||
max: 4 | |||
}, | |||
alpha: { | |||
start: 0.7, | |||
end: 0 | |||
}, | |||
randomScale: true, | |||
randomColor: true, | |||
chance: 0.6 | |||
}; | |||
} | |||
let projectileConfig = { | |||
caster: this.obj.id, | |||
components: [{ | |||
idSource: this.obj.id, | |||
target: target, | |||
type: 'projectile', | |||
ttl: ttl, | |||
projectileOffset: null, | |||
particles: particles | |||
}] | |||
}; | |||
this.sendAnimation(projectileConfig); | |||
this.queueCallback(this.createChunk.bind(this, isRotten, target, particles), ttl, null, target); | |||
return true; | |||
}, | |||
createChunk: function (isRotten, pos, particles) { | |||
let cell = isRotten ? 73 : 72; | |||
particles.chance = 0.1; | |||
this.obj.instance.objects.buildObjects([{ | |||
sheetName: `${this.folderName}/images/mobs.png`, | |||
cell: cell, | |||
x: pos.x, | |||
y: pos.y, | |||
properties: { | |||
cpnPumpkinChunk: cpnPumpkinChunk, | |||
cpnParticles: { | |||
simplify: function () { | |||
return { | |||
type: 'particles', | |||
blueprint: this.blueprint | |||
}; | |||
}, | |||
blueprint: particles | |||
} | |||
}, | |||
extraProperties: { | |||
pumpkinChunk: { | |||
caster: this.obj, | |||
isRotten: isRotten | |||
} | |||
} | |||
}]); | |||
} | |||
}; |