aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp16
-rw-r--r--src/server/game/Maps/Map.cpp5
-rw-r--r--src/server/game/World/World.h2
3 files changed, 15 insertions, 8 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 139e3accdce..1388ab44748 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -4709,13 +4709,13 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename)
{
if (!sSpellStore.LookupEntry(tmp.datalong))
{
- sLog.outErrorDb("Table `%s` using non-existent spell (id: %u) in SCRIPT_COMMAND_REMOVE_AURA or SCRIPT_COMMAND_CAST_SPELL for script id %u",
+ sLog.outErrorDb("Table `%s` using non-existent spell (id: %u) in SCRIPT_COMMAND_REMOVE_AURA for script id %u",
tablename,tmp.datalong,tmp.id);
continue;
}
if (tmp.datalong2 & ~0x1) // 1 bits (0,1)
{
- sLog.outErrorDb("Table `%s` using unknown flags in datalong2 (%u)i n SCRIPT_COMMAND_CAST_SPELL for script id %u",
+ sLog.outErrorDb("Table `%s` using unknown flags in datalong2 (%u) in SCRIPT_COMMAND_REMOVE_AURA for script id %u",
tablename,tmp.datalong2,tmp.id);
continue;
}
@@ -4725,16 +4725,22 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename)
{
if (!sSpellStore.LookupEntry(tmp.datalong))
{
- sLog.outErrorDb("Table `%s` using non-existent spell (id: %u) in SCRIPT_COMMAND_REMOVE_AURA or SCRIPT_COMMAND_CAST_SPELL for script id %u",
+ sLog.outErrorDb("Table `%s` using non-existent spell (id: %u) in SCRIPT_COMMAND_CAST_SPELL for script id %u",
tablename,tmp.datalong,tmp.id);
continue;
}
- if (tmp.datalong2 & ~0x3) // 2 bits
+ if (tmp.datalong2 > 4) // targeting type
{
- sLog.outErrorDb("Table `%s` using unknown flags in datalong2 (%u)i n SCRIPT_COMMAND_CAST_SPELL for script id %u",
+ sLog.outErrorDb("Table `%s` using unknown target in datalong2 (%u) in SCRIPT_COMMAND_CAST_SPELL for script id %u",
tablename,tmp.datalong2,tmp.id);
continue;
}
+ if (tmp.dataint & ~0x1) // 1 bit (0,1)
+ {
+ sLog.outErrorDb("Table `%s` using unknown flags in dataint (%u) in SCRIPT_COMMAND_CAST_SPELL for script id %u",
+ tablename,tmp.dataint,tmp.id);
+ continue;
+ }
break;
}
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 8ae9c969b60..30c69ca3c56 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -3583,7 +3583,7 @@ void Map::ScriptsProcess()
uSource = dynamic_cast<Unit*>(target);
uTarget = dynamic_cast<Unit*>(source);
break;
- case 4: // creature
+ case 4: // source -> creature with entry
uSource = dynamic_cast<Unit*>(source);
uTarget = GetClosestCreatureWithEntry(uSource, step.script->dataint, step.script->x);
break;
@@ -3601,7 +3601,8 @@ void Map::ScriptsProcess()
break;
}
- uSource->CastSpell(uTarget, step.script->datalong, false);
+ bool triggered = step.script->dataint & 0x1;
+ uSource->CastSpell(uTarget, step.script->datalong, triggered);
break;
}
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index aae4e3321a0..a7aa7bce3a7 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -445,7 +445,7 @@ enum WorldStates
#define SCRIPT_COMMAND_CLOSE_DOOR 12 // source = unit, datalong=db_guid, datalong2=reset_delay
#define SCRIPT_COMMAND_ACTIVATE_OBJECT 13 // source = unit, target=GO
#define SCRIPT_COMMAND_REMOVE_AURA 14 // source (datalong2 != 0) or target (datalong == 0) unit, datalong = spell_id
-#define SCRIPT_COMMAND_CAST_SPELL 15 // source/target cast spell at target/source (script->datalong2: 0: s->t 1: s->s 2: t->t 3: t->s
+#define SCRIPT_COMMAND_CAST_SPELL 15 // source/target cast spell at target/source (script->datalong2: 0: s->t 1: s->s 2: t->t 3: t->s 4: s->creature with entry; dataint & 1 = triggered flag
#define SCRIPT_COMMAND_PLAY_SOUND 16 // source = any object, target=any/player, datalong (sound_id), datalong2 (bitmask: 0/1=anyone/target, 0/2=with distance dependent, so 1|2 = 3 is target with distance dependent)
#define SCRIPT_COMMAND_CREATE_ITEM 17 // source or target must be player, datalong = item entry, datalong2 = amount
#define SCRIPT_COMMAND_DESPAWN_SELF 18 // source or target must be creature, datalong = despawn delay