Ir para conteúdo

[Action] Sistema Vip Por Sql V3.0 Para Tfs 0.3.5


Lukeskywalker

Posts Recomendados

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

vip_sistem_install.xml

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.

Editado por Lukeskywalker
Link para o comentário
Compartilhar em outros sites

Belo script obrigado por trazer um bom conteudo ao xtibia.

 

Obrigado sempre que puder estarei aqui xD.

 

Otimo ate que em fim explico todo shuhssahusuha

fico bom funciona normal

Os outros funciona mas é menos pratico de se usar eu arrumei um jeito mais pratico de por no ot e um que seja mais seguro e mais preciso na contagem dos dias de VIP e foi isso que fiz neste!

 

OBS: Da para usar em todos tipos de scripts esse sistema so saber o basico de scripting, da para ate fazer npc que so vip viaja e etc que so vip compre certo item (mais complicado mais possivel)

 

E mais um detalhe estou pensando em fazer um com suporte a SQLite!

 

EDIT

 

Acho que descobri por que no SQLite não funcionava o sistema vou dar um fix no script e editar ele com as alterações.

Editado por Lukeskywalker
Link para o comentário
Compartilhar em outros sites

tem como vc cria uma pagina para falar os VIP do ot na pagina e quantos dias ainda resta?

ja e o melhor sistema Vip se vc coloca isso ai sim sera o sistema VIP PERFEITOOO.

 

Edit:

esse sistema usa vip por account?

mais remove o premium account?

Editado por falaaa
Link para o comentário
Compartilhar em outros sites

tem como vc cria uma pagina para falar os VIP do ot na pagina e quantos dias ainda resta?

ja e o melhor sistema Vip se vc coloca isso ai sim sera o sistema VIP PERFEITOOO.

 

Edit:

esse sistema usa vip por account?

mais remove o premium account?

Ele funciona separadamente do premium acc.

 

Eu não mexo com php ai você teria que arrumar um jeito para isso ai ja tem o comando que o player pode verificar os dias de vip dele.

Link para o comentário
Compartilhar em outros sites

Script ta otimo, parabens aqui funciono 100% .

 

Aprovado! :button_ok:

 

Só que nao teria como faser para os player que forem vip nao pegar fila, pq talz as pessoas paga vip la toda feliz vai la loga acc dela e quando vai ve tem 26 pessoas na fila na frente dela.

 

Ai ela perde ate o animo de joga.

 

Bom tirando isso o script ta otimo.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

Script ta otimo, parabens aqui funciono 100% .

 

Aprovado! :button_ok:

 

Só que nao teria como faser para os player que forem vip nao pegar fila, pq talz as pessoas paga vip la toda feliz vai la loga acc dela e quando vai ve tem 26 pessoas na fila na frente dela.

 

Ai ela perde ate o animo de joga.

 

Bom tirando isso o script ta otimo.

 

Abraços.

Bom isso ja séria necesario mexer no c++ e se for para mexer no c++ ja é mais facil por este sistema intero no c++ =x como eu fiz num ot

Link para o comentário
Compartilhar em outros sites

Bom isso ja séria necesario mexer no c++ e se for para mexer no c++ ja é mais facil por este sistema intero no c++ =x como eu fiz num ot

Tem como vc disponibilizar isso para nos do xtibia?

 

e como q funciona sistema de dia tpw 8400 seira 24h pois eu vou cria uma tabela no gesior quando vc procurar o player falar se e VIP e quantos dias de VIP ele tem?

Link para o comentário
Compartilhar em outros sites

Tem como vc disponibilizar isso para nos do xtibia?

 

e como q funciona sistema de dia tpw 8400 seira 24h pois eu vou cria uma tabela no gesior quando vc procurar o player falar se e VIP e quantos dias de VIP ele tem?

 

Bom para você faser isso é preciso saber programar em php, mais nao deve ser muito dificio não, é só você aproveitar a função que conta os dias de premyaccount, só que em ves de você usar a tabela premdays você usa a tabela vipdays do sql.

 

@Lukeskywalker

Bom isso ja séria necesario mexer no c++ e se for para mexer no c++ ja é mais facil por este sistema intero no c++ =x como eu fiz num ot

 

Bom seria uma boa você adicionar esse sistema ao script, iria ficar mais perfect do que ja ta e tambem ficaria muito feliz xD.

 

É isso ai!

 

Att, Leleo~

Link para o comentário
Compartilhar em outros sites

Tem como vc disponibilizar isso para nos do xtibia?

 

e como q funciona sistema de dia tpw 8400 seira 24h pois eu vou cria uma tabela no gesior quando vc procurar o player falar se e VIP e quantos dias de VIP ele tem?

Posso ate pensar em disponibilizar isso para o Xtibia mas como é no c++ vai ser necesario compilar ele e etc, posso disponibilizar um ja compilado com as alterações ja feitas tambem!

so que não sei se vou conseguir por para os VIP entra sem FILA!

pois a minha area é scripting não c++ =x

se fazer esse sistema por c++ vai ter a tabela vipdays igual da permmy então seria praticamente so copiar a linha da premmy acc e muda os dados que ela vai ler então se fazer pelo c++ não seria dificil colocar para o site mostra se é vip ou não!

por esse sistema de script ja é possivel fazer isso pois ele atualiza de 10 em 10 minutos os dias de vip!

se quiser que eu tente fazer isso para você me manda uma MP entrando em contato que eu vejo se consigo o code para você de php!!

Editado por Lukeskywalker
Link para o comentário
Compartilhar em outros sites

no site que eu to criando consegui coloca se o player e vip ou nao so nao verificar quantos dias tem xD

Obg pelo otimo sistema vip

 

Eu utilizo Gesior AAC é um otimo site

Link para o comentário
Compartilhar em outros sites

no site que eu to criando consegui coloca se o player e vip ou nao so nao verificar quantos dias tem xD

Obg pelo otimo sistema vip

 

Eu utilizo Gesior AAC é um otimo site

Mas você quer que mostre onde os dias de VIP nos dados dos chars ou no login da acc?

Link para o comentário
Compartilhar em outros sites

Bom isso ja séria necesario mexer no c++ e se for para mexer no c++ ja é mais facil por este sistema intero no c++ =x como eu fiz num ot

nao seria mais facil coloca o player como acess 2 ou ate mesmo 3 pq eu axou q quando vc tem acess acima de 1 axo q vc nao pega fila :D

 

e sobre vip no site seria quando vc procura-se o player tpw http://ip:8090/?subtopic=characters&name=Seu+Nick

no information account VIP Account :yes ou no

e quando vc loga fala quantos dias de VIP ainda tem e se e VIP.

Editado por falaaa
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...