Tibia - OTS
Bem-vindo (a), ao Tibia OTS.


Registre-se, conecte-se e contribua no melhor fórum de tibia. Todas as dúvidas serão esclarecidas em segundos!

Notamos que você não está logado no Fórum. Se já tiver uma conta, por favor, faça o Login. Se você ainda não tem uma conta, registre-se, demora menos de dois minutos e você tem acesso a todas as vantagens de ser um membro.
Painel do Usuário
Convidado
Mensagens: 0


Alterar
Ver
Tópicos e mensagens
Últimos assuntos
» Bots Para Tibia 11.50 - iBot 11.50 / BBot 11.50 / XenoBot 11.50 - Winter Update 2017 !
Qua Dez 06, 2017 10:36 am por xtrac

» Tibia BBot 11.50 Baixar - New Winter Update 2017 !
Qua Dez 06, 2017 9:23 am por xtrac

» [BAIXAR] Tibia Xenobot 11 Official Download
Sex Nov 24, 2017 5:21 pm por xtrac

» [OFFICIAL] Tibia WindBot 11 Baixar
Sex Nov 24, 2017 5:10 pm por xtrac

» [Baixar] Tibia MC 11 - All Version
Sex Nov 24, 2017 4:53 pm por xtrac

» [LIVRE] Tibia Maps 11 Download Full
Sex Nov 24, 2017 4:45 pm por xtrac

» [Official] Tibia Auto 11 + crack Baixar
Sex Nov 24, 2017 4:36 pm por xtrac

» Tibia Bots 11 Tibia Auto 11 / Tibia Maps 11 / Tibia MC 11 + crack Baixar
Sex Nov 24, 2017 3:19 pm por xtrac

» [Official] Tibia Red Bot 11 Baixar
Sex Nov 24, 2017 3:08 pm por xtrac

» [Baixar] Tibia Bot NG 11 + Crack official
Sex Nov 24, 2017 2:59 pm por xtrac

» Tibia Bots 11 - NG 11 / Red Bot 11 / Tibia Cast 11 Baixar
Sex Nov 24, 2017 2:49 pm por xtrac

» [Official] Tibia MageBot 11 Baixar
Sex Nov 24, 2017 2:31 pm por xtrac

» [Official] Tibia IP Changer 11 Baixar
Sex Nov 24, 2017 1:47 pm por xtrac

» [Official] Tibia iBot 11 Baixar
Sex Nov 24, 2017 1:30 pm por xtrac

» Bots Para Tibia 11 - iBot 11 / BBot 11 / XenoBot 11 + crack Official Baixar
Sex Nov 24, 2017 11:55 am por xtrac

» Tibia BBot 11 Baixar
Sex Nov 24, 2017 11:43 am por xtrac

» [BAIXAR] Tibia Xenobot 11 Crack | Download | Baixar + Anty Battleye
Qui Out 12, 2017 5:03 pm por xtrac

» Tibia WindBot 11 Crack | Download | Baixar + Anty Battleye |
Qui Out 12, 2017 4:45 pm por xtrac

» Tibia MC 11 | Multiclient 11 | Download | Baixar + Anty Battleye
Qui Out 12, 2017 4:08 pm por xtrac

» Tibia Maps 11 FULL | Download | Baixar + Anty Battleye
Qui Out 12, 2017 3:52 pm por xtrac

» Tibia Auto 11 Crack | Download | Baixar + Anty Battleye
Qui Out 12, 2017 3:31 pm por xtrac

» Tibia Bots 11 Tibia Auto 11 | Tibia Maps 11 | Tibia MC 11 | Download | Baixar + Anty Battleye
Qui Out 12, 2017 3:03 pm por xtrac

» Tibia Red Bot 11 Crack | Download | Baixar + Anty Battleye
Qui Out 12, 2017 2:30 pm por xtrac

» Tibia Bot NG 11 Crack | Download | Baixar + Anty Battleye
Qui Out 12, 2017 1:43 pm por xtrac

