-- ============================================================================= -- СИСТЕМА ОТСЛЕЖИВАНИЯ ПОСЛЕДНЕГО ВРАГА В АРЕНЕ FRONTIR -- Версия: 2.0 -- Описание: Управление информацией о последнем убившем игроке -- ============================================================================= -- Идентификатор модуля local MODULE_NAME = "FrontirLastEnemy" -- ============================================================================= -- Функция получения ID последнего врага для указанного игрока -- Параметры: RoleID - ID игрока -- Возвращает: KillerID последнего врага или nil при ошибке -- ============================================================================= function GetLastEnemy(RoleID) -- Проверка входных параметров if not RoleID or RoleID == "" then return nil end -- Подключение к базе данных local con = Sql_con() if not con then return nil end -- SQL запрос для получения ID убийцы local sql = string.format("SELECT `KillerID` FROM frontir_lastenemy WHERE RoleID = '%s'", RoleID) -- Выполнение запроса local rows = con:execute(sql) local KillerID = nil -- Обработка результатов if rows then KillerID = rows:fetch() end -- Закрытие соединения con:close() return KillerID end -- ============================================================================= -- Функция установки последнего врага для игрока -- Параметры: -- RoleID - ID игрока -- KillerID - ID убийцы (может быть nil) -- Возвращает: true при успехе, false при ошибке -- ============================================================================= function SetLastEnemy(RoleID, KillerID) -- Проверка входных параметров if not RoleID or RoleID == "" then return false end -- Подключение к базе данных local con = Sql_con() if not con then return false end -- Проверка существования записи для игрока local check_sql = string.format("SELECT `KillerID` FROM frontir_lastenemy WHERE RoleID = '%s'", RoleID) local rows = con:execute(check_sql) local sql = "" -- Если запись существует, обновляем KillerID if rows and rows:fetch() then -- Если KillerID не указан, используем значение по умолчанию if KillerID == nil then KillerID = 9999 -- Значение по умолчанию для отсутствия врага end sql = string.format("UPDATE frontir_lastenemy SET KillerID = '%s' WHERE RoleID = '%s'", KillerID, RoleID) else -- Если записи нет, создаем новую if KillerID == nil then KillerID = 9999 -- Значение по умолчанию для отсутствия врага end sql = string.format("INSERT INTO frontir_lastenemy (RoleID, KillerID) VALUES ('%s', '%s')", RoleID, KillerID) end -- Выполнение запроса на обновление/вставку local success = con:execute(sql) -- Закрытие соединения con:close() return success ~= nil end -- ============================================================================= -- Функция записи убийства (устанавливает последнего врага) -- Параметры: -- VictimID - ID жертвы -- KillerID - ID убийцы -- Возвращает: результат выполнения SetLastEnemy -- ============================================================================= function RecordKill(VictimID, KillerID) return SetLastEnemy(VictimID, KillerID) end -- ============================================================================= -- Функция сброса информации о последнем враге -- Параметры: RoleID - ID игрока -- Возвращает: результат выполнения SetLastEnemy с значением 9999 (нет врага) -- ============================================================================= function ResetLastEnemy(RoleID) return SetLastEnemy(RoleID, 9999) -- 9999 означает отсутствие врага end -- ============================================================================= -- Универсальный обработчик событий системы последнего врага -- Параметры: -- event_type - тип события ("kill", "get", "reset") -- RoleID - ID игрока -- KillerID - ID убийцы (только для события "kill") -- Возвращает: результат выполнения соответствующей функции -- ============================================================================= function HandleFrontirEnemyEvent(event_type, RoleID, KillerID) -- Проверка входных параметров if not event_type or not RoleID or RoleID == "" then return nil end if event_type == "kill" then return RecordKill(RoleID, KillerID) elseif event_type == "get" then return GetLastEnemy(RoleID) elseif event_type == "reset" then return ResetLastEnemy(RoleID) end return nil -- Неизвестный тип события end -- ============================================================================= -- Экспорт функций модуля -- ============================================================================= local FrontirLastEnemy_Module = { -- Основные функции GetLastEnemy = GetLastEnemy, SetLastEnemy = SetLastEnemy, -- Вспомогательные функции RecordKill = RecordKill, ResetLastEnemy = ResetLastEnemy, -- Универсальный обработчик HandleFrontirEnemyEvent = HandleFrontirEnemyEvent } return FrontirLastEnemy_Module