diff options
| -rw-r--r-- | src/game/Map.cpp | 37 | ||||
| -rw-r--r-- | src/game/World.h | 1 |
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 |
