Переглянути джерело

Merge branch '525-remove-cleric-necro' into 'v0.1.10'

Resolve "Remove necro and cleric classes"

See merge request Isleward/isleward!267
tags/v0.1.10^2
Big Bad Waffle 6 роки тому
джерело
коміт
a0417b8b77
17 змінених файлів з 915 додано та 762 видалено
  1. +8
    -12
      src/client/ui/templates/createCharacter/createCharacter.js
  2. +7
    -1
      src/client/ui/templates/createCharacter/styles.less
  3. +2
    -2
      src/server/components/auth.js
  4. +15
    -1
      src/server/components/extensions/factionVendor.js
  5. +1
    -3
      src/server/config/animations.js
  6. +2
    -16
      src/server/config/classes.js
  7. +23
    -1
      src/server/config/maps/tutorial/dialogues.js
  8. +699
    -625
      src/server/config/maps/tutorial/zone.js
  9. +53
    -0
      src/server/config/roleSkins.js
  10. +18
    -6
      src/server/config/roles.js
  11. +49
    -85
      src/server/config/skins.js
  12. +1
    -1
      src/server/items/generator.js
  13. +3
    -0
      src/server/items/generators/worth.js
  14. +30
    -6
      src/server/mods/class-necromancer/index.js
  15. +2
    -2
      src/server/mods/event-halloween/index.js
  16. +1
    -1
      src/server/mods/event-xmas/maps/tutorial/events/xmas.js
  17. +1
    -0
      src/server/world/worker.js

+ 8
- 12
src/client/ui/templates/createCharacter/createCharacter.js Переглянути файл

