bool CreatureEvents::registerEvent(Event* event, const pugi::xml_node&) { CreatureEvent* creatureEvent = dynamic_cast<CreatureEvent*>(event); if (!creatureEvent) { return false; } 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; } }
bool Creature::unregisterCreatureEvent(const std::string& name) { CreatureEvent* event = g_creatureEvents->getEventByName(name); if (!event) { return false; } CreatureEventType_t type = event->getEventType(); if (!hasEventRegistered(type)) { return false; } bool resetTypeBit = true; for (auto it = eventsList.begin(); it != eventsList.end(); ++it) { CreatureEvent* curEvent = *it; if (curEvent == event) { it = eventsList.erase(it); } else if (curEvent->getEventType() == type) { resetTypeBit = false; } } if (resetTypeBit) { scriptEventsBitField &= ~(static_cast<uint32_t>(1) << type); } return true; }
bool CreatureEvents::registerLuaEvent(Event* event) { CreatureEvent* creatureEvent = static_cast<CreatureEvent*>(event); //event is guaranteed to be a CreatureEvent if (creatureEvent->getEventType() == CREATURE_EVENT_NONE) { std::cout << "Error: [CreatureEvents::registerLuaEvent] 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 auto it = creatureEvents.find(creatureEvent->getName()); if (it != creatureEvents.end()) { it->second = *creatureEvent; } else { creatureEvents.emplace(creatureEvent->getName(), std::move(*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)) { //check for duplicates for (CreatureEventList::const_iterator it = eventsList.begin(); it != eventsList.end(); ++it) { if (*it == event) { return false; } } } else { //set the bit scriptEventsBitField = scriptEventsBitField | ((uint32_t)1 << type); } eventsList.push_back(event); return true; }
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; }