Browse Source

moved stattranslations to server and trading can now support multiple currency item worths

1460-move-crafting-to-mod
Shaun 4 years ago
parent
commit
4e3409675a
6 changed files with 125 additions and 262 deletions
  1. +4
    -68
      src/client/js/misc/statTranslations.js
  2. +18
    -3
      src/client/ui/templates/trade/trade.js
  3. +46
    -18
      src/server/components/trade.js
  4. +56
    -0
      src/server/config/clientConfig.js
  5. +0
    -172
      src/server/config/maps/fjolarok/zone.js
  6. +1
    -1
      src/server/world/map.js

+ 4
- 68
src/client/js/misc/statTranslations.js View File

@@ -1,77 +1,13 @@
define([
'../system/globals'
], function (
globals
) {
let stats = {
vit: 'vitality',
regenHp: 'health regeneration',
manaMax: 'maximum mana',
regenMana: 'mana regeneration',
str: 'strength',
int: 'intellect',
dex: 'dexterity',
armor: 'armor',

blockAttackChance: 'chance to block attacks',
blockSpellChance: 'chance to block spells',

dodgeAttackChance: 'chance to dodge attacks',
dodgeSpellChance: 'chance to dodge spells',

addCritChance: 'global crit chance',
addCritMultiplier: 'global crit multiplier',
addAttackCritChance: 'attack crit chance',
addAttackCritMultiplier: 'attack crit multiplier',
addSpellCritChance: 'spell crit chance',
addSpellCritMultiplier: 'spell crit multiplier',
magicFind: 'increased item quality',
itemQuantity: 'increased item quantity',
sprintChance: 'sprint chance',
allAttributes: 'to all attributes',
xpIncrease: 'additional xp per kill',
lvlRequire: 'level requirement reduction',

elementArcanePercent: 'increased arcane damage',
elementFrostPercent: 'increased frost damage',
elementFirePercent: 'increased fire damage',
elementHolyPercent: 'increased holy damage',
elementPoisonPercent: 'increased poison damage',
physicalPercent: 'increased physical damage',

elementPercent: 'increased elemental damage',
spellPercent: 'increased spell damage',

elementAllResist: 'all resistance',
elementArcaneResist: 'arcane resistance',
elementFrostResist: 'frost resistance',
elementFireResist: 'fire resistance',
elementHolyResist: 'holy resistance',
elementPoisonResist: 'poison resistance',

attackSpeed: 'attack speed',
castSpeed: 'cast speed',

lifeOnHit: 'life gained on hit',

auraReserveMultiplier: 'aura mana reservation multiplier',

//This stat is used for gambling when you can't see the stats
stats: 'stats',

//Fishing
weight: 'lb',
//Rods
catchChance: 'extra catch chance',
catchSpeed: 'faster catch speed',
fishRarity: 'higher fish rarity',
fishWeight: 'increased fish weight',
fishItems: 'extra chance to hook items'
};
const { clientConfig: { statTranslations } } = globals;

return {
translate: function (stat) {
return stats[stat];
return statTranslations[stat];
}
};
});

+ 18
- 3
src/client/ui/templates/trade/trade.js View File

@@ -100,10 +100,25 @@ define([
$('<div class="no-afford"></div>').appendTo(itemEl);
}

if (item.worth.currency)
item.worthText = item.worth.amount + 'x ' + item.worth.currency;
else
let worth = item.worth;
if (typeof(worth) === 'number')
item.worthText = ~~(itemList.markup * item.worth);
else {
if (!worth.push)
worth = [worth];

item.worthText = worth
.map(w => {
const { currency, amount } = w;

const result = `${amount}x ${currency}`;

return result;
})
.join('<br />');

item.worthText = '<br />' + item.worthText;
}
}

this.center();


+ 46
- 18
src/server/components/trade.js View File

@@ -137,8 +137,16 @@ module.exports = {
markup = target.trade.markup.buy;
}

const eventMsg = {
items: itemList,
markup,
action: msg.action
};

