Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Bem procurei aqui na comunidade um VIP System mais informativo e nada, além de ter tido problema com os que estão aqui e acabei achando em outro lugar um que funcionou perfeitamente para mim.

 

Usando tfs disponibilizado neste tópico http://www.tibiaking.com/forum/topic/53099-1078-tfs-12-cast-system-novos-outfits-mounts/

 

Só estou trazendo o conteúdo e por não conhecer bem não posso dar suporte mas do jeito que está é só 'instalar' e vai funcionar.

 

Creditos.: Summ

 

Sistema Vip

 

1° execute dentro da sua db

ALTER TABLE `accounts`
        ADD COLUMN `viplastday` int(10) NOT NULL DEFAULT 0 AFTER `lastday`,
        ADD COLUMN `vipdays` int(11) NOT NULL DEFAULT 0 AFTER `lastday`;

2º na pasta data/creaturescripts/scripts procure pelo arquivo login.lua e adicione na segunda linha, logo após o function onLogin(player) isso

player:loadVipData()
player:updateVipTime()

3° na pasta data\ crie um arquivo chamado vipsystem.lua e adicione o seguinte

local config = {
    -- true = player will be teleported to this position if Vip runs out
    -- false = player will not be teleported
    useTeleport = true,
    expirationPosition = Position(95, 114, 7),

    -- true = player will received the message you set
    -- false = player will not receive a message
    useMessage = true,
    expirationMessage = 'Your vip days ran out.',
    expirationMessageType = MESSAGE_STATUS_WARNING
}

if not VipData then
    VipData = { }
end

function Player.onRemoveVip(self)
    if config.useTeleport then
        self:teleportTo(config.expirationPosition)
        config.expirationPosition:sendMagicEffect(CONST_ME_TELEPORT)
    end

    if config.useMessage then
        self:sendTextMessage(config.expirationMessageType, config.expirationMessage)
    end
end

function Player.getVipDays(self)
    return VipData[self:getId()].days
end

function Player.getLastVipDay(self)
    return VipData[self:getId()].lastDay
end

function Player.isVip(self)
    return self:getVipDays() > 0
end

function Player.addInfiniteVip(self)
    local data = 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 = 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 = 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 = 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
        VipData[self:getId()] = {
            days = result.getDataInt(resultId, 'vipdays'),
            lastDay = result.getDataInt(resultId, 'viplastday')
        }

        result.free(resultId)
        return true
    end

    VipData[self:getId()] = { days = 0, lastDay = 0 }
    return false
end

function Player.updateVipTime(self)
    local save = false

    local data = 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
end

4° no arquivo global.lua adicione a seguinte linha

dofile('data/vipsystem.lua')

 

Talkaction !checkvip para todos os players

 

1° vá na pasta data/talkactions/scripts e crie um arquivo chamando checkvip.lua e adicione o seguinte

function onSay(cid, words, param)
    local player = Player(cid)

    local days = player:getVipDays()
    if days == 0 then
        player:sendCancelMessage('You do not have any vip days.')
    else
        player:sendCancelMessage(string.format('You have %s vip day%s left.', (days == 0xFFFF and 'infinite amount of' or days), (days == 1 and '' or 's')))
    end
    return false
end

2° e em data/talkactions/talkactions.xml adicione

<talkaction words="!checkvip" script="checkvip.lua"/>

 

Talkaction /vip para membros da staff

- /vip adddays, NomedoPlayer, 5
--> Adiciona 5 dias vip para o Player.
- /vip removedays, NomedoPlayer, 5
--> Remove 5 dias vip do Player.
- /vip remove, PlayerName
--> Remove todos os dias vip do Player.
- /vip check, NomedoPlayer
--> Checa quantos dias vip o Player tem.
- /vip addinfinite, NomedoPlayer
--> Adiciona tempo vip infinito para o Player.

1° na pasta data/talkactions/scripts crie um arquivo chamado vipcommand.lua e adicione o seguinte

function onSay(cid, words, param)
    local player = Player(cid)
    if not player:getGroup():getAccess() then
        return true
    end

    local params = param:split(',')
    if not params[2] then
        player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Player is required.\nUsage:\n%s <action>, <name>, [, <value>]\n\nAvailable actions:\ncheck, adddays, addinfinite, removedays, remove', words))
        return false
    end

    local targetName = params[2]:trim()
    local target = Player(targetName)
    if not target then
        player:sendCancelMessage(string.format('Player (%s) is not online. Usage: %s <action>, <player> [, <value>]', targetName, words))
        return false
    end

    local action = params[1]:trim():lower()
    if action == 'adddays' then
        local amount = tonumber(params[3])
        if not amount then
            player:sendCancelMessage('<value> has to be a numeric value.')
            return false
        end

        target:addVipDays(amount)
        player:sendCancelMessage(string.format('%s received %s vip day(s) and now has %s vip day(s).', target:getName(), amount, target:getVipDays()))

    elseif action == 'removedays' then
        local amount = tonumber(params[3])
        if not amount then
            player:sendCancelMessage('<value> has to be a numeric value.')
            return false
        end

        target:removeVipDays(amount)
        player:sendCancelMessage(string.format('%s lost %s vip day(s) and now has %s vip day(s).', target:getName(), amount, target:getVipDays()))

    elseif action == 'addinfinite' then
        target:addInfiniteVip()
        player:sendCancelMessage(string.format('%s now has infinite vip time.', target:getName()))

    elseif action == 'remove' then
        target:removeVip()
        player:sendCancelMessage(string.format('You removed all vip days from %s.', target:getName()))

    elseif action == 'check' then
        local days = target:getVipDays()
        player:sendCancelMessage(string.format('%s has %s vip day(s).', target:getName(), (days == 0xFFFF and 'infinite' or days)))

    else
        player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Action is required.\nUsage:\n%s <action>, <name>, [, <value>]\n\nAvailable actions:\ncheck, adddays, addinfinite, removedays, remove', words))
    end
    return false
end

2° e em data/talkactions/talkactions.xml adicione

<talkaction words="/vip" separator=" " script="vipcommand.lua" />

 

Tiles VIP

1° em data/movements/movements.xml e adicione

<movevent event="StepIn" actionid="1500" script="viptiles.lua"/>
<movevent event="StepIn" actionid="1501" script="viptiles.lua"/>

2° em data/movements/script crie o arquivo viptiles.lua e adicione o seguinte

local vipPosition = Position(101, 116, 7)

function onStepIn(cid, item, position, fromPosition)
    local player = Player(cid)
    if not player then
        return true
    end

    if item.actionid == 1500 then
        if not player:isVip() then
            player:teleportTo(fromPosition)
            fromPosition:sendMagicEffect(CONST_ME_POFF)
            player:sendCancelMessage('You do not have any vip days.')
        end
    elseif item.actionid == 1501 then
        if player:isVip() then
            player:teleportTo(vipPosition)
            player:say('!* VIP *!', TALKTYPE_MONSTER_SAY)
            vipPosition:sendMagicEffect(CONST_ME_STUN)
        else
            player:teleportTo(fromPosition)
            player:sendCancelMessage('You do not have any vip days.')
            fromPosition:sendMagicEffect(CONST_ME_POFF)
        end
    end
    return true
end

 

Portas VIP / Actions

1° em data/actions/actions.xml adicione isso

<action actionid="1502" script="vipdoors.lua"/>
<action actionid="1503" script="vipdoors.lua"/>
<action actionid="1504" script="vipdoors.lua"/>

2° em data/actions/scripts crie um arquivo chamado vipdoors.lua e adicione o seguinte

local vipPosition = Position(101, 116, 7)

function onUse(cid, item, fromPosition, itemEx, toPosition, isHotkey)
    local player = Player(cid)
    if item.actionid == 1502 then
        local position = player:getPosition()
        if position.y < fromPosition.y then
            fromPosition.y = fromPosition.y + 1
        else
            fromPosition.y = fromPosition.y - 1
        end
        player:teleportTo(fromPosition)
        player:say('!* VIP *!', TALKTYPE_MONSTER_SAY)
        fromPosition:sendMagicEffect(CONST_ME_STUN)

    elseif item.actionid == 1503 then
        local position = player:getPosition()
        if position.x < fromPosition.x then
            fromPosition.x = fromPosition.x + 1
        else
            fromPosition.x = fromPosition.x - 1
        end
        player:teleportTo(fromPosition)
        player:say('!* VIP *!', TALKTYPE_MONSTER_SAY)
        fromPosition:sendMagicEffect(CONST_ME_STUN)

    elseif item.actionid == 1504 then
        if player:isVip() then
            player:teleportTo(vipPosition)
            player:say('!* VIP *!', TALKTYPE_MONSTER_SAY)
            vipPosition:sendMagicEffect(CONST_ME_STUN)
        else
            player:sendCancelMessage('You do not have any vip days.')
        end
    end
    return true
