OBS: Atualização do script para versoes mais recentes da TFS este post foi atualizado em 08/09/2011
Bom eu fiz a tão esperada atualização do SISTEMA VIP agora ela tem suporte a TFS 0.3.6 e a TFS 0.4 e ela é bem mais facil de instalar e usar basta você descompactar os arquivos na pasta mods que o sistema vip se instala em seu servidor automaticamente logo abaixo está o link do sistema atualizado...
So seguir o link abaixo
Sistema Vip Por Sql V4.0 Para Tfs 0.4 E Tfs 0.3.6
Bom fiz este script por causa de muitos pedidos espero que gostem.
Lembrando que esse script so vai funcionar na TFS 0.3.5
Bom atualizei agora para um arquivo de instalação em XML apenas coloque ele na pasta mods e coloque ele la
clique no download abaixo para baixar-lo
OBS: ele tem o suporte ao famoso SQLite
Agora vamos adicionar as funções nos libs primeiramenet vai em data/lib/data.lua abra este arquivo e abaixo de.
dofile(getDataDir() .. "lib/compat.lua")
Adicione.
dofile(getDataDir() .. "lib/vip.lua")
Depois de adicionar isso vamos criar o script vip.lua em data/lib.
No script você vai adicionar este seguinte codigo abaixo.
function isVip(cid) local Query = db.getResult("SELECT `vip` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") return (isPlayer(cid) == true and (Query:getDataInt("vip") == 1)) and true or false end function getVipTime(cid) local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") return Query:getDataInt("vip_time") end function getVipTimeByName(Name) local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(Name) ..";") return Query:getDataInt("vip_time") end function getVipDays(cid) local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") return Query:getDataInt("vip_days") end
Agora vamos adicionar o sistema que vai remover a quantidade de dias do VIP automaticamente.
Vai em data/globalevents/globalevents.xml abra este arquivo e abaixo de.
<globalevent name="clean" interval="7200" event="script" value="clean.lua"/>
Adicione.
<globalevent name="RemoveVipDays" interval="600" event="script" value="removevip.lua"/>
Agora iremos criar o script removevip.lua em data/globalevents/scripts.
No script você vai adicionar este seguinte codigo abaixo.
function onThink(interval, lastExecution, thinkInterval) Query = db.getResult("SELECT `id`, `vip_time` FROM `accounts` WHERE `accounts`.`vip` = 1") if(Query:getID() == -1) then return true end for i = 1, Query:getRows() do local AccID = Query:getDataInt("id") local VipTime = Query:getDataInt("vip_time") if VipTime >= os.time() then db.executeQuery("UPDATE `accounts` SET `vip_days` = ".. math.ceil((VipTime - os.time()) / 86400) .." WHERE `accounts`.`id` = ".. AccID ..";") else db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `accounts`.`id` = ".. AccID ..";") db.executeQuery("UPDATE `accounts` SET `vip_days` = 0 WHERE `accounts`.`id` = ".. AccID ..";") db.executeQuery("UPDATE `accounts` SET `vip` = 0 WHERE `accounts`.`id` = ".. AccID ..";") db.executeQuery("UPDATE `players` SET `reset_temple` = 1 WHERE `players`.`account_id` = ".. AccID ..";") end Query:next() end Query:free() return true end
Agora vamos adicionar o sistema que joga o player para o Temple quando acaba a VIP dele.
Vai em data/creaturescripts/creaturescripts.xml abra este arquivo e abaixo de
<event type="login" name="PlayerLogin" event="script" value="login.lua"/>
Adicione.
<event type="login" name="VipCheck" event="script" value="vipcheck.lua"/>
Agora vamos adicionar o script vipcheck.lua em data/creaturescripts/scripts.
No script você vai adicionar este seguinte codigo no spoiler abaixo.
Lembrando que você tem que por se você tem que configurar se usa rook sistem.
Se você não usar é so colocar o ID do temple da cidade principal.
Mas se você ativa o rook sistem você tera que por o ID da cidade de rook e da cidade principal mais você so ira usar o sistema de rook se você usar rook em seu ot.
local config = { RookSistem = "no", RookTempleID = 1, MainTempleID = 2 } config.RookSistem = getBooleanFromString(config.RookSistem) function getResetTemple(cid) local Query = db.getResult("SELECT `reset_temple` FROM `players` WHERE `players`.`id` = ".. getPlayerGUID(cid) ..";") return (isPlayer(cid) == true and (Query:getDataInt("reset_temple") == 1)) and true or false end function goRookTemple(cid) doTeleportThing(cid, getTownTemplePosition(config.RookTempleID)) doSendMagicEffect(fromPos, CONST_ME_POFF) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) db.executeQuery("UPDATE `players` SET `reset_temple` = 0 WHERE `players`.`id` = ".. getPlayerGUID(cid) ..";") end function goMainTemple(cid) doTeleportThing(cid, getTownTemplePosition(config.MainTempleID)) doPlayerSetTown(cid, config.MainTempleID) doSendMagicEffect(fromPos, CONST_ME_POFF) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) db.executeQuery("UPDATE `players` SET `reset_temple` = 0 WHERE `players`.`id` = ".. getPlayerGUID(cid) ..";") end function onLogin(cid) fromPos = getCreaturePosition(cid) if getResetTemple(cid) == true then if (config.RookSistem) then if isRookie(cid) == true then goRookTemple(cid) else goMainTemple(cid) end else goMainTemple(cid) end end return true end
Bom o sistema ja está completo mais falta a parte do tile que so vips podem passar e o comando para adicionar o vip e o comando que o player pode verificar quantos dias vip dele ainda tem então vamos la.
Agora vamos ate data/talkactions/talkactions.xml abra ele e abaixo de.
<talkaction log="yes" words="/addskill" access="5" event="function" value="addSkill"/>
Adicione.
<talkaction log="yes" words="/addvip" access="5" event="script" value="addvip.lua"/> <talkaction log="yes" words="!checkvip" event="script" value="addvip.lua"/>
Agora iremos criar o script addvip.lua em data/talkactions/scripts.
No script você vai adicionar este seguinte codigo abaixo.
function onSay(cid, words, param, channel) local Data = string.explode(param, ",") if (words:sub(2, 2) == "a") then if (not Data) then doPlayerSendCancel(cid, "Insira um nome.") return true elseif (not Data[2] or Data[2] == "") then doPlayerSendCancel(cid, "Insira a quantidade de dias de vip que ira adionar ao player.") return true elseif not isNumber(Data[2]) then doPlayerSendCancel(cid, "Use apenas numeros.") return true end local Target = db.getResult("SELECT `name` FROM `players` WHERE `name` = " .. db.escapeString(Data[1]) .. ";") if (Target:getID() ~= -1) then if (getPlayerByName(Data[1])) then doSendMagicEffect(getCreaturePosition(getPlayerByName(Data[1])), CONST_ME_MAGIC_GREEN) end if getVipTimeByName(Data[1]) == 0 then db.executeQuery("UPDATE `accounts` SET `vip_time` = 86400 * ".. Data[2] .." + ".. os.time() .." WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";") else db.executeQuery("UPDATE `accounts` SET `vip_time` = `accounts`.`vip_time` + (86400 * ".. Data[2] ..") WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";") end db.executeQuery("UPDATE `accounts` SET `vip` = 1 WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";") db.executeQuery("UPDATE `accounts` SET `vip_days` = `accounts`.`vip_days` + ".. Data[2] .." WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foi adicionado ".. Data[2] .." dias de vip ao player ".. Data[1] ..".") else doPlayerSendCancel(cid, "O player ".. Data[1] .." não existe.") end Target:free() else if getVipDays(cid) == 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não é um jogador vip.") elseif getVipDays(cid) >= 2 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. getVipDays(cid) .." dias de vip.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem 1 dia de vip.") end end return true end
Bom agora por ultimo o tile que so vip passa vamos em data/movements/scripts/tiles.lua e abaixo de.
if(not isPlayerGhost(cid)) then doTransformItem(item.uid, increasingItems[item.itemid]) end
Adicione.
if item.actionid == 7777 then if (isVip(cid) == false) then pushBack(cid, position, fromPosition, true) end return true end
Bom terminamos detalhe use o tile ID 426 com actionID 7777 para vip tile um pequeno detalhe no map editor coloque o tile como NO LOGOUT AREA para ninguem fazer bugs de M WALL para passar para area VIP.
Bom para saber como usar é simples para adicionar a vip la vai um explo de adicionar 30 dias no player Luke sky walker
/addvip Luke sky walker, 30
E para o player veifica quantos dias de vip ele tem ele usa o comando
!checkvip
Bom espero que seja util eu testei o script mas ainda pode ter bugs!!!
Por favor não tirem os creditos deste script!
EDIT
Eu adicionei math.ceil no removevip.lua provavelmente agora ele tenha suporte a SQLite!
Foi arrumado o bug do reset temple script atualizado vipcheck.lua (não testado caso ainda tenha bug pm ME!)
Foi adicionado o vip_sistem_install.xml para instalação automatica do sistema no SQL do servidor com suporte a MySql e SQLite
Atualizando o vip_sistem_install.xml para versão 2.0 junto com o fix para funcionar em MySql que não tava funcionando corretamente.