diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Map.cpp | 30 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 10 | ||||
-rw-r--r-- | src/game/World.h | 1 |
3 files changed, 41 insertions, 0 deletions
diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 0ddbf359f40..c0556ecc5ee 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -3423,6 +3423,36 @@ void Map::ScriptsProcess() break; } + case SCRIPT_COMMAND_KILL_CREDIT: + { + // accept player in any one from target/source arg + if (!target && !source) + { + sLog.outError("SCRIPT_COMMAND_KILL_CREDIT call for NULL object."); + break; + } + + // must be only Player + if((!target || target->GetTypeId() != TYPEID_PLAYER) && (!source || source->GetTypeId() != TYPEID_PLAYER)) + { + sLog.outError("SCRIPT_COMMAND_KILL_CREDIT 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; + + if (step.script->datalong2) + { + pSource->RewardPlayerAndGroupAtEvent(step.script->datalong, pSource); + } + else + { + pSource->KilledMonsterCredit(step.script->datalong, 0); + } + + break; + } + case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE: { if(!step.script->datalong) // creature not specified diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index aeb0fade34f..cc911b63b0c 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4386,6 +4386,16 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename) break; } + case SCRIPT_COMMAND_KILL_CREDIT: + { + if (!GetCreatureTemplate(tmp.datalong)) + { + sLog.outErrorDb("Table `%s` has invalid creature (Entry: %u) in SCRIPT_COMMAND_KILL_CREDIT for script id %u",tablename,tmp.datalong,tmp.id); + continue; + } + break; + } + case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE: { if(!Trinity::IsValidMapCoord(tmp.x,tmp.y,tmp.z,tmp.o)) diff --git a/src/game/World.h b/src/game/World.h index 9777e97a046..ed16d03307a 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -405,6 +405,7 @@ enum RealmZone #define SCRIPT_COMMAND_FLAG_REMOVE 5 // source = any, datalong = field_id, datalog2 = bitmask #define SCRIPT_COMMAND_TELEPORT_TO 6 // source or target with Player, datalong = map_id, x/y/z #define SCRIPT_COMMAND_QUEST_EXPLORED 7 // one from source or target must be Player, another GO/Creature, datalong=quest_id, datalong2=distance or 0 +#define SCRIPT_COMMAND_KILL_CREDIT 8 // source or target with Player, datalong = creature entry, datalong2 = bool (0=personal credit, 1=group credit) #define SCRIPT_COMMAND_RESPAWN_GAMEOBJECT 9 // source = any (summoner), datalong=db_guid, datalong2=despawn_delay #define SCRIPT_COMMAND_TEMP_SUMMON_CREATURE 10 // source = any (summoner), datalong=creature entry, datalong2=despawn_delay #define SCRIPT_COMMAND_OPEN_DOOR 11 // source = unit, datalong=db_guid, datalong2=reset_delay |