Implements TerritoryDecay/HealthDecayRate and Promotion/RequiredXp tech modifications.

This was SVN commit r11875.
This commit is contained in:
historic_bruno 2012-05-18 03:58:37 +00:00
parent 8fba8097ce
commit e7689342f8
2 changed files with 30 additions and 9 deletions

View File

@ -15,7 +15,13 @@ Promotion.prototype.Init = function()
Promotion.prototype.GetRequiredXp = function()
{
return +(this.template.RequiredXp);
var requiredXp = +this.template.RequiredXp;
var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager);
if (cmpTechMan)
requiredXp = cmpTechMan.ApplyModifications("Promotion/RequiredXp", requiredXp, this.entity);
return requiredXp;
};
Promotion.prototype.GetCurrentXp = function()
@ -89,18 +95,28 @@ Promotion.prototype.IncreaseXp = function(amount)
{
this.currentXp += +(amount);
if (this.currentXp >= this.template.RequiredXp)
{
if (this.currentXp >= this.GetRequiredXp())
{
var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager);
var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
var promotionTemplate = this.template;
var promotedTemplateName;
var requiredXp;
// We may be able to promote by skipping over multiple templates
// so find the highest level we can reach
do
{
this.currentXp -= promotionTemplate.RequiredXp;
var promotedTemplateName = promotionTemplate.Entity;
var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
requiredXp = +promotionTemplate.RequiredXp;
if (cmpTechMan)
requiredXp = cmpTechMan.ApplyModifications("Promotion/RequiredXp", requiredXp, this.entity);
this.currentXp -= requiredXp;
promotedTemplateName = promotionTemplate.Entity;
var template = cmpTemplateManager.GetTemplate(promotedTemplateName);
promotionTemplate = template.Promotion || null;
promotionTemplate = template.Promotion;
}
while (promotionTemplate != null && this.currentXp >= promotionTemplate.RequiredXp);
while (promotionTemplate && this.currentXp >= requiredXp);
this.Promote(promotedTemplateName);
}
}

View File

@ -72,7 +72,12 @@ TerritoryDecay.prototype.Decay = function()
if (!cmpHealth)
return; // error
cmpHealth.Reduce(+this.template.HealthDecayRate);
var decayRate = +this.template.HealthDecayRate;
var cmpTechMan = QueryOwnerInterface(this.entity, IID_TechnologyManager);
if (cmpTechMan)
decayRate = cmpTechMan.ApplyModifications("TerritoryDecay/HealthDecayRate", decayRate, this.entity);
cmpHealth.Reduce(Math.round(decayRate));
};
Engine.RegisterComponentType(IID_TerritoryDecay, "TerritoryDecay", TerritoryDecay);