Doggynub
LUA / C++
- Joined
- Sep 28, 2008
- Messages
- 2,541
- Reaction score
- 186
Well as it says you can now register all monsters + player through creature event.xml
How to ?
You need to include "registerTo" in the xml
You can even make it to none , so you are able to add it manually to monsters or in login
Supports : 0.4
Setup:
# goto creatureevent.cpp :
search for this
[cpp]
bool CreatureEvents:layerLogin(Player* player)[/cpp]
and in the block of this function search for
[cpp]
return result;[/cpp]
then paste this before it
[cpp]
if (result)
{
for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
{
CreatureEvent* event = *it;
if(event->isLoaded() && ( event->getRegister() == "player" || event->getRegister() == "all") )
player->registerCreatureEvent(event->getName());
}
}[/cpp]
after this
[cpp]
std::string tmpStr = asLowerCaseString(str);[/cpp]
paste this
[cpp]
std::string strr;
if(!readXMLString(p, "registerTo", strr) || strr.empty() ){
if((tmpStr != "login") && (tmpStr != "logout"))
std::clog << "[Warning - CreatureEvent::configureEvent] : You havn't register event '" << m_eventName <<"'"<< std::endl;
}
else
m_eventRegister = strr;[/cpp]
------------------------------------------------------------------------------------------------------------------------------------
# goto creatureevent.h :
after this
[cpp]
CreatureEvent* getEventByName([/cpp]
paste this
[cpp]
std::vector<CreatureEvent*> getAllCreatureEvents(){return m_creatureEvents;}[/cpp]
now in the end of file after this
[cpp]
std::string m_eventName;[/cpp]
paste this
[cpp]
std::string m_eventRegister;[/cpp]
after this
[cpp]
const std::string& getName() const {return m_eventName;}[/cpp]
paste this
[cpp]
const std::string getRegister() const {return m_eventRegister;}[/cpp]
-------------------------------------------------------------------------------------------------------------------------------------
# go to monster.cpp
under this
[cpp]
extern Monsters g_monsters;[/cpp]
paste this
[cpp]
extern CreatureEvents* g_creatureEvents;[/cpp]
find this
[cpp]
// register creature events
for(StringVec::iterator it = mType->scriptList.begin(); it != mType->scriptList.end(); ++it)
{
if(!registerCreatureEvent(*it))
std::cout << "[Warning - Monster::Monster] Unknown event name - " << *it << std::endl;
}[/cpp]
under it place this
[cpp]
// register creature events
std::vector<CreatureEvent*> allEvents = g_creatureEvents->getAllCreatureEvents();
for(std::vector<CreatureEvent*>::const_iterator it = allEvents.begin(); it != allEvents.end(); ++it)
{
CreatureEvent* event = *it;
if(event->isLoaded() && ( event->getRegister() == "monster" || event->getRegister() == "all") )
registerCreatureEvent(event->getName());
}[/cpp]
You are done I guess.
How to ?
You need to include "registerTo" in the xml
XML:
<event type="think" name="monsterThink" registerTo ="monster" event="script" value="look.lua"/> <!-- all monster no players-->
<event type="think" name="playerThink" registerTo ="player" event="script" value="test.lua"/><!-- players no monster-->
<event type="think" name="bothThink" registerTo ="all" event="script" value="move.lua"/><!-- both player & mon-->
You can even make it to none , so you are able to add it manually to monsters or in login
XML:
<event type="think" name="monsterThink" registerTo ="manual" event="script" value="look.lua"/> <!-- you manually register this event-->
Supports : 0.4
Setup:
# goto creatureevent.cpp :
search for this
[cpp]
bool CreatureEvents:layerLogin(Player* player)[/cpp]
and in the block of this function search for
[cpp]
return result;[/cpp]
then paste this before it
[cpp]
if (result)
{
for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
{
CreatureEvent* event = *it;
if(event->isLoaded() && ( event->getRegister() == "player" || event->getRegister() == "all") )
player->registerCreatureEvent(event->getName());
}
}[/cpp]
after this
[cpp]
std::string tmpStr = asLowerCaseString(str);[/cpp]
paste this
[cpp]
std::string strr;
if(!readXMLString(p, "registerTo", strr) || strr.empty() ){
if((tmpStr != "login") && (tmpStr != "logout"))
std::clog << "[Warning - CreatureEvent::configureEvent] : You havn't register event '" << m_eventName <<"'"<< std::endl;
}
else
m_eventRegister = strr;[/cpp]
------------------------------------------------------------------------------------------------------------------------------------
# goto creatureevent.h :
after this
[cpp]
CreatureEvent* getEventByName([/cpp]
paste this
[cpp]
std::vector<CreatureEvent*> getAllCreatureEvents(){return m_creatureEvents;}[/cpp]
now in the end of file after this
[cpp]
std::string m_eventName;[/cpp]
paste this
[cpp]
std::string m_eventRegister;[/cpp]
after this
[cpp]
const std::string& getName() const {return m_eventName;}[/cpp]
paste this
[cpp]
const std::string getRegister() const {return m_eventRegister;}[/cpp]
-------------------------------------------------------------------------------------------------------------------------------------
# go to monster.cpp
under this
[cpp]
extern Monsters g_monsters;[/cpp]
paste this
[cpp]
extern CreatureEvents* g_creatureEvents;[/cpp]
find this
[cpp]
// register creature events
for(StringVec::iterator it = mType->scriptList.begin(); it != mType->scriptList.end(); ++it)
{
if(!registerCreatureEvent(*it))
std::cout << "[Warning - Monster::Monster] Unknown event name - " << *it << std::endl;
}[/cpp]
under it place this
[cpp]
// register creature events
std::vector<CreatureEvent*> allEvents = g_creatureEvents->getAllCreatureEvents();
for(std::vector<CreatureEvent*>::const_iterator it = allEvents.begin(); it != allEvents.end(); ++it)
{
CreatureEvent* event = *it;
if(event->isLoaded() && ( event->getRegister() == "monster" || event->getRegister() == "all") )
registerCreatureEvent(event->getName());
}[/cpp]
You are done I guess.
Last edited: