function Looter() {} Looter.prototype.Schema = ""; /** * Try to collect loot from target entity */ Looter.prototype.Collect = function(targetEntity) { var cmpLoot = Engine.QueryInterface(targetEntity, IID_Loot); if (!cmpLoot) return; var xp = cmpLoot.GetXp(); if (xp > 0) { var cmpPromotion = Engine.QueryInterface(this.entity, IID_Promotion); if (cmpPromotion) cmpPromotion.IncreaseXp(xp); } var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player); cmpPlayer.AddResources(cmpLoot.GetResources()); // If target entity has trader component, add carried goods to loot too var cmpTrader = Engine.QueryInterface(targetEntity, IID_Trader); if (cmpTrader) { var carriedGoods = cmpTrader.GetGoods(); if (carriedGoods.amount > 0) { // Convert from {type:,amount:} to {:} var resourcesToAdd = {}; resourcesToAdd[carriedGoods.type] = carriedGoods.amount; cmpPlayer.AddResources(resourcesToAdd); } } } Engine.RegisterComponentType(IID_Looter, "Looter", Looter);