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

Stores now have a limit on the price they can give for an item, it changes from stores to stores

git-svn-id: http://svn.net-core.org/repos/t-engine4@1608 51575b47-30f0-44d4-a5cc-537603b46e54
parent a2f63b7e
No related branches found
No related tags found
No related merge requests found
......@@ -106,8 +106,8 @@ function _M:transfer(src, dest, item, nb)
local o = src:removeObject(src_inven, item)
dest:addObject(dest_inven, o)
end
self:sortInven(store)
who:sortInven(inven)
src:sortInven(src_inven)
dest:sortInven(dest_inven)
end
function _M:doBuy(who, o, item, nb, store_dialog)
......
......@@ -30,10 +30,13 @@ function _M:loadStores(f)
end
function _M:init(t, no_default)
t.buy_percent = t.buy_percent or 10
t.sell_percent = t.sell_percent or 100
t.store.buy_percent = t.store.buy_percent or 10
t.store.sell_percent = t.store.sell_percent or 100
t.store.purse = t.store.purse or 20
Store.init(self, t, no_default)
self.name = self.name .. (" (Max buy %0.2f gold)"):format(self.store.purse)
if self.store and self.store.restock_after then self.store.restock_after = self.store.restock_after * 10 end
end
......@@ -44,9 +47,9 @@ end
-- @param nb number of items (if stacked) to buy
-- @return true if allowed to buy
function _M:tryBuy(who, o, item, nb)
local price = o:getPrice() * self.sell_percent / 100
local price = o:getPrice() * self.store.sell_percent / 100
if who.money >= price * nb then
return nb, price * nb --FINISH ME !!!!
return nb, price * nb
else
Dialog:simplePopup("Not enough gold", "You do not have enough gold!")
end
......@@ -59,8 +62,9 @@ end
-- @param nb number of items (if stacked) to sell
-- @return true if allowed to sell
function _M:trySell(who, o, item, nb)
local price = o:getPrice() * self.buy_percent / 100
local price = o:getPrice() * self.store.buy_percent / 100
if price <= 0 or nb <= 0 then return end
price = math.min(price * nb, self.store.purse)
return nb, price
end
......@@ -73,7 +77,7 @@ end
-- @return true if allowed to buy
function _M:onBuy(who, o, item, nb, before)
if before then return end
local price = o:getPrice() * self.sell_percent / 100
local price = o:getPrice() * self.store.sell_percent / 100
if who.money >= price * nb then
who:incMoney(- price * nb)
end
......@@ -89,17 +93,19 @@ end
function _M:onSell(who, o, item, nb, before)
if before then o:identify(true) return end
local price = o:getPrice() * self.buy_percent / 100
local price = o:getPrice() * self.store.buy_percent / 100
if price <= 0 or nb <= 0 then return end
who:incMoney(price * nb)
price = math.min(price * nb, self.store.purse)
who:incMoney(price)
end
--- Override the default
function _M:doBuy(who, o, item, nb, store_dialog)
nb = math.min(nb, o:getNumber())
nb = self:tryBuy(who, o, item, nb)
local price
nb, price = self:tryBuy(who, o, item, nb)
if nb then
Dialog:yesnoPopup("Buy", ("Buy %d %s for %0.2f gold"):format(nb, o:getName{do_color=true, no_count=true}), function(ok) if ok then
Dialog:yesnoPopup("Buy", ("Buy %d %s for %0.2f gold"):format(nb, o:getName{do_color=true, no_count=true}, price), function(ok) if ok then
self:onBuy(who, o, item, nb, true)
self:transfer(self, who, item, nb)
self:onBuy(who, o, item, nb, false)
......@@ -111,9 +117,10 @@ end
--- Override the default
function _M:doSell(who, o, item, nb, store_dialog)
nb = math.min(nb, o:getNumber())
nb = self:trySell(who, o, item, nb)
local price
nb, price = self:trySell(who, o, item, nb)
if nb then
Dialog:yesnoPopup("Sell", ("Sell %d %s for %0.2f gold"):format(nb, o:getName{do_color=true, no_count=true}), function(ok) if ok then
Dialog:yesnoPopup("Sell", ("Sell %d %s for %0.2f gold"):format(nb, o:getName{do_color=true, no_count=true}, price), function(ok) if ok then
self:onSell(who, o, item, nb, true)
self:transfer(who, self, item, nb)
self:onSell(who, o, item, nb, false)
......@@ -129,11 +136,11 @@ end
-- @return a string (possibly multiline) describing the object
function _M:descObject(who, what, o)
if what == "buy" then
local desc = tstring({"font", "bold"}, {"color", "GOLD"}, ("Buy for: %0.2f gold (You have %0.2f gold)"):format(o:getPrice() * self.sell_percent / 100, who.money), {"font", "normal"}, {"color", "LAST"}, true, true)
local desc = tstring({"font", "bold"}, {"color", "GOLD"}, ("Buy for: %0.2f gold (You have %0.2f gold)"):format(o:getPrice() * self.store.sell_percent / 100, who.money), {"font", "normal"}, {"color", "LAST"}, true, true)
desc:merge(o:getDesc())
return desc
else
local desc = tstring({"font", "bold"}, {"color", "GOLD"}, ("Sell for: %0.2f gold (You have %0.2f gold)"):format(o:getPrice() * self.buy_percent / 100, who.money), {"font", "normal"}, {"color", "LAST"}, true, true)
local desc = tstring({"font", "bold"}, {"color", "GOLD"}, ("Sell for: %0.2f gold (You have %0.2f gold)"):format(o:getPrice() * self.store.buy_percent / 100, who.money), {"font", "normal"}, {"color", "LAST"}, true, true)
desc:merge(o:getDesc())
return desc
end
......@@ -146,9 +153,9 @@ end
-- @return a string describing the price
function _M:descObjectPrice(who, what, o)
if what == "buy" then
return o:getPrice() * self.sell_percent / 100, who.money
return o:getPrice() * self.store.sell_percent / 100, who.money
else
return o:getPrice() * self.buy_percent / 100, who.money
return o:getPrice() * self.store.buy_percent / 100, who.money
end
end
......
......@@ -22,6 +22,7 @@ newEntity{
name = "general store",
display = '1', color=colors.LIGHT_UMBER,
store = {
purse = 10,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -41,6 +42,7 @@ newEntity{
name = "armour smith",
display = '2', color=colors.UMBER,
store = {
purse = 25,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -57,6 +59,7 @@ newEntity{
name = "weapon smith",
display = '3', color=colors.UMBER,
store = {
purse = 25,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -74,6 +77,7 @@ newEntity{
name = "alchemist store",
display = '4', color=colors.LIGHT_BLUE,
store = {
purse = 10,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -90,6 +94,7 @@ newEntity{
name = "scribe store",
display = '5', color=colors.WHITE,
store = {
purse = 10,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -107,6 +112,7 @@ newEntity{
name = "gem store",
display = '9', color=colors.BLUE,
store = {
purse = 30,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -123,6 +129,7 @@ newEntity{
name = "staves and wands store",
display = '6', color=colors.RED,
store = {
purse = 25,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -142,6 +149,7 @@ newEntity{
name = "jewelry store",
display = '2', color=colors.BLUE,
store = {
purse = 20,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......@@ -159,6 +167,7 @@ newEntity{
name = "rare goods",
display = '7', color=colors.BLUE,
store = {
purse = 35,
restock_after = 1000,
empty_before_restock = true,
buy_percent = 10,
......
......@@ -37,29 +37,27 @@ newTalent{
local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="stone_shards", trail="earthtrail"}}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
self:projectile(tg, x, y, DamageType.SPLIT_BLEED, self:spellCrit(self:combatTalentSpellDamage(t, 20, 120)), nil)
self:projectile(tg, x, y, DamageType.SPLIT_BLEED, self:spellCrit(self:combatTalentSpellDamage(t, 15, 120)), nil)
game:playSoundNear(self, "talents/earth")
--missile #2 (Talent Level 3 Bonus Missile)
if self:getTalentLevel(t) >= 3 then
local tg2 = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="stone_shards", trail="earthtrail"}}
local x, y = self:getTarget(tg2)
if not x or not y then return nil end
self:projectile(tg2, x, y, DamageType.SPLIT_BLEED, self:spellCrit(self:combatTalentSpellDamage(t, 20, 120)), nil)
game:playSoundNear(self, "talents/earth")
else end
--missile #3 (Talent Level 5 Bonus Missile)
--missile #2
local tg2 = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="stone_shards", trail="earthtrail"}}
local x, y = self:getTarget(tg2)
if not x or not y then return nil end
self:projectile(tg2, x, y, DamageType.SPLIT_BLEED, self:spellCrit(self:combatTalentSpellDamage(t, 15, 120)), nil)
game:playSoundNear(self, "talents/earth")
--missile #3 (Talent Level 4 Bonus Missile)
if self:getTalentLevel(t) >= 5 then
local tg3 = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="stone_shards", trail="earthtrail"}}
local x, y = self:getTarget(tg3)
if not x or not y then return nil end
self:projectile(tg3, x, y, DamageType.SPLIT_BLEED, self:spellCrit(self:combatTalentSpellDamage(t, 20, 120)), nil)
self:projectile(tg3, x, y, DamageType.SPLIT_BLEED, self:spellCrit(self:combatTalentSpellDamage(t, 15, 120)), nil)
game:playSoundNear(self, "talents/earth")
else end
return true
end,
info = function(self, t)
return ([[Conjures stalactite shaped rocks that you fire individually at any target or targets in range. Each missile deals %0.2f physical damage and an additional %0.2f bleeding damage over six turns.
At talent level 1 you conjure a single missile, at talent level 3 two missiles, and at talent level 5 three missiles.
return ([[Conjures stalactite shaped rocks that you target individually at any target or targets in range. Each missile deals %0.2f physical damage and an additional %0.2f bleeding damage over six turns.
At talent level 1 you conjure two missile with an additional missile at talent level 5.
The damage will increase with the Magic stat]]):format(damDesc(self, DamageType.PHYSICAL, self:combatTalentSpellDamage(t, 20, 120)/2), damDesc(self, DamageType.PHYSICAL, self:combatTalentSpellDamage(t, 20, 120)/2))
end,
}
......
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