void MessageShell::addItem(const Item* item) { uint32_t filterFlags = item->filterFlags(); if (filterFlags == 0) return; QString prefix("Spawn"); // first handle alert if (filterFlags & FILTER_FLAG_ALERT) filterMessage(prefix, MT_Alert, item); if (filterFlags & FILTER_FLAG_DANGER) filterMessage(prefix, MT_Danger, item); if (filterFlags & FILTER_FLAG_CAUTION) filterMessage(prefix, MT_Caution, item); if (filterFlags & FILTER_FLAG_HUNT) filterMessage(prefix, MT_Hunt, item); if (filterFlags & FILTER_FLAG_LOCATE) filterMessage(prefix, MT_Locate, item); }
DBusHandlerResult DBusHandler::Callbacks::dbusFilter(DBusConnection*, DBusMessage* msg, void* data) { if(!data) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; auto handler = static_cast<DBusHandler*>(data); return DBusHandlerResult(handler->filterMessage(msg)); }
void KMaskImageItem::mouseDoubleClickEvent( QGraphicsSceneMouseEvent * event ) { bool bFilter = filterMessage(event->pos()); event->setAccepted(bFilter); if(bFilter) { emit mouseEvent(event); } }
void KMaskImageItem::hoverMoveEvent( QGraphicsSceneHoverEvent * event ) { bool bFilter = filterMessage(event->pos()); event->setAccepted(bFilter); if(bFilter) { emit mouseEvent(event); } }
void MessageShell::killSpawn(const Item* item) { // if it's an alert log the kill if (item->filterFlags() & FILTER_FLAG_ALERT) filterMessage("Died", MT_Alert, item); // if this is the player spawn, note the place of death if (item->id() != m_player->id()) return; QString message; // use appropriate format depending on coordinate ordering if (!showeq_params->retarded_coords) message = "Died in zone '%1' at %2,%3,%4"; else message = "Died in zone '%1' at %3,%2,%4"; m_messages->addMessage(MT_Player, message.arg(m_zoneMgr->shortZoneName()) .arg(item->x()).arg(item->y()).arg(item->z())); }
void MessageShell::delItem(const Item* item) { // if it's an alert log the despawn if (item->filterFlags() & FILTER_FLAG_ALERT) filterMessage("DeSpawn", MT_Alert, item); }
void Antispam::processMessages(uint32 diff) { if (m_updateTimer <= diff) { m_updateTimer = sAcConfig.getConfig(CONFIG_UINT32_AC_ANTISPAM_UPDATE_TIMER); for (auto i = 0; i < A_CHAT_TYPE_MAX; ++i) { m_messageBlocks[i].clear(); m_messageCounters[i].clear(); m_messageRepeats[i].clear(); } loadMuted(); } else m_updateTimer -= diff; while (!m_messageQueue.empty()) { MessageBlock messageBlock; if (m_messageQueue.try_pop(messageBlock)) { if (isMuted(messageBlock.fromAccount)) continue; auto type = messageBlock.type; auto guidFrom = messageBlock.fromGuid.GetCounter(); auto guidTo = messageBlock.toGuid.GetCounter(); LowGuidPair lowGuidPair(guidFrom, guidTo); m_messageRepeats[type][guidFrom].push_back(messageBlock.msg); auto counter = m_messageCounters[type].find(guidFrom); auto hasCounter = counter != m_messageCounters[type].end(); if (hasCounter) { counter->second.count++; counter->second.timeDiff = counter->second.timeDiff + (messageBlock.time - counter->second.timeLast); counter->second.timeLast = messageBlock.time; } else { MessageCounter messageCounter; messageCounter.count = 1; messageCounter.timeDiff = 0; messageCounter.timeLast = messageBlock.time; messageCounter.detectMarker = false; m_messageCounters[type][guidFrom] = messageCounter; } if (hasCounter) { auto repeats = std::count_if(m_messageRepeats[type][guidFrom].begin(), m_messageRepeats[type][guidFrom].end(), FindMsg(messageBlock.msg)); if (repeats > m_messageRepeatCount) { applySanction(messageBlock, DETECT_FLOOD, repeats); continue; } if (counter->second.detectMarker || !m_frequencyCount || ((counter->second.count >= m_frequencyCount) && ((counter->second.count / m_frequencyCoeff) > counter->second.timeDiff))) { counter->second.detectMarker = true; auto itr = m_messageBlocks[type].find(lowGuidPair); if (itr != m_messageBlocks[type].end()) { itr->second.msg.append(messageBlock.msg); itr->second.count++; if (filterMessage(itr->second.msg)) { applySanction(itr->second, DETECT_SEPARATED); m_messageBlocks[type].erase(itr); continue; } if (itr->second.count == m_messageBlockSize) m_messageBlocks[type].erase(itr); } else if (filterMessage(messageBlock.msg)) applySanction(messageBlock, DETECT_STANDARD); else m_messageBlocks[type][lowGuidPair] = messageBlock; } else if (filterMessage(messageBlock.msg)) applySanction(messageBlock, DETECT_STANDARD); } else if (filterMessage(messageBlock.msg)) applySanction(messageBlock, DETECT_STANDARD); else if (!m_frequencyCount) m_messageBlocks[type][lowGuidPair] = messageBlock; } } }