» Tibia Bots 11 - NG 11 | Red Bot 11 | Tibia Cast 11 | Download | Baixar + Anty Battleye
Qui Out 12, 2017 1:30 pm por xtrac

» Tibia MageBot 11 Crack | Download | Baixar + Anty battleye
Qui Out 12, 2017 12:50 pm por xtrac

» Tibia Multi IP Changer 11.00 - 10.00 - 8.6 | Baixar | Download
Qui Out 12, 2017 12:26 pm por xtrac

» Tibia iBot 11 Crack | Download | Baixar + Anty Battleye
Qui Out 12, 2017 11:45 am por xtrac

» Tibia Bots 11 Crack - iBot 11 | BBot 11 | XenoBot 11 | Download | Baixar + Anty Battleye |
Qui Out 12, 2017 11:16 am por xtrac

» Tibia BBot 11 Crack | DOWNLOAD | BAIXAR + Anty Battleye
Qui Out 12, 2017 10:13 am por xtrac

Os membros mais ativos do mês
xtrac
 

www.warever.org Estreia em 31/01/2015 [10.53]

Qui Jan 29, 2015 9:44 am por godsucksoul@gmail.com

Venha jogar no Warever!
OT Server estreia em 31/01/2015!

Com mapa totalmente global, sem missões, rates otimas para um game play divertido, com mais de 1 ano online e equipe dedicada.
Nossa missão é oferecer um jogo divertido e que sejamos lembrados sempre como um dos maiores servidores Open Tibia.

Conectividade:
Site: [Você precisa estar registrado e conectado para ver este link.]
IP: [Você precisa estar registrado e conectado para ver este link.]
Port: 7171
Versão: 10.53

Rates:



[ Leitura completa ]

Comentários: 0

Parceiros
Radio Eletro Hitz


Sistema de Vip By Account 1.0

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Sistema de Vip By Account 1.0

Mensagem por Kelvin Victor em Ter Ago 23, 2011 8:27 am

Vip System by Account 1.0
By Kydrai

Este é um vip system por account, ou seja, um sistema de vip válido para todos os characters de uma determinada conta.

O script foi testado no TFS 0.3.6 - 8.54.
E no site Gesior 0.3.4 beta4.
Em caso de erros ou dúvidas é só postar.

Funções do Script
Função necessária para começar a usar o script:
installVip() -> Cria a coluna no banco de dados para usar o sistema de vip (testei somente em sqlite, mas acredito que funcione em mysql)

Funções que utilizam o account id:
doTeleportPlayersByAccount(acc, topos) -> Teleporta todos os players da account
getVipTimeByAccount(acc) -> Pega o tempo de vip
setVipTimeByAccount(acc, time) -> Edita o tempo de vip
getVipDaysByAccount(acc) -> Pega o tempo de vip em dias
isVipAccount(acc) -> Verifica se é vip
addVipDaysByAccount(acc, days) -> Adiciona dias de vip
doRemoveVipDaysByAccount(acc, days) -> Remove dias de vip
getVipDateByAccount(acc) -> Pega a data e hora que irá terminar a vip

Funções que utilizam o creature id (cid):
doTeleportPlayers(cid, topos) -> Teleporta todos os players da account
getVipTime(cid) -> Pega o tempo de vip
setVipTime(cid, time) -> Edita o tempo de vip
getVipDays(cid) -> Pega o tempo de vip em dias
isVip(cid) -> Verifica se é vip
addVipDays(cid, days) -> Adiciona dias de vip
doRemoveVipDays(cid, days) -> Remove dias de vip
getVipDate(cid) -> Pega a data e hora que irá terminar a vip

Inserindo as funções
Abra a pasta data/lib, crie um arquivo lua e coloque:
vipAccount.lua

