bool Creature::registerCreatureEvent(const std::string& name) { CreatureEvent* event = g_creatureEvents->getEventByName(name); if(!event) //check for existance return false; for(CreatureEventList::iterator it = eventsList.begin(); it != eventsList.end(); ++it) { if((*it) == event) //do not allow registration of same event more than once return false; } if(!hasEventRegistered(event->getEventType())) //there's no such type registered yet, so set the bit in the bitfield scriptEventsBitField |= ((uint32_t)1 << event->getEventType()); eventsList.push_back(event); return true; }
bool CreatureEvents::registerEvent(Event* event, xmlNodePtr p) { CreatureEvent* creatureEvent = dynamic_cast<CreatureEvent*>(event); if(!creatureEvent) return false; switch(creatureEvent->getEventType()) { case CREATURE_EVENT_NONE: std::cout << "Error: [CreatureEvents::registerEvent] Trying to register event without type!." << std::endl; return false; break; //events are stored in a std::map default: { m_creatureEvents[creatureEvent->getName()] = creatureEvent; return true; } } }
bool Creature::registerCreatureEvent(const std::string& name) { CreatureEvent* event = g_creatureEvents->getEventByName(name); if (!event) { return false; } CreatureEventType_t type = event->getEventType(); if (hasEventRegistered(type)) { for (CreatureEvent* creatureEvent : eventsList) { if (creatureEvent == event) { return false; } } } else { scriptEventsBitField |= static_cast<uint32_t>(1) << type; } eventsList.push_back(event); return true; }
bool CreatureEvents::registerEvent(Event* event, const pugi::xml_node&) { CreatureEvent* creatureEvent = reinterpret_cast<CreatureEvent*>(event); if (creatureEvent->getEventType() == CREATURE_EVENT_NONE) { std::cout << "Error: [CreatureEvents::registerEvent] Trying to register event without type!" << std::endl; return false; } CreatureEvent* oldEvent = getEventByName(creatureEvent->getName(), false); if (oldEvent) { //if there was an event with the same that is not loaded //(happens when realoading), it is reused if (!oldEvent->isLoaded() && oldEvent->getEventType() == creatureEvent->getEventType()) { oldEvent->copyEvent(creatureEvent); } return false; } else { //if not, register it normally m_creatureEvents[creatureEvent->getName()] = creatureEvent; return true; } }