Bom vamos começa primeiro adicionando a tabela para indicar se o player é vip ou não.
Va em seu MySQL e use este query.
ALTER TABLE `accounts` ADD `vip` TINYINT( 1 ) NOT NULL DEFAULT '0'
Agora vamos colocar a talkaction para poder colocar a vip e retirar a vip dos players.
Va em Talkactions.xml e adicione.
<talkaction log="yes" words="/addvip" access="5" event="script" value="vip.lua"/> <talkaction log="yes" words="/remvip" access="5" event="script" value="vip.lua"/> <talkaction log="yes" words="/checkvip" access="5" event="script" value="vip.lua"/>
Agora crie um script chamado vip.lua na pasta scripts da pasta Talkactions e coloque este codigo abaixo.
function onSay(cid, words, param) local Data = string.explode(param, ",") if Data then local Target = db.getResult("SELECT `name` FROM `players` WHERE `name` = ".. db.escapeString(Data[1]) ..";") if Data then if (Target:getID() ~= -1) then if (words:sub(2, 2) == "a") then db.executeQuery("UPDATE `accounts` SET `vip` = 1 WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foi adicionado a vip ao player ".. Data[1] ..".") elseif (words:sub(2, 2) == "r") then db.executeQuery("UPDATE `accounts` SET `vip` = 0 WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foi removida a vip do player ".. Data[1] ..".") elseif (words:sub(2, 2) == "c") then if (isVipByName(Data[1]) == TRUE) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." é vip.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." não é vip.") end end else doPlayerSendCancel(cid, "Este player ".. Data[1] .." não existe.") end end else doPlayerSendCancel(cid, "Insira um nome.") end return TRUE end
Agora que você ja tem o sistema de adicionar vip e retirar a vip do player vamos fazer duas funções que verifique se o player é vip ou não em actions.
Primeiro va em "Data/Lib/Function.lua" e adicione a seguinte função abaixo.
function isVip(cid) local Query = db.getResult("SELECT `vip` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") local vip = Query:getDataInt("vip") return (isPlayer(cid) == TRUE and (vip == 1)) and TRUE or FALSE end function isVipByName(cid) local Query = db.getResult("SELECT `vip` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";") local vip = Query:getDataInt("vip") return vip end
Agora vou dar um exemplo de uma action de tile que verifica se o player é vip ou não para passar por ele.
Va em Movements.xml e adicione.
<movevent type="StepIn" actionid="1000" event="script" value="Viptile.lua"/>
Agora iremos cria uma action que no tile que tiver o actionID 1000 tera que ser player vip para passar por ele.
Agora crie um scripts chamado Viptile.lua na pasta scripts
function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não é um player vip para poder passar por aqui.") end return TRUE end
OBS: Este sistema serve tambem para players offline como online pois é direto por SQL
Espero que tenham gostado pois tive um bom trabalho para cria este script e decidi disponibiliza a vocês! que tem servidor com sistema de vip.
Por favor não tirem os creditos deste script!!!!!!!!!!
EDIT
Uma coisa pretendo melhorar este sistema para ele remover a vip automatico numa certa quantidade de dias configuravel!
Exemplos de como adicionar vip e remover e verificar se o player é vip.
Exemplo como adicionar vip
/addvip Luke sky walker
Exemplo como remover vip
/remvip Luke sky walker
Exemplo como verificar se o player é vip
/checkvip Luke sky walker