Differential D1201 Diff 5488 ps/trunk/binaries/data/mods/public/simulation/components/AuraManager.js
Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/components/AuraManager.js
Show First 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | AuraManager.prototype.ApplyTemplateBonus = function(value, player, classes, newData, key) | ||||
} | } | ||||
// first time added this aura | // first time added this aura | ||||
data.multiply = newData.multiply; | data.multiply = newData.multiply; | ||||
data.add = newData.add; | data.add = newData.add; | ||||
data.count = 1; | data.count = 1; | ||||
let cache = this.templateModificationsCache.get(value).get(player); | let cache = this.templateModificationsCache.get(value).get(player); | ||||
if (!cache.get(classes)) | |||||
cache.set(classes, new Map()); | |||||
if (!cache.get(classes).get(key)) | // Do not use the classes array from the JSON file directly, since that is not synchronized | ||||
cache.get(classes).set(key, { "add": 0, "multiply": 1 }); | // See MatchesClassList for supported classes formats | ||||
for (let className of classes) | |||||
{ | |||||
if (Array.isArray(className)) | |||||
className = className.join("+"); | |||||
if (!cache.get(className)) | |||||
cache.set(className, new Map()); | |||||
if (!cache.get(className).get(key)) | |||||
cache.get(className).set(key, { "add": 0, "multiply": 1 }); | |||||
if (data.add) | if (data.add) | ||||
cache.get(classes).get(key).add += data.add; | cache.get(className).get(key).add += data.add; | ||||
if (data.multiply) | if (data.multiply) | ||||
cache.get(classes).get(key).multiply *= data.multiply; | cache.get(className).get(key).multiply *= data.multiply; | ||||
} | |||||
Engine.PostMessage(SYSTEM_ENTITY, MT_TemplateModification, { | Engine.PostMessage(SYSTEM_ENTITY, MT_TemplateModification, { | ||||
"player": player, | "player": player, | ||||
"component": value.split("/")[0], | "component": value.split("/")[0], | ||||
"valueNames": [value] | "valueNames": [value] | ||||
}); | }); | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | AuraManager.prototype.RemoveTemplateBonus = function(value, player, classes, key) | ||||
if (!data || !data.count) | if (!data || !data.count) | ||||
return; | return; | ||||
data.count--; | data.count--; | ||||
if (data.count > 0) | if (data.count > 0) | ||||
return; | return; | ||||
this.templateModificationsCache.get(value).get(player).get(classes).delete(key); | for (let className of classes) | ||||
if (this.templateModificationsCache.get(value).get(player).get(classes).size == 0) | { | ||||
this.templateModificationsCache.get(value).get(player).delete(classes); | if (Array.isArray(className)) | ||||
className = className.join("+"); | |||||
this.templateModificationsCache.get(value).get(player).get(className).delete(key); | |||||
if (this.templateModificationsCache.get(value).get(player).get(className).size == 0) | |||||
this.templateModificationsCache.get(value).get(player).delete(className); | |||||
} | |||||
// clean up the object | // clean up the object | ||||
p.delete(key); | p.delete(key); | ||||
if (p.size == 0) | if (p.size == 0) | ||||
v.delete(player); | v.delete(player); | ||||
Engine.PostMessage(SYSTEM_ENTITY, MT_TemplateModification, { | Engine.PostMessage(SYSTEM_ENTITY, MT_TemplateModification, { | ||||
"player": player, | "player": player, | ||||
Show All 27 Lines | AuraManager.prototype.ApplyTemplateModifications = function(valueName, value, player, template) | ||||
if (!template || !template.Identity) | if (!template || !template.Identity) | ||||
return value; | return value; | ||||
var classes = GetIdentityClasses(template.Identity); | var classes = GetIdentityClasses(template.Identity); | ||||
var usedKeys = new Set(); | var usedKeys = new Set(); | ||||
var add = 0; | var add = 0; | ||||
var multiply = 1; | var multiply = 1; | ||||
for (let [className, mods] of cache) | for (let [className, mods] of cache) | ||||
{ | { | ||||
if (!MatchesClassList(classes, className)) | if (!MatchesClassList(classes, [className])) | ||||
continue; | continue; | ||||
for (let [key, mod] of mods) | for (let [key, mod] of mods) | ||||
{ | { | ||||
// don't add an aura with the same key twice | // don't add an aura with the same key twice | ||||
if (usedKeys.has(key)) | if (usedKeys.has(key)) | ||||
continue; | continue; | ||||
add += mod.add; | add += mod.add; | ||||
Show All 18 Lines |
Wildfire Games · Phabricator