Ticket #3424: 3424.diff
File 3424.diff, 3.0 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/simulation/components/Looter.js
5 5 6 6 /** 7 7 * Try to collect loot from target entity 8 8 */ 9 9 Looter.prototype.Collect = function(targetEntity) 10 10 { 11 11 var cmpLoot = Engine.QueryInterface(targetEntity, IID_Loot); 12 12 if (!cmpLoot) 13 13 return; 14 14 15 // Add experience points as defined in the template 15 16 var xp = cmpLoot.GetXp(); 16 17 if (xp > 0) 17 18 { 18 19 var cmpPromotion = Engine.QueryInterface(this.entity, IID_Promotion); 19 20 if (cmpPromotion) 20 21 cmpPromotion.IncreaseXp(xp); 21 22 } 22 var cmpPlayer = QueryOwnerInterface(this.entity); 23 24 // Add resources as defined in the templates 23 25 var resources = cmpLoot.GetResources(); 24 for (var type in resources)25 {26 // TODO: could we do this conversion more transparently? 27 for (let type in resources) 26 28 resources[type] = ApplyValueModificationsToEntity("Looter/Resource/"+type, resources[type], this.entity); 27 }28 cmpPlayer.AddResources(resources);29 30 let cmpStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);31 if (cmpStatisticsTracker)32 cmpStatisticsTracker.IncreaseLootCollectedCounter(resources);33 29 34 // If target entity has trader component, add carried goods to loot too30 // Loot resources of traders 35 31 var cmpTrader = Engine.QueryInterface(targetEntity, IID_Trader); 36 32 if (cmpTrader) 37 33 { 38 34 var carriedGoods = cmpTrader.GetGoods(); 39 35 if (carriedGoods.amount && carriedGoods.amount.traderGain) 40 36 { 41 // Convert from {type:<type>,amount:<amount>} to {<type>:<amount>} 42 var resourcesToAdd = {}; 43 resourcesToAdd[carriedGoods.type] = carriedGoods.amount.traderGain; 44 if (carriedGoods.amount.market1Gain) 45 resourcesToAdd[carriedGoods.type] += carriedGoods.amount.market1Gain; 46 if (carriedGoods.amount.market2Gain) 47 resourcesToAdd[carriedGoods.type] += carriedGoods.amount.market2Gain; 48 cmpPlayer.AddResources(resourcesToAdd); 49 50 let cmpStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker); 51 if (cmpStatisticsTracker) 52 cmpStatisticsTracker.IncreaseLootCollectedCounter(resourcesToAdd); 37 resources[carriedGoods.type] += carriedGoods.amount.traderGain; 38 resources[carriedGoods.type] += carriedGoods.amount.market1Gain ? carriedGoods.amount.market1Gain : 0; 39 resources[carriedGoods.type] += carriedGoods.amount.market2Gain ? carriedGoods.amount.market2Gain : 0; 53 40 } 54 41 } 42 43 // Transfer resources 44 var cmpPlayer = QueryOwnerInterface(this.entity); 45 cmpPlayer.AddResources(resources); 46 47 // Update statistics 48 let cmpStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker); 49 if (cmpStatisticsTracker) 50 cmpStatisticsTracker.IncreaseLootCollectedCounter(resources); 55 51 }; 56 52 57 53 Engine.RegisterComponentType(IID_Looter, "Looter", Looter);