local PLAYER_EVENT_ON_COMMAND = 42 local PLAYER_EVENT_ON_LOGIN = 3 local PREMIUM_FLAG_INDEX = 100 local SUMMON_COMPANION_SPELL_ID = 9000 local ACCOUNT_FLAG_RECURRING_BILLING = 8192 ---todo extract to utils ---@param inputstr string ---@param separator string ---@return table local function SplitString(inputstr, separator) if separator == nil then separator = "%s" end local t = {} for str in string.gmatch(inputstr, "([^" .. separator .. "]+)") do table.insert(t, str) end return t end ---@return boolean local function IsPremium(player) return player:HasFlag(PREMIUM_FLAG_INDEX) end local function OnPremiumPlayer(player) if not IsPremium(player) then return end player:SendBroadcastMessage('На вашем аккаунте активна подписка Premium! Благодарим за поддержку проекта MoonWell.') end local function RefreshPremiumStatus(player) local query = AuthDBQuery("SELECT flags FROM account WHERE id = " .. player:GetAccountId()) if query then local function HasFlag(mask, flag) return bit.band(mask, flag) == flag end local flags = query:GetUInt32(0) if HasFlag(flags, ACCOUNT_FLAG_RECURRING_BILLING) then player:SetFlag(PREMIUM_FLAG_INDEX, 1) OnPremiumPlayer(player) return true end end return false end local function ApplyPremium(player) AuthDBExecute( string.format( "UPDATE account SET flags = flags | %d WHERE id = %d", ACCOUNT_FLAG_RECURRING_BILLING, player:GetAccountId() ) ) OnPremiumPlayer(player) end --- @param event any --- @param player any --- @param command string --- @param chatHandler any local function OnCommand(event, player, command, chatHandler) ---Console is not supported yet if not player then return end local parts = SplitString(command:lower(), ' ') if parts[1] ~= 'premium' then return end if parts[2] == 'add' then ApplyPremium(player:GetSelection()) end end RegsiterPlayerEvent(PLAYER_EVENT_ON_LOGIN, RefreshPremiumStatus) RegisterPlayerEvent(PLAYER_EVENT_ON_COMMAND, OnCommand)