mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[10506] Implement 5 new SCRIPT_COMMAND_*
All commands can only have creature as the affected by command *_SET_ACTIVEOBJECT - switch activeObject state on/off *_SET_FACTION - changes faction *_MORPH_TO_ENTRY_OR_MODEL - changes model to model from creature_template entry or model id explicit *_MOUNT_TO_ENTRY_OR_MODEL - mounts on model from creature_template entry or model id explicit *_SET_RUN - switch walkmode on/off Signed-off-by: NoFantasy <nofantasy@nf.no>
This commit is contained in:
parent
19d028d099
commit
a1fd19b6b3
5 changed files with 549 additions and 88 deletions
|
|
@ -174,6 +174,36 @@ spell_scripts
|
|||
* datalong2 = creature entry (searching for a buddy, closest to source)
|
||||
* datalong3 = creature search radius
|
||||
|
||||
21 SCRIPT_COMMAND_SET_ACTIVEOBJECT source=worldobject, target=creature
|
||||
* datalong=bool 0=off, 1=on
|
||||
* datalong2=creature entry
|
||||
* datalong3=search radius
|
||||
|
||||
22 SCRIPT_COMMAND_SET_FACTION source=worldobject, target=creature
|
||||
* datalong=factionId OR 0 to restore original faction from creature_template
|
||||
* datalong2=creature entry
|
||||
* datalong3=search radius
|
||||
|
||||
23 SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL source=worldobject, target=creature
|
||||
* datalong=creature entry/modelid (depend on data_flags) OR 0 to demorph
|
||||
* datalong2=creature entry
|
||||
* datalong3=search radius
|
||||
* dataflags= 0x01 to use datalong value as modelid explicit
|
||||
|
||||
24 SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL source=worldobject, target=creature
|
||||
* datalong=creature entry/modelid (depend on data_flags) OR 0 to dismount
|
||||
* datalong2=creature entry
|
||||
* datalong3=search radius
|
||||
* dataflags= 0x01 to use datalong value as modelid explicit
|
||||
|
||||
25 SCRIPT_COMMAND_SET_RUN source=worldobject, target=creature
|
||||
* datalong= bool 0=off, 1=on
|
||||
* datalong2=creature entry
|
||||
* datalong3=search radius
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
262
src/game/Map.cpp
262
src/game/Map.cpp
|
|
@ -2327,7 +2327,7 @@ void Map::ScriptsProcess()
|
|||
break;
|
||||
}
|
||||
|
||||
((Creature *)source)->HandleEmote(step.script->emote.emoteId);
|
||||
((Creature*)source)->HandleEmote(step.script->emote.emoteId);
|
||||
break;
|
||||
case SCRIPT_COMMAND_FIELD_SET:
|
||||
if (!source)
|
||||
|
|
@ -2951,6 +2951,266 @@ void Map::ScriptsProcess()
|
|||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_ACTIVEOBJECT:
|
||||
{
|
||||
if (!source)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_ACTIVEOBJECT (script id %u) call for NULL source.", step.script->id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!source->isType(TYPEMASK_WORLDOBJECT))
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_ACTIVEOBJECT (script id %u) call for unsupported non-worldobject (TypeId: %u), skipping.", step.script->id, source->GetTypeId());
|
||||
break;
|
||||
}
|
||||
|
||||
WorldObject* pSource = (WorldObject*)source;
|
||||
Creature* pOwner = NULL;
|
||||
|
||||
// No buddy defined, so try use source (or target if source is not creature)
|
||||
if (!step.script->activeObject.creatureEntry)
|
||||
{
|
||||
if (pSource->GetTypeId() != TYPEID_UNIT)
|
||||
{
|
||||
// we can't be non-creature, so see if target is creature
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)target;
|
||||
}
|
||||
else if (pSource->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)pSource;
|
||||
}
|
||||
else // If step has a buddy entry defined, search for it
|
||||
{
|
||||
MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*pSource, step.script->activeObject.creatureEntry, true, step.script->activeObject.searchRadius);
|
||||
MaNGOS::CreatureLastSearcher<MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(pSource, pOwner, u_check);
|
||||
|
||||
Cell::VisitGridObjects(pSource, searcher, step.script->activeObject.searchRadius);
|
||||
}
|
||||
|
||||
if (!pOwner)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_ACTIVEOBJECT (script id %u) call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", step.script->id, source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
|
||||
break;
|
||||
}
|
||||
|
||||
pOwner->SetActiveObjectState(step.script->activeObject.activate);
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_FACTION:
|
||||
{
|
||||
if (!source)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_FACTION (script id %u) call for NULL source.", step.script->id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!source->isType(TYPEMASK_WORLDOBJECT))
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_FACTION (script id %u) call for unsupported non-worldobject (TypeId: %u), skipping.", step.script->id, source->GetTypeId());
|
||||
break;
|
||||
}
|
||||
|
||||
WorldObject* pSource = (WorldObject*)source;
|
||||
Creature* pOwner = NULL;
|
||||
|
||||
// No buddy defined, so try use source (or target if source is not creature)
|
||||
if (!step.script->faction.creatureEntry)
|
||||
{
|
||||
if (pSource->GetTypeId() != TYPEID_UNIT)
|
||||
{
|
||||
// we can't be non-creature, so see if target is creature
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)target;
|
||||
}
|
||||
else if (pSource->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)pSource;
|
||||
}
|
||||
else // If step has a buddy entry defined, search for it
|
||||
{
|
||||
MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*pSource, step.script->faction.creatureEntry, true, step.script->faction.searchRadius);
|
||||
MaNGOS::CreatureLastSearcher<MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(pSource, pOwner, u_check);
|
||||
|
||||
Cell::VisitGridObjects(pSource, searcher, step.script->faction.searchRadius);
|
||||
}
|
||||
|
||||
if (!pOwner)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_FACTION (script id %u) call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", step.script->id, source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (step.script->faction.factionId)
|
||||
pOwner->setFaction(step.script->faction.factionId);
|
||||
else
|
||||
pOwner->setFaction(pOwner->GetCreatureInfo()->faction_A);
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL:
|
||||
{
|
||||
if (!source)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL (script id %u) call for NULL source.", step.script->id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!source->isType(TYPEMASK_WORLDOBJECT))
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL (script id %u) call for unsupported non-worldobject (TypeId: %u), skipping.", step.script->id, source->GetTypeId());
|
||||
break;
|
||||
}
|
||||
|
||||
WorldObject* pSource = (WorldObject*)source;
|
||||
Creature* pOwner = NULL;
|
||||
|
||||
// No buddy defined, so try use source (or target if source is not creature)
|
||||
if (!step.script->morph.creatureEntry)
|
||||
{
|
||||
if (pSource->GetTypeId() != TYPEID_UNIT)
|
||||
{
|
||||
// we can't be non-creature, so see if target is creature
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)target;
|
||||
}
|
||||
else if (pSource->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)pSource;
|
||||
}
|
||||
else // If step has a buddy entry defined, search for it
|
||||
{
|
||||
MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*pSource, step.script->morph.creatureEntry, true, step.script->morph.searchRadius);
|
||||
MaNGOS::CreatureLastSearcher<MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(pSource, pOwner, u_check);
|
||||
|
||||
Cell::VisitGridObjects(pSource, searcher, step.script->morph.searchRadius);
|
||||
}
|
||||
|
||||
if (!pOwner)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL (script id %u) call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", step.script->id, source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!step.script->morph.creatureOrModelEntry)
|
||||
pOwner->DeMorph();
|
||||
else if (step.script->morph.flags & 0x01)
|
||||
pOwner->SetDisplayId(step.script->morph.creatureOrModelEntry);
|
||||
else
|
||||
{
|
||||
CreatureInfo const* ci = GetCreatureTemplateStore(step.script->morph.creatureOrModelEntry);
|
||||
uint32 display_id = Creature::ChooseDisplayId(ci);
|
||||
|
||||
pOwner->SetDisplayId(display_id);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL:
|
||||
{
|
||||
if (!source)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL (script id %u) call for NULL source.", step.script->id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!source->isType(TYPEMASK_WORLDOBJECT))
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL (script id %u) call for unsupported non-worldobject (TypeId: %u), skipping.", step.script->id, source->GetTypeId());
|
||||
break;
|
||||
}
|
||||
|
||||
WorldObject* pSource = (WorldObject*)source;
|
||||
Creature* pOwner = NULL;
|
||||
|
||||
// No buddy defined, so try use source (or target if source is not creature)
|
||||
if (!step.script->mount.creatureEntry)
|
||||
{
|
||||
if (pSource->GetTypeId() != TYPEID_UNIT)
|
||||
{
|
||||
// we can't be non-creature, so see if target is creature
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)target;
|
||||
}
|
||||
else if (pSource->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)pSource;
|
||||
}
|
||||
else // If step has a buddy entry defined, search for it
|
||||
{
|
||||
MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*pSource, step.script->mount.creatureEntry, true, step.script->mount.searchRadius);
|
||||
MaNGOS::CreatureLastSearcher<MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(pSource, pOwner, u_check);
|
||||
|
||||
Cell::VisitGridObjects(pSource, searcher, step.script->mount.searchRadius);
|
||||
}
|
||||
|
||||
if (!pOwner)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL (script id %u) call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", step.script->id, source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!step.script->mount.creatureOrModelEntry)
|
||||
pOwner->Unmount();
|
||||
else if (step.script->mount.flags & 0x01)
|
||||
pOwner->Mount(step.script->mount.creatureOrModelEntry);
|
||||
else
|
||||
{
|
||||
CreatureInfo const* ci = GetCreatureTemplateStore(step.script->mount.creatureOrModelEntry);
|
||||
uint32 display_id = Creature::ChooseDisplayId(ci);
|
||||
|
||||
pOwner->Mount(display_id);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_RUN:
|
||||
{
|
||||
if (!source)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_RUN (script id %u) call for NULL source.", step.script->id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!source->isType(TYPEMASK_WORLDOBJECT))
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_RUN (script id %u) call for unsupported non-worldobject (TypeId: %u), skipping.", step.script->id, source->GetTypeId());
|
||||
break;
|
||||
}
|
||||
|
||||
WorldObject* pSource = (WorldObject*)source;
|
||||
Creature* pOwner = NULL;
|
||||
|
||||
// No buddy defined, so try use source (or target if source is not creature)
|
||||
if (!step.script->run.creatureEntry)
|
||||
{
|
||||
if (pSource->GetTypeId() != TYPEID_UNIT)
|
||||
{
|
||||
// we can't be non-creature, so see if target is creature
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)target;
|
||||
}
|
||||
else if (pSource->GetTypeId() == TYPEID_UNIT)
|
||||
pOwner = (Creature*)pSource;
|
||||
}
|
||||
else // If step has a buddy entry defined, search for it
|
||||
{
|
||||
MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*pSource, step.script->run.creatureEntry, true, step.script->run.searchRadius);
|
||||
MaNGOS::CreatureLastSearcher<MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(pSource, pOwner, u_check);
|
||||
|
||||
Cell::VisitGridObjects(pSource, searcher, step.script->run.searchRadius);
|
||||
}
|
||||
|
||||
if (!pOwner)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_SET_RUN (script id %u) call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", step.script->id, source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (step.script->run.run)
|
||||
pOwner->RemoveSplineFlag(SPLINEFLAG_WALKMODE);
|
||||
else
|
||||
pOwner->AddSplineFlag(SPLINEFLAG_WALKMODE);
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sLog.outError("Unknown SCRIPT_COMMAND_ %u called for script id %u.",step.script->command, step.script->id);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -4690,6 +4690,121 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename)
|
|||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_ACTIVEOBJECT:
|
||||
{
|
||||
if (tmp.activeObject.creatureEntry && !GetCreatureTemplate(tmp.activeObject.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_ACTIVEOBJECT for script id %u, but this creature_template does not exist.", tablename, tmp.activeObject.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.activeObject.creatureEntry && !tmp.activeObject.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_ACTIVEOBJECT for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.activeObject.creatureEntry, tmp.id, tmp.activeObject.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_FACTION:
|
||||
{
|
||||
if (tmp.faction.factionId && !sFactionStore.LookupEntry(tmp.faction.factionId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_FACTION for script id %u, but this faction does not exist.", tablename, tmp.faction.factionId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tmp.faction.creatureEntry && !GetCreatureTemplate(tmp.faction.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_FACTION for script id %u, but this creature_template does not exist.", tablename, tmp.faction.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.faction.creatureEntry && !tmp.faction.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_FACTION for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.faction.creatureEntry, tmp.id, tmp.faction.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL:
|
||||
{
|
||||
if (tmp.morph.flags & 0x01)
|
||||
{
|
||||
if (tmp.morph.creatureOrModelEntry && !sCreatureDisplayInfoStore.LookupEntry(tmp.morph.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but this model does not exist.", tablename, tmp.morph.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tmp.morph.creatureOrModelEntry && !GetCreatureTemplate(tmp.morph.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.morph.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp.morph.creatureEntry && !GetCreatureTemplate(tmp.morph.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.morph.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.morph.creatureEntry && !tmp.morph.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.morph.creatureEntry, tmp.id, tmp.morph.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL:
|
||||
{
|
||||
if (tmp.mount.flags & 0x01)
|
||||
{
|
||||
if (tmp.mount.creatureOrModelEntry && !sCreatureDisplayInfoStore.LookupEntry(tmp.mount.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but this model does not exist.", tablename, tmp.mount.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tmp.mount.creatureOrModelEntry && !GetCreatureTemplate(tmp.mount.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.mount.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp.mount.creatureEntry && !GetCreatureTemplate(tmp.mount.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.mount.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.mount.creatureEntry && !tmp.mount.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.mount.creatureEntry, tmp.id, tmp.mount.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_RUN:
|
||||
{
|
||||
if (tmp.run.creatureEntry && !GetCreatureTemplate(tmp.run.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_RUN for script id %u, but this creature_template does not exist.", tablename, tmp.run.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.run.creatureEntry && !tmp.run.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_RUN for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.run.creatureEntry, tmp.id, tmp.run.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,6 +98,23 @@ enum eScriptCommand
|
|||
SCRIPT_COMMAND_PLAY_MOVIE = 19, // target can only be a player, datalog = movie id
|
||||
SCRIPT_COMMAND_MOVEMENT = 20, // source or target must be creature. datalong = MovementType (0:idle, 1:random or 2:waypoint)
|
||||
// datalong2 = creature entry (searching for a buddy, closest to source), datalong3 = creature search radius
|
||||
SCRIPT_COMMAND_SET_ACTIVEOBJECT = 21, // source=any, target=creature
|
||||
// datalong=bool 0=off, 1=on
|
||||
// datalong2=creature entry, datalong3=search radius
|
||||
SCRIPT_COMMAND_SET_FACTION = 22, // source=any, target=creature
|
||||
// datalong=factionId,
|
||||
// datalong2=creature entry, datalong3=search radius
|
||||
SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL = 23, // source=any, target=creature
|
||||
// datalong=creature entry/modelid (depend on data_flags)
|
||||
// datalong2=creature entry, datalong3=search radius
|
||||
// dataflags= 0x01 to use datalong value as modelid explicit
|
||||
SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL = 24, // source=any, target=creature
|
||||
// datalong=creature entry/modelid (depend on data_flags)
|
||||
// datalong2=creature entry, datalong3=search radius
|
||||
// dataflags= 0x01 to use datalong value as modelid explicit
|
||||
SCRIPT_COMMAND_SET_RUN = 25, // source=any, target=creature
|
||||
// datalong= bool 0=off, 1=on
|
||||
// datalong2=creature entry, datalong3=search radius
|
||||
};
|
||||
|
||||
#define MAX_TEXT_ID 4 // used for SCRIPT_COMMAND_TALK
|
||||
|
|
@ -233,6 +250,45 @@ struct ScriptInfo
|
|||
uint32 searchRadius; // datalong3
|
||||
} movement;
|
||||
|
||||
struct // SCRIPT_COMMAND_SET_ACTIVEOBJECT (21)
|
||||
{
|
||||
uint32 activate; // datalong
|
||||
uint32 creatureEntry; // datalong2
|
||||
uint32 searchRadius; // datalong3
|
||||
} activeObject;
|
||||
|
||||
struct // SCRIPT_COMMAND_SET_FACTION (22)
|
||||
{
|
||||
uint32 factionId; // datalong
|
||||
uint32 creatureEntry; // datalong2
|
||||
uint32 searchRadius; // datalong3
|
||||
} faction;
|
||||
|
||||
struct // SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL (23)
|
||||
{
|
||||
uint32 creatureOrModelEntry; // datalong
|
||||
uint32 creatureEntry; // datalong2
|
||||
uint32 searchRadius; // datalong3
|
||||
uint32 empty1; // datalong4
|
||||
uint32 flags; // data_flags
|
||||
} morph;
|
||||
|
||||
struct // SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL (24)
|
||||
{
|
||||
uint32 creatureOrModelEntry; // datalong
|
||||
uint32 creatureEntry; // datalong2
|
||||
uint32 searchRadius; // datalong3
|
||||
uint32 empty1; // datalong4
|
||||
uint32 flags; // data_flags
|
||||
} mount;
|
||||
|
||||
struct // SCRIPT_COMMAND_SET_RUN (25)
|
||||
{
|
||||
uint32 run; // datalong
|
||||
uint32 creatureEntry; // datalong2
|
||||
uint32 searchRadius; // datalong3
|
||||
} run;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 data[9];
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "10505"
|
||||
#define REVISION_NR "10506"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue