From e00578af726c832db022e600e6b4feed3efc8c89 Mon Sep 17 00:00:00 2001
From: Shibari <ShibariTOME@Gmail.com>
Date: Sat, 1 Apr 2017 13:15:11 -0400
Subject: [PATCH] Add player_material_tier property to shops that makes their
 material tier generate with player level / 10

Restock all shops every 10 player levels

Remove old manual restocks

Apply player_material_tier to all AoA basic shops
---
 game/modules/tome/class/Actor.lua             |  4 +++
 game/modules/tome/class/Store.lua             |  5 ++++
 .../tome/data/general/stores/basic.lua        | 26 +++++++++++++++++++
 .../modules/tome/data/quests/charred-scar.lua |  1 -
 game/modules/tome/data/quests/dreadfell.lua   |  1 -
 5 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 2d15bb8d0b..823622472b 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -3343,6 +3343,10 @@ function _M:levelup()
 	engine.interface.ActorLevel.levelup(self)
 	self:resolveLevelTalents()
 
+	-- Update shops and material tiers every 10 levels 
+	if self == game.player and self.level % 10 == 0 then
+		game.state:storesRestock()
+	end
 	if not self.no_points_on_levelup then
 		self.unused_stats = self.unused_stats + (self.stats_per_level or 3) + self:getRankStatAdjust()
 		self.unused_talents = self.unused_talents + 1
diff --git a/game/modules/tome/class/Store.lua b/game/modules/tome/class/Store.lua
index 22c125bfeb..12e22fb1f1 100644
--- a/game/modules/tome/class/Store.lua
+++ b/game/modules/tome/class/Store.lua
@@ -77,6 +77,11 @@ function _M:loadup(level, zone)
 		zone.max_material_level = 5
 	end
 
+	-- Increment material level every 10 levels
+	if self.store.player_material_level then
+		zone.min_material_level = 1
+		zone.min_material_level = math.floor(game.player.level / 10)
+	end
 	if Store.loadup(self, level, zone, self.store.nb_fill) then
 		self.last_filled = game.state.stores_restock
 	end
diff --git a/game/modules/tome/data/general/stores/basic.lua b/game/modules/tome/data/general/stores/basic.lua
index 946e854006..c2b63e0aa4 100644
--- a/game/modules/tome/data/general/stores/basic.lua
+++ b/game/modules/tome/data/general/stores/basic.lua
@@ -24,6 +24,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="armor", subtype="heavy", id=true, tome_drops="store"},
 			{type="armor", subtype="massive", id=true, tome_drops="store"},
@@ -40,6 +41,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="armor", subtype="light", id=true, tome_drops="store"},
 			{type="armor", subtype="hands", id=true, tome_drops="store"},
@@ -56,6 +58,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="armor", subtype="cloth", id=true, tome_drops="store"},
 			{type="armor", subtype="robe", id=true, tome_drops="store"},
@@ -72,6 +75,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="greatsword", id=true, tome_drops="store"},
 			{type="weapon", subtype="longsword", id=true, tome_drops="store"},
@@ -86,6 +90,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="waraxe", id=true, tome_drops="store"},
 			{type="weapon", subtype="battleaxe", id=true, tome_drops="store"},
@@ -100,6 +105,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="mindstar", id=true, tome_drops="store"},
 			{type="charm", subtype="torque", id=true, tome_drops="store"},
@@ -115,6 +121,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="greatmaul", id=true, tome_drops="store"},
 			{type="weapon", subtype="mace", id=true, tome_drops="store"},
@@ -129,6 +136,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{special=function(o) return o.type == "weapon" and o.twohanded end, id=true, tome_drops="store"},
 		},
@@ -155,6 +163,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="longbow", id=true, tome_drops="store"},
 			{type="weapon", subtype="sling", id=true, tome_drops="store"},
@@ -170,6 +179,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = function()
 			return {type="weapon", subtype="dagger", id=true, tome_drops="store"}
 		end,
@@ -182,6 +192,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = function()
 			return {type="weapon", subtype="staff", id=true, tome_drops="store"}
 		end,