Código:
--[[
   Name: Vip System by Account
   Version: 1.0
   Author: Kydrai
   Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/
   
   [Functions]
      -- Install
      installVip()
      
      -- By Account
      doTeleportPlayersByAccount(acc, topos)
      getVipTimeByAccount(acc)
      setVipTimeByAccount(acc, time)
      getVipDaysByAccount(acc)
      isVipAccount(acc)
      addVipDaysByAccount(acc, days)
      doRemoveVipDaysByAccount(acc, days)
      getVipDateByAccount(acc)
      
      -- By Player
      doTeleportPlayers(cid, topos)
      getVipTime(cid)
      setVipTime(cid, time)
      getVipDays(cid)
      isVip(cid)
      addVipDays(cid, days)
      doRemoveVipDays(cid, days)
      getVipDate(cid)
]]--

-- Install
function installVip()
   if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then
      print("[Vip System] Vip System instalado com sucesso!")
      return TRUE
   end
   print("[Vip System] Não foi possível instalar o Vip System!")
   return FALSE
end

-- By Account
function doTeleportPlayersByAccount(acc, topos)
   if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then
      return TRUE
   end
   return FALSE
end

function getVipTimeByAccount(acc)
   local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";")
   if vip:getID() == -1 then
      print("[Vip System] Account not found!")
      return FALSE
   end
   return vip:getDataInt("viptime")
end

function setVipTimeByAccount(acc, time)
   if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then
      return TRUE
   end
   return FALSE
end

function getVipDaysByAccount(acc)
   local vipTime = getVipTimeByAccount(acc)
   local timeNow = os.time()
   local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))
   return days <= 0 and 0 or days
end

function isVipAccount(acc)
   return getVipDaysByAccount(acc) > 0 and TRUE or FALSE
end

function addVipDaysByAccount(acc, days)
   if days > 0 then
      local daysValue = days * 24 * 60 * 60
      local vipTime = getVipTimeByAccount(acc)
      local timeNow = os.time()
      local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue)
      setVipTimeByAccount(acc, time)
      return TRUE
   end
   return FALSE
end

function doRemoveVipDaysByAccount(acc, days)
   if days > 0 then
      local daysValue = days * 24 * 60 * 60
      local vipTime = getVipTimeByAccount(acc)
      local time = vipTime - daysValue
      setVipTimeByAccount(acc, (time <= 0 and 1 or time))
      return TRUE
   end
   return FALSE
end

function getVipDateByAccount(acc)
   if isVipAccount(acc) then
      local vipTime = getVipTimeByAccount(acc)
      return os.date("%d/%m/%y %X", vipTime)
   end
   return FALSE
end

-- By Player
function doTeleportPlayers(cid, topos)
   doTeleportPlayersByAccount(getPlayerAccountId(cid), topos)
end

function getVipTime(cid)
   return getVipTimeByAccount(getPlayerAccountId(cid))
end

function setVipTime(cid, time)
   return setVipTimeByAccount(getPlayerAccountId(cid), time)
end

function getVipDays(cid)
   return getVipDaysByAccount(getPlayerAccountId(cid))
end

function isVip(cid)
   return isVipAccount(getPlayerAccountId(cid))
end

function addVipDays(cid, days)
   return addVipDaysByAccount(getPlayerAccountId(cid), days)
end

function doRemoveVipDays(cid, days)
   return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days)
end

function getVipDate(cid)
   return getVipDateByAccount(getPlayerAccountId(cid))
end


Exemplos de uso
Talkaction

GOD:
/installvip
/addvip name, days
/removevip name, days
/checkvip name

Player:
/buyvip
/vipdays

talkactions.xml:

Código:
<talkaction log="yes" access="5" words="/installvip;/addvip;/removevip;/checkvip" event="script" value="vipaccgod.lua"/>
<talkaction words="/buyvip;/vipdays" event="script" value="vipaccplayer.lua"/>


vipaccgod.lua:

