Ir para conteúdo

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


Lukeskywalker

Posts Recomendados

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

Vip.rar

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

lol velho, era melhor ter usado global storage value...

tipo:

global storage value base = 56874

account_vip_storage_value = acc_id+global storage value base

 

melhor do que alterar a tabela de account, pode dar bug em alguns sites, mal feitos talvez

Link para o comentário
Compartilhar em outros sites

lol velho, era melhor ter usado global storage value...

tipo:

global storage value base = 56874

account_vip_storage_value = acc_id+global storage value base

 

melhor do que alterar a tabela de account, pode dar bug em alguns sites, mal feitos talvez

Eu acho que não daria nenhum problema em adicionar uma coluna por que no site é escolhido as colunas que iram ser usadas não a tabela intera então eu descarto o problema com sites.

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

Cara funcionou mesmo valeuu aew cara mais tem um pequeno problema =/.

 

Quando vai checar o vip:

 

16:05 /checkvip GOD Jhon

16:05 O player GOD Jhon não é vip.

 

Erro TFS:

[12/04/2009 16:05:14] Error during getDataInt(vip).

 

Fica dando esse outro erro quando adiciono vip:

 

16:06 /addvip GOD Jhon

16:06 Foi adicionado a vip ao player GOD Jhon.

 

Erro TFS:

[12/04/2009 16:06:55] Error during getDataInt(vip).

[12/04/2009 16:06:55] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: near "LIMIT": syntax error (UPDATE "accounts" SET "vip" = '1' WHERE "accounts"."id" = 2 LIMIT 1;)

 

Não sei por que... e meu ot e de acc manager.

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

Uia boa ideia...

 

Porém o povo brasileiro é meio preguiçoso e acho que não irá rolar =/

 

Porém e um sistema mais seguro e pode ser adquirido pelo site por um codigo php simples

Link para o comentário
Compartilhar em outros sites

Cara funcionou mesmo valeuu aew cara mais tem um pequeno problema =/.

 

Quando vai checar o vip:

 

16:05 /checkvip GOD Jhon

16:05 O player GOD Jhon não é vip.

 

Erro TFS:

[12/04/2009 16:05:14] Error during getDataInt(vip).

 

Fica dando esse outro erro quando adiciono vip:

 

16:06 /addvip GOD Jhon

16:06 Foi adicionado a vip ao player GOD Jhon.

 

Erro TFS:

[12/04/2009 16:06:55] Error during getDataInt(vip).

[12/04/2009 16:06:55] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: near "LIMIT": syntax error (UPDATE "accounts" SET "vip" = '1' WHERE "accounts"."id" = 2 LIMIT 1;)

 

Não sei por que... e meu ot e de acc manager.

 

tenta tirar o "LIMIT 1" tipo eu so testei em MySql então não sei se funciona em SQLITE

 

Bom eu vo dar uma revisada no script, estou pensando em postar o outro que eu fiz que é melhor você adiciona a vip por quantidade de dias e ela remove sosinha ainda estou testando aquele script.

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

muito bom

mais fica dando erros

explo:esse é quando vo fala o nome pra ver se tem vip "/checkvip ****

[21/04/2009 01:59:46] Lua Script Error: [TalkAction Interface] 
[21/04/2009 01:59:46] data/talkactions/scripts/vip.lua:onSay

[21/04/2009 01:59:46] data/talkactions/scripts/vip.lua:14: attempt to call global 'isVipByName' (a nil value)
[21/04/2009 01:59:46] stack traceback:
[21/04/2009 01:59:46]	 data/talkactions/scripts/vip.lua:14: in function <data/talkactions/scripts/vip.lua:1>

 

E esse é quando passa pela pos:

[21/04/2009 01:58:36] Lua Script Error: [MoveEvents Interface] 
[21/04/2009 01:58:36] data/movements/scripts/Viptile.lua:onStepIn

[21/04/2009 01:58:36] data/movements/scripts/Viptile.lua:2: attempt to call global 'isVip' (a nil value)
[21/04/2009 01:58:36] stack traceback:
[21/04/2009 01:58:36]	 data/movements/scripts/Viptile.lua:2: in function <data/movements/scripts/Viptile.lua:1>

 

 

vlw

Link para o comentário
Compartilhar em outros sites

muito bom

mais fica dando erros

explo:esse é quando vo fala o nome pra ver se tem vip "/checkvip ****

[21/04/2009 01:59:46] Lua Script Error: [TalkAction Interface] 
[21/04/2009 01:59:46] data/talkactions/scripts/vip.lua:onSay

[21/04/2009 01:59:46] data/talkactions/scripts/vip.lua:14: attempt to call global 'isVipByName' (a nil value)
[21/04/2009 01:59:46] stack traceback:
[21/04/2009 01:59:46]	 data/talkactions/scripts/vip.lua:14: in function <data/talkactions/scripts/vip.lua:1>

 

E esse é quando passa pela pos:

[21/04/2009 01:58:36] Lua Script Error: [MoveEvents Interface] 
[21/04/2009 01:58:36] data/movements/scripts/Viptile.lua:onStepIn

[21/04/2009 01:58:36] data/movements/scripts/Viptile.lua:2: attempt to call global 'isVip' (a nil value)
[21/04/2009 01:58:36] stack traceback:
[21/04/2009 01:58:36]	 data/movements/scripts/Viptile.lua:2: in function <data/movements/scripts/Viptile.lua:1>

 

 

vlw

Qual a versão de otserver que tu usa?

tu adiciono as funções no local correto?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...