Admin Ranking
Mensagens : 28 Pontos : 88 Reputação : 0 Data de inscrição : 29/07/2009 Idade : -7975 Localização : OTSERV
| Assunto: [8.4]Sistema Vip Por Sql Para Tfs 2.0 Sex Jul 31, 2009 3:45 am | |
| Nome: Sistema Vip Por Sql Para Tfs . Versão: 2.0 . Tipo do script: action, talkaction . Servidor Testado: Tfs 0.3.3.147 . Autor: Luke sky walker
Comentario: Sistema vip que tem por finalidade facilitar a vida dos ADMs de Otserv fácil fazer e configurar mas vamos deixar de conversinha e vamos ao script!
Bom vamos começa primeiro adicionando as tabelas para indicar se o player é vip ou não, tabela que mostra a quantidade de dias e a tabela de define o tempo da vip.
Va em seu MySQL e use este query. - Código:
-
ALTER TABLE `accounts` ADD `vip` TINYINT( 1 ) NOT NULL DEFAULT '0'; ALTER TABLE `accounts` ADD `vip_days` INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE `accounts` ADD `vip_time` INT( 11 ) NOT NULL DEFAULT '0'; Ah tinha esquecido em que parte do mysql faça como está na ss para adicionar a query! Agora vamos colocar a talkaction para poder adicionar a vip e verificar quantos dia de vip dos players. Va em "Data/Talkactions/Talkactions.xml" e adicione. - Código:
-
<talkaction log="yes" words="/addvip" 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 "Data/Talkactions/Scripts" e coloque este codigo abaixo. - Código:
-
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 Data[2] then if (words:sub(2, 2) == "a") then if isNumber(Data[2]) == TRUE then if vipTimeByName(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]) .." LIMIT 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, "Insira apenas numeros.") end else doPlayerSendCancel(cid, "Para verificar uma vip não presisa inserir os dias.") end else if (words:sub(2, 2) == "c") then if vipDaysByName(Data[1]) == 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." não é vip.") elseif vipDaysByName(Data[1]) == 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." tem ".. vipDaysByName(Data[1]) .." dia de vip.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." tem ".. vipDaysByName(Data[1]) .." dias de vip.") end else doPlayerSendCancel(cid, "Insira a quantidade de dias que vai adicionar de vip ao player.") 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 vamos em "Data/Libs" e vamos adicionar em "Data.lua" na ultima linha.É NEGO NUM É FACIL - Código:
-
dofile(getDataDir() .. "Lib/Vip_Functions.lua") Agora vamos criar um script chamado "Vip_Functions.lua" na pasta "Data/Libs" e colocar este codigo abaixo. - Código:
-
function vipDays(cid) local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") local vip_days = Query:getDataInt("vip_days") return vip_days end
function vipDaysByName(cid) local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";") local vip_days = Query:getDataInt("vip_days") return vip_days end
function haveVipDays(cid) local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") local vip_days = Query:getDataInt("vip_days") return (isPlayer(cid) == TRUE and (vip_days > 0)) and TRUE or FALSE end
function haveVipDaysByName(cid) local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";") local vip_days = Query:getDataInt("vip_days") return (isPlayer(cid) == TRUE and (vip_days > 0)) and TRUE or FALSE end
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 haveVipTime(cid) local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") local vip_time = Query:getDataInt("vip_time") return (isPlayer(cid) == TRUE and (vip_time >= 1)) and TRUE or FALSE end
function vipTimeByName(cid) local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";") local vip_time = Query:getDataInt("vip_time") return vip_time end
function vipTime(cid) local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") local vip_time = Query:getDataInt("vip_time") return vip_time end Agora iremos colocar os creture script que faz a remoção automatica dos dias da vip e teleporta os chars para o temple quando acaba a vip! Vamos em "Data\Creaturescripts" e abriremos o script "Login.lua" e adicione o codigo abaixo. - Código:
-
if vipTime(cid) >= 1 then if vipTime(cid) >= os.time() then db.executeQuery("UPDATE `accounts` SET `vip_days` = ".. (vipTime(cid) - os.time()) / 86400 .." WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") else db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") db.executeQuery("UPDATE `accounts` SET `vip_days` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") end end if haveVipDays(cid) == FALSE then if isVip(cid) == TRUE then db.executeQuery("UPDATE `players` SET `town_id` = 1, `posx` = X, `posy` = Y, `posz` = Z WHERE `players`.`account_id` = ".. getPlayerAccountId(cid) ..";") db.executeQuery("UPDATE `accounts` SET `vip` = '0' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") local Position = getTownTemplePosition(1) doTeleportThing(cid, Position) doSendMagicEffect(Position, 10) doPlayerSetTown(cid, 1) end end OBS = Coloque as coordenadas do templo da cidade principal. OBS = Coloque ID da cidade principal. Agora iremos cria uma action que no tile que tiver o actionID 1000 tera que ser player vip para passar por ele. Va em Movements.xml e adicione. - Código:
-
<movevent type="StepIn" actionid="1000" event="script" value="Viptile.lua"/> Agora crie um scripts chamado Viptile.lua na pasta scripts - Código:
-
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 Exemplos de como adicionar vip e remover e verificar se o player é vip. Exemplo de como adicionar uma vip de 10 dias /addvip Luke sky walker, 10 Exemplo de como verificar se o player é vip e quantos dias de vip ele tem ainda. /checkvip Luke sky walker OBS: Este sistema serve tambem para players offline como online pois é direto por SQL. Detalhe eu so fiz testes basicos não usei ele em server que fica online então se acharem algum erro reporte par min. Espero que tenham gostado pois tive um bom trabalho para cria este script e decidi disponibiliza a vocês! Que usam um sistema de vip Créditos Admin | |
|