[action] Sistema Vip Por Sql V2.0 Para Tfs

Lukeskywalker

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 30/06/08Posts: 173Char no Tibia: Lady Stars Walker

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.

 

ALTER TABLE `accounts` ADD `vip` TINYINT(1) NOT NULL DEFAULT 0, ADD `vip_days` INT(11) NOT NULL DEFAULT 0, ADD `vip_time` INT(11) NOT NULL DEFAULT 0;

 

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.

 

	<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.

Ou se prefirir ja baixe ele feito Vip_talkaction.rar

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.

 

dofile(getDataDir() .. "Lib/Vip_Functions.lua")

 

Agora vamos criar um script chamado "Vip_Functions.lua" na pasta "Data/Libs" e colocar este codigo abaixo.

Ou se prefirir ja baixe ele feito Vip_Functions.rar

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.

 

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.

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

 

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.

Por favor não tirem os creditos deste script!

mbnstar

(:
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 02/07/07Posts: 70Char no Tibia: Peppenzily

Esse dai ta funcionando? gostei do sistema mais tem que botar isso:

 

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';

 

Em que parte do mysql?

Lukeskywalker

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 30/06/08Posts: 173Char no Tibia: Lady Stars Walker
Esse dai ta funcionando? gostei do sistema mais tem que botar isso:

 

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';

 

Em que parte do mysql?

imagemeke.jpg

mbnstar

(:
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 02/07/07Posts: 70Char no Tibia: Peppenzily

Ataah valeu....Parabéns pelo script ;)...

 

 

- Editt....

 

 

Adapta um para sqlite, pouca gente usa mysql e muita gente quer um bom sistema vip.

Raw Messiah

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/09Posts: 4Char no Tibia: estaum abandonados

Parabéns brow soh vc mesmo pra postar um ótimo script se sabe quanto esperamos por alguem que descidisse postar este script.

 

vlw

 

gm_new@hotmail.com :thumbsupsmiley2:

Lukeskywalker

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 30/06/08Posts: 173Char no Tibia: Lady Stars Walker

Pessoal eu tinha esqueçido de completar o Script com o "Creaturescripts" agora eu ja atualizei so por o resto que vai funcionar tudo!!!

mbnstar

(:
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 02/07/07Posts: 70Char no Tibia: Peppenzily

Era isso que eu estava me pergutando, Obrigado ja estou testando essa belezura ;D..

fabianobn

-=HiHO=-
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/06/08Posts: 57Char no Tibia: Fabiano Alencar

LoL Veio agora sim você completou a vida do Server de muitos :D

 

Abraços ae manow.

1445414_1.png

SirJuninho

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/05/09Posts: 52
Adapta um para sqlite, pouca gente usa mysql e muita gente quer um bom sistema vip.

Tá brincando né ?? o cara teve moh trampo pra faze desse jeito e ainda quer que ele adapte pra SQLite ?

quem quiser o sistema que dê os seus pulos ou adapte pra sii mesmo ¬¬

 

@Topic

sem palavras, fico 10!

parabéns!

Lukeskywalker

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 30/06/08Posts: 173Char no Tibia: Lady Stars Walker
Tá brincando né ?? o cara teve moh trampo pra faze desse jeito e ainda quer que ele adapte pra SQLite ?

quem quiser o sistema que dê os seus pulos ou adapte pra sii mesmo ¬¬

 

@Topic

sem palavras, fico 10!

parabéns!

Eu nunca usei o SQLite enton num sei como ele funciona =xx

se eu soubesse ate faria.

Rato_375

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/07/07Posts: 23

ixi no meu ot ta dando esse erro aqui

 

[06/05/2009 16:59:53] Lua Script Error: [CreatureScript Interface]

[06/05/2009 16:59:53] data/creaturescripts/scripts/login.lua

 

[06/05/2009 16:59:53] data/lib/database.lua:39: [Result:getDataInt]: Result not set!

[06/05/2009 16:59:53] Warning: [Event::loadScript] Can not load script. data/creaturescripts/scripts/login.lua

 

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

 

e por causa desse script q ta dando esse erro o q eu faço?

Lukeskywalker

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 30/06/08Posts: 173Char no Tibia: Lady Stars Walker
ixi no meu ot ta dando esse erro aqui

 

[06/05/2009 16:59:53] Lua Script Error: [CreatureScript Interface]

[06/05/2009 16:59:53] data/creaturescripts/scripts/login.lua

 

[06/05/2009 16:59:53] data/lib/database.lua:39: [Result:getDataInt]: Result not set!

[06/05/2009 16:59:53] Warning: [Event::loadScript] Can not load script. data/creaturescripts/scripts/login.lua

 

 

 

e por causa desse script q ta dando esse erro o q eu faço?

sabe me dizer qual a versão do seu server?

ThiagoGimenes

Sublime OTS
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/05/09Posts: 48

Muito bom, funcionou.

Parabens!

 

Abraços...

ThiagoGimenes

AMD Phenom II X6 1090T 3.2Ghz Six-Core 6Mb AM3 Box /// Gigabyte Phenom/Athlon II (AM3) | GA-790XTA-UD4 /// 8 GB Corsair DDR3 1600MHz /// Seagate HD 1TB SATA2 7200RPM /// ATI Radeon HD 5770 1GB GDDR5 128-bit + ATI Radeon HD 5770 1GB GDDR5 128-bit /// Seventeam 650W | ST-650 PWL /// Samsung TV LED 3D 32 Pol. Full HD

Rato_375

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/07/07Posts: 23
sabe me dizer qual a versão do seu server?

entao eh TFS 0.3.1 ot 8.40

 

se poderia criar para essa versao???

Lukeskywalker

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 30/06/08Posts: 173Char no Tibia: Lady Stars Walker
entao eh TFS 0.3.1 ot 8.40

 

se poderia criar para essa versao???

Eu so testei essa action na TFS 0.3.2

é que estou meiu sem tempo no momento para dar uma olhada na TFS 0.3.1