diff --git a/game/engine/interface/PlayerRun.lua b/game/engine/interface/PlayerRun.lua index 752f13c764689691b709ad49579fd39e2f657b91..2f7748f1eada39702a880ab794f94bab2b544098 100644 --- a/game/engine/interface/PlayerRun.lua +++ b/game/engine/interface/PlayerRun.lua @@ -75,6 +75,7 @@ function _M:runStep() return false else self:moveDir(self.running.dir) + if not self.running then return false end self.running.cnt = self.running.cnt + 1 if self.running.newdir then self.running.dir = self.running.newdir diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 5ed29c2acba1fbcb5a3aa1d85dd9cbe302f6efd4..77bc5efaeaa59da076a3673a68fef6c8538c9af1 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -183,7 +183,8 @@ function _M:probabilityTravel(x, y, dist) return true end ---- Reveals location surrounding the actor +--- Quake a zone +-- Moves randomly each grid to an other grid function _M:doQuake(tg, x, y) local locs = {} local ms = {} @@ -288,16 +289,20 @@ function _M:onTakeHit(value, src) return value end +function _M:resolveSource() + if self.summoner_gain_exp and self.summoner then + return self.summoner:resolveSource() + else + return self + end +end + function _M:die(src) engine.interface.ActorLife.die(self, src) -- Gives the killer some exp for the kill if src then - if src.summoner_gain_exp and src.summoner then - src.summoner:gainExp(self:worthExp(src.summoner)) - else - src:gainExp(self:worthExp(src)) - end + src:resolveSource():gainExp(self:worthExp(src:resolveSource())) end -- Do we get a blooooooody death ? if rng.percent(33) then self:bloodyDeath() end diff --git a/game/modules/tome/data/general/grids/sand.lua b/game/modules/tome/data/general/grids/sand.lua index 91d2cb832ed75d5b596d8b382d488806c7c65557..8a510d302af9af9b404fe25a6c081860f98bda80 100644 --- a/game/modules/tome/data/general/grids/sand.lua +++ b/game/modules/tome/data/general/grids/sand.lua @@ -35,6 +35,8 @@ newEntity{ end end } + sand.summoner_gain_exp = true + sand.summoner = src sand.old_feat = old sand.temporary = 20 sand.x = x diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua index f761f251073b1b1c34ceccc1e0e60ec21839ac6c..a0f59dfe3f950de6fa1ed6f5b756d276eaa355ff 100644 --- a/game/modules/tome/data/talents/gifts/cold-drake.lua +++ b/game/modules/tome/data/talents/gifts/cold-drake.lua @@ -85,7 +85,9 @@ newTalent{ game.level:removeEntity(self) game.level.map:redisplay() end - end + end, + summoner_gain_exp = true, + summoner = self, } game.level:addEntity(e) game.level.map(x, y, Map.TERRAIN, e) diff --git a/game/modules/tome/data/talents/spells/earth.lua b/game/modules/tome/data/talents/spells/earth.lua index 348c7bdb85df8e8e5846d0dfb44fc981daab54df..275b0901926923e7135bef557e22d10810c3bb3f 100644 --- a/game/modules/tome/data/talents/spells/earth.lua +++ b/game/modules/tome/data/talents/spells/earth.lua @@ -115,7 +115,9 @@ newTalent{ game.level:removeEntity(self) game.level.map:redisplay() end - end + end, + summoner_gain_exp = true, + summoner = self, } game.level:addEntity(e) game.level.map(x + i, y + j, Map.TERRAIN, e) diff --git a/game/modules/tome/data/zones/maze/npcs.lua b/game/modules/tome/data/zones/maze/npcs.lua index cd8e3fbc16900e9fa66c531c5de1971c5d551865..161bc0bb0fbd5230e1067feae9efd7470a186144 100644 --- a/game/modules/tome/data/zones/maze/npcs.lua +++ b/game/modules/tome/data/zones/maze/npcs.lua @@ -42,6 +42,6 @@ newEntity{ define_as = "MINOTAUR_MAZE", ai = "dumb_talented_simple", ai_state = { talent_in=1, }, on_die = function(self, who) - who:setQuestStatus("starter-zones", engine.Quest.COMPLETED, "maze") + who:resolveSource():setQuestStatus("starter-zones", engine.Quest.COMPLETED, "maze") end, } diff --git a/game/modules/tome/data/zones/old-forest/npcs.lua b/game/modules/tome/data/zones/old-forest/npcs.lua index 25134ca6a25124c9a9aedbf0b3c80c0466de4533..8dc86d14c1558061e1e759d7aa8d3702ac98a25f 100644 --- a/game/modules/tome/data/zones/old-forest/npcs.lua +++ b/game/modules/tome/data/zones/old-forest/npcs.lua @@ -43,6 +43,6 @@ newEntity{ define_as = "OLD_MAN_WILLOW", ai = "dumb_talented_simple", ai_state = { talent_in=3, }, on_die = function(self, who) - who:setQuestStatus("starter-zones", engine.Quest.COMPLETED, "old-forest") + who:resolveSource():setQuestStatus("starter-zones", engine.Quest.COMPLETED, "old-forest") end, } diff --git a/game/modules/tome/data/zones/sandworm-lair/npcs.lua b/game/modules/tome/data/zones/sandworm-lair/npcs.lua index 2f260465e4b9cdb307d59da71bf4e254143803a0..c6be70582209b88111960149bf728524bd587024 100644 --- a/game/modules/tome/data/zones/sandworm-lair/npcs.lua +++ b/game/modules/tome/data/zones/sandworm-lair/npcs.lua @@ -63,6 +63,6 @@ newEntity{ define_as = "SANDWORM_QUEEN", ai = "dumb_talented_simple", ai_state = { talent_in=2, }, on_die = function(self, who) - who:setQuestStatus("starter-zones", engine.Quest.COMPLETED, "sandworm-lair") + who:resolveSource():setQuestStatus("starter-zones", engine.Quest.COMPLETED, "sandworm-lair") end, } diff --git a/game/modules/tome/data/zones/tol-falas/npcs.lua b/game/modules/tome/data/zones/tol-falas/npcs.lua index b208f02b164fe2719fd3042dedbc9e1136ae9fdb..7a9b14545682eaee42a911646d9461cce78bf1e5 100644 --- a/game/modules/tome/data/zones/tol-falas/npcs.lua +++ b/game/modules/tome/data/zones/tol-falas/npcs.lua @@ -55,6 +55,6 @@ newEntity{ define_as = "THE_MASTER", ai = "dumb_talented_simple", ai_state = { talent_in=1, }, on_die = function(self, who) - who:setQuestStatus("tol-falas", engine.Quest.DONE) + who:resolveSource():setQuestStatus("tol-falas", engine.Quest.DONE) end, } diff --git a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua index 7ae3df66ab0a2c1c2dd17f82a728d3186403bf1d..f803161db6fbeb9d908af7bffe92a1e9b27de698 100644 --- a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua +++ b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua @@ -31,6 +31,6 @@ newEntity{ define_as = "SHADE_OF_ANGMAR", ai = "dumb_talented_simple", ai_state = { talent_in=4, }, on_die = function(self, who) - who:setQuestStatus("start-dunadan", engine.Quest.COMPLETED, "amon-sul") + who:resolveSource():setQuestStatus("start-dunadan", engine.Quest.COMPLETED, "amon-sul") end, } diff --git a/game/modules/tome/data/zones/trollshaws/npcs.lua b/game/modules/tome/data/zones/trollshaws/npcs.lua index fc061da025830d5c1509484ce6b7665111f22979..b5794d17b883e9411587ac1f1a350c4dc276c31f 100644 --- a/game/modules/tome/data/zones/trollshaws/npcs.lua +++ b/game/modules/tome/data/zones/trollshaws/npcs.lua @@ -34,6 +34,6 @@ newEntity{ define_as = "TROLL_BILL", ai = "dumb_talented_simple", ai_state = { talent_in=4, }, on_die = function(self, who) - who:setQuestStatus("start-dunadan", engine.Quest.COMPLETED, "trollshaws") + who:resolveSource():setQuestStatus("start-dunadan", engine.Quest.COMPLETED, "trollshaws") end, }