CreatureEvent* getEventByName(std::vector<CreatureEvent*>getAllCreatureEvents(){return m_creatureEvents;} const std::string& name, bool forceLoaded = true);
bool CreatureEvents::playerLogin(Player* player)
return result;
if (result)
{
for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
{
CreatureEvent* event = it->second;
if(event->isLoaded() && ( event->getRegister() == "player" || event->getRegister() == "all") )
player->registerCreatureEvent(event->getName());
}
}
std::string tmpStr = asLowerCaseString(str);
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;
CreatureEvent* getEventByName(
CreatureEventList getAllCreatureEvents(){return m_creatureEvents;}
std::string m_eventName;
std::string m_eventRegister;
const std::string& getName() const {return m_eventName;}
const std::string getRegister() const {return m_eventRegister;}
typedef std::map<std::string, CreatureEvent*> CreatureEventList;
class CreatureEvents : public BaseEvents
{
class CreatureEvents : public BaseEvents
{
typedef std::map<std::string, CreatureEvent*> CreatureEventList;//edited here
public:
CreatureEvents();
virtual ~CreatureEvents();
// global events
bool playerLogin(Player* player);
bool playerLogout(Player* player, bool forceLogout);
CreatureEvent* getEventByName(const std::string& name, bool forceLoaded = true);
CreatureEventList getAllCreatureEvents(){return m_creatureEvents;}//edited here
protected:
virtual std::string getScriptBaseName() const {return "creaturescripts";}
virtual void clear();
virtual Event* getEvent(const std::string& nodeName);
virtual bool registerEvent(Event* event, xmlNodePtr p, bool override);
virtual LuaScriptInterface& getInterface() {return m_interface;}
LuaScriptInterface m_interface;
//creature events
CreatureEventList m_creatureEvents;
};
extern Monsters g_monsters;
extern CreatureEvents* g_creatureEvents;
// 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;
}
typedef std::map<std::string, CreatureEvent*> CreatureEventList;
// register creature events
CreatureEventList allEvents = g_creatureEvents->getAllCreatureEvents();
for(CreatureEventList::iterator it = allEvents.begin(); it != allEvents.end(); ++it){
CreatureEvent* event = it->second;
if(event->isLoaded() && ( event->getRegister() == "monster" || event->getRegister() == "all") )
registerCreatureEvent(event->getName());
}
# goto creatureevent.cpp :
[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]
this isn't good do in a server with more than 150 players. To run a lua code use like 50x more ram and 5x more your CPU than same code in c++
if your server got like 5000k+ monsters and you register one onThink by monster of course you will get high cpu usage
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
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.code :
search for this
and in the block of this function search forCode:bool CreatureEvents::playerLogin(Player* player)
then paste this before itCode:return result;
after thisCode: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()); } }
paste thisCode:std::string tmpStr = asLowerCaseString(str);
------------------------------------------------------------------------------------------------------------------------------------Code: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;
# goto creatureevent.h :
after this
paste thisCode:CreatureEvent* getEventByName(
now in the end of file after thisCode:std::vector<CreatureEvent*> getAllCreatureEvents(){return m_creatureEvents;}
paste thisCode:std::string m_eventName;
after thisCode:std::string m_eventRegister;
paste thisCode:const std::string& getName() const {return m_eventName;}
Code:const std::string getRegister() const {return m_eventRegister;}
-------------------------------------------------------------------------------------------------------------------------------------
# go to monster.code
under this
paste thisCode:extern Monsters g_monsters;
find thisCode:extern CreatureEvents* g_creatureEvents;
under it place thisCode:// 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; }
Code:// 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()); }
You are done I guess.