Ir para conteúdo
  • 0

[AJUDA] System Vip, OTServ 8.6


xColombia

Pergunta

Alguém poderia me ajudar, não consigo criar um sistema de vip para ot serv 8.60. Já tentei com diversos tutoriais diferentes do Xtibia e até mesmo de outros sites.

"O tutorial que eu gostaria é um sistema vip que necessita de um item para adquirir a vip".

 

Este é o id do item (9004), que eu deseja da use nele para adquirir a vip.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

XColombia, Tenta:

function onUse(cid, item, fromPosition, itemEx, toPosition)local count = 1 -- Dias de VIP --if getPlayerItemCount(cid, 9004) >= 1 thendoPlayerAddPremiumDays(cid, count)doSendMagicEffect(getCreaturePosition(cid), 28)doRemoveItem(item.uid,1)doPlayerSendTextMessage(cid, 22, 'Parabéns você ganhou 1 dia de Premium VIP!')endreturn trueend

 

Link para o comentário
Compartilhar em outros sites

  • 0

Liipe Silva3;

Acho que você não entendeu muito bom, eu gostaria de um sistema vip e um sistema para ganhar a vip através de um scroll (9004).

 

Mesmo assim, muito obrigado por tentar me ajudar.

Link para o comentário
Compartilhar em outros sites

  • 0

Caso tenha um sistema vip faça isso:

 

ACTION ITEM: CRIE UM ARQUIVO CHAMADO VIP VIP Item.lua em /actions/scripts

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

local config={

removeOnUse = "yes" -- remover quando usar ("yes" or "no")

}

 

local days = 30 -- dias que serão adicionados

local daysvalue = days * 24 * 60 * 60

local storageplayer = getPlayerStorageValue(cid, AQUI STORAGE DO SEU VIP SYSTEM)

local timenow = os.time()

 

if getPlayerStorageValue(cid, AQUI STORAGE DO SEU VIP SYSTEM) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storageplayer + daysvalue

end

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.")

setPlayerStorageValue(cid, AQUI STORAGE DO SEU VIP SYSTEM, time)

local quantity = math.floor((getPlayerStorageValue(cid, AQUI STORAGE DO SEU VIP SYSTEM) - timenow)/(24 * 60 * 60))

doSendMagicEffect(getPlayerPosition(cid), math.random(28,30))

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")

if (config.removeOnUse == "yes") then

doRemoveItem(item.uid, 1)

end

 

return TRUE

end

 

 

Em actions.xml ponha :

<action itemid="ID QUE VAI CLICAR E DAR VIP" script="VIP Item.lua"/>

 

Quanto ao storage do seu vip,depende do sistema vip que você usa.

Link para o comentário
Compartilhar em outros sites

  • 0

é um pouco grande... caso não funcione fale ai =):

 

OBS: Eu coloquei por comando caso queira realmente por item fala ai que arrumo pra adicionar com item.

 

1° - Acesse a pasta data/lib e crie um arquivo chamado 049-vipsys.lua, coloque isso dentro do arquivo

 

