浏览代码

Fix HoTA guard once again

(cherry picked from commit 138a7c8024573f46962ad0f6e8e03ba53fa56076)
Tomasz Zieliński 2 年之前
父节点
当前提交
545f047cae
共有 2 个文件被更改,包括 10 次插入2 次删除
  1. 10 0
      lib/rmg/RmgObject.cpp
  2. 0 2
      lib/rmg/modificators/ObjectManager.cpp

+ 10 - 0
lib/rmg/RmgObject.cpp

@@ -344,6 +344,16 @@ void Object::Instance::finalize(RmgMap & map)
 			setTemplate(terrainType->getId());
 		}
 	}
+	if (dObject.ID == Obj::MONSTER)
+	{
+		//Make up for extra offset in HotA creature templates
+		auto visitableOffset = dObject.getVisitableOffset();
+		auto fixedPos = getPosition(true) + visitableOffset;
+		vstd::abetween(fixedPos.x, visitableOffset.x, map.width() - 1);
+		vstd::abetween(fixedPos.y, visitableOffset.y, map.height() - 1);
+		int3 parentPos = getPosition(true) - getPosition(false);
+		setPosition(fixedPos - parentPos);
+	}
 
 	if (dObject.isVisitable() && !map.isOnMap(dObject.visitablePos()))
 		throw rmgException(boost::to_string(boost::format("Visitable tile %s of object %d at %s is outside the map") % dObject.visitablePos().toString() % dObject.id % dObject.pos.toString()));

+ 0 - 2
lib/rmg/modificators/ObjectManager.cpp

@@ -606,8 +606,6 @@ bool ObjectManager::addGuard(rmg::Object & object, si32 strength, bool zoneGuard
 	auto & instance = object.addInstance(*guard);
 	instance.setPosition(guardPos - object.getPosition());
 	instance.setAnyTemplate(); //terrain is irrelevant for monsters, but monsters need some template now
-	//Make up for extra offset in HotA creature templates
-	instance.setPosition(instance.getPosition() + instance.object().getVisitableOffset());
 		
 	return true;
 }