Muito bom Me Ajudo Muito Deu Tudo Certo aki ;]
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- Vip System By Mock 100%
Vip System By Mock 100%
Por Natanael Beckman, 07 de fev. de 2011 em Mods, funções e outros
info
Grupo: Campones
Registrado: 17/07/11
Posts: 55
Reputação: +21
Char no Tibia: Luis Krafina

Velho pode me ajudar eu coloquei actionid tile 13500 e não pegou o char passa normal ;/
Há como fazer pra tipo, um vip ter x% a mais que um player normal?
Obrigado desde já.
info
Grupo: Campones
Registrado: 27/07/09
Posts: 3
Reputação: 0
Char no Tibia: Sweety Revange

Boa galera eu mais uma vez trazendo comodidade e algo seguro pra nós. Esse sistema VIP do Mock foi modificado e aptado em alumas partes dos scripts, para um funcionamento correto e com isso tivemos a ajuda dos scripts, Doidin, Luke sky walker e por min por ter ido atraz de todas as soluções pra completa algo incompleto.
Vamos nois:
1° Acesse a pasta data/lib copie la um arquivo.lua e renomeio para 049-vipsys.lua, após isso apague tudo dentro desse arquivo e adicione este coder:
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" then db.executeQuery(vip.query) else db.executeQuery(vip.query2) end end function 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 then return 0 end local retee = ae:getDataInt("vip_time") or 0 ae:free() return retee end function vip.getVipByAcc(acc) assert(acc,'Account is nil') local a = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..acc.."';") if a:getID() ~= -1 then return a:getDataInt("vip_time") or 0, a:free() else error('Account don\'t find.') end end function 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).."';") end function vip.getVipByAccount(acc) assert(acc,'Account is nil') return db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..acc.."';"):getDataInt("vip_time") or 0 end function vip.hasVip(cid) assert(tonumber(cid),'Parameter must be a number') if isPlayer(cid) == FALSE then return end; local t = vip.getVip(cid) or 0 if os.time(day) < t then return TRUE else return FALSE end end function 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 then return TRUE else return FALSE end end function vip.accountHasVip(acc) assert(acc,'Account is nil') if os.time() < vip.getVipByAccount(acc) then return TRUE else return FALSE end end function vip.getDays(days) return (3600 * 24 * days) end function 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+time return vip.setVipByAccount(acc,a) end function 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 TRUE end function vip.returnVipString(cid) assert(tonumber(cid),'Parameter must be a number') if isPlayer(cid) == TRUE then return os.date("%d %B %Y %X ", vip.getVip(cid)) end end
2° Abra a pasta data/creaturescrpits/scripts copie la um arquivo.lua e renomeio para vip.lua, dentro dele adicione:
By Lukeskywalker
function onLogin(cid) local temple = { x =32369, y = 32246, z = 6} if vip.hasVip(cid) == true then if getPlayerStorageValue(cid,55555) ~= 1 then setPlayerStorageValue(cid,55555,1) end else if getPlayerStorageValue(cid,55555) == 1 then doTeleportThing(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) end end return true end
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="vip.lua"/>
5º Em data\movements\scripts copie la um arquivo.lua e renomeio para viptile.lua e adicione este coder dentro do mesmo:
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 then if vip.hasVip(cid) == FALSE then doTeleportThing(cid, tileConfig.kickPos) doSendMagicEffect(tileConfig.kickPos, tileConfig.kickEffect) doPlayerSendCancel(cid, tileConfig.kickMsg) return end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, tileConfig.enterMsg) doSendMagicEffect(position, tileConfig.enterEffect) return true end end
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 acrecente dentro da pasta scripts uma outra pasta com o nome VIP vamos precisar de 7 arquivos.lua quem teram os nomes e coder 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 == "" then return 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") end if param:lower():find('add') == 1 and 3 then local _,_,id,name = param:lower():find('add (%d+) (.+)') name = name or "" id = tonumber(id or 1) or 1 if tonumber(id) == nil or getPlayerByName(name) == false then return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Adicionar vip:\n/vip add days player\n/vip add 30 Real\n [Player: "..name.."]") end if isPlayer(getPlayerByName(name)) == TRUE then vip.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.") else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,name.." não esta online ou não existe.") end elseif param:lower():find('del') == 1 and 3 then local _,_,name = param:lower():find('del (.+)') if getPlayerByName(name) == false then return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Deletar vip:\n/vip del player\n/vip del Real\n") end vip.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 then local _,_,name = param:lower():find('see (.+)') name = name or "" if getPlayerByName(name) == false then return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Ver a vip:\n/vip see player\n/vip see Real\n") end local ret_ = vip.getVip(getPlayerByName(name)) if ret_ == 0 then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,name.." Não tem vip, e nunca teve.") else return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A vip de "..name.." Acaba/terminou em "..os.date("%d %B %Y %X ",ret_)) end end return TRUE end
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 then doPlayerSendCancel(cid, "You are a VIP player.") else doPlayerSendCancel(cid, "You are not a VIP player.") end end
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 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your vip end in "..os.date("%d %B %Y %X ",vip.getVip(cid))) else if vip.getVip(cid) ~= 0 then doPlayerSendTextMessage(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())) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You're not a vip player. You naver has a vip.") end end return TRUE end
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° Para finalizar execute este comando na sua database:
alter table `accounts` add `vip_time` INT NOT NULL;
Bom galera fim este sistema vip adiciona os dias corretos e ao termino do VIP o player recebe a menssagem que o VIP acabou é teleportado pro templo porque se no caso ele estiver na área VIP essa é uma saida e zera a coluna vip_time.
Creditos:
Mock (por ter iniciado algo e não terminou)
Lukeskywalker (Sistema de finalização perfeito do vip.)
Natan Beckman (Por ter ido atrás a conclusão 100% in game e php)
Mais da metade desse codigo foi criada por mim, mais o que poderiamos esperar do MEGA RIPPER Natan e cia ltda???
Se duvida, basta olhar no post do styller 0.6.2 pra tibia 8.50...
é impressionante como ele gosta de se engrandecer por meus feitos...
Isso, minha proteção DDoS, entre outras coisas!!!
Só pra esclarecer, Antigamente eu era conhecido como TechLoko, mais agora tenho um nome bem mais respeitável, Revange...
O mesmo que fez a sua proteção DDoS e vc fica se gabando como se fosse vc, o mesmo que criou mais da metade dos scripts deste post!
E ainda tem a coragem de criticar o Mock que desenvolveu a "LIB" e nao todo o sistema, quando ele fez e eu me lembro bem disso, ele deixou claro que isso era só a lib e que o resto ficava por conta da imaginação de cada um!!!
RIPPER é %$#@
Editado Dezembro 22 por Techloko
Bom
Mock e o seguinte cara eu nao sei coloka esses TAG de sistema VIP se eu te passa a pasta do meu OT vc faz isso pra mni man. so falta isso para meu OT ficar 24 Hrs online no Dedicado Bom Qualquer Coisa add Skyp killobi2
ou msn dodojho@hotmail.com
BOM QUEM KISER ME AJUDA A COLOKAR COMANDOS MAGIAS NOVAS NO MEU OT SO ADD MSN
dodojho@hotmail.com
Skyp: killobi2
Alguem poderia me ajudar ?
é só Mysql ou Sql tambem ?
Aqui quando eu executo esse comando alter table `accounts` add `vip_time` INT NOT NULL; no meu sql ele da o seguinte erro.
Error while executing query: Cannot add a NOT NULL column with default value NULL
Eai qunado entro no server da erro do Vip-time que nao foi adicionado.
Abraço, fico no aguardo !
info
Grupo: Campones
Registrado: 19/08/11
Posts: 8
Reputação: 0
Char no Tibia: Palla Hookcz

o Meu sistema ta com um problema nao sei pq
Na hora q vc faiz o comando pra add a VIP ele aparece
rafinhaw não esta online ou não existe
Mais isso e so se eu Digitar o nome errado. Se eu digito o nome certo ele nao aparece nada tipo assim:
12:57 God Maah: /vip add 3 Rafinhaws
e nao add a VIP. Ajuda pllx
info
Grupo: Campones
Registrado: 18/03/10
Posts: 25
Reputação: 0
Char no Tibia: Nem Jogo mais Global

aff esqueceu de por os comandos pra testa -.-
Parabens Aqui da um erro inutil -.-
Msm eu pondo o a numeraçao no tile o vip system deixa el eentra e ainda fala bem vindo o cara entra sem eu deixa ele de vip
Desculpa O Incoveniente Seu Sistema E Otimo
Parabens O De kydra e um lix nao funciona em mysql
Como executo o 9º passo pelo SQL STUDIO?
info
Grupo: Visconde
Registrado: 21/12/06
Posts: 355
Reputação: +118
Gênero: Masculino

alter table `accounts` add `vip_time` INT NOT NULL
no meu db da isso
Error while executing query: Cannot add a NOT NULL column with default value NULL
descobri o erro, basta colocar
alter table `accounts` add `vip_time` INT(15) NOT NULL DEFAUT '0'
Editado Maio 3 por beddy
°bom isso q vc pedio para executar da erro
entao minha saida foi pegar uma db que jah tinha esse sistema, porfavor reveja o 9° passo
o 9° passa nao seria este comando a ser executado
ALTER TABLE `accounts` ADD `vip_time` INT( 15 ) NOT NULL
ou
ALTER TABLE `accounts` ADD `vip_time` INT( 15 ) NOT NULL DEFAULT 0
Editado Maio 22 por Nari
info
Grupo: Conde
Registrado: 06/08/06
Posts: 554
Reputação: +223
Char no Tibia: Balacky

Executa dentro da tabela accounts.







info
Grupo: Campones
Registrado: 01/11/11
Posts: 10
Reputação: 0
Alguém ajuda ? não estou conseguindo.