aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/Map.cpp37
-rw-r--r--src/game/World.h1
2 files changed, 38 insertions, 0 deletions
diff --git a/src/game/Map.cpp b/src/game/Map.cpp
index d6ef225f57d..b22b78cf766 100644
--- a/src/game/Map.cpp
+++ b/src/game/Map.cpp
@@ -3906,6 +3906,43 @@ void Map::ScriptsProcess()
pSource->SendMovieStart(step.script->datalong);
break;
}
+
+ case SCRIPT_COMMAND_MOD_UPDATEFIELD:
+ {
+ if (!source)
+ {
+ sLog.outError("SCRIPT_COMMAND_MOD_UPDATEFIELD (script id: %u) call for NULL source.", step.script->id);
+ break;
+ }
+
+ uint16 maxOffset = 0;
+ switch (source->GetTypeId())
+ {
+ case TYPEID_ITEM:
+ maxOffset = ITEM_END;
+ break;
+ case TYPEID_UNIT:
+ maxOffset = UNIT_END;
+ break;
+ case TYPEID_PLAYER:
+ maxOffset = PLAYER_END;
+ break;
+ case TYPEID_GAMEOBJECT:
+ maxOffset = GAMEOBJECT_END;
+ break;
+ }
+
+ if (step.script->datalong > maxOffset || !step.script->datalong)
+ {
+ sLog.outError("SCRIPT_COMMAND_MOD_UPDATEFIELD (script id: %u). invalid index parameter (%u). maximum offset: (%u) for typeid %u",
+ step.script->id, step.script->datalong, maxOffset, source->GetTypeId());
+ break;
+ }
+
+ source->SetFlag(step.script->datalong, step.script->datalong2);
+ break;
+ }
+
default:
sLog.outError("Unknown script command %u called.", step.script->command);
break;
diff --git a/src/game/World.h b/src/game/World.h
index ee8e33921a1..db0a11fa320 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -453,6 +453,7 @@ enum WorldStates
#define SCRIPT_COMMAND_MODEL 32 // datalong = model id
#define SCRIPT_COMMAND_CLOSE_GOSSIP 33 // close gossip window -- no values
#define SCRIPT_COMMAND_PLAYMOVIE 34 // datalong = movie id
+#define SCRIPT_COMMAND_MOD_UPDATEFIELD 35 // datalong = index, datalong2 = newvalue
/// Storage class for commands issued for delayed execution
struct CliCommandHolder