@@ -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 | |||||
} | |||||
} | |||||
}]); | |||||
} | |||||
}; |