aboutsummaryrefslogtreecommitdiff
path: root/src/map.cc
diff options
context:
space:
mode:
authorfusion32 <marcopuzziello@gmail.com>2025-07-16 17:22:39 -0300
committerfusion32 <marcopuzziello@gmail.com>2025-07-16 17:22:39 -0300
commit6d498fe17dab48cfd8fc8a4da62a573b799e10ba (patch)
tree1c8d55bd907b35abf014385dbedb90b2ae98f96a /src/map.cc
parente65dc561acab7a9e49f59777f16cb040c574c64d (diff)
downloadgame-6d498fe17dab48cfd8fc8a4da62a573b799e10ba.tar.gz
game-6d498fe17dab48cfd8fc8a4da62a573b799e10ba.zip
fix most init and parsing bugs + critical bug with dynamic strings
With an appropriate query manager, the server now starts up and seems to work but won't properly handle connections until we fix the problem with threads and signals described in `TODO.md`.
Diffstat (limited to 'src/map.cc')
-rw-r--r--src/map.cc34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/map.cc b/src/map.cc
index a4f3fac..78e54db 100644
--- a/src/map.cc
+++ b/src/map.cc
@@ -222,6 +222,7 @@ static void CronSet(Object Obj, uint32 Delay){
Entry->RoundNr = RoundNr + Delay;
Entry->Previous = -1;
Entry->Next = CronHashTable[Obj.ObjectID % NARRAY(CronHashTable)];
+ CronHashTable[Obj.ObjectID % NARRAY(CronHashTable)] = Position;
if(Entry->Next != -1){
CronEntry.at(Entry->Next)->Previous = Position;
}
@@ -370,7 +371,7 @@ static void ReadMapConfig(void){
}
char Identifier[MAX_IDENT_LENGTH];
- strcpy(Identifier, Script.readIdentifier());
+ strcpy(Identifier, Script.getIdentifier());
Script.readSymbol('=');
if(strcmp(Identifier, "sectorxmin") == 0){
@@ -807,6 +808,7 @@ void LoadObjects(TReadScriptFile *Script, TWriteStream *Stream, bool Skip){
}
Depth -= 1;
+ ProcessObjects = false;
if(Depth <= 0){
break;
}
@@ -868,10 +870,6 @@ void LoadObjects(TReadStream *Stream, Object Con){
ObjectType ObjType(TypeID);
if(ObjType.isBodyContainer()){
- // TODO(fusion): I couldn't find if a creature's body containers
- // are properly initialized or if we need to create them here.
- // Either way we should come back to this function to check it
- // is working properly.
Obj = GetContainerObject(Con, (TypeID - 1));
}else{
Obj = AppendObject(Con, ObjType);
@@ -895,14 +893,14 @@ void LoadObjects(TReadStream *Stream, Object Con){
char String[4096];
Stream->readString(String, sizeof(String));
Obj.setAttribute((INSTANCEATTRIBUTE)Attribute, AddDynamicString(String));
- }else if(Attribute != REMAININGEXPIRETIME){
- uint32 Value = Stream->readQuad();
- Obj.setAttribute((INSTANCEATTRIBUTE)Attribute, Value);
- }else{
+ }else if(Attribute == REMAININGEXPIRETIME){
uint32 Value = Stream->readQuad();
if(Value != 0){
CronChange(Obj, (int)Value);
}
+ }else{
+ uint32 Value = Stream->readQuad();
+ Obj.setAttribute((INSTANCEATTRIBUTE)Attribute, Value);
}
}else{
Obj = NONE;
@@ -1037,7 +1035,7 @@ void LoadMap(void){
int SectorX, SectorY, SectorZ;
if(sscanf(DirEntry->d_name, "%d-%d-%d.sec", &SectorX, &SectorY, &SectorZ) == 3){
- snprintf(FileName, sizeof(FileName), "%s/%s", SAVEPATH, DirEntry->d_name);
+ snprintf(FileName, sizeof(FileName), "%s/%s", MAPPATH, DirEntry->d_name);
LoadSector(FileName, SectorX, SectorY, SectorZ);
SectorCounter += 1;
}
@@ -1157,8 +1155,11 @@ void SaveObjects(TReadStream *Stream, TWriteScriptFile *Script){
Script->writeNumber(TypeID);
}else{
- Depth -= 1;
Script->writeText("}");
+ Depth -= 1;
+ if(Depth <= 0){
+ break;
+ }
}
ProcessObjects = false;
@@ -1924,9 +1925,8 @@ void ChangeObject(Object Obj, ObjectType NewType){
}
if(OldType.getFlag(EXPIRESTOP)){
- uint32 Value = Obj.getAttribute(SAVEDEXPIRETIME);
- if(Value != 0){
- Delay = (int)Value;
+ if(Obj.getAttribute(SAVEDEXPIRETIME) != 0){
+ Delay = (int)Obj.getAttribute(SAVEDEXPIRETIME);
}
}
@@ -1938,7 +1938,7 @@ void ChangeObject(Object Obj, ObjectType NewType){
Obj.setObjectType(NewType);
if(NewType.getFlag(CUMULATIVE)){
- if(Amount == 0){
+ if(Amount <= 0){
Amount = 1;
}
Obj.setAttribute(AMOUNT, Amount);
@@ -1952,7 +1952,7 @@ void ChangeObject(Object Obj, ObjectType NewType){
if(NewType.getFlag(LIQUIDPOOL)){
if(Obj.getAttribute(POOLLIQUIDTYPE) == 0){
- Obj.setAttribute(POOLLIQUIDTYPE, 1); // LIQUID_TYPE_NONE (?)
+ Obj.setAttribute(POOLLIQUIDTYPE, LIQUID_WATER);
}
}
@@ -2014,7 +2014,7 @@ void PlaceObject(Object Obj, Object Con, bool Append){
}
ObjectType ConType = Con.getObjectType();
- if(!ConType.getFlag(CONTAINER) || !ConType.getFlag(CHEST)){
+ if(!ConType.getFlag(CONTAINER) && !ConType.getFlag(CHEST)){
error("PlaceObject: Con (%d) ist kein Container.\n", ConType.TypeID);
return;
}