From a7a253f5ebe3ccad08657944c3303746641fbd4e Mon Sep 17 00:00:00 2001 From: Alejandro Mujica Date: Sat, 13 Apr 2019 16:10:44 -0400 Subject: [PATCH] Bug Fixes Fixed a small issue related to monsters attacking being too low, the issue was related to TFS function normal_random, special thanks to LooSik at otland, see thread: https://otland.net/threads/nostalrius-7-7.262406/post-2552267 --- data/lib/core/game.lua | 8 +++++--- src/monster.cpp | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/data/lib/core/game.lua b/data/lib/core/game.lua index 29cacef..5bbec2b 100644 --- a/data/lib/core/game.lua +++ b/data/lib/core/game.lua @@ -9,7 +9,7 @@ function Game.removeItemsOnMap(position) local i = 0 while i < tileCount do local tileItem = tile:getThing(i) - if tileItem and tileItem:getType():isMovable() then + if tileItem and not tileItem:isCreature() and ItemType(tileItem:getId()):isMovable() then tileItem:remove() else i = i + 1 @@ -24,8 +24,10 @@ function Game.transformItemOnMap(position, itemId, toItemId, subtype) local tile = Tile(position) local item = tile:getItemById(itemId) - item:transform(toItemId, subtype) - item:decay() + if item ~= nil then + item:transform(toItemId, subtype) + item:decay() + end return item end diff --git a/src/monster.cpp b/src/monster.cpp index 01b059e..9826383 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -876,7 +876,7 @@ void Monster::doAttacking(uint32_t) for (spellBlock_t& spellBlock : mType->info.attackSpells) { if (spellBlock.range != 0 && std::max(Position::getDistanceX(myPos, targetPos), Position::getDistanceY(myPos, targetPos)) <= spellBlock.range) { - if (normal_random(0, spellBlock.chance) == 0 && (master || health > mType->info.runAwayHealth || normal_random(1, 3) == 1)) { + if (uniform_random(0, spellBlock.chance) == 0 && (master || health > mType->info.runAwayHealth || uniform_random(1, 3) == 1)) { updateLookDirection(); minCombatValue = spellBlock.minCombatValue; @@ -977,7 +977,7 @@ void Monster::onThinkTarget(uint32_t interval) void Monster::onThinkDefense(uint32_t) { for (const spellBlock_t& spellBlock : mType->info.defenseSpells) { - if (normal_random(0, spellBlock.chance) == 0 && (master || health > mType->info.runAwayHealth || normal_random(1, 3) == 1)) { + if (uniform_random(0, spellBlock.chance) == 0 && (master || health > mType->info.runAwayHealth || uniform_random(1, 3) == 1)) { minCombatValue = spellBlock.minCombatValue; maxCombatValue = spellBlock.maxCombatValue; spellBlock.spell->castSpell(this, this); @@ -1001,7 +1001,7 @@ void Monster::onThinkDefense(uint32_t) continue; } - if (normal_random(0, summonBlock.chance) == 0 && (health > mType->info.runAwayHealth || normal_random(1, 3) == 1)) { + if (uniform_random(0, summonBlock.chance) == 0 && (health > mType->info.runAwayHealth || uniform_random(1, 3) == 1)) { Monster* summon = Monster::createMonster(summonBlock.name); if (summon) { const Position& summonPos = getPosition();