events.emit('onBeforeGetTradeList', eventMsg);

this.obj.syncer.set(true, 'trade', 'buyList', {
markup: markup,
markup,
items: itemList,
buyback: (msg.action === 'buyback')
});
@@ -239,13 +247,27 @@ module.exports = {
sendMessage(this.obj, 'color-greenB', `Unlocked skin: ${item.name}.`);
}

if (item.worth.currency) {
let currencyItem = this.obj.inventory.items.find(i => (i.name === item.worth.currency));
this.obj.inventory.destroyItem(currencyItem.id, item.worth.amount, true);
} else {
targetTrade.gold += ~~(item.worth * markup);
this.gold -= ~~(item.worth * markup);
const eventMsg = {
item,
worth: ~~(item.worth * targetTrade.markup.buy),
action: msg.action
};
events.emit('onBeforeTradeItem', eventMsg);
let { worth } = eventMsg;

if (typeof(worth) === 'number') {
targetTrade.gold += ~~(worth * markup);
this.gold -= ~~(worth * markup);
this.obj.syncer.set(true, 'trade', 'gold', this.gold);
} else {
if (!worth.push)
worth = [worth];

worth.forEach(w => {
let currencyItem = this.obj.inventory.items.find(i => (i.name === w.name));
this.obj.inventory.destroyItem(currencyItem.id, w.quantity, true);
});
}

//Hack to always redraw the UI (to give items the red overlay if they can't be afforded)
@@ -278,19 +300,24 @@ module.exports = {
if (oldQuantity)
item.quantity = oldQuantity;

const sellEventMsg = {
const eventMsg = {
item,
worth: ~~(item.worth * targetTrade.markup.buy)
worth: ~~(item.worth * targetTrade.markup.buy),
action: 'sell'
};
events.emit('onBeforeSellItem', sellEventMsg);
events.emit('onBeforeTradeItem', eventMsg);
const { worth } = sellEventMsg;
let { worth } = eventMsg;

if (typeof(worth) !== 'object') {
if (typeof(worth) === 'number') {
this.gold += worth;
syncer.set(true, 'trade', 'gold', this.gold);
} else
inventory.getItem(worth, false, false, false, true);
} else {
if (!worth.push)
worth = [worth];

worth.forEach(w => inventory.getItem(w, false, false, false, true));
}

syncer.setArray(true, 'trade', 'removeItems', item.id);

@@ -325,14 +352,15 @@ module.exports = {

const itemList = extend([], this.obj.inventory.items.filter(i => i.worth && !i.eq));

const sellEventMsg = {
const eventMsg = {
items: itemList,
markup: target.trade.markup.buy
markup: target.trade.markup.sell,
action: 'sell'
};

events.emit('onBeforeGetSellList', sellEventMsg);
events.emit('onBeforeGetTradeList', eventMsg);

this.obj.syncer.set(true, 'trade', 'sellList', sellEventMsg);
this.obj.syncer.set(true, 'trade', 'sellList', eventMsg);
},

startBuyback: function (msg) {


+ 56
- 0
src/server/config/clientConfig.js View File

@@ -33,6 +33,62 @@ const config = {
player: [],
npc: []
},
statTranslations: {
vit: 'vitality',
regenHp: 'health regeneration',
manaMax: 'maximum mana',
regenMana: 'mana regeneration',
str: 'strength',
int: 'intellect',
dex: 'dexterity',
armor: 'armor',

blockAttackChance: 'chance to block attacks',
blockSpellChance: 'chance to block spells',

dodgeAttackChance: 'chance to dodge attacks',
dodgeSpellChance: 'chance to dodge spells',

addCritChance: 'global crit chance',
addCritMultiplier: 'global crit multiplier',
addAttackCritChance: 'attack crit chance',
addAttackCritMultiplier: 'attack crit multiplier',
addSpellCritChance: 'spell crit chance',
addSpellCritMultiplier: 'spell crit multiplier',
magicFind: 'increased item quality',
itemQuantity: 'increased item quantity',
sprintChance: 'sprint chance',
allAttributes: 'to all attributes',
xpIncrease: 'additional xp per kill',
lvlRequire: 'level requirement reduction',

elementArcanePercent: 'increased arcane damage',
elementFrostPercent: 'increased frost damage',
elementFirePercent: 'increased fire damage',
elementHolyPercent: 'increased holy damage',
elementPoisonPercent: 'increased poison damage',
physicalPercent: 'increased physical damage',

elementPercent: 'increased elemental damage',
spellPercent: 'increased spell damage',

elementAllResist: 'all resistance',
elementArcaneResist: 'arcane resistance',
elementFrostResist: 'frost resistance',
elementFireResist: 'fire resistance',
elementHolyResist: 'holy resistance',
elementPoisonResist: 'poison resistance',

attackSpeed: 'attack speed',
castSpeed: 'cast speed',

lifeOnHit: 'life gained on hit',

auraReserveMultiplier: 'aura mana reservation multiplier',

//This stat is used for gambling when you can't see the stats
stats: 'stats'
},
tos
};



+ 0
- 172
src/server/config/maps/fjolarok/zone.js View File

@@ -382,178 +382,6 @@ module.exports = {
}
}
}
},
'alchemy workbench': {
components: {
cpnParticles: {
simplify: function () {
return {
type: 'particles',
blueprint: {
color: {
start: ['ff4252', 'ff4252'],
end: ['a82841', 'a82841']
},
scale: {
start: {
min: 2,
max: 10
},
end: {
min: 0,
max: 2
}
},
speed: {
start: {
min: 4,
max: 16
},
end: {
min: 2,
max: 8
}
},
lifetime: {
min: 1,
max: 4
},
randomScale: true,
randomSpeed: true,
chance: 0.2,
randomColor: true,
spawnType: 'rect',
spawnRect: {
x: -15,
y: -28,
w: 30,
h: 8
}
}
};
}
},
cpnWorkbench: {
type: 'alchemy'
}
}
},
etchbench: {
components: {
cpnParticles: {
simplify: function () {
return {
type: 'particles',
blueprint: {
color: {
start: ['ff4252', 'ff4252'],
end: ['a82841', 'a82841']
},
scale: {
start: {
min: 2,
max: 10
},
end: {
min: 0,
max: 2
}
},
speed: {
start: {
min: 4,
max: 16
},
end: {
min: 2,
max: 8
}
},
lifetime: {
min: 1,
max: 4
},
randomScale: true,
randomSpeed: true,
chance: 0.2,
randomColor: true,
spawnType: 'rect',
spawnRect: {
x: -15,
y: -28,
w: 30,
h: 8
}
}
};
}
},
cpnWorkbench: {
type: 'etching'
}
}
},
fireplace: {
components: {
cpnWorkbench: {
type: 'cooking'
}
}
},
'enchanting shrine': {
components: {
cpnParticles: {
simplify: function () {
return {
type: 'particles',
blueprint: {
color: {
start: ['48edff', 'fc66f7'],
end: ['393268', '42548d']
},
scale: {
start: {
min: 2,
max: 10
},
end: {
min: 0,
max: 2
}
},
speed: {
start: {
min: 4,
max: 16
},
end: {
min: 2,
max: 8
}
},
lifetime: {
min: 1,
max: 4
},
randomScale: true,
randomSpeed: true,
chance: 0.2,
randomColor: true,
spawnType: 'rect',
spawnRect: {
x: -15,
y: -28,
w: 30,
h: 8
}
}
};
}
},
cpnWorkbench: {
type: 'enchanting'
}
}
}
},
mobs: {


+ 1
- 1
src/server/world/map.js View File

@@ -365,7 +365,7 @@ module.exports = {
ignore: false
};
events.emit('onBeforeBuildMapObject', buildObjectMsg);
if (buildObjectMsg.built)
if (buildObjectMsg.ignore)
return;

//Fixes for newer versions of tiled


Loading…
Cancel
Save