From c79649d8a393c1174db1f723f30ea354b11ccf17 Mon Sep 17 00:00:00 2001
From: Bunny <glisa825@gmail.com>
Date: Sun, 29 Dec 2019 20:33:49 -0500
Subject: [PATCH] Better way of going about sleeping dragons

---
 .../vaults/auto/greater/sleeping-dragons.lua  | 20 +++++++++----------
 .../modules/tome/data/timed_effects/other.lua | 15 ++++++++++++++
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/game/modules/tome/data/maps/vaults/auto/greater/sleeping-dragons.lua b/game/modules/tome/data/maps/vaults/auto/greater/sleeping-dragons.lua
index 6f7ef42f94..271d79d991 100644
--- a/game/modules/tome/data/maps/vaults/auto/greater/sleeping-dragons.lua
+++ b/game/modules/tome/data/maps/vaults/auto/greater/sleeping-dragons.lua
@@ -65,8 +65,9 @@ local check_sleep = function(self)
       game.level.seen_wyrm_awoken = true
       game.log("The dragons here are asleep. You may try to steal their treasure... at your own risk.")
    end
-   if not self:hasEffect(self.EFF_SLEEP) then
-      self:setEffect(self.EFF_SLEEP, 999, {src=self, power=1, waking=0, insomnia=0, contagious=0})
+   if not self:hasEffect(self.EFF_DOZING) then
+      self:setEffect(self.EFF_DOZING, 999, {})
+	  self.energy.value = 0
    end
    return true
 end
@@ -78,7 +79,7 @@ local aggro_wyrm = function()
    game.level.wyrm_awoken = true
    for uid, e in pairs(game.level.entities) do
       if e.sleeping_wyrm == true then
-         e:removeEffect(e.EFF_SLEEP)
+         e:removeEffect(e.EFF_DOZING)
          e:setTarget(game.player)
       end
    end
@@ -104,9 +105,9 @@ local aggro_wyrm_grid = function(chance)
    end
    return g
 end
-defineTile('1', aggro_wyrm_grid(2), {random_filter={add_levels=25, type="money"}})
-defineTile('2', aggro_wyrm_grid(5), {random_filter={add_levels=10, tome_mod="uvault"}})
-defineTile('3', aggro_wyrm_grid(25), {random_filter={add_levels=15, tome_mod="gvault"}})
+defineTile('1', aggro_wyrm_grid(3), {random_filter={add_levels=25, type="money"}})
+defineTile('2', aggro_wyrm_grid(10), {random_filter={add_levels=15, tome_mod="uvault"}})
+defineTile('3', aggro_wyrm_grid(33), {random_filter={add_levels=25, tome_mod="gvault"}})
 defineTile('W', "FLOOR", nil,
    {entity_mod=function(e)
       e.make_escort = nil
@@ -118,8 +119,8 @@ defineTile('W', "FLOOR", nil,
       return e
    end,
    random_filter={special_rarity="wyrm_rarity",
-      add_levels=15,
-      random_boss={name_scheme="Sleeping #rng#", force_classes={Wyrmic=true}, nb_classes=0, loot_quality="store", loot_quantity=1, rank=3.5}
+      add_levels=10,
+      random_boss={name_scheme="Sleeping #rng#", force_classes={Wyrmic=true}, class_filter=function(d) return d.power_source and ((d.power_source.nature or d.power_source.technique) and not d.power_source.arcane) end, loot_quality="store", loot_quantity=1, rank=3.5}
       }
    }
 )
@@ -134,8 +135,7 @@ defineTile('D', "FLOOR", nil,
       return e
    end,
    random_filter={special_rarity="drake_rarity",
-      add_levels=15,
-      random_boss={name_scheme="Dozing #rng#", force_classes={Wyrmic=true}, nb_classes=0, loot_quality="store", loot_quantity=1, rank=3.5}
+      random_boss={name_scheme="Dozing #rng#", force_classes={Wyrmic=true}, class_filter=function(d) return d.power_source and ((d.power_source.nature or d.power_source.technique) and not d.power_source.arcane) end, nb_classes=1, loot_quality="store", loot_quantity=1, rank=3.5}
       }
    }
 )
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 7eb6f85cee..2f94a4d6b8 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -3973,4 +3973,19 @@ newEffect{
 			self:removeEffect(eff.src.EFF_FED_UPON, false, true)
 		end
 	end,
+}
+
+newEffect{
+	name = "DOZING", image = "talents/sleep.png",
+	desc = "Dozing",
+	long_desc = function(self, eff) return "The target is completely asleep, unable to act." end,
+	type = "other",
+	subtype = { sleep=true },
+	status = "detrimental",
+	parameters = { },
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "dont_act", 1)
+	end,
+	deactivate = function(self, eff)
+	end,
 }
\ No newline at end of file
-- 
GitLab