function onSay(cid, words, param, channel)
local t = param:explode(",")
local name, days = t[1], tonumber(t[2])
if words == "/installvip" then
if installVip() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!")
end
elseif words == "/addvip" then
if name then
if days then
local acc = getAccountIdByName(name)
if acc ~= 0 then
addVipDaysByAccount(acc, days)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.")
end
elseif words == "/removevip" then
if name then
if days then
local acc = getAccountIdByName(name)
if acc ~= 0 then
doRemoveVipDaysByAccount(acc, days)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.")
end
elseif words == "/checkvip" then
if name then
local acc = getAccountIdByName(name)
if acc ~= 0 then
local duration = getVipDateByAccount(acc)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or ""))
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.")
end
end
return TRUE
end

vipaccplayer.lua:

function onSay(cid, words, param, channel)
if words == "/buyvip" then
local price = 1000000
local days = 30
if doPlayerRemoveMoney(cid, price) then
addVipDays(cid, days)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.")
end

elseif words == "/vipdays" then
local duration = getVipDate(cid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or ""))
end
return TRUE
end

Movement (Tile)

Coloque actionid 15000 em um tile onde somente os vips poderão passar.

movements.xml:

Código:
<movevent type="StepIn" actionid="15000" event="script" value="viptile.lua"/>



viptile.lua:

function onStepIn(cid, item, position, fromPosition)
if isVip(cid) == FALSE then
doTeleportThing(cid, fromPosition, false)
doSendMagicEffect(position, CONST_ME_MAGIC_BLUE)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.")
end
return TRUE
end

Creaturescript (Login)

Quando player logar irá verificar se a vip do player acabou, se sim então irá teleportar todos os players da account para o templo, se não irá mostrar o tempo da vip.

creaturescripts.xml:

Código:
<event type="login" name="viplogin" script="viplogin.lua"/>



viplogin.lua:

function onLogin(cid)
local vip = isVip(cid)
if getVipTime(cid) > 0 and vip == FALSE then
local townid = 1
doPlayerSetTown(cid, townid)
local templePos = getTownTemplePosition(getPlayerTown(cid))
doTeleportThing(cid, templePos, false)
setVipTime(cid, 0)
doTeleportPlayers(cid, templePos)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!")
elseif vip == TRUE then
local duration = getVipDate(cid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or ""))
end
return TRUE
end

Action (Door)

Coloque actionid 15001 na door onde somente os vips poderão passar. Use a porta gate of expertise (id: 1227)

actions.xml:

Código:
<action actionid="15001" script="vipdoor.lua"/>



vipdoor.lua:

function onUse(cid, item, fromPosition, itemEx, toPosition)
if isVip(cid) == FALSE then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente players vip podem passar.")
elseif item.itemid == 1227 then
doTransformItem(item.uid, item.itemid + 1)
doTeleportThing(cid, toPosition)
end
return TRUE
end

NPC (Vendedor de VIP)

vipnpc.xml:

Código:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Vendedor de VIP" script="vipnpc.lua" walkinterval="2000" floorchange="0">
   <health now="100" max="100"/>
   <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/>
   <parameters>
      <parameter key="message_greet" value="Hello |PLAYERNAME|, I sell {vip} days."/>
   </parameters>
</npc>
vipnpc.lua:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