@@ -195,6 +206,7 @@ newEntity{
 	store = {
 		purse = 10,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="scroll", subtype="infusion", id=true},
 		},
@@ -208,6 +220,7 @@ newEntity{
 	store = {
 		purse = 10,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="scroll", subtype="rune", id=true},
 		},
@@ -221,6 +234,7 @@ newEntity{
 	store = {
 		purse = 30,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="gem", id=true},
 		},
@@ -234,6 +248,7 @@ newEntity{
 	store = {
 		purse = 10,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="lite", id=true, tome_drops="store"},
 			{type="tool", subtype="digger", id=true, tome_drops="store"},
@@ -252,6 +267,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = function()
 			return rng.table{
 				{type="weapon", subtype="staff", id=true, tome_drops="store"},
@@ -270,6 +286,7 @@ newEntity{
 	store = {
 		purse = 20,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="jewelry", id=true},
 		},
@@ -312,6 +329,7 @@ newEntity{
 		nb_fill = 20,
 		purse = 35,
 		empty_before_restock = false,
+		player_material_tier = true,
 		sell_percent = 240,
 		filters = function()
 			return {id=true, ignore={type="money"}, add_levels=10, force_tome_drops=true, tome_drops="boss", tome_mod={money=0, basic=0}, special=function(o) return o.type ~= "scroll" end}
@@ -368,6 +386,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
                 filters = {
                         {type="armor", subtype="heavy", id=true, tome_drops="store"},
                         {type="armor", subtype="massive", id=true, tome_drops="store"},
@@ -387,6 +406,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
                 filters = {
                         {type="armor", subtype="light", id=true, tome_drops="store"},
                         {type="armor", subtype="hands", id=true, tome_drops="store"},
@@ -407,6 +427,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="greatsword", id=true, tome_drops="store"},
 			{type="weapon", subtype="longsword", id=true, tome_drops="store"},
@@ -425,6 +446,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="waraxe", id=true, tome_drops="store"},
 			{type="weapon", subtype="battleaxe", id=true, tome_drops="store"},
@@ -443,6 +465,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="greatmaul", id=true, tome_drops="store"},
 			{type="weapon", subtype="mace", id=true, tome_drops="store"},
@@ -461,6 +484,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = function()
 			return {type="weapon", subtype="dagger", id=true, tome_drops="store"}
 		end,
@@ -478,6 +502,7 @@ newEntity{
 	store = {
 		purse = 25,
 		empty_before_restock = false,
+		player_material_tier = true,
 		filters = {
 			{type="weapon", subtype="sling", id=true, tome_drops="store"},
 			{type="weapon", subtype="longbow", id=true, tome_drops="store"},
@@ -519,6 +544,7 @@ newEntity{
 -------------------------------------------------------------
 -- Arena
 -------------------------------------------------------------
+-- Should this use player_material_tier?
 newEntity{
 	define_as = "ARENA_SHOP",
 	name = "gladiator's wares",
diff --git a/game/modules/tome/data/quests/charred-scar.lua b/game/modules/tome/data/quests/charred-scar.lua
index 2557ed8dc7..b1017deb11 100644
--- a/game/modules/tome/data/quests/charred-scar.lua
+++ b/game/modules/tome/data/quests/charred-scar.lua
@@ -75,5 +75,4 @@ start_fyrk = function(self)
 		world:gainAchievement("CHARRED_SCAR_SUCCESS", game.player)
 	end
 	game.player:setQuestStatus("charred-scar", engine.Quest.COMPLETED)
-	game.state:storesRestock()
 end
diff --git a/game/modules/tome/data/quests/dreadfell.lua b/game/modules/tome/data/quests/dreadfell.lua
index f7a5bfd084..e743fd39a4 100644
--- a/game/modules/tome/data/quests/dreadfell.lua
+++ b/game/modules/tome/data/quests/dreadfell.lua
@@ -32,6 +32,5 @@ end
 on_status_change = function(self, who, status, sub)
 	if self:isCompleted() then
 		who:setQuestStatus(self.id, engine.Quest.DONE)
-		game.state:storesRestock()
 	end
 end
-- 
GitLab