Пример #1
0
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);
}
Пример #2
0
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));
}
Пример #3
0
void KMaskImageItem::mouseDoubleClickEvent( QGraphicsSceneMouseEvent * event )
{
	bool bFilter = filterMessage(event->pos());
	event->setAccepted(bFilter);
	if(bFilter)
	{
		emit mouseEvent(event);
	}
}
Пример #4
0
void KMaskImageItem::hoverMoveEvent( QGraphicsSceneHoverEvent * event )
{
	bool bFilter = filterMessage(event->pos());
	event->setAccepted(bFilter);
	if(bFilter)
	{
		emit mouseEvent(event);
	}
}
Пример #5
0
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()));
}
Пример #6
0
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);
}
Пример #7
0
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;

        }
    }
}