Files
moonwell-core/lua_scripts/MWPremium/mwpremium.lua
T

92 lines
2.2 KiB
Lua

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)