aboutsummaryrefslogtreecommitdiff
path: root/src/info.cc
diff options
context:
space:
mode:
authorfusion32 <marcopuzziello@gmail.com>2025-07-21 19:23:42 -0300
committerfusion32 <marcopuzziello@gmail.com>2025-07-21 22:49:41 -0300
commite4b8bf807b76f6f446d9617d9a3957dc77dd6e90 (patch)
treef974c51ca7ea111c7e96990e39453ae5dba9a6c5 /src/info.cc
parent7b9e7dbbcf1d779419be8f22df812ff523a25450 (diff)
downloadgame-e4b8bf807b76f6f446d9617d9a3957dc77dd6e90.tar.gz
game-e4b8bf807b76f6f446d9617d9a3957dc77dd6e90.zip
multiple bug-fixes and improvements
- Make uint32 -> Object conversion explicit. This can be more verbose but will get a lot of small mistakes, especially with function overloads. - Fix problem with the path finder not including the last step when `MustReach` was false. - Fix problem with NPC conditions. - Fix problem with monster homes continuously spawning monsters. - Fix problem with creating the standard inventory. - Fix problem with creature timers (IMPORTANT). - Fix problem with `ThrowPossible` (IMPORTANT). - Fix problem with rune casting. - Fix problem with executing moveuse events. - Fix problem with `MoveRel` and `WriteName` moveuse actions. - Fix problem with eating food deleting the whole stack. - Many other bug-fixes and improvements.
Diffstat (limited to 'src/info.cc')
-rw-r--r--src/info.cc30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/info.cc b/src/info.cc
index 08433f2..e24b819 100644
--- a/src/info.cc
+++ b/src/info.cc
@@ -365,16 +365,24 @@ Object GetBodyObject(uint32 CreatureID, int Position){
Object GetTopObject(int x, int y, int z, bool Move){
Object Obj = GetFirstObject(x, y, z);
- while(Obj != NONE){
- ObjectType ObjType = Obj.getObjectType();
- if(!ObjType.getFlag(BANK)
- && !ObjType.getFlag(CLIP)
- && !ObjType.getFlag(BOTTOM)
- && !ObjType.getFlag(TOP)
- && (!Move || !ObjType.isCreatureContainer())){
- break;
+ if(Obj != NONE){
+ while(true){
+ Object Next = Obj.getNextObject();
+ if(Next == NONE){
+ break;
+ }
+
+ ObjectType ObjType = Obj.getObjectType();
+ if(!ObjType.getFlag(BANK)
+ && !ObjType.getFlag(CLIP)
+ && !ObjType.getFlag(BOTTOM)
+ && !ObjType.getFlag(TOP)
+ && (!Move || !ObjType.isCreatureContainer())){
+ break;
+ }
+
+ Obj = Next;
}
- Obj = Obj.getNextObject();
}
return Obj;
}
@@ -575,7 +583,7 @@ int CountInventoryObjects(uint32 CreatureID, ObjectType Type, uint32 Value){
return 0;
}
- Object Help = GetFirstContainerObject(Help);
+ Object Help = GetFirstContainerObject(Creature->CrObject);
return CountObjects(Help, Type, Value);
}
@@ -1173,7 +1181,7 @@ bool ThrowPossible(int OrigX, int OrigY, int OrigZ,
// origin and destination.
int MaxT = std::max<int>(
std::abs(DestX - OrigX),
- std::abs(DestY - OrigX));
+ std::abs(DestY - OrigY));
int StartT = 1;
if((DestX < OrigX && CoordinateFlag(OrigX, OrigY, OrigZ, HOOKEAST))