end

 

Items que adicionam dias VIP

ItemId 10135 adiciona 10 dias vip.
ItemId 10134 adiciona 30 dias vip.
ItemId 10133 adiciona 90 dias vip.

1° em data/actions/actions.xml adicione

<action fromid="10133" toid="10135" script="vipitems.lua"/>

2° e em data/actions/scripts crie um arquivo chamado vipitems.lua e adicione o seguinte

local vipItems = {
   -- [itemid] = amount of vip days
    [10135] = 10,
    [10134] = 30,
    [10133] = 90
}

function onUse(cid, item, fromPosition, itemEx, toPosition, isHotkey)
    local player = Player(cid)
    local days = vipItems[item.itemid]
    player:addVipDays(days)
    player:say('!* YAY VIP! *!', TALKTYPE_MONSTER_SAY)
    player:getPosition():sendMagicEffect(CONST_ME_STUN)
    player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('You received %s vip days.', days))
    Item(item.uid):remove(1)
    return true
end

 

Imagens

 

Comando !checkvip mas sem ter vip

oCVB4rD.png

 

Comando /vip adddays, dracoknight, 5

pt0hkY4.png

 

Comando !checkvip após adicionar 5 dias

ZQrD7fw.png

 

Comando /vip addinfinite, dracoknight

qjr7iOT.png

 

Comando !checkvip após usar infinite 

FiAZjmo.png

 

Comando /vip remove, dracoknight

Lpw85er.png

  • Respostas 17
  • Visualizações 6.6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Eu havia visto antes de postar esse aqui, havia até testado mas não havia funcionado e também no seu não explica como adicionar o resto das coisas.. havia até um rapaz perguntando se dava para colocar

Postado
  • Autor

Bom é que são 33 visualizações e tirando o post de aprovação não há nada mais.. a gente procura algo mais completo, informativo.. Duvido que um ou dois não tenham testado e nada.. o conteúdo pode não ser meu mas não custa agradecer se ajudou em algo, que não seja com rep mas pelo menos um comentário né..

 

Pessoal quer só 'ganhar' na facilidade.. ir procurar em fórum gringo, editar o post deixar de boa pro pessoal entender melhor não conta... pffff 

 

Depois pessoal reclama que não tem, ou ficam pedindo em um monte de post para fazer algo parecido.. até para quem não tem e quer piso para premmy se usar de lógica consegue pegar o piso vip que tem aqui, particularmente achei bem simples) e mudar para premmy.. (vi a poucos dias alguém pedindo piso premmy igual a ponte de rook no tibia)

Enfim.. 

  • 2 weeks later...
Postado
  • Autor

Legal, mas prefiro o que eu fiz .. se tiver tempo dá uma olhada: http://www.tibiaking.com/forum/topic/49770-tfs-1x-vip-system-by-luanluciano93/

 

Eu havia visto antes de postar esse aqui, havia até testado mas não havia funcionado e também no seu não explica como adicionar o resto das coisas.. havia até um rapaz perguntando se dava para colocar ilimitado e tal.. e você só informou qual parametro usar..

 

Ai por não ter funcionado aqui no meu e por não ter outras informações que eu acho indispensáveis, como query pra db e um help para quem realmente não sabe fazer tile, porta, item e comandos, procurei e postei esse.. não gosto de ficar 'perturbando' quando eu posso procurar .. normalmente quando pergunto ou post algum tópico pedindo ajuda é que realmente não achei uma solução sozinho.. :P

 

Mas não cheguei a testar novamente e não me lembro o que ocorreu mas enfim :D quanto mais opções melhor né! :D

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo