Ir para conteúdo

deviletico

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    deviletico deu reputação a Xablaw em (Resolvido)Bloqueando movimentação de itens.   
    Olá, boa noite! gostaria de uma ajuda simples de vcs, que pra mim tem dado um pouco de dor de cabeça.
    Gostaria de bloquear itens no mapa, para que não possam ser movido.
    Já tentei colocando Action ID no item, e já tentei jogando o Brilhinho em cima... porém não funcionaram (o lance do brilho não funciona pq se o player da "Browse Field no SQM ele consegue puxar o item".

    Desde já muito obrigado.
     
  2. Gostei
    * Áudio de saudação *
     
    Neste tutorial, irei ensinar alguns passos inicias para utilizar o OTClientV8
     
    1º Passo: Como fixar ip e colocar a spr no local correto
     
    - Faço o download no link: https://github.com/OTCv8/otclientv8
    - Extraia o arquivo
    - Dentro da pasta principal, vá até o arquivo init.lua
     
    Neste trecho, precisará remover os comentários --[[ e ]]:
    Servers = { --[[ OTClientV8 = "http://otclient.ovh/api/login.php", OTClientV8c = "otclient.ovh:7171", OTClientV8Test = "http://otclient.ovh/api/login2.php", LocalTestServ = "127.0.0.1:7171:1098:110:30:93" ]] }  
    Ficando assim:
    Servers = { Meuserver = "127.0.0.1:7171:1098" } ficando na seguinte configuração NOME = "IP:PORTA:VERSÃO"
     
     
    Para fixar e não aparecer a lista de servers, basta alterar:
    ALLOW_CUSTOM_SERVERS = true -- if true it shows option ANOTHER on server list  
    Para:
    ALLOW_CUSTOM_SERVERS = false -- if true it shows option ANOTHER on server list  
     
    Caso queira trocar o nome do aplicativo é só mudar
    g_app.setName("OTCv8") trocando o "OTCv8" para o nome desejado, lembrando que isto irá alterar apenas o nome da janela do aplicativo
     
     
    Incluir a SPR/Dat:

    Para incluir, basta ir na pasta data, criar uma nova pasta e renomear com o nome "things" e depois criar uma outra pasta dentro dela com o nome da versão que desejar utilizar, exemplos:
    * 800
    * 860
    * 910
    * 1100
    dentro desta pasta, incluir as respectivas spr/dat da versão correspondente 

    Um vídeo objetivo do conteúdo citado acima:
     
     
     

     
    2º Passo: Remover campo "Token" da tela inicial
     
    Apesar de ser algo simples, vejo muitos perguntarem como remover este campo, vamos lá:

    - Vá até a pasta modules -> client_entergame
    - Abra o arquivo entergame.lua
    - Na linha 380 remova ou comente o trecho:
    enterGame:getChildById('accountTokenTextEdit'):clearText()  
    - Na linha 412 remova ou comente o trecho:
    G.authenticatorToken = enterGame:getChildById('accountTokenTextEdit'):getText()  
    - salve o arquivo
    - na mesma pasta, abra o arquivo entergame.otui
    - da linha 32 a 44 remova ou comente o seguinte trecho:
    MenuLabel !text: tr('Token') anchors.left: prev.left anchors.top: prev.bottom text-auto-resize: true margin-top: 8 TextEdit id: accountTokenTextEdit anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom margin-top: 2  
    Um vídeo objetivo do conteúdo citado acima:
     
     

    3º Passo: como encriptar os arquivos
     
    - Recomendo inicialmente criar uma cópia da pasta que ira encriptar, pois não é reversivo
    - Copie o endereço da pasta onde estão os arquivos
    - Abra o cmd e navegue até esta pasta utilizando o comando cd (link do endereço da pasta)
    - utilize o comando otclient_dx.exe --encrypt
    - Aguarde o sistema sinalizar que os arquivos foram encriptados 
     
    PS: a pasta do modulo bot ( modules -> game_bot ) não pode ser encriptado, remova ela antes deste processo.
     
    Um vídeo objetivo do conteúdo citado acima:
     
     

    4º Passo: Utilizando o auto update
     
    IMPORTANTE:
    Este processo precisa ser feito exatamente como demonstrado, qualquer link errado o sistema não irá funcionar.
     
    - Dentro da pasta API, abra o arquivo updater_advanced.php
     
    em $files_dir = "/var/www/otclient/files"; é a pasta onde conterá os arquivos do otclient para download, lembrando que o caminho precisa estar especificada desde a pasta inicial
    em $files_url = "http://otclient.ovh/files"; é o link que você pode utilizar o navegador para acessar a pasta "files" a mesma pasta do processo anterior.
    em $checksum_update_interval = 60; é o tempo em segundos, que o update levará para checkar se há alguma atualização ( não é necesário alterar )
     
    - Na sua vps, dentro da pasta do SITE, cria uma pasta chamada API e outra pasta dentro dela chamada FILES
    - Envie o arquivo updater_advanced.php para a pasta API
    - De permissão 777 para pasta e subpasta API
     
    * voltando aos arquivos do otclient * 
     
    - Abra o arquivo init.lua
     
    aconselho alterar o "APP_NAME = "otclientv8", pois é o nome da pasta que ficará salva nos arquivos temporários, isso evitará conflitos com versões já existe no pc
    altere o campo updater, colocando o endereço apontado para o arquivo updater_advanced.php enviado para o seu site nos passos anteriores.
     
    - Após as edições anteriores, salve o arquivo 
    - Compacte os arquivos data, layout, modules e init.lua, renomeando para data.zip ( obrigatoriamente precisa ser zip )
    - Exclua os arquivos zipados e os demais desnecessários para os jogadores.
     
    Atenção: o auto update só funcionará se os arquivos estiverem zipado conforme descrito.
     
    - Envie todos os arquivos para a pasta files em sua vps ( recomendo zipar para enviar, poupara processamento e tempo de envio )
    - Após enviar, extraia os arquivos NA VPS, os arquivos no pc devem continuar zipado
    - Atenção nesta parte, as pastas e arquivo data / layout / modules / init.lua necessáriamente precisam estar na mesma pasta do executáveis, conforme time 4:20 no vídeo que deixarei disponível no final.
     
    lembrando: o update só aceitará arquivos editados após o tempo estipulado em checksum_update_interval , se fizer edições antes deste tempo, o sistema não irá considerar
     
     
    Um vídeo objetivo do conteúdo citado acima:
     
     
     
  3. Gostei
    deviletico deu reputação a Biroskak4 em Vocation Quest   
    Olá de novo!
    Ontem mesmo eu tinha postado um script de Red/Black remover (http://www.tibiaking.com/forum/topic/48210-redblack-skull-remover/). Mas o script ficou muito longo, então o sr. Suicide resumiu meu script de 56 linhas em 18 (Vlww Suicide uheauhe). '------'
    Mas com isso eu aprendi algumas coisas, então fiquem aí com o script:
     
     
    Como ele funciona?
    Simples. Se baseia em somente 1 baú, mas, para cada vocation, vem um prêmio diferente.
     
     
    Vá até a pasta de actions do seu OT, abra a pasta scripts. Copie qualquer arquivo .lua e renomeie-o para "vocquest.lua", abra-o, delete tudo o que estiver dentro e cole isso:
    function onUse(cid, item, frompos, item2, topos) -- 1 = Sorc, 2 = Druid, 3 = Pally, 4 = Kina -- local t = {[1] = {id = 2190, quant = 1, stor = 15152}, [2] = {id = 2182, quant = 1, stor = 15153}, [3] = {id = 2455, quant = 1, stor = 15154}, [4] = {id = 2383, quant = 1, stor = 15155}} local voc = t[getPlayerVocation(cid)] if item.uid == 15156 then if voc then if getPlayerStorageValue(cid, voc.stor) == -1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Você ganhou '..voc.quant..' '..getItemNameById(voc.id)..'!') doPlayerAddItem(cid, voc.id, voc.quant) setPlayerStorageValue(cid, voc.stor, 1) else doPlayerSendCancel(cid, "Você já fez essa quest.") end end return TRUE end end Feito isso, feche e salve.
    Agora abra o seu "actions.xml" e coloque isso lá:
    <action uniqueid="15156" script="vocquest.lua" /> Fecha e salva.
    Agora é só dar um /reload actions e colocar no server
  4. Gostei
    deviletico deu reputação a Absolute em [City War Event] Luta pela sobrevivência   
    Fala galerinha linda do TK, hoje estou trazendo um evento que andei modificando e otimizando, é o evento City WAR, este evento tem no servidor globalwar e outros.
    A autoria vem de um membro da otland, portante havia o mesmo aqui em um datapack e decidi otimizar este evento para vocês do TK.
    Observação: É um pouco parecido com o evento do meu amigo e scripter DuH, porém com mais funções e regras, mas o objetivo é praticamente o mesmo.
     
     
    Como funciona:
     



     
     
     
     
     
     
    Vamos lá;
     
    Primeiramente, em sua pasta data/lib crie um arquivo com o nome de city war.lua e dentro do mesmo coloque:
    configCW = {timetostart = 500, -- tempo para iniciar o evento em segundos by Absolute telpos = {x=32340, y=32213, z=7}, -- onde aparecerá o teleport stats = 201201201701, kill = 201201201702, death = 201201201703, ostime = 201201201704, evttime = 20, -- quanto tempo irá rolar o evento topleftPos = {x=32722, y=31336, z=6}, -- canto esquerdo superior botrightPos = {x=32791, y=31384, z=6}, -- canto direito inferior templepos = {x=32369, y=32241, z=7}, -- posição do templo principal arenapos = {{x=32722, y=31340, z=6}, {x=32786, y=31336, z=6}, {x=32722, y=31380, z=6}, {x=32783, y=31374, z=6}}, -- posição dos 4 tronos times = 8, -- não precisa mexer finaltime = 300 -- não precisa mexer } function configCW:new() local newevt = {} setmetatable(newevt, self) self.__index = self doBroadcastMessage("The City War will be open in " .. self.timetostart .. " seconds.") setGlobalStorageValue(self.stats, 0) addEvent(function () newevt:start() end, self.timetostart*1000) end function configCW:start() if getGlobalStorageValue(self.stats) == 0 then setGlobalStorageValue(self.ostime, os.time()) local teleport = doCreateItem(1387, self.telpos) doItemSetAttribute(teleport, "aid", 5540) setGlobalStorageValue(self.stats, 1) doBroadcastMessage("The City War is starting...") for _, posi in pairs(self.arenapos) do local item = getTileItemById(posi, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end end addEvent(function () self:preclose() end, self.evttime*1000*60) addEvent(function () self:announce(0) end, (self.evttime/self.times)*1000*60) end end function configCW:announce(times) if times < self.times then if #self:getTopFrags(true) >= 1 then doBroadcastMessage("Top City War fraggers: " .. self:getTopFrags()) end addEvent(function () self:announce(times+1) end, (self.evttime/self.times)*1000*60) end end function configCW:preclose() if getGlobalStorageValue(self.stats) == 1 then setGlobalStorageValue(self.stats, 2) doBroadcastMessage("The City War will end in " .. self.finaltime .. " seconds.") addEvent(function () self:close() end, self.finaltime*1000) local item = getTileItemById(self.telpos, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end end end function configCW:close() if getGlobalStorageValue(self.stats) == 2 then if #self:getTopFrags(true) >= 1 then doBroadcastMessage("The City War has ended. The winners are: " .. self:getTopFrags()) else doBroadcastMessage("The City War has ended. There were no winners.") end doRemovePlayersFromArea(self.topleftPos, self.botrightPos, self.templepos) for _, posi in pairs(self.arenapos) do doCreateTeleport(1387, self.templepos, posi) end for place, info in ipairs(self:getTopFrags(true)) do if place > 5 then break end local cid = getPlayerByName(info) doPlayerSendTextMessage(cid, 4, "Congratulations, you were the " .. place .. "º place in the City War.") doPlayerAddItem(cid, 6571, 1) end setGlobalStorageValue(self.stats, -1) end end function configCW:isPlayerInEvent(cid) if getPlayerStorageValue(cid, self.stats) == -1 or getPlayerStorageValue(cid, self.stats) - os.time() <= -5 or getGlobalStorageValue(self.stats) < 1 then return false end return true end function configCW:getTopFrags(tab) local frag = {} for _, pid in pairs(getPlayersOnline()) do if (getPlayerStorageValue(pid, self.kill) ~= -1 or getPlayerStorageValue(pid, self.death) ~= -1) and self:isPlayerInEvent(pid) then local kill = getPlayerStorageValue(pid, self.kill)+1 local death = getPlayerStorageValue(pid, self.death)+1 print(getCreatureName(pid), kill-death) table.insert(frag, {getCreatureName(pid), kill-death}) end end print(#frag) local frag, str, n = doOrderTab(frag, 0), nil, 5 print(#frag) if tab then return frag else if #frag < 5 then n = #frag end for i = 1, n do local cid = getPlayerByName(frag[i]) local kill = getPlayerStorageValue(cid, self.kill)+1 local death = getPlayerStorageValue(cid, self.death)+1 str = str and str .. ", " .. frag[i] .. "[" .. kill .. "/" .. death .. "]" or frag[i] .. "[" .. kill .. "/" .. death .. "]" end end return str end function doOrderTab(tabela, value) local max, index = {}, nil for i = 1, #tabela do valor = value for a, b in ipairs(tabela) do if b[2] > valor then valor = b[2] valor2 = b[1] index = a end end table.remove(tabela, index) if valor ~= value then table.insert(max, valor2) end end return max end Configuração do arquivo:
    telpos = {x=32340, y=32213, z=7}, -- POSIÇÃO ONDE NASCE O TP DO EVENTO!
    topleftPos = {x=32722, y=31336, z=6}, -- AQUI COLOQUE A POSIÇÃO DO CANTO ESQUERDO LA EM CIMA DO MAPA botrightPos = {x=32791, y=31384, z=6}, -- AQUI A POSIÇÃO DO CANTO DIREITO EM BAIXO DO MAPA templepos = {x=32369, y=32241, z=7}, -- POSIÇÃO DO TEMPLO ONDE OS JOGADORES NASCERAM PÓS A MORTE arenapos = {{x=32722, y=31340, z=6}, {x=32786, y=31336, z=6}, {x=32722, y=31380, z=6}, {x=32783, y=31374, z=6}}, -- ATENÇÃO, NO MAPA QUE ESTAREI DISPONIBILIZANDO VISIVELMENTE TERÁ 4 BASES, VOCÊ TERA QUE COLOCAR A POSIÇÃO DAS BASES AÍ NESSES 3 LUGARES.  doPlayerAddItem(cid, 6571, 1) -- AQUI VOCÊ COLOCARÁ O PRÊMIO DO GANHADOR, NO CASO QUEIRA ADICIONAR POR EXEMPLO 1kk, COLOQUE 2160,1 - Primeiro ID depois quantia.       Segundo passo, crie um arquivo com o nome de citywarCreature.lua e coloque dentro da pasta creaturescripts/scripts com o seguinte conteúdo: function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInRange(getCreaturePosition(cid), configCW.topleftPos, configCW.botrightPos) then setPlayerStorageValue(cid, configCW.death, getPlayerStorageValue(cid, configCW.death) +1) setPlayerStorageValue(lastHitKiller[1], configCW.kill, getPlayerStorageValue(lastHitKiller[1], configCW.kill) +1) end return true end E adicione em creaturescripts.xml a seguinte tag
    <event type="preparedeath" name="CityWar" event="script" value="citywarCreature.lua"/>   Terceiro passo, crie um arquivo em movements/scripts com o nome de citywarMovements.lua com o seguinte conteúdo: function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition) if isPlayer(cid) and getGlobalStorageValue(configCW.stats) == 1 then doTeleportThing(cid, configCW.arenapos[math.random(1, #configCW.arenapos)]) doSendMagicEffect(getPlayerPosition(cid), 28) if not(configCW:isPlayerInEvent(cid)) then setPlayerStorageValue(cid, configCW.stats, getGlobalStorageValue(configCW.ostime) + configCW.evttime*60 + configCW.finaltime) setPlayerStorageValue(cid, configCW.kill, -1) setPlayerStorageValue(cid, configCW.death, -1) end else doTeleportThing(cid, fromPosition) end return true end Em Movements.xml adicione a seguinte linha: <movevent type="StepIn" actionid="5540" event="script" value="citywarMovements.lua"/> Quarto e último passo, em talkactions/scripts crie um arquivo com o nome de citywarTalkactions.lua e coloque o seguinte conteúdo:
    function onSay(cid, words, param) if getGlobalStorageValue(configCW.stats) == -1 then configCW:new() else doPlayerSendCancel(cid, "The event is already running.") end return true end Em talkactions/talkactions.xml adicione a seguinte linha:
    <talkaction log="yes" words="/citywar" access="3" event="script" value="citywarTalkactions.lua"/> E por fim, estou disponibilizando o world do evento, vocês usam se quiser, tentei adapta-lo para 8.6 mas ficou meio slá, o Viiting estava ocupado e não pode me ajudar, enfim segue a imagem e download do world.otbm:
     


        Lembrando que ninguém além do Collocorpusek da otland tem direito de pedir remoção do script, pois a base é dele.
       
    Créditos:
    Absolute
    Collocor Gringo Lindo.
     

Informação Importante

Confirmação de Termo