Ir para conteúdo

Duvida Vip Kydrai


Terun

Posts Recomendados

Meu OT tem o sistema do KYDRAI instalado

http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/

 

 

 

Mas tenho uma duvida, gostaria que quando o player fala-se !buyvip, ai invez dele ganhar os 30 dias de vip, ganhe um item "X" que ao clicar adicionei 30 dias de vip.

 

 

tem como?

 

 

brigadao!

Link para o comentário
Compartilhar em outros sites

Tem sim. O que voce deve fazer:

 

Escolher o item que ao ser uzado adicione os dias de vip.

Depois voce tera que criar uma action com o id do item que ao clicar vai adicionar a vip.

 

no momento eu to usando um celular mas assim que possivel e se voce nao conseguir eu edito aqui e coloco o script pra voce. Boa sorte.

Link para o comentário
Compartilhar em outros sites

Tem sim. O que voce deve fazer:

 

Escolher o item que ao ser uzado adicione os dias de vip.

Depois voce tera que criar uma action com o id do item que ao clicar vai adicionar a vip.

 

no momento eu to usando um celular mas assim que possivel e se voce nao conseguir eu edito aqui e coloco o script pra voce. Boa sorte.

orra, agradecerei muito, tentei mas sempre da erro,

 

bem complexo esse sistema vip do kidrai, e bem completo tbm

Link para o comentário
Compartilhar em outros sites

Bom, vamos começar. Creio que você ja tenha todos os arquivos do Sistema Vip.

 

Então no arquivo vipaccplayer.lua:

 

function onSay(cid, words, param, channel)
       if words == "/buyvip" then
               local price = 1000000
               local days = 0
               if doPlayerRemoveMoney(cid, price) then
		doPlayerAddItem(cid, XXXX, 1)
                       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce comprou o VIP Item!")
               else
                       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.")
               end

       elseif words == "/vipdays" then
               local duration = getVipDate(cid)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or ""))
       end
       return TRUE
end

 

Mude o "XXXX" para o ID do item que ao ser usado vai adicionar o numero de dias de VIP.

 

 

Em data\actions\actions.xml adicione em algum lugar:

 

<action itemid="XXXX" event="script" value="itemvip.lua"/>

 

Mude o "XXXX" para o ID do item que ao ser usado vai adicionar o numero de dias de VIP.

 

 

E por último, crie um arquivo com o nome itemvip.lua em data\actions\scripts\

 

function onUse(cid, words, param, channel)
if doPlayerRemoveItem(cid,XXXX,1) then
	addVipDays(cid, days)  
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.")
end
return TRUE 
end

 

Mude o "XXXX" para o ID do item que ao ser usado vai adicionar o numero de dias de VIP.

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

putz perfeito, era isso mesmo q eu precisava!

 

mais uma duvida,

 

o price 1000 está como gold?

 

como fazer para o preco a ser cobrado seja outro item YYYY

Link para o comentário
Compartilhar em outros sites

Estuda o básico de script antes de postar a dúvida C$%AL#@!!!

 

Não só você, mas a maioria q posta aqui :X

 

Vamos lá...

 

 

No arquivo vipaccplayer.lua:

 

function onSay(cid, words, param, channel)
       if words == "/buyvip" then
               local qnt = 220
	local itemid = 2229
               local days = 0
               if getPlayerItemCount(cid, itemid) > qnt then
		doPlayerRemoveItem(cid, itemid, qnt)
                       doPlayerAddItem(cid, XXXX, 1)
                       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce comprou o VIP Item!")
               else
                       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..qnt.." "..getItemNameById(itemid).." para adicionar "..days.." dia(s) de vip.")
               end

       elseif words == "/vipdays" then
               local duration = getVipDate(cid)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or ""))
       end
       return TRUE
end

 

Onde o XXXX o Kmmy já explicou, em qnt = 220 você coloca a quantidade do item(no caso pus 220), em itemid = 2229 coloque o id do item que deverá ser removido, no caso coloquei o id da skull.

Link para o comentário
Compartilhar em outros sites

isso mesmo Antharaz! MUITO OBRIGADO!

 

to dando uma estudada no lua sim, por enquanto to tentando ^^,

 

PARTE 1 RESOLVIDO:

 

 

só uma coisa, o sistema nao estava totalmente instalado, acertei agora, mas ta dando esse erro quando uso o item que ira dar o vip, o item some mas nao da mensagem nenhuma e apresenta este erro:

 

 

[09/08/2011 23:47:24] [Error - Action Interface] 
[09/08/2011 23:47:24] data/actions/scripts/itemvip.lua:onUse
[09/08/2011 23:47:24] Description: 
[09/08/2011 23:47:24] data/lib/vipAccount.lua:78: attempt to compare number with nil
[09/08/2011 23:47:24] stack traceback:
[09/08/2011 23:47:24] 	data/lib/vipAccount.lua:78: in function <data/lib/vipAccount.lua:77>
[09/08/2011 23:47:24] 	(tail call): ?
[09/08/2011 23:47:24] 	data/actions/scripts/itemvip.lua:3: in function <data/actions/scripts/itemvip.lua:1>
[09/08/2011 23:50:34] > Broadcasted message: "Forcas sobrenaturais circundam as ilhas de squirtles, os mares estao agitados, uma grande tempestade se forma, algo se aproxima.".

 

Arquivos:

 

itemvip.lua

actions.xml: <action itemid="7893" event="script" value="itemvip.lua"/>

 

<--Linha 1-->function onUse(cid, words, param, channel)

if doPlayerRemoveItem(cid,7893,1) then

<--Linha 3 --> addVipDays(cid, days)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.")

end

return TRUE

end

 

 

lib/vipAccount.lua

 

--[[

Name: Vip System by Account

Version: 1.0

Author: Kydrai

Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/

 

[Functions]

-- Install

installVip()

 

-- By Account

doTeleportPlayersByAccount(acc, topos)

getVipTimeByAccount(acc)

setVipTimeByAccount(acc, time)

getVipDaysByAccount(acc)

isVipAccount(acc)

addVipDaysByAccount(acc, days)

doRemoveVipDaysByAccount(acc, days)

getVipDateByAccount(acc)

 

-- By Player

doTeleportPlayers(cid, topos)

getVipTime(cid)

setVipTime(cid, time)

getVipDays(cid)

isVip(cid)

addVipDays(cid, days)

doRemoveVipDays(cid, days)

getVipDate(cid)

]]--

 

-- Install

function installVip()

if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then

print("[Vip System] Vip System instalado com sucesso!")

return TRUE

end

print("[Vip System] Não foi possível instalar o Vip System!")

return FALSE

end

 

-- By Account

function doTeleportPlayersByAccount(acc, topos)

if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then

return TRUE

end

return FALSE

end

 

function getVipTimeByAccount(acc)

local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";")

if vip:getID() == -1 then

print("[Vip System] Account not found!")

return FALSE

end

return vip:getDataInt("viptime")

end

 

function setVipTimeByAccount(acc, time)

if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then

return TRUE

end

return FALSE

end

 

function getVipDaysByAccount(acc)

local vipTime = getVipTimeByAccount(acc)

local timeNow = os.time()

local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))

return days <= 0 and 0 or days

end

 

function isVipAccount(acc)

return getVipDaysByAccount(acc) > 0 and TRUE or FALSE

end

 

function addVipDaysByAccount(acc, days)

<--Linha 78--> if days > 0 then

local daysValue = days * 24 * 60 * 60

local vipTime = getVipTimeByAccount(acc)

local timeNow = os.time()

local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue)

setVipTimeByAccount(acc, time)

return TRUE

end

return FALSE

end

 

function doRemoveVipDaysByAccount(acc, days)

if days > 0 then

local daysValue = days * 24 * 60 * 60

local vipTime = getVipTimeByAccount(acc)

local time = vipTime - daysValue

setVipTimeByAccount(acc, (time <= 0 and 1 or time))

return TRUE

end

return FALSE

end

 

function getVipDateByAccount(acc)

if isVipAccount(acc) then

local vipTime = getVipTimeByAccount(acc)

return os.date("%d/%m/%y %X", vipTime)

end

return FALSE

end

 

-- By Player

function doTeleportPlayers(cid, topos)

doTeleportPlayersByAccount(getPlayerAccountId(cid), topos)

end

 

function getVipTime(cid)

return getVipTimeByAccount(getPlayerAccountId(cid))

end

 

function setVipTime(cid, time)

return setVipTimeByAccount(getPlayerAccountId(cid), time)

end

 

function getVipDays(cid)

return getVipDaysByAccount(getPlayerAccountId(cid))

end

 

function isVip(cid)

return isVipAccount(getPlayerAccountId(cid))

end

 

function addVipDays(cid, days)

return addVipDaysByAccount(getPlayerAccountId(cid), days)

end

 

function doRemoveVipDays(cid, days)

return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days)

end

 

function getVipDate(cid)

return getVipDateByAccount(getPlayerAccountId(cid))

end

 

 

Editado:

 

Alterei o itemvip.lua da seguinte maneira e funcionou:

 

itemvip.lua

function onUse(cid, words, param, channel)
       if doPlayerRemoveItem(cid,7893,1) then
               addVipDays(cid, 30)  
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou 30 dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.")
       end
return TRUE 
end

 

 

 

--------------------

Parte 2

Ultima coisa Para finalizar eu gostaria usar esses 2 sistemas Vip system do Kydrai, como fazer para adaptar? poderiam ajudar?

tentei aqui com o isvip mas sem sucesso.

 

<movevent type="StepIn" actionid="13540" event="script" value="vip.lua" />

 

 

 

function onStepIn(cid, item, pos)

 

 

 

-- aqui e aonde ele vai teleportar o player se ele nao for vip

teleport1 ={x=576, y=1143, z=7}

 

 

 

if isPlayer(cid) then

 

if item.actionid == 13540 then

 

vip = getPlayerStorageValue(cid,13540)

if vip == -1 then

doPlayerSendCancel(cid,"So players Vip podem ter acesso aos Teleports vip.")

 

 

doTeleportThing(cid,teleport1)

 

 

else

end

end

end

end

 

 

 

 

 

 

<movevent type="StepIn" uniqueid="13700" event="script" value="vipe.lua"/>

 

 

-- Script Vip Sytem 1.0 --

function onStepIn(cid, item, position, fromPosition)

 

local config = {

msgDenied = "Você não e vip ,entre em contato com a staff.",

msgWelcome = "Seja Bem Vindo a Area vip."

}

 

if getPlayerStorageValue(cid,13540) - os.time() <= 0 then

doTeleportThing(cid, fromPosition, true)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied)

doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)

return TRUE

end

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome)

return TRUE

end

 

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

×
×
  • Criar Novo...