aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author_manuel_ <manue.l@live.com.ar>2010-05-25 22:11:36 -0300
committer_manuel_ <manue.l@live.com.ar>2010-05-25 22:11:36 -0300
commit4658b3be9773cba0609619ffb3d5dc7f907fd61e (patch)
treeeb0d05dee0c5646b3632e38800e02d1415c3a2fc
parentbd13582bd25e3c3cd3f2ab2ca31f4362f47eaa9d (diff)
Modified SCRIPT_COMMAND_TELEPORT_TO now it can be used for Creatures. For players datalong2 must be 0 for creatures 1.
--HG-- branch : trunk
-rw-r--r--src/game/Map.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/game/Map.cpp b/src/game/Map.cpp
index 58277f9bc9d..d7bcabecbb3 100644
--- a/src/game/Map.cpp
+++ b/src/game/Map.cpp
@@ -3134,23 +3134,38 @@ void Map::ScriptsProcess()
case SCRIPT_COMMAND_TELEPORT_TO:
{
- // accept player in any one from target/source arg
+ // accept object in any one from target/source arg
if (!target && !source)
{
sLog.outError("SCRIPT_COMMAND_TELEPORT_TO call for NULL object.");
break;
}
- // must be only Player
- if ((!target || target->GetTypeId() != TYPEID_PLAYER) && (!source || source->GetTypeId() != TYPEID_PLAYER))
+ if (step.script->datalong2 == 0)
{
- sLog.outError("SCRIPT_COMMAND_TELEPORT_TO call for non-player (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
- break;
- }
+ // must be only Player
+ if ((!target || target->GetTypeId() != TYPEID_PLAYER) && (!source || source->GetTypeId() != TYPEID_PLAYER))
+ {
+ sLog.outError("SCRIPT_COMMAND_TELEPORT_TO call for non-player (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
+ break;
+ }
- Player* pSource = target && target->GetTypeId() == TYPEID_PLAYER ? (Player*)target : (Player*)source;
+ Player* pSource = target && target->GetTypeId() == TYPEID_PLAYER ? (Player*)target : (Player*)source;
+
+ pSource->TeleportTo(step.script->datalong, step.script->x, step.script->y, step.script->z, step.script->o);
+ }else if (step.script->datalong2 == 1)
+ {
+ // must be only Creature
+ if ((!target || target->GetTypeId() != TYPEID_UNIT) && (!source || source->GetTypeId() != TYPEID_UNIT))
+ {
+ sLog.outError("SCRIPT_COMMAND_TELEPORT_TO call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0);
+ break;
+ }
- pSource->TeleportTo(step.script->datalong, step.script->x, step.script->y, step.script->z, step.script->o);
+ Creature* pSource = target && target->GetTypeId() == TYPEID_UNIT ? target->ToCreature() : source->ToCreature();
+
+ pSource->NearTeleportTo(step.script->x, step.script->y, step.script->z, step.script->o);
+ }
break;
}