Untitled
unknown
lua
4 years ago
6.4 kB
11
Indexable
--[[ -- ADD em login.lua
-- Vip Checker
player:loadVipData()
player:updateVipTime()
if player:isVip() then
player:sendVipEffect()
end
]]
VIP_SYSTEM_CONFIG = {
expBonus = 1.1, -- Exp Bonus para quem é Vip em %. (1.1 = 10%)
skillsBonus = 1.1, -- Skill Bonus para quem é Vip em %. (1.1 = 10%, 1.5 = 50%, 2 = 100% double.)
lootBonus = 1.2, -- Loot bonus para quem é Vip em %. (1.1 = 10%, 1.5 = 50%, 2 = 100% double.)
trainDummyInFight = true, -- Treinar em dummy mesmo em fight.
expirationTeleport = true, -- Ao terminar a Vip, o jogador deve ser teleportado?
expirationPosition = Position(32369, 32234, 7), -- Posição para onde o jogador será teleportado ao finalizar a vip.
expirationMessage = "Sua vip acabou.", -- Msg ao acabar sua vip.
slotsAutoLoot = 25, -- Slots+ Autoloot.
vipRegenStamina = 1.1, -- Porcentagem de stamina a mais que irá recuperar em comparação a quem é free. (1.1 = 10%, 1.5 = 50%, 2 = 100% double.)
useEffect = true, -- Ativar ou desativar o uso de aura effect para vips.
sendEffect = CONST_ME_MAGIC_POWDER, -- Efeito para quem é vip.
addonsVip = {
[1] = {male = 1371, female = 1372}, -- Rascoohan
--[2] = {male = 128, female = 136}, -- Citizen
},
mountsVip = {
[1] = {id = 173}, -- Mossmasher
--[2] = {id = 2}, -- Racing bird
},
vipData ={ -- Cache, não mexa aqui.
--VipData[self:getId()] = {days = 0, lastDay = 0}
},
}
if not VIP_SYSTEM_CONFIG.vipData then
VIP_SYSTEM_CONFIG.vipData = {}
end
local function vipEffect(playerid)
local player = Player(playerid)
if not player then
return
end
player:getPosition():sendMagicEffect(VIP_SYSTEM_CONFIG.sendEffect)
addEvent(vipEffect, 2000, playerid)
end
function Player.onRemoveVip(self)
if VIP_SYSTEM_CONFIG.expirationTeleport then
self:teleportTo(VIP_SYSTEM_CONFIG.expirationPosition)
self:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
end
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, VIP_SYSTEM_CONFIG.expirationMessage)
end
function Player.getVipDays(self)
return VIP_SYSTEM_CONFIG.vipData[self:getId()].days
end
function Player.getLastVipDay(self)
return VIP_SYSTEM_CONFIG.vipData[self:getId()].lastDay
end
function Player.isVip(self)
return self:getVipDays() > 0
end
function Player.sendVipEffect(self)
return vipEffect(self:getId())
end
function Player.addVipAddons(self)
for i = 1, #VIP_SYSTEM_CONFIG.addonsVip do
self:addOutfitAddon(VIP_SYSTEM_CONFIG.addonsVip[i].male, 3)
self:addOutfitAddon(VIP_SYSTEM_CONFIG.addonsVip[i].female, 3)
self:addMount(VIP_SYSTEM_CONFIG.mountsVip[i].id)
end
end
function Player.addInfiniteVip(self)
local data = VIP_SYSTEM_CONFIG.vipData[self:getId()]
data.days = 0xFFFF
data.lastDay = 0
db.query(string.format('UPDATE `accounts` SET `vipdays` = %i, `viplastday` = %i WHERE `id` = %i;', 0xFFFF, 0, self:getAccountId()))
end
function Player.addVipDays(self, amount)
local data = VIP_SYSTEM_CONFIG.vipData[self:getId()]
local amount = math.min(0xFFFE - data.days, amount)
if amount > 0 then
if data.days == 0 then
local time = os.time()
db.query(string.format('UPDATE `accounts` SET `vipdays` = `vipdays` + %i, `viplastday` = %i WHERE `id` = %i;', amount, time, self:getAccountId()))
data.lastDay = time
else
db.query(string.format('UPDATE `accounts` SET `vipdays` = `vipdays` + %i WHERE `id` = %i;', amount, self:getAccountId()))
end
data.days = data.days + amount
end
return true
end
function Player.removeVipDays(self, amount)
local data = VIP_SYSTEM_CONFIG.vipData[self:getId()]
if data.days == 0xFFFF then
return false
end
local amount = math.min(data.days, amount)
if amount > 0 then
db.query(string.format('UPDATE `accounts` SET `vipdays` = `vipdays` - %i WHERE `id` = %i;', amount, self:getAccountId()))
data.days = data.days - amount
if data.days == 0 then
self:onRemoveVip()
end
end
return true
end
function Player.removeVip(self)
local data = VIP_SYSTEM_CONFIG.vipData[self:getId()]
if data.days == 0 then
return
end
data.days = 0
data.lastDay = 0
self:onRemoveVip()
db.query(string.format('UPDATE `accounts` SET `vipdays` = 0, `viplastday` = 0 WHERE `id` = %i;', self:getAccountId()))
end
function Player.loadVipData(self)
local resultId = db.storeQuery(string.format('SELECT `vipdays`, `viplastday` FROM `accounts` WHERE `id` = %i;', self:getAccountId()))
if resultId then
VIP_SYSTEM_CONFIG.vipData[self:getId()] = {
days = result.getDataInt(resultId, 'vipdays'),
lastDay = result.getDataInt(resultId, 'viplastday')
}
result.free(resultId)
return true
end
VIP_SYSTEM_CONFIG.vipData[self:getId()] = {days = 0, lastDay = 0}
return false
end
function Player.updateVipTime(self)
local save = false
local data = VIP_SYSTEM_CONFIG.vipData[self:getId()]
local days, lastDay = data.days, data.lastDay
local daysBefore = days
if days == 0 or days == 0xFFFF then
if lastDay ~= 0 then
lastDay = 0
save = true
end
elseif lastDay == 0 then
lastDay = os.time()
save = true
else
local time = os.time()
local elapsedDays = math.floor((time - lastDay) / 86400)
if elapsedDays > 0 then
if elapsedDays >= days then
days = 0
lastDay = 0
else
days = days - elapsedDays
lastDay = time - ((time - lastDay) % 86400)
end
save = true
end
end
if save then
if daysBefore > 0 and days == 0 then
self:onRemoveVip()
end
db.query(string.format('UPDATE `accounts` SET `vipdays` = %i, `viplastday` = %i WHERE `id` = %i;', days, lastDay, self:getAccountId()))
data.days = days
data.lastDay = lastDay
end
endEditor is loading...