vip = {name = "VIP System";author = "Mock";version = "1.0.0.0";query="ALTER TABLE `accounts` ADD `vip_time` INTEGER";query2="ALTER TABLE `accounts` ADD `vip_time` INT(15) NOT NULL"}function vip.setTable()dofile('config.lua')if sqlType == "sqlite" thendb.executeQuery(vip.query)elsedb.executeQuery(vip.query2)endendfunction vip.getVip(cid)assert(tonumber(cid),'Parameter must be a number')if isPlayer(cid) == FALSE then error('Player don\'t find') end;ae = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..getPlayerAccount(cid).."';")if ae:getID() == -1 thenreturn 0endlocal retee = ae:getDataInt("vip_time") or 0ae:free()return reteeendfunction vip.getVipByAcc(acc)assert(acc,'Account is nil')local a = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..acc.."';")if a:getID() ~= -1 thenreturn a:getDataInt("vip_time") or 0, a:free()elseerror('Account don\'t find.')endendfunction vip.setVip(cid,time)dofile("config.lua")assert(tonumber(cid),'Parameter must be a number')assert(tonumber(time),'Parameter must be a number')if isPlayer(cid) == FALSE then error('Player don\'t find') end;db.executeQuery("UPDATE `"..sqlDatabase.."`.`accounts` SET `vip_time` = '"..(os.time()+time).."' WHERE `accounts`.`name` ='".. getPlayerAccount(cid).."';")endfunction vip.getVipByAccount(acc)assert(acc,'Account is nil')return db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..acc.."';"):getDataInt("vip_time") or 0endfunction vip.hasVip(cid)assert(tonumber(cid),'Parameter must be a number')if isPlayer(cid) == FALSE then return end;local t = vip.getVip(cid) or 0if os.time(day) < t thenreturn TRUEelsereturn FALSEendendfunction vip.hasVips(cid)assert(tonumber(cid),'Parameter must be a number')if isPlayer(cid) == FALSE then return end;local t = vip.getVip(cid)if os.time(day) < t thenreturn TRUEelsereturn FALSEendendfunction vip.accountHasVip(acc)assert(acc,'Account is nil')if os.time() < vip.getVipByAccount(acc) thenreturn TRUEelsereturn FALSEendendfunction vip.getDays(days)return (3600 * 24 * days)endfunction vip.addVipByAccount(acc,time)assert(acc,'Account is nil')assert(tonumber(time),'Parameter must be a number')local a = vip.getVipByAcc(acc)a = os.difftime(a,os.time())if a < 0 then a = 0 end;a = a+timereturn vip.setVipByAccount(acc,a)endfunction vip.setVipByAccount(acc,time)dofile("config.lua")assert(acc,'Account is nil')assert(tonumber(time),'Parameter must be a number')db.executeQuery("UPDATE `accounts` SET `vip_time` = '"..(os.time()+time).."' WHERE `accounts`.`name` ='"..acc.."';")return TRUEendfunction vip.returnVipString(cid)assert(tonumber(cid),'Parameter must be a number')if isPlayer(cid) == TRUE thenreturn os.date("%d %B %Y %X ", vip.getVip(cid))endend

2° - Abra a pasta data/creaturescrpits/scripts e crie um arquivo chamado fimvip.lua, dentro dele adicione:

 

function onLogin(cid)local temple = { x =32369, y = 32246, z = 6}if vip.hasVip(cid) == true thenif getPlayerStorageValue(cid,55555) ~= 1 thensetPlayerStorageValue(cid,55555,1)endelseif getPlayerStorageValue(cid,55555) == 1 thendoTeleportThing(cid, temple)doPlayerSendTextMessage(cid, 22, "Your VIP Time over!")db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `id` = ".. getAccountIdByName(getPlayerName(cid)) ..";")setPlayerPromotionLevel(cid, 1)setPlayerStorageValue(cid, 55555, 0)endendreturn trueend

 

Você pode troca as coordenadas do templo: local temple = {x=32369, y=32246, z=6}.

 

3° - Em data/creaturescripts/scripts/login.lua adicione essas tags:
 

registerCreatureEvent(cid, "FimVip")registerCreatureEvent(cid, "VipReceive")

4° - Em data/creaturescripts/creaturescripts.xml adicione está tag:
 

<event type="login" name="FimVip" event="script" value="fimvip.lua"/>

5º - Em data\movements\scripts e crie um arquivo chamado viptile.lua e adicione isso dentro dele:
 

function onStepIn(cid, item, position, fromPosition)local tileConfig = {kickPos = fromPosition, kickEffect = CONST_ME_POFF,kickMsg = "You need to be a vip player to access this area.",enterMsg = "Welcome to vip area!",enterEffect = CONST_ME_MAGIC_RED,}if isPlayer(cid) == true thenif vip.hasVip(cid) == FALSE thendoTeleportThing(cid, tileConfig.kickPos)doSendMagicEffect(tileConfig.kickPos, tileConfig.kickEffect)doPlayerSendCancel(cid, tileConfig.kickMsg)returnenddoPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, tileConfig.enterMsg)doSendMagicEffect(position, tileConfig.enterEffect)return trueendend

6° - Em data\movements\movements.xml adicione a tag:

 

 

<movevent type="StepIn" actionid="13500" event="script" value="viptile.lua"/>

Vejam a numeração 13500 você irá usar no tile que você quer para a passagem de player VIP para configurar adicione a numeração em ActionID do tile.

7° - Em data/talkactions/scripts acrescente dentro da pasta scripts uma outra pasta com o nome VIP vamos precisar de 7 arquivos.lua que teram os nomes e códigos a seguir:

add.lua

 

function onSay(cid, words, param, channel)doPlayerSendCancel(cid, "Added "..param.." Vip Days.")return doPlayerAddVipDays(cid, param)end

addvipp.lua

 

function onSay(cid, words, param)if param == "" thenreturn doPlayerPopupFYI(cid,"Está com problemas?\nAprenda os comandos!\n---------------\nAdicionar vip:\n/vip add days player\n/vip add 30 Real\n---------------\nDeletar vip:\n/vip del player\n/vip del Real\n---------------\nVer a vip:\n/vip see player\n/vip see Real\n---------------\n")endif param:lower():find('add') == 1 and 3 thenlocal _,_,id,name = param:lower():find('add (%d+) (.+)')name = name or ""id = tonumber(id or 1) or 1if tonumber(id) == nil or getPlayerByName(name) == false thenreturn doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Adicionar vip:\n/vip add days player\n/vip add 30 Real\n [Player: "..name..]")endif isPlayer(getPlayerByName(name)) == TRUE thenvip.addVipByAccount(getPlayerAccount(getPlayerByName(name)) ,vip.getDays(id))doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Foram adicionados "..tonumber(id).." dias de vip a "..name..".")doPlayerSendTextMessage(getPlayerByName(name),MESSAGE_INFO_DESCR,"Você recebeu "..tonumber(id).." dias de vip.")elsedoPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,name.." não esta online ou não existe.")endelseif param:lower():find('del') == 1 and 3 thenlocal _,_,name = param:lower():find('del (.+)')if getPlayerByName(name) == false thenreturn doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Deletar vip:\n/vip del player\n/vip del Real\n")endvip.setVipByAccount(getPlayerAccount(getPlayerByName(name)),-os.time())doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"A vip de "..name.." foi apagada.")elseif param:lower():find('see') == 1 and 3 thenlocal _,_,name = param:lower():find('see (.+)')name = name or ""if getPlayerByName(name) == false thenreturn doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Ver a vip:\n/vip see player\n/vip see Real\n")endlocal ret_ = vip.getVip(getPlayerByName(name))if ret_ == 0 thenreturn doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,name.." Não tem vip, e nunca teve.")elsereturn doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A vip de "..name.." Acaba/terminou em "..os.date("%d %B %Y %X ",ret_))endendreturn TRUEend

get.lua

 

function onSay(cid, words, param, channel)doPlayerSendCancel(cid, ""..getPlayerVipDays(cid).." days VIP left.")end

is.lua

 

function onSay(cid, words, param, channel)if isPlayerVip(cid) == TRUE thendoPlayerSendCancel(cid, "You are a VIP player.")elsedoPlayerSendCancel(cid, "You are not a VIP player.")endend

removevip.lua

 

function onSay(cid, words, param, channel)doPlayerSendCancel(cid, "Vip removed.")return doPlayerRemoveVip(cid)end

set.lua

 

function onSay(cid, words, param, channel)doPlayerSendCancel(cid, "VIP Days: "..param..".")return setPlayerVipDays(cid, param)end

vipdays.lua

 

function onSay(cid, words, param)if vip.hasVip(cid) == TRUE thendoPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your vip end in "..os.date("%d %B %Y %X ",vip.getVip(cid)))elseif vip.getVip(cid) ~= 0 thendoPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You're not a vip player. Your vip has finished in "..os.date("%d %B %Y %X ", vip.getVip(cid)).." and now is "..os.date("%d %B %Y %X ", os.time()))elsedoPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You're not a vip player. You naver has a vip.")endendreturn TRUEend

8° - Em data/talkactions/talkactions.xml adicione está tag:

 

 

<!-- VIP System --><talkaction log="yes" words="/vip" access="5" event="script" value="VIP/addvipp.lua" /><talkaction words="!vipdays" event="script" value="VIP/vipdays.lua" />

9° - Agora execute este comando na sua database:

 

 

ALTER TABLE `accounts` ADD `vip_time` INT NOT NULL; 

 

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

  • 0

@Tingasgo

 

82db3d1edf024ae29d9b382ea346674c.png
Deu tudo certo o sistema mas na hora de entrar na área vip, não consigo passar pelo tile. 

Eu coloquei o store do sistema mock que vc passou mas mesmo assim não funcionou.

Quero deixar bem claro que o sistema mock funcionou, a unica coisa que não funcionou foi o sistema de adquirir vip através de um item 

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

×
×
  • Criar Novo...