不是直接替换就行的........
因为之前看你这个帖子是修源码的以为你会源码所以我就只说了函数名.以为你会用...
简单的说下..一般来说函数方法大都是在其他地方调用的,调用时需要提供一些参数,
例如施放法术: 需要提供 目标对象指针 技能id 等参数.这些参数会在这之后的执行过程中进行逻辑运算.
一开始的CastSpell(me, 18950 /*SPELL_INVISIBILITY_AND_STEALTH_DETECTION*/, true)提供了所需参数 me 18950 ture 这几个参数会在之后的过程中逐步传递.
回到你上面的问题.
- void IsSummonedBy(Unit* summoner)
- {
- if (!summoner || summoner->GetTypeId() != TYPEID_PLAYER)
- return;
-
- uint8 id = GetSpeachId();
- std::string const& text = sCreatureTextMgr->GetLocalizedChatString(me->GetEntry(), 0, id, 0, LOCALE_enUS);
- WorldPacket data;
- ChatHandler::BuildChatPacket(data, CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, me->GetGUID(), summoner->GetGUID(), text, CHAT_TAG_NONE, "Toalu'u the Mystic");
- summoner->ToPlayer()->SendDirectMessage(&data);
-
- if (id == 1)
- if (Aura* aura = summoner->GetAura(47189)) // Transform Aura
- aura->SetDuration(aura->GetDuration()-MINUTE*IN_MILLISECONDS);
- }
复制代码 void IsSummonedBy(Unit* summoner) 这个函数方法也是经过了类似上面施法的步骤运行到这里.
它这里提供了参数 Unit* summoner 这是一个unit单位指针. 魔兽世界里的单位都基于这个,例如玩家,item gameobject 尸体等都是
可以把它强制转换为其他单位的指针.转换前要判断是否转换成功. 比如上面帖的代码第三行(判断类型是否是player),第10行就可以放心的转换为player了
player顾名思义就是玩家,代表的是玩家的指针. 可以在玩家指针中取WorldSession,再调用GetSessionDbcLocale具体就是summoner->ToPlayer()->GetSession()->GetSessionDbcLocale()
这个具体还要看情况,并不是一成不变的.有时候参数可能直接就传了WorldSession进来,那么就能直接调用了, 又或者传了player,那么就要GetSession()->GetSessionDbcLocale()
|