function buyVip(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end

if doPlayerRemoveMoney(cid, parameters.price) then
addVipDays(cid, parameters.days)
npcHandler:say('Thanks, you buy '..parameters.days..' vip days. You have '..getVipDays(cid)..' vip days.', cid)
else
npcHandler:say('Sorry, you don\'t have enough money.', cid)
end

npcHandler:resetNpc()
return true
end

local node1 = keywordHandler:addKeyword({'vip'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want buy 30 vip days for 1000000 gp\'s?'})
node1:addChildKeyword({'yes'}, buyVip, {price = 1000000, days = 30})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then.', reset = true})

npcHandler:addModule(FocusModule:new())


Erros e Soluções


Erro: Error during getDataInt(viptime).
Motivo: A coluna viptime não está instalada no seu banco de dados.
Solução:
Executar o comando /installvip do exemplo da Talkaction.
Ou executar o comando sql no seu banco de dados:

ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;



Erro: attempt to call global 'getVipTime' (a nil value).
Motivo: A função getVipTime não existe, pois não foi instalada.
Solução:
Você precisa colocar o vipAccount.lua na pasta data/lib.
Em alguns OTs ainda precisa abrir o arquivo data/lib/data.lua e colocar:

dofile(getDataDir() .. "lib/vipAccount.lua")

Configurando o Gesior
Com essa configuração irá aparecer o vip status do player no site e será possível vender vip pelo site.
Se eu esqueci de alguma coisa é só avisar.

accountmanagement.php
Depois de:

Código:
if(!$account_logged->isPremium())
   $account_status = '<b><font color="red">Free Account</font></b>';
else
   $account_status = '<b><font color="green">Premium Account, '.$account_logged->getPremDays().' days left</font></b>';

Adicione:

Código:
if(!$account_logged->isVip())
   $account_vip_status = '<b><font color="red">Not Vip Account</font></b>';
else
   $account_vip_status = '<b><font color="green">Vip Account, '.$account_logged->getVipDays().' days left</font></b>';

Depois de:

Código:
<td class="LabelV" >Account Status:</td><td>'.$account_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" >


Adicione:

Código:
<td class="LabelV" >Account Vip Status:</td><td>'.$account_vip_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" >



pot/OTS_Account.php
Substitua:

Código:
private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0);


Por:

Código:
private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0, 'viptime' => 0);


Substitua:

Código:
$this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();


Por:

Código:
$this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('viptime') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();

Substitua:

Código:
$this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);


Por:

Código:
$this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('viptime') . ' = ' . (int) $this->data['viptime'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);

Depois de:

Código:
public function getPremDays()
{
   if( !isset($this->data['premdays']) || !isset($this->data['lastday']) )
   {
      throw new E_OTS_NotLoaded();
   }

   return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday']));
}

Adicione:

Código:
public function getVipDays()
{
   if( !isset($this->data['viptime']) || !isset($this->data['lastday']) )
   {
      throw new E_OTS_NotLoaded();
   }

   return ceil(($this->data['viptime'] - time()) / (24*60*60));
}

Depois de:

Código:
public function isPremium()
{
   return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0);
}

Adicione:

Código:
public function isVip()
{
   return ceil(($this->data['viptime'] - time()) / (24*60*60)) > 0;
}


characters.php
Substitua:

Código:
if($config['site']['show_vip_status'])
{
   $id = $player->getCustomField("id");
   if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++;
   $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>';
   $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch();
   if($vip == false) {
      $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>';
   }
   else
   {
      $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>';
   }
   $comment = $player->getComment();
   $newlines  = array("\r\n", "\n", "\r");
   $comment_with_lines = str_replace($newlines, '
', $comment, $count);
   if($count < 50)
      $comment = $comment_with_lines;
   if(!empty($comment))
   {
      if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++;
      $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>';
   }
}

Por:

Código:
if($config['site']['show_vip_status'])
{
   $id = $player->getCustomField("id");
   if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++;
   $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Account Vip Status:</TD>';
   if(!$account->isVip()) {
      $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>';
   }
   else
   {
      $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>';
   }
   $comment = $player->getComment();
   $newlines  = array("\r\n", "\n", "\r");
   $comment_with_lines = str_replace($newlines, '
', $comment, $count);
   if($count < 50)
      $comment = $comment_with_lines;
   if(!empty($comment))
   {
      if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++;
      $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>';
   }
}


shopsystem.php (+Créditos ao GM Bekman)
Substitua:

Código:
if($buy_offer['type'] == 'pacc')
{
   $player_premdays = $buy_player_account->getCustomField('premdays');
   $player_lastlogin = $buy_player_account->getCustomField('lastday');
   $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).',  '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');';
   $SQL->query($save_transaction);
   $buy_player_account->setCustomField('premdays', $player_premdays+$buy_offer['days']);
   $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']);
   $user_premium_points = $user_premium_points - $buy_offer['points'];
   if($player_premdays == 0)
   {
      $buy_player_account->setCustomField('lastday', time());
   }
   $main_content .= '<h2>PACC added!</h2><b>'.$buy_offer['days'].' days</b> of Premium Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.
Now you have <b>'.$user_premium_points.' premium points</b>.
<a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>';
}

Por:

Código:
if($buy_offer['type'] == 'pacc')
{
   $player_viptime = $buy_player_account->getCustomField('viptime');
   $player_lastlogin = $buy_player_account->getCustomField('lastday');
   $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).',  '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');';
   $SQL->query($save_transaction);
   
   if($player_viptime > 0)
      $buy_player_account->setCustomField('viptime', $player_viptime + ($buy_offer['days'] * 24 * 60 * 60));
   else
      $buy_player_account->setCustomField('viptime', time() + ($buy_offer['days'] * 24 * 60 * 60));

   $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']);
   $user_premium_points = $user_premium_points - $buy_offer['points'];
   if($player_viptime == 0)
   {
      $buy_player_account->setCustomField('lastday', time());
   }
   $main_content .= '<h2>VIP Days added!</h2><b>'.$buy_offer['days'].' days</b> of Vip Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.
Now you have <b>'.$user_premium_points.' premium points</b>.
<a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>';
}

Creditos: Vodkart por postar em outro forum
Kydrai
por criar o sistems
avatar
Kelvin Victor
Administrador
Administrador

Masculino Mensagens : 155
V$ : 226
Reputação : 12
Data de inscrição : 18/08/2010
Idade : 21

Ver perfil do usuário http://tibiaots.forumeiro.com

Voltar ao Topo Ir em baixo

Re: Sistema de Vip By Account 1.0

Mensagem por Hostereme em Ter Ago 23, 2011 9:50 am

Otimo Topico.
Ajudara muito os donos de servidores que estão querendo um sistema vip.

____________________________________________________________________________________________

Assinatura:

É meu fãn??? Então use em sua assinatura.


Metas:

[x]-30 Posts
[x]-40 Posts
[x]-50 Posts
[x]-60 Posts
[x]-75 Posts
[
x]-85 Posts
[ ]-100 Posts

Gostou? Da ++... Não cai o dedo xD.
avatar
Hostereme
Moderador
Moderador

Masculino Mensagens : 89
V$ : 129
Reputação : 11
Data de inscrição : 14/08/2011
Idade : 21
Localização : Brasil

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Vip By Account 1.0

Mensagem por Kelvin Victor em Ter Ago 23, 2011 10:21 am

Sim sim, uso ele em meu servidor
avatar
Kelvin Victor
Administrador
Administrador

Masculino Mensagens : 155
V$ : 226
Reputação : 12
Data de inscrição : 18/08/2010
Idade : 21

Ver perfil do usuário http://tibiaots.forumeiro.com

Voltar ao Topo Ir em baixo

Re: Sistema de Vip By Account 1.0

Mensagem por Skool em Dom Ago 28, 2011 6:51 pm

Que legal ! Adorei, qual é seu servidor ?
avatar
Skool
Novato
Novato

Masculino Mensagens : 1
V$ : 1
Reputação : 0
Data de inscrição : 28/08/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Vip By Account 1.0

Mensagem por Kelvin Victor em Ter Ago 30, 2011 11:15 am

baiakhere.no-ip.info
avatar
Kelvin Victor
Administrador
Administrador

Masculino Mensagens : 155
V$ : 226
Reputação : 12
Data de inscrição : 18/08/2010
Idade : 21

Ver perfil do usuário http://tibiaots.forumeiro.com

Voltar ao Topo Ir em baixo

Re: Sistema de Vip By Account 1.0

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum