Core/SmartAI: added SMART_ACTION_SIMPLE_TALK, param1: textID, uses the 'Targets' to say the text,
NOTE: textID is relative to the current target's entry OR if target is a player, text is used with source creature's entry --HG-- branch : trunk
This commit is contained in:
@@ -143,7 +143,24 @@ void SmartScript::ProcessAction(SmartScriptHolder &e, Unit* unit, uint32 var0, u
|
||||
mTextGUID = IsPlayer(unit)? unit->GetGUID() : NULL;//invoker, used for $vars in texts
|
||||
mUseTextTimer = true;
|
||||
sCreatureTextMgr.SendChat(talker, uint8(e.action.talk.textGroupID), mTextGUID);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case SMART_ACTION_SIMPLE_TALK:
|
||||
{
|
||||
ObjectList* targets = GetTargets(e, unit);
|
||||
if (targets)
|
||||
{
|
||||
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); itr++)
|
||||
{
|
||||
if (IsCreature((*itr)))
|
||||
{
|
||||
sCreatureTextMgr.SendChat((*itr)->ToCreature(), uint8(e.action.talk.textGroupID));
|
||||
} else if (IsPlayer((*itr)))
|
||||
{
|
||||
sCreatureTextMgr.SendChat(me, uint8(e.action.talk.textGroupID),NULL,CHAT_TYPE_END,LANG_ADDON,TEXT_RANGE_NORMAL,NULL,TEAM_OTHER,false, (*itr)->ToPlayer());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SMART_ACTION_PLAY_EMOTE:
|
||||
|
||||
@@ -488,9 +488,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e)
|
||||
|
||||
switch (e.GetActionType())
|
||||
{
|
||||
case SMART_ACTION_TALK:
|
||||
//if (!IsTextValid(e, e.action.talk.textGroupID)) return false;//can use other creatures texts too!
|
||||
break;
|
||||
case SMART_ACTION_SET_FACTION:
|
||||
if (e.action.faction.factionID && !sFactionStore.LookupEntry(e.action.faction.factionID))
|
||||
{
|
||||
@@ -752,6 +749,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e)
|
||||
case SMART_ACTION_SET_NPC_FLAG:
|
||||
case SMART_ACTION_ADD_NPC_FLAG:
|
||||
case SMART_ACTION_REMOVE_NPC_FLAG:
|
||||
case SMART_ACTION_TALK:
|
||||
case SMART_ACTION_SIMPLE_TALK:
|
||||
break;
|
||||
default:
|
||||
sLog.outErrorDb("SmartAIMgr: Not handled action_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
|
||||
|
||||
@@ -430,8 +430,9 @@ enum SMART_ACTION
|
||||
SMART_ACTION_SET_NPC_FLAG = 81, // Flags
|
||||
SMART_ACTION_ADD_NPC_FLAG = 82, // Flags
|
||||
SMART_ACTION_REMOVE_NPC_FLAG = 83, // Flags
|
||||
SMART_ACTION_SIMPLE_TALK = 84, // groupID, can be used to make players say groupID, Text_over event is not triggered, whisper can not be used (Target units will say the text)
|
||||
|
||||
SMART_ACTION_END = 84,
|
||||
SMART_ACTION_END = 85,
|
||||
};
|
||||
|
||||
struct SmartAction
|
||||
|
||||
@@ -108,7 +108,7 @@ void CreatureTextMgr::LoadCreatureTexts()
|
||||
sLog.outString(">> Loaded %u Creature Texts for %u Creatures.", TextCount, CreatureCount);
|
||||
}
|
||||
|
||||
uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, uint64 whisperGuid, ChatType msgtype, Language language, TextRange range, uint32 sound, Team team, bool gmOnly)
|
||||
uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, uint64 whisperGuid, ChatType msgtype, Language language, TextRange range, uint32 sound, Team team, bool gmOnly, Player* srcPlr)
|
||||
{
|
||||
if (!source)
|
||||
return 0;
|
||||
@@ -186,9 +186,9 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, uint64 whisp
|
||||
SendSound(source, finalSound, finalType, whisperGuid, range, team, gmOnly);
|
||||
|
||||
if ((*iter).emote)
|
||||
SendEmote(source, (*iter).emote);
|
||||
SendEmote(srcPlr ? srcPlr->ToUnit() : source, (*iter).emote);
|
||||
|
||||
SendChatString(source, (*iter).text.c_str(), finalType, finalLang, whisperGuid, range, team, gmOnly);
|
||||
SendChatString(srcPlr ? srcPlr->ToUnit() : source, (*iter).text.c_str(), finalType, finalLang, whisperGuid, range, team, gmOnly);
|
||||
if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f))
|
||||
SetRepeatId(source, textGroup, (*iter).id);
|
||||
|
||||
@@ -203,8 +203,9 @@ void CreatureTextMgr::SendSound(Creature* source,uint32 sound, ChatType msgtype,
|
||||
data << uint32(sound);
|
||||
SendChatPacket(&data, source, msgtype, whisperGuid, range, team, gmOnly);
|
||||
}
|
||||
void CreatureTextMgr::SendEmote(Creature* source, uint32 emote)
|
||||
void CreatureTextMgr::SendEmote(Unit* source, uint32 emote)
|
||||
{
|
||||
if (!source) return;
|
||||
source->HandleEmoteCommand(emote);
|
||||
}
|
||||
|
||||
|
||||
@@ -63,10 +63,10 @@ class CreatureTextMgr
|
||||
CreatureTextMap const& GetTextMap() const { return mTextMap; }
|
||||
|
||||
void SendSound(Creature* source,uint32 sound, ChatType msgtype, uint64 whisperGuid, TextRange range, Team team, bool gmOnly);
|
||||
void SendEmote(Creature* source, uint32 emote);
|
||||
void SendEmote(Unit* source, uint32 emote);
|
||||
|
||||
//if sent, returns the 'duration' of the text else 0 if error
|
||||
uint32 SendChat(Creature* source, uint8 textGroup, uint64 whisperGuid = 0, ChatType msgtype = CHAT_TYPE_END, Language language = LANG_ADDON, TextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false);
|
||||
uint32 SendChat(Creature* source, uint8 textGroup, uint64 whisperGuid = 0, ChatType msgtype = CHAT_TYPE_END, Language language = LANG_ADDON, TextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = NULL);
|
||||
void SendChatString(WorldObject* source, char const* text, ChatType msgtype = CHAT_TYPE_SAY, Language language = LANG_UNIVERSAL, uint64 whisperGuid = 0, TextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const;
|
||||
bool TextExist(uint32 sourceEntry, uint8 textGroup);
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user