Skip to content
Snippets Groups Projects
Commit 4a28d0cc authored by dg's avatar dg
Browse files

max stats/inc_stats

git-svn-id: http://svn.net-core.org/repos/t-engine4@213 51575b47-30f0-44d4-a5cc-537603b46e54
parent 2bd58e0c
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,7 @@ end
--- Initialises stats with default values if needed
function _M:init(t)
self.stats = t.stats or {}
self.inc_stats = t.inc_stats or {}
for i, s in ipairs(_M.stats_def) do
if self.stats[i] then
elseif self.stats[s.short_name] then
......@@ -37,6 +38,7 @@ function _M:init(t)
else
self.stats[i] = s.def
end
if not self.inc_stats[i] then self.inc_stats[i] = 0 end
end
end
......@@ -48,12 +50,12 @@ function _M:incStat(stat, val)
stat = _M.stats_def[stat].id
end
local old = self.stats[stat]
local old = self:getStat(stat)
self.stats[stat] = math.max(math.min(self.stats[stat] + val, _M.stats_def[stat].max), _M.stats_def[stat].min)
if self.stats[stat] - old ~= 0 then
self:onStatChange(stat, self.stats[stat] - old)
if self:getStat(stat) ~= old then
self:onStatChange(stat, self:getStat(stat) - old)
end
return self.stats[stat] - old
return self:getStat(stat) - old
end
--- Gets a stat value
......@@ -62,13 +64,15 @@ end
-- @param stat the stat id
-- @param scale a scaling factor, nil means max stat value
function _M:getStat(stat, scale)
local val
local val, inc
if type(stat) == "string" then
val = self.stats[_M.stats_def[stat].id]
inc = self.inc_stats[_M.stats_def[stat].id]
else
val = self.stats[stat]
inc = self.inc_stats[stat]
end
val = util.bound(val, _M.stats_def[stat].min, _M.stats_def[stat].max)
val = util.bound(val, _M.stats_def[stat].min, _M.stats_def[stat].max) + inc
if scale then
val = math.floor(val * scale / _M.stats_def[stat].max)
end
......
......@@ -66,17 +66,34 @@ function _M:getDesc()
desc[#desc+1] = reqs
end
if self.encumber then
desc[#desc+1] = ("#67AD00#%0.2f Encumberance.", self.encumber)
end
if self.combat then
local dm = {}
for stat, i in pairs(self.combat.dammod or {}) do
dm[#dm+1] = ("+%d%% %s"):format(i * 100, Stats.stats_def[stat].name)
end
desc[#desc+1] = ("%d Damage (%s), %d Attack, %d Armor Peneration, Crit %d%%"):format(self.combat.dam or 0, table.concat(dm, ','), self.combat.atk or 0, self.combat.apr or 0, self.combat.physcrit or 0)
desc[#desc+1] = ("%d Damage [Range %0.2f] (%s), %d Attack, %d Armor Peneration, Crit %d%%"):format(self.combat.dam or 0, self.combat.damrange or 1.1, table.concat(dm, ','), self.combat.atk or 0, self.combat.apr or 0, self.combat.physcrit or 0)
desc[#desc+1] = ""
end
local w = self.wielder or {}
if w.combat_armor or w.combat_def then desc[#desc+1] = ("Armor %d, Defense %d"):format(w.combat_armor or 0, w.combat_def or 0) end
if w.fatigue then desc[#desc+1] = ("Fatigue %d%%"):format(w.fatigue) end
if w.inc_stats then
local dm = {}
for stat, i in pairs(w.inc_stats) do
dm[#dm+1] = ("%d %s"):format(i, Stats.stats_def[stat].name)
end
desc[#desc+1] = ("Increases stats: %s."):format(table.concat(dm, ','))
end
if w.max_life then desc[#desc+1] = ("Maximun life %d"):format(w.max_life) end
if w.max_mana then desc[#desc+1] = ("Maximun mana %d"):format(w.max_mana) end
if w.max_stamina then desc[#desc+1] = ("Maximun stamina %d"):format(w.max_stamina) end
if w.combat_spellpower or w.combat_spellcrit then desc[#desc+1] = ("Spellpower %d, Spell Crit %d%%"):format(w.combat_spellpower or 0, w.combat_spellcrit or 0) end
......
......@@ -20,6 +20,7 @@ newEntity{
blind_immune = 1,
see_invisible = 2,
undead = 1,
}
newEntity{ base = "BASE_NPC_SKELETON",
......
......@@ -7,7 +7,7 @@ newEntity{
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_CUN] = resolvers.mbonus(8, 2) },
inc_stats = { [Stats.STAT_CUN] = resolvers.mbonus(8, 2) },
},
}
newEntity{
......@@ -16,6 +16,6 @@ newEntity{
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_WIL] = resolvers.mbonus(8, 2) },
inc_stats = { [Stats.STAT_WIL] = resolvers.mbonus(8, 2) },
},
}
......@@ -137,7 +137,7 @@ newEntity{
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_STR] = resolvers.mbonus(8, 2) },
inc_stats = { [Stats.STAT_STR] = resolvers.mbonus(8, 2) },
},
}
newEntity{
......@@ -146,7 +146,7 @@ newEntity{
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_DEX] = resolvers.mbonus(8, 2) },
inc_stats = { [Stats.STAT_DEX] = resolvers.mbonus(8, 2) },
},
}
newEntity{
......@@ -155,7 +155,7 @@ newEntity{
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_MAG] = resolvers.mbonus(8, 2) },
inc_stats = { [Stats.STAT_MAG] = resolvers.mbonus(8, 2) },
},
}
newEntity{
......@@ -164,6 +164,6 @@ newEntity{
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_CON] = resolvers.mbonus(8, 2) },
inc_stats = { [Stats.STAT_CON] = resolvers.mbonus(8, 2) },
},
}
......@@ -28,6 +28,6 @@ newEntity{
wielder = {
combat_spellpower = resolvers.mbonus(30, 3),
max_mana = resolvers.mbonus(100, 10),
stats = { [Stats.STAT_MAG] = resolvers.mbonus(5, 1), [Stats.STAT_WIL] = resolvers.mbonus(5, 1) },
inc_stats = { [Stats.STAT_MAG] = resolvers.mbonus(5, 1), [Stats.STAT_WIL] = resolvers.mbonus(5, 1) },
},
}
-- Special items, used for quests
newEntity{
unique = true, quest=true,
slot = "MAINHAND",
type = "weapon", subtype="staff",
name = "Staff of Absorption",
level_range = {30, 30},
display = "\\", color=colors.VIOLET,
encumber = 7,
desc = [[Carved with runes of power this staff seems to have been made long ago. Yet it retains no signs of tarnishment.
Light around it seems to dim and you can feel its tremoundous power simply by touching it.]],
require = { stat = { mag=60 }, },
combat = {
dam = 30,
apr = 4,
atk = 20,
dammod = {mag=1},
},
wielder = {
combat_spellpower = 20,
combat_spellcrit = 10,
},
}
......@@ -43,7 +43,7 @@ function _M:incStat(v)
self:simplePopup("Not enough stat points", "You have no stat points left!")
return
end
if self.actor:isStatMax(self.sel) then
if self.actor:isStatMax(self.sel) or self.actor:getStat(self.sel) >= 60 then
self:simplePopup("Stat is at the maximun", "You can not increase this stat further!")
return
end
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment