diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua index 786c80a8b80daf44587c87a948366f9b0116511d..4962e47b7391f252e0717321ac0f51a72b520577 100644 --- a/game/engine/Zone.lua +++ b/game/engine/Zone.lua @@ -21,7 +21,7 @@ require "engine.class" local Savefile = require "engine.Savefile" local Map = require "engine.Map" local Astar = require "engine.Astar" -local print = function() end +--local print = function() end --- Defines a zone: a set of levels, with depth, nps, objects, level generator, ... module(..., package.seeall, class.make) @@ -85,11 +85,12 @@ end --- Parses the npc/objects list and compute rarities for random generation -- ONLY entities with a rarity properties will be considered.<br/> -- This means that to get a never-random entity you simply do not put a rarity property on it. -function _M:computeRarities(type, list, level, filter, add_level) +function _M:computeRarities(type, list, level, filter, add_level, rarity_field) + rarity_field = rarity_field or "rarity" local r = { total=0 } print("******************", level.level) for i, e in ipairs(list) do - if e.rarity and e.level_range and (not filter or filter(e)) then + if e[rarity_field] and e.level_range and (not filter or filter(e)) then -- print("computing rarity of", e.name) local lev = self.base_level + (level.level - 1) + (add_level or 0) @@ -97,8 +98,8 @@ function _M:computeRarities(type, list, level, filter, add_level) if lev < e.level_range[1] then max = 10000 / (3 * (e.level_range[1] - lev)) elseif e.level_range[2] and lev > e.level_range[2] then max = 10000 / (lev - e.level_range[2]) end - local genprob = math.floor(max / e.rarity) - print(("Entity(%30s) got %3d (=%3d / %3d) chance to generate. Level range(%2d-%2s), current %2d"):format(e.name, math.floor(genprob), math.floor(max), e.rarity, e.level_range[1], e.level_range[2] or "--", lev)) + local genprob = math.floor(max / e[rarity_field]) + print(("Entity(%30s) got %3d (=%3d / %3d) chance to generate. Level range(%2d-%2s), current %2d"):format(e.name, math.floor(genprob), math.floor(max), e[rarity_field], e.level_range[1], e.level_range[2] or "--", lev)) -- Generate and store egos list if needed if e.egos and e.egos_chance then diff --git a/game/modules/tome/data/general/npcs/naga.lua b/game/modules/tome/data/general/npcs/naga.lua index 07e11bc32a1056776e74163c10664440b5eb91e9..87410aec799872f0df6ab588605e98d5344a5c46 100644 --- a/game/modules/tome/data/general/npcs/naga.lua +++ b/game/modules/tome/data/general/npcs/naga.lua @@ -52,7 +52,7 @@ Myrmidons are the most devoted warriors, following the orders of Maglor whatever rarity = 1, max_life = resolvers.rngavg(120,150), life_rating = 16, resolvers.equip{ - {type="weapon", subtype="trident", autoreq=true}, + {type="weapon", subtype="trident", autoreq=true, special_rarity="trident_rarity"}, }, combat_armor = 20, combat_def = 10, resolvers.talents{ @@ -100,7 +100,7 @@ Psyrens are dangerous naga that can directly assault your mind.]], female = true, max_life = resolvers.rngavg(100,110), life_rating = 11, resolvers.equip{ - {type="weapon", subtype="trident", autoreq=true}, + {type="weapon", subtype="trident", autoreq=true, special_rarity="trident_rarity"}, }, combat_armor = 5, combat_def = 10, autolevel = "wildcaster", diff --git a/game/modules/tome/data/general/objects/2htridents.lua b/game/modules/tome/data/general/objects/2htridents.lua index 9e1ef64a69dfe8c89496055c98085fca6e1fa56e..912d9122a460638f31f1bc14931efd7bf3869e0f 100644 --- a/game/modules/tome/data/general/objects/2htridents.lua +++ b/game/modules/tome/data/general/objects/2htridents.lua @@ -25,7 +25,7 @@ newEntity{ add_name = " (#COMBAT#)", display = "|", color=colors.AQUAMARINE, encumber = 3, - rarity = 5, + trident_rarity = 5, -- Special rarity field, converted to "rarity" when needed metallic = true, no_rust = true, combat = { talented = "axe", damrange = 1.6, sound = "actions/melee", sound_miss = "actions/melee_miss", }, diff --git a/game/modules/tome/data/general/objects/objects.lua b/game/modules/tome/data/general/objects/objects.lua index e930c7abf906fa28298abe59678ed2acd8324366..a08a0b7f7fcc7cbf9f8d21074fa1dd265653ff4f 100644 --- a/game/modules/tome/data/general/objects/objects.lua +++ b/game/modules/tome/data/general/objects/objects.lua @@ -17,53 +17,60 @@ -- Nicolas Casalini "DarkGod" -- darkgod@te4.org +local loadIfNot = function(f) + if loaded[f] then return end + load(f, entity_mod) +end + -- Misc -load("/data/general/objects/money.lua") -load("/data/general/objects/gem.lua") -load("/data/general/objects/lites.lua") +loadIfNot("/data/general/objects/money.lua") +loadIfNot("/data/general/objects/gem.lua") +loadIfNot("/data/general/objects/lites.lua") -- Usable stuff -load("/data/general/objects/potions.lua") -load("/data/general/objects/scrolls.lua") -load("/data/general/objects/wands.lua") +loadIfNot("/data/general/objects/potions.lua") +loadIfNot("/data/general/objects/scrolls.lua") +loadIfNot("/data/general/objects/wands.lua") -- Jewelry stuff -load("/data/general/objects/jewelry.lua") +loadIfNot("/data/general/objects/jewelry.lua") -- Weapons -load("/data/general/objects/staves.lua") -load("/data/general/objects/knifes.lua") +loadIfNot("/data/general/objects/staves.lua") +loadIfNot("/data/general/objects/knifes.lua") + +loadIfNot("/data/general/objects/swords.lua") +loadIfNot("/data/general/objects/2hswords.lua") -load("/data/general/objects/swords.lua") -load("/data/general/objects/2hswords.lua") +loadIfNot("/data/general/objects/maces.lua") +loadIfNot("/data/general/objects/2hmaces.lua") -load("/data/general/objects/maces.lua") -load("/data/general/objects/2hmaces.lua") +loadIfNot("/data/general/objects/axes.lua") +loadIfNot("/data/general/objects/2haxes.lua") -load("/data/general/objects/axes.lua") -load("/data/general/objects/2haxes.lua") +loadIfNot("/data/general/objects/2htridents.lua") -load("/data/general/objects/bows.lua") -load("/data/general/objects/slings.lua") +loadIfNot("/data/general/objects/bows.lua") +loadIfNot("/data/general/objects/slings.lua") -- Armours -load("/data/general/objects/shields.lua") -load("/data/general/objects/cloth-armors.lua") -load("/data/general/objects/light-armors.lua") -load("/data/general/objects/heavy-armors.lua") -load("/data/general/objects/massive-armors.lua") +loadIfNot("/data/general/objects/shields.lua") +loadIfNot("/data/general/objects/cloth-armors.lua") +loadIfNot("/data/general/objects/light-armors.lua") +loadIfNot("/data/general/objects/heavy-armors.lua") +loadIfNot("/data/general/objects/massive-armors.lua") -- Head, feet, hands, ... -load("/data/general/objects/leather-caps.lua") -load("/data/general/objects/helms.lua") -load("/data/general/objects/wizard-hat.lua") -load("/data/general/objects/leather-boots.lua") -load("/data/general/objects/heavy-boots.lua") ---load("/data/general/objects/gloves.lua") +loadIfNot("/data/general/objects/leather-caps.lua") +loadIfNot("/data/general/objects/helms.lua") +loadIfNot("/data/general/objects/wizard-hat.lua") +loadIfNot("/data/general/objects/leather-boots.lua") +loadIfNot("/data/general/objects/heavy-boots.lua") +--loadIfNot("/data/general/objects/gloves.lua") -- Mounts -load("/data/general/objects/mounts.lua") +loadIfNot("/data/general/objects/mounts.lua") -- Artifacts -load("/data/general/objects/world-artifacts.lua") -load("/data/general/objects/quest-artifacts.lua") +loadIfNot("/data/general/objects/world-artifacts.lua") +loadIfNot("/data/general/objects/quest-artifacts.lua") diff --git a/game/modules/tome/data/zones/caverns-osse/objects.lua b/game/modules/tome/data/zones/caverns-osse/objects.lua index 3ce6462edbc5bd17f7326f466e64797d6e4e9cb2..0df3dc37bf9377019ee2e68c40224ace5407cfa3 100644 --- a/game/modules/tome/data/zones/caverns-osse/objects.lua +++ b/game/modules/tome/data/zones/caverns-osse/objects.lua @@ -17,8 +17,8 @@ -- Nicolas Casalini "DarkGod" -- darkgod@te4.org +load("/data/general/objects/2htridents.lua", function(e) e.rarity = e.trident_rarity end) load("/data/general/objects/objects.lua") -load("/data/general/objects/2htridents.lua") local Talents = require "engine.interface.ActorTalents" local Stats = require "engine.interface.ActorStats" diff --git a/game/modules/tome/data/zones/flooded-cave/objects.lua b/game/modules/tome/data/zones/flooded-cave/objects.lua index 5916651b1df7e5022f18d00bb4c241d7aefb64cc..91fe78608cbeb2a5f1844c01dcc8c2e6c6aa2436 100644 --- a/game/modules/tome/data/zones/flooded-cave/objects.lua +++ b/game/modules/tome/data/zones/flooded-cave/objects.lua @@ -21,8 +21,8 @@ local Talents = require "engine.interface.ActorTalents" local Stats = require "engine.interface.ActorStats" local DamageType = require "engine.DamageType" +load("/data/general/objects/2htridents.lua", function(e) e.rarity = e.trident_rarity end) load("/data/general/objects/objects.lua") -load("/data/general/objects/2htridents.lua") -- Artifact, droped (and used!) by Bill the Stone Troll diff --git a/game/modules/tome/data/zones/high-peak/npcs.lua b/game/modules/tome/data/zones/high-peak/npcs.lua index bd88faf808c8ff5feb0741df46b9fa779d6cf50e..57f89d275be75be46ab780187b5142d05d8e30c1 100644 --- a/game/modules/tome/data/zones/high-peak/npcs.lua +++ b/game/modules/tome/data/zones/high-peak/npcs.lua @@ -16,7 +16,8 @@ -- -- Nicolas Casalini "DarkGod" -- darkgod@te4.org - +load("/data/general/npcs/naga.lua", rarity(6)) +--[[ -- Orcs & trolls load("/data/general/npcs/orc-grushnak.lua", rarity(0)) load("/data/general/npcs/orc-vor.lua", rarity(0)) @@ -40,7 +41,7 @@ load("/data/general/npcs/ghoul.lua", rarity(2)) load("/data/general/npcs/skeleton.lua", rarity(3)) load("/data/general/npcs/all.lua", rarity(4, 35)) - +]] local Talents = require("engine.interface.ActorTalents") -- Alatar & Palando, the final bosses