@@ -59,8 +59,8 @@ define([


this.costume = -1; this.costume = -1;


this.class = Object.keys(result)[0] || '';
this.find('.txtClass').html(this.class);
this.class = 'wizard';
this.find('.txtClass').html('Wizard');


this.changeCostume({ this.changeCostume({
target: this.find('.txtCostume') target: this.find('.txtCostume')
@@ -142,38 +142,34 @@ define([


changeClass: function (e) { changeClass: function (e) {
var el = $(e.target); var el = $(e.target);
var classes = Object.keys(this.classSprites);
var nextIndex = (classes.indexOf(el.html()) + 1) % classes.length;
var classes = ['wizard', 'warrior', 'thief'];
var nextIndex = (classes.indexOf(this.class) + 1) % classes.length;
this.costume = -1; this.costume = -1;


var newClass = classes[nextIndex]; var newClass = classes[nextIndex];


el.html(newClass);
el.html(newClass[0].toUpperCase() + newClass.substr(1));


this.class = newClass; this.class = newClass;

this.changeCostume({
target: this.find('.txtCostume')
});
}, },


changeCostume: function (e) { changeCostume: function (e) {
var el = $(e.target); var el = $(e.target);


var spriteList = this.classSprites[this.class];
var spriteList = this.classSprites;
if (!spriteList) if (!spriteList)
return; return;


this.costume = (this.costume + 1) % spriteList.length; this.costume = (this.costume + 1) % spriteList.length;
this.skinId = spriteList[this.costume].id; this.skinId = spriteList[this.costume].id;


el.html((this.costume + 1) + '/' + spriteList.length);
el.html(spriteList[this.costume].name);


this.setSprite(); this.setSprite();
}, },


setSprite: function () { setSprite: function () {
var classSprite = this.classSprites[this.class][this.costume];
var classSprite = this.classSprites[this.costume];
var costume = classSprite.sprite.split(','); var costume = classSprite.sprite.split(',');
var spirteX = -costume[0] * 8; var spirteX = -costume[0] * 8;
var spriteY = -costume[1] * 8; var spriteY = -costume[1] * 8;


+ 7
- 1
src/client/ui/templates/createCharacter/styles.less Переглянути файл

@@ -46,9 +46,15 @@
} }
} }


.txtClass {
&:before {
content: 'Class: ';
}
}

.txtCostume { .txtCostume {
&:before { &:before {
content: 'costume ';
content: 'Skin: ';
} }
} }
} }


+ 2
- 2
src/server/components/auth.js Переглянути файл

@@ -273,8 +273,8 @@ define([
var list = [...this.skins, ...roles.getSkins(this.username)]; var list = [...this.skins, ...roles.getSkins(this.username)];
var skinList = skins.getSkinList(list); var skinList = skins.getSkinList(list);


if (!skinList[character.class].some(s => (s.id == character.skinId))) {
character.skinId = character.class + ' 1';
if (!skinList.some(s => (s.id == character.skinId))) {
character.skinId = '1.0';


character.cell = skins.getCell(character.skinId); character.cell = skins.getCell(character.skinId);
character.sheetName = skins.getSpritesheet(character.skinId); character.sheetName = skins.getSpritesheet(character.skinId);


+ 15
- 1
src/server/components/extensions/factionVendor.js Переглянути файл

@@ -159,10 +159,24 @@ define([
var skinBlueprint = skins.getBlueprint(item.id); var skinBlueprint = skins.getBlueprint(item.id);
item.name = skinBlueprint.name; item.name = skinBlueprint.name;
item.sprite = skinBlueprint.sprite; item.sprite = skinBlueprint.sprite;
} else if (item.generate) {
var generated = generator.generate(item);
if (item.worth)
generated.worth = item.worth;
if (item.infinite)
generated.infinite = true;
item = generated;
} }


list.items.push(item);
var id = 0;
list.items.forEach(function (checkItem) {
if (checkItem.id >= id)
id = checkItem.id + 1;
});

item.id = id;


list.items.push(item);
} }
}, },




+ 1
- 3
src/server/config/animations.js Переглянути файл

@@ -40,9 +40,7 @@ define([
frames: 5, frames: 5,
frameDelay: 3 frameDelay: 3
} }
}
},
cleric: {
},
'4': { '4': {
hitStaff: { hitStaff: {
sheet: 'animChar', sheet: 'animChar',


+ 2
- 16
src/server/config/classes.js Переглянути файл

@@ -4,15 +4,12 @@ define([
events events
) { ) {
var classes = { var classes = {
list: ['warrior', 'wizard', 'thief'],
portraits: { portraits: {
warrior: { warrior: {
x: 0, x: 0,
y: 0 y: 0
}, },
cleric: {
x: 1,
y: 0
},
wizard: { wizard: {
x: 2, x: 2,
y: 0 y: 0
@@ -24,7 +21,6 @@ define([
}, },
spells: { spells: {
wizard: ['magic missile', 'ice spear'], wizard: ['magic missile', 'ice spear'],
cleric: ['smite', 'consecrate'],
warrior: ['slash', 'charge'], warrior: ['slash', 'charge'],
thief: ['flurry', 'smokebomb'] thief: ['flurry', 'smokebomb']
}, },
@@ -38,15 +34,6 @@ define([
int: 1 int: 1
} }
}, },
cleric: {
values: {
hpMax: 60
},
vitScale: 10,
gainStats: {
int: 1
}
},
warrior: { warrior: {
values: { values: {
hpMax: 80 hpMax: 80
@@ -68,9 +55,8 @@ define([
}, },
weapons: { weapons: {
wizard: 'Gnarled Staff', wizard: 'Gnarled Staff',
cleric: 'Wand',
thief: 'Dagger', thief: 'Dagger',
warrior: 'Axe'
warrior: 'Sword'
}, },


getSpritesheet: function (className) { getSpritesheet: function (className) {


+ 23
- 1
src/server/config/maps/tutorial/dialogues.js Переглянути файл

@@ -193,7 +193,7 @@ module.exports = {
'1': { '1': {
msg: [{ msg: [{
msg: `Is there anything I can help you with today?`, msg: `Is there anything I can help you with today?`,
options: [1.1]
options: [1.1, 1.2, 1.3]
}], }],
options: { options: {
'1.1': { '1.1': {
@@ -203,6 +203,14 @@ module.exports = {
return !!fullSet; return !!fullSet;
}, },
goto: 'tradeCards' goto: 'tradeCards'
},
'1.2': {
msg: `I would like to buy some runes`,
goto: 'tradeBuy'
},
'1.3': {
msg: `I have some items I would like to sell`,
goto: 'tradeSell'
} }
} }
}, },
@@ -232,6 +240,20 @@ module.exports = {


return `Thank you.`; return `Thank you.`;
} }
},
tradeBuy: {
cpn: 'trade',
method: 'startBuy',
args: [{
targetName: 'vikar'
}]
},
tradeSell: {
cpn: 'trade',
method: 'startSell',
args: [{
targetName: 'vikar'
}]
} }
}, },
priest: { priest: {


+ 699
- 625
src/server/config/maps/tutorial/zone.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 53
- 0
src/server/config/roleSkins.js Переглянути файл

@@ -0,0 +1,53 @@
define([

], function (

) {
var empty = [];
var regular = ['1.0', '1.2', '1.6'];

var mtx = [
['10.0', '10.1', '10.2', '10.3', '10.4'],
['11.0', '11.1', '11.2', '11.3', '11.4']
];
var pA = [];
var pB = [];
var pC = [];
var pD = [];

mtx.forEach(function (m) {
m.forEach(function (s, i) {
var has = [pD];
if (i <= 2)
has.push(pC);
if (i <= 1)
has.push(pB);
if (i == 0)
has.push(pA);

has.forEach(function (h) {
h.push(s);
});
});
});

return [
//Regular Player
empty.concat(...regular), [],
[],
[],
[],
//Moderator
empty.concat(...regular),
//Patron Level 1
empty.concat(...regular, ...pA),
//Patron Level 2
empty.concat(...regular, ...pB),
//Patron Level 3
empty.concat(...regular, ...pC),
//Patron Level 4
empty.concat(...regular, ...pD),
//Admin
['*']
];
});

+ 18
- 6
src/server/config/roles.js Переглянути файл

@@ -1,7 +1,7 @@
define([ define([
'./roleSkins'
], function ( ], function (
roleSkins
) { ) {
return { return {
accounts: { accounts: {
@@ -15,9 +15,7 @@ define([
sprite: [12, 0], sprite: [12, 0],
keyId: 'world' keyId: 'world'
}], }],
skins: [
'1.1', '1.2', '1.3', '1.4', '1.5', 'bearded wizard', '2.1', '2.2', '2.3', '2.4', '2.5'
]
skins: []
} }
}, },


@@ -77,7 +75,21 @@ define([
}, },


getSkins: function (account) { getSkins: function (account) {
return this.accounts[account] ? this.accounts[account].skins : [];
var skins = [];
var account = this.accounts[account] || {
skins: []
};
(account.skins || []).forEach(function (s) {
skins.push(s);
});

var roleSkinList = roleSkins[account.level || 0];
roleSkinList.forEach(function (s) {
skins.push(s);
});

skins = skins.filter((s, i) => (skins.indexOf(s) == i));
return skins;
}, },


sendMessage: function (player, msg) { sendMessage: function (player, msg) {


+ 49
- 85
src/server/config/skins.js Переглянути файл

@@ -4,123 +4,96 @@ define([
events events
) { ) {
var config = { var config = {
'wizard 1': {
'1.0': {
name: 'Wizard 1', name: 'Wizard 1',
sprite: [2, 0],
class: 'wizard',
default: true
sprite: [2, 0]
}, },
'wizard 2': {
'1.1': {
name: 'Wizard 2', name: 'Wizard 2',
sprite: [3, 0],
class: 'wizard',
default: true
sprite: [3, 0]
}, },
'warrior 1': {
'1.2': {
name: 'Warrior 1', name: 'Warrior 1',
sprite: [1, 1],
class: 'warrior',
default: true
sprite: [1, 1]
}, },
'warrior 2': {
'1.3': {
name: 'Warrior 2', name: 'Warrior 2',
sprite: [2, 1],
class: 'warrior',
default: true
sprite: [2, 1]
}, },
'cleric 1': {
'1.4': {
name: 'Cleric 1', name: 'Cleric 1',
sprite: [4, 0],
class: 'cleric',
default: true
sprite: [4, 0]
}, },
'cleric 2': {
'1.5': {
name: 'Cleric 2', name: 'Cleric 2',
sprite: [5, 0],
class: 'cleric',
default: true
sprite: [5, 0]
}, },
'thief 1': {
'1.6': {
name: 'Thief 1', name: 'Thief 1',
sprite: [6, 0],
class: 'thief',
default: true
sprite: [6, 0]
}, },
'thief 2': {
'1.7': {
name: 'Thief 2', name: 'Thief 2',
sprite: [7, 0],
class: 'thief',
default: true
sprite: [7, 0]
}, },


'gaekatla druid': {
'2.0': {
name: 'Skin: Gaekatlan Druid', name: 'Skin: Gaekatlan Druid',
sprite: [0, 4],
class: 'cleric'
sprite: [0, 4]
}, },


//Elite Skin Pack //Elite Skin Pack
'1.1': {
'10.0': {
name: 'Sorcerer', name: 'Sorcerer',
spritesheet: 'images/skins/0001.png', spritesheet: 'images/skins/0001.png',
sprite: [0, 0],
class: 'wizard'
sprite: [0, 0]
}, },
'1.2': {
'10.1': {
name: 'Diviner', name: 'Diviner',
spritesheet: 'images/skins/0001.png', spritesheet: 'images/skins/0001.png',
sprite: [1, 0],
class: 'cleric'
sprite: [1, 0]
}, },
'1.3': {
'10.2': {
name: 'Cutthroat', name: 'Cutthroat',
spritesheet: 'images/skins/0001.png', spritesheet: 'images/skins/0001.png',
sprite: [2, 0],
class: 'thief'
sprite: [2, 0]
}, },
'1.4': {
'10.3': {
name: 'Man of War', name: 'Man of War',
spritesheet: 'images/skins/0001.png', spritesheet: 'images/skins/0001.png',
sprite: [3, 0],
class: 'warrior'
sprite: [3, 0]
}, },
'1.5': {
'10.4': {
name: 'Occultist', name: 'Occultist',
spritesheet: 'images/skins/0001.png', spritesheet: 'images/skins/0001.png',
sprite: [4, 0],
class: 'necromancer'
sprite: [4, 0]
}, },


//Templar Skin Pack //Templar Skin Pack
'2.1': {
'11.0': {
name: 'Crusader 1', name: 'Crusader 1',
spritesheet: 'images/skins/0010.png', spritesheet: 'images/skins/0010.png',
sprite: [0, 0],
class: ['cleric', 'warrior']
sprite: [0, 0]
}, },
'2.2': {
'11.1': {
name: 'Crusader 2', name: 'Crusader 2',
spritesheet: 'images/skins/0010.png', spritesheet: 'images/skins/0010.png',
sprite: [1, 0],
class: ['cleric', 'warrior']
sprite: [1, 0]
}, },
'2.3': {
'11.2': {
name: 'Crusader 3', name: 'Crusader 3',
spritesheet: 'images/skins/0010.png', spritesheet: 'images/skins/0010.png',
sprite: [2, 0],
class: ['cleric', 'warrior']
sprite: [2, 0]
}, },
'2.4': {
'11.3': {
name: 'Crusader 4', name: 'Crusader 4',
spritesheet: 'images/skins/0010.png', spritesheet: 'images/skins/0010.png',
sprite: [3, 0],
class: ['cleric', 'warrior']
sprite: [3, 0]
}, },
'2.5': {
'11.4': {
name: 'Grand Crusader', name: 'Grand Crusader',
spritesheet: 'images/skins/0010.png', spritesheet: 'images/skins/0010.png',
sprite: [4, 0],
class: ['cleric', 'warrior']
sprite: [4, 0]
} }
}; };


@@ -136,7 +109,7 @@ define([
getSkinList: function (skins) { getSkinList: function (skins) {
var list = Object.keys(config) var list = Object.keys(config)
.filter(function (s) { .filter(function (s) {
return ((config[s].default) || (skins.some(f => (f == s))));
return ((config[s].default) || (skins.some(f => ((f == s) || (f == '*')))));
}) })
.map(function (s) { .map(function (s) {
var res = extend(true, {}, config[s]); var res = extend(true, {}, config[s]);
@@ -144,35 +117,26 @@ define([
return res; return res;
}); });


var result = {};
var result = [];
list.forEach(function (skin) { list.forEach(function (skin) {
var classList = skin.class;
if (!classList.push)
classList = [classList];

classList.forEach(function (className) {
if (!result[className])
result[className] = [];

result[className].push({
name: skin.name,
id: skin.id,
sprite: skin.sprite[0] + ',' + skin.sprite[1],
spritesheet: skin.spritesheet
});
}, this);
});
result.push({
name: skin.name,
id: skin.id,
sprite: skin.sprite[0] + ',' + skin.sprite[1],
spritesheet: skin.spritesheet
});
}, this);


return result; return result;
}, },


getCell: function (skinId) { getCell: function (skinId) {
var skin = config[skinId];
var skin = config[skinId] || config['1.0'];
return (skin.sprite[1] * 8) + skin.sprite[0]; return (skin.sprite[1] * 8) + skin.sprite[0];
}, },


getSpritesheet: function (skinId) { getSpritesheet: function (skinId) {
var skin = config[skinId];
var skin = config[skinId] || config['1.0'];
return skin.spritesheet || 'characters'; return skin.spritesheet || 'characters';
} }
}; };


+ 1
- 1
src/server/items/generator.js Переглянути файл

@@ -15,7 +15,7 @@ define([
) { ) {
var generators = [g1, g2, g3, g4, g5, g6, g11, g7]; var generators = [g1, g2, g3, g4, g5, g6, g11, g7];
var materialGenerators = [g6, g8]; var materialGenerators = [g6, g8];
var spellGenerators = [g1, g9];
var spellGenerators = [g1, g9, g7];
var currencyGenerators = [g10]; var currencyGenerators = [g10];


var generator = { var generator = {


+ 3
- 0
src/server/items/generators/worth.js Переглянути файл

@@ -6,6 +6,9 @@ define([
return { return {
generate: function (item, blueprint) { generate: function (item, blueprint) {
item.worth = ~~(Math.pow(item.level, 1.5) + (Math.pow((item.quality + 1), 2) * 10)); item.worth = ~~(Math.pow(item.level, 1.5) + (Math.pow((item.quality + 1), 2) * 10));

if (item.spell)
item.worth *= 5;
} }
}; };
}); });

+ 30
- 6
src/server/mods/class-necromancer/index.js Переглянути файл

@@ -21,6 +21,31 @@ define([
this.events.on('onBeforeGetSpellTemplate', this.beforeGetSpellTemplate.bind(this)); this.events.on('onBeforeGetSpellTemplate', this.beforeGetSpellTemplate.bind(this));
this.events.on('onBeforeGetResourceList', this.beforeGetResourceList.bind(this)); this.events.on('onBeforeGetResourceList', this.beforeGetResourceList.bind(this));
this.events.on('onBeforeGetAnimations', this.beforeGetAnimations.bind(this)); this.events.on('onBeforeGetAnimations', this.beforeGetAnimations.bind(this));
this.events.on('onAfterGetZone', this.onAfterGetZone.bind(this));
},

onAfterGetZone: function (zone, config) {
if (zone != 'tutorial')
return;

var newRunes = [{
generate: true,
spell: true,
spellQuality: 'basic',
infinite: true,
spellName: 'harvest life',
worth: 3
}, {
generate: true,
spell: true,
spellQuality: 'basic',
infinite: true,
spellName: 'summon skeleton',
worth: 3
}];

var vikarTrade = config.mobs.vikar.properties.cpnTrade;
Array.prototype.push.apply(vikarTrade.items.extra, newRunes);
}, },


beforeGetAnimations: function (animations) { beforeGetAnimations: function (animations) {
@@ -85,7 +110,7 @@ define([
}, },


beforeGetClasses: function (classes) { beforeGetClasses: function (classes) {
classes.spells.necromancer = ['harvest life', 'summon skeleton'];
/*classes.spells.necromancer = ['harvest life', 'summon skeleton'];
classes.stats.necromancer = { classes.stats.necromancer = {
values: { values: {
hpMax: 65 hpMax: 65
@@ -102,7 +127,7 @@ define([
spritesheet: `${this.folderName}/images/avatar.png`, spritesheet: `${this.folderName}/images/avatar.png`,
x: 0, x: 0,
y: 0 y: 0
};
};*/
}, },


beforeGetSpellTemplate: function (spell) { beforeGetSpellTemplate: function (spell) {
@@ -115,12 +140,11 @@ define([
}, },


beforeGetSkins: function (skins) { beforeGetSkins: function (skins) {
skins['necromancer 1'] = {
skins['1.8'] = {
name: 'Necromancer 1', name: 'Necromancer 1',
sprite: [0, 0], sprite: [0, 0],
class: 'necromancer',
spritesheet: `${this.folderName}/images/inGameSprite.png`,
default: true
class: 'wizard',
spritesheet: `${this.folderName}/images/inGameSprite.png`
}; };
}, },




+ 2
- 2
src/server/mods/event-halloween/index.js Переглянути файл

@@ -103,10 +103,10 @@ define([
}, },


onBeforeGetSkins: function (skins) { onBeforeGetSkins: function (skins) {
skins['pumpkin-head necromancer'] = {
skins['3.0'] = {
name: 'Pumpkin-Head Necromancer', name: 'Pumpkin-Head Necromancer',
sprite: [0, 0], sprite: [0, 0],
class: 'necromancer',
class: 'wizard',
spritesheet: `${this.folderName}/images/skins.png` spritesheet: `${this.folderName}/images/skins.png`
}; };
}, },


+ 1
- 1
src/server/mods/event-xmas/maps/tutorial/events/xmas.js Переглянути файл

@@ -183,7 +183,7 @@ define([
}, },
forceItems: [{ forceItems: [{
type: 'skin', type: 'skin',
id: 'bearded wizard',
id: '3.1',
infinite: true, infinite: true,
worth: { worth: {
currency: `Unique Snowflake`, currency: `Unique Snowflake`,


+ 1
- 0
src/server/world/worker.js Переглянути файл

@@ -58,6 +58,7 @@ requirejs([
return; return;


console.log('Error Logged: ' + e.toString()); console.log('Error Logged: ' + e.toString());
console.log(e.stack);


io.set({ io.set({
ent: new Date(), ent: new Date(),


Завантаження…
Відмінити
Зберегти