Líderes
-
xWhiteWolf
HéroiPontos3605Total de itens -
-
-
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/16/17 em todas áreas
-
ShootEffect de Uint_8 para Uint_16 para versão 8.54
ShootEffect de Uint_8 para Uint_16 para versão 8.54
Gabrielxxxxx e 2 outros reagiu a KotZletY por uma resposta no tópico
3 pontosSalve galera, a pedido dos membros: @zangoosedoido, @leozincorsair, @themapa, @ZikaLord, dentre outros membros via pm não citados, estarei trazendo um tutorial de como aumentar o limite de ShootEffects(missiles, distanceEffect) no client 8.54 para mais de 255. Informação: É necessário fazer as devidas alterações na source para ShootEffects, não basta fazer somente no client! AVISO: Esse tutorial é somente para a versão 8.54, caso deseja fazer isso na versão 8.60, siga meu outro tutorial para o mesmo, clicando aqui! Vamos ao tutorial, baixe o Ollydbg, programa que usaremos para fazer as alterações, você poderá encontrar o download no final do tópico. Inicie o OllyDbg, e selecione o client: Depois de selecionar, pressione CTRL+G e procure pelo seguinte endereço: 00410576 Você vai cair em cima dos endereços a ser alterado: Feito isso, dê dois clicks no primeiro endereço e altere para: CALL 004F4FF0 Dê dois clicks no segundo endereço, no caso o que está abaixo do primeiro que foi alterado, e mude para: MOVZX EAX, AX Pronto, agora iremos salvar as alterações feita no client: Pronto, seu client já está modificado. Agora curta e faça bom proveito dos 65k de slots de shootEffects. Hehehe! xD Download: Download do OllyDbg Scan: Scan do OllyDbg O vírus encontrado no OllyDbg, não é nada mais nada menos que um falso-positivo, por ser um programa que altera tudo que você quiser em algum soft, e programas com tal capacidade, pode ser interpretado como maligno por alguns anti-vírus! Créditos = { ["KotZletY"] = "Feito o tutorial", ["Fernando Prado"] = "Parça que me ensinou os macetes, dentre muitos outros." }3 pontos -
Montando OTserver (10.x/1.x) perfeito.
Montando OTserver (10.x/1.x) perfeito.
Marlon Coradini reagiu a Qwizer por uma resposta no tópico
1 ponto[Atenção] Este tutorial é recomendado para quem quer abrir seu otserv em WINDOWS! Galerinha, eu sei que já existem diversos tópicos semelhantes à este aqui no TK, mas eu resolvi postar este tutorial pois eu deixarei aqui de forma simples de como você deve montar sua maquina Windows para deixar seu servidor online direitinho. Primeiramente você precisará baixar e instalar o seguinte programa: Uniform Server, e Visual C++ 2015 x86. Vamos configurar tudo do seu OTServ. (Irei mostrar passo a passo por imagens siga da mesma forma dentro das areas marcadas) 1º - Apos ter baixado o Uniform Server extraia no Disco Local C. 2º - Apos ter extraido o Uniform Server no Disco Local C acesse a pasta UniServerZ e execute UniController. 3º - Apos executar o UniController ele pedira uma senha coloque uma de seu desejo e não a esqueça e clique em OK, OK. 4º - Em seguida aparecera o painel, clique em Start Apache e Start Mysql e espero ficar verde. 5º - Apos ter ficado verde aguarde iremos extrair o servidor que você quer abrir, no caso estou usando um OTXServer, extraia ele na Area de Trabalho. 6º - Apos ter extraido voltaremos ao Uniform Serve, clique em phpMyAdmin, vamos criar o banco de dados. 7º - Assim que o phpMyAdmin abrir no seu navegador clique em Base de Dados, vamos criar a database. 8º - Em Criar base de dados coloque um nome e clique em Criar ela sera criada e aberta feito isso procure a opção Importar. 9º - apos ter clicado em Importar ela abrira uma outra pagina e nessa clique na opção Escolher arquivo e vá ate a pasta do seu OtxServer que extraio na Area De Trabalho e selecione o arquivo sql (DATABASE.sql) depois em Abrir quando voltar para o phpMyAdmin clique em executar. 10º - Ao fazer todos os passos acima você terá criado sua Database, agora vamos configurar o config.lua para que funcione tudo, abra seu config.lua na pasta que extraio do OT na Area de Trabalho e procure as linhas abaixo: mysqlPass = "SENHA" -- a que você criou no passo 3º mysqlDatabase = "DATABASE" -- a que você criou no passo 8º Apos ter configurado essas duas linhas pasta voce clicar em theforgottenserver.exe que ele ira abrir normalmente. Terminou? claro que não como poderia me esquecer que você também tem que por o site pra funcionar rsrs. Vamos la? Baixe um site compatível com o OTSERV que você esta usando nesse caso que e servidor 10.x pode usar este Gesior 2012. apos ter feito o download, va ate a pasta C:\UniServerZ e delete a pasta www, depois extraia o Gesior 2012 que você fez o download para a pasta C:\UniServerZ ela ficara da seguinte forma. Basta renomear essa pasta Gesior-master para www ficando da seguinte forma. Apos ter renomeado entre na pasta www em seguida na pasta config e abra o arquivo config.php na terceira linha vai esta $config['site']['serverPath'] = "E:\Arquivos de OTServ\Forgotten Server/"; altere o E:\Arquivos de OTServ\Forgotten Server/ para a pasta onde você extraio o seu OT no caso a pasta Otxserver na Area De Trabalho, como mostra na imagem abaixo. Apos ter alterado o caminho no seu config.php basta salvar, entrar no seu navegador e usar o endereço http://127.0.0.1 caso der algum erro quando entrar no site More info: ERROR: #C-5 : Class::ConfigPHP - Key passwordType doesn't exist. basta adicionar passwordType = "sha1" no config.lua abaixo de mysqlSock = "" E isso pessoal, espero ter ajudado e boa sorte em seu futuros projetos, essa semana ainda sairá um tutorial para compilar e montar o ot em Linux.1 ponto -
New Library v. 1.2
New Library v. 1.2
Underewar reagiu a xWhiteWolf por uma resposta no tópico
1 pontoFala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal) Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro: Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório. Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20) Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros. Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir) Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu. Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira. Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida. EDIT 2: Duas novas funções adicionas, espero que gostem! EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.1 ponto -
Mining System
Mining System
bagulhoescroto reagiu a xWhiteWolf por uma resposta no tópico
1 pontoAntes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera. Enfim, vamos ao script: actions\scripts\mining.lua: terra = {351,352,353,354,355} levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem [37] = 2155, -- green gem [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177 -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script: local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } o storage é onde vai salvar o seu nível chance é a chance de pegar um item cada vez que minera. k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10. experience é o storage que fica salvo sua experiencia. Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players. e no actions.xml: <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser. PS: Uma fotinha pra vcs verem Espero que tenham gostado!1 ponto -
[GlobalEvents] ServeSave - Shutdown/Automático
[GlobalEvents] ServeSave - Shutdown/Automático
premii reagiu a Natanael Beckman por uma resposta no tópico
1 pontoGalera é um script muito simples, porém pra mim é muito ÚTIL. Abra a pasta data/globalevents/scripts crie um arquivo .lua com o nome GlobalSave.lua, em seguida adicone o code: function prepareShutdown(minutes) if(minutes <= 0) then doSetGameState(GAMESTATE_SHUTDOWN) return false end if(minutes == 1) then doBroadcastMessage("Server is going down in " .. minutes .. " minute for global save, please log out now!") elseif(minutes <= 3) then doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save, please log out.") else doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save.") end shutdownEvent = addEvent(prepareShutdown, 60000, minutes - 1) return true end function onTime() return prepareShutdown(5) -- Quantos minutos pra executar o ServeSave. end Ajustes: Quando quiser modificar os minutos altere: -return prepareShutdown(5) - (5) = 5 minutos, eu recomendo no mínimo 5 minutos, em outras palavras não mexa. Em globalevents.xml adicione a tag seguinte: <globalevent name="GlobalSave" time="05:30" event="script" value="GlobalSave.lua"/> No meu ServeSave é feito as 05:30 da manhã, modifique pro horário desejado! Em config.lua verifique essa regra: Se tiver TRUE deixa, assim ele fecha o .exe se não tiver no seu config.lua não tem problema closeInstanceOnShutdown = true - - - Esse tutorial é só isso, clique em GOSTEI, e comente no tópico, muito obrigado! -------------------------------------------------------------------------------------------------------------------------------------------------------- AUTO RESTART -------------------------------------------------------------------------------------------------------------------------------------------------------- Pra você que utiliza Windows esse é perfeito: Dezon OT Admin [restarter] Pra você que utiliza Linux: Baixe esse arquivo, TFS.SH, bote dentro da pasta do seu OT. Esse arquivo está configurado pra abrir outro arquivo chamado tfs caso o seu seja outro nome mude pra esse, tfs. Sempre que for abrir seu OT execute esse comando ./tfs.sh& e assim toda vez que o OT cair ele renicia automaticamente.1 ponto -
[Fusão] - Itens
1 pontoBom galera, estou trazendo um script de fusão que funciona assim: Explicação: É necessário de 7 itens, na qual você coloca em tal coordenada e aperte a alavanca, sendo assim formando um item na qual você deseja em tal lugar configurado. Exemplo: Você pode fazer 7 bosses na qual dropa tals itens "Parecidos" e formando um item raro de sua escolha, ou como preferir.. Vamos ao script! Em Data/Actions/Scripts crie um arquivo chamado fusaoitens.lua e adicione isto dentro: Agora, em Data/Actions.xml adicione o seguinte: <action uniqueid="9900" script="fusaoitens.lua" /> E no seu RemeresMapEditor , pegue sua alavanca, vai em Propriedades e adicione o UniqueID 9900 nele! PRONTO! Agora configure e divirta-se! Obs: Caso lhe ajudei, da um REP+ Aí !1 ponto
-
OBJECT BUILDER
1 ponto@UnknowLoad e @themapa aki o Object Builder > ObjectBuilder_0_4_2.air1 ponto
-
(REVIVE BUGADO)
(REVIVE BUGADO)
UnknowLoad reagiu a BangBang por uma resposta no tópico
1 pontofunction onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, 990) >= 1 then doPlayerSendCancel(cid, "You can't use revive during gym battles.") return true end if getPlayerStorageValue(cid, 52481) >= 1 then return doPlayerSendCancel(cid, "You can't do that while a duel.") --alterado v2.6 end -- if item2.itemid <= 0 or not isPokeball(item2.itemid) then doPlayerSendCancel(cid, "Please, use revive only on pokeballs.") return true end for a, b in pairs (pokeballs) do if item2.itemid == b.on or item2.itemid == b.off then --edited deixei igual ao do PXG doTransformItem(item2.uid, b.on) doSetItemAttribute(item2.uid, "hp", 1) for c = 1, 15 do local str = "move"..c setCD(item2.uid, str, 0) end doSendMagicEffect(getThingPos(cid), 13) doRemoveItem(item.uid, 1) doCureBallStatus(item2.uid, "all") cleanBuffs2(item2.uid) --alterado v2.5 setCD(item2.uid, "control", 0) --alterado v2.5 setCD(item2.uid, "blink", 0) --alterado v2.6 return true end end return true end Teste novamente ! Não desista !!!1 ponto -
(REVIVE BUGADO)
(REVIVE BUGADO)
UnknowLoad reagiu a BangBang por uma resposta no tópico
1 pontofunction onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, 990) >= 1 then doPlayerSendCancel(cid, "You can't use revive during gym battles.") return true end if getPlayerStorageValue(cid, 52481) >= 1 then return doPlayerSendCancel(cid, "You can't do that while a duel.") --alterado v1.6 end -- if item2.itemid <= 0 or not isPokeball(item2.itemid) then doPlayerSendCancel(cid, "Please, use revive only on pokeballs.") return true end if #getCreatureSummons(cid) >= 1 then doPlayerSendCancel(cid, "You can't use revive in using pokeballs.") return true end for a, b in pairs (pokeballs) do if item2.itemid == b.on or item2.itemid == b.off then --edited deixei igual ao do PXG doTransformItem(item2.uid, b.on) doSetItemAttribute(item2.uid, "hp", 1) for c = 1, 15 do local str = "move"..c setCD(item2.uid, str, 0) end setCD(item2.uid, "control", 0) setCD(item2.uid, "blink", 0) --alterado v1.6 doSendMagicEffect(getThingPos(cid), 13) doRemoveItem(item.uid, 1) doCureBallStatus(item2.uid, "all") cleanBuffs2(item2.uid) --alterado v1.5 return true end end return true end Teste1 ponto -
Novos sistemas de Aura
1 ponto@Vodkart bater uma pelada? Kappa1 ponto
-
[Link Quebrado] Pokemon Evolution [DxP]
Sim é na source... provavelmente quando a fizeram esqueceram de configurar os basicos e quanto ao seu erro provavelmente voce esta esquecendo de trocar o ID voce tem que ver o ID do seu player no caso tem que olhar qual é o numero do seu char o numero 1 normalmente é o account manager... queria te ajudar no skype mas o PC aki é muito fraquinho qualquer coisa ele trava ai complica1 ponto
-
(Resolvido)Problema com Rank, remoção do acc manager
local config = { MaxPlayer = 20, fight_skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, }, other_skills = { [''] = "level", ['level'] = "level", ['magic'] = "maglevel", ['health'] = "healthmax", ['reset'] = "reset", ['mana'] = "manamax" }, vocations = { ['sorcerer'] = {1,5}, ['druid'] = {2,6}, ['paladin'] = {3,7}, ['knight'] = {4,8} } } function onSay(cid, words, param) local store,exausted = 156201,5 local param,str = param:lower(),"" if not config.fight_skills[param] and not config.other_skills[param] and not config.vocations[param] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "this ranking does not exists.") return true elseif getPlayerStorageValue(cid, store) >= os.time() then doPlayerSendCancel(cid, "wait " .. getPlayerStorageValue(cid, store) - os.time() .. " seconds to use this command again.") return true end str = "--[ RANK "..(param == "" and "LEVEL" or string.upper(param)).." ]--\n\n" local query = config.fight_skills[param] and db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `player_id` > 6 AND `skillid` = "..config.fight_skills[param].." ORDER BY `value` DESC;") or config.other_skills[param] and db.getResult("SELECT `name`, `"..config.other_skills[param].."` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `"..config.other_skills[param].."` DESC, `name` ASC;") or db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 AND `vocation` = "..config.vocations[param][1].." or `vocation` = "..config.vocations[param][2].." ORDER BY `level` DESC;") if (query:getID() ~= -1) then k = 1 repeat str = str .. "\n " .. k .. ". "..(config.fight_skills[param] and getPlayerNameByGUID(query:getDataString("player_id")) or query:getDataString("name")).." - [" .. query:getDataInt((config.fight_skills[param] and "value" or config.vocations[param] and "level" or config.other_skills[param])) .. "]" k = k + 1 until not(query:next()) or k > config.MaxPlayer query:free() end doShowTextDialog(cid,6500, str) setPlayerStorageValue(cid, store, os.time()+exausted) return true end eu acho que na database o account manager é id 6, se não for mude o 6 por 8 por exemplo1 ponto
-
(Resolvido)Problema com Rank, remoção do acc manager
Tente assim: local config = { MaxPlayer = 20, fight_skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, }, other_skills = { [''] = "level", ['level'] = "level", ['magic'] = "maglevel", ['health'] = "healthmax", ['reset'] = "reset", ['mana'] = "manamax" }, vocations = { ['sorcerer'] = {1,5}, ['druid'] = {2,6}, ['paladin'] = {3,7}, ['knight'] = {4,8} } } function onSay(cid, words, param) local managerID = '8' local store,exausted = 156201,0 local param,str = param:lower(),"" if not config.fight_skills[param] and not config.other_skills[param] and not config.vocations[param] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "this ranking does not exists.") return true elseif getPlayerStorageValue(cid, store) >= os.time() then doPlayerSendCancel(cid, "wait " .. getPlayerStorageValue(cid, store) - os.time() .. " seconds to use this command again.") return true end str = "--[ RANK "..(param == "" and "LEVEL" or string.upper(param)).." ]--\n\n" local query = config.fight_skills[param] and db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..config.fight_skills[param].." AND `player_id` != ".. managerID .." ORDER BY `value` DESC;") or config.other_skills[param] and db.getResult("SELECT `name`, `"..config.other_skills[param].."` FROM `players` WHERE `id` > 6 AND `group_id` < 2 AND `id` != ".. managerID .." ORDER BY `"..config.other_skills[param].."` DESC, `name` ASC;") or db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 AND `id` != ".. managerID .." AND `vocation` = "..config.vocations[param][1].." or `vocation` = "..config.vocations[param][2].." ORDER BY `level` DESC;") if (query:getID() ~= -1) then k = 1 repeat str = str .. "\n " .. k .. ". "..(config.fight_skills[param] and getPlayerNameByGUID(query:getDataString("player_id")) or query:getDataString("name")).." - [" .. query:getDataInt((config.fight_skills[param] and "value" or config.vocations[param] and "level" or config.other_skills[param])) .. "]" k = k + 1 until not(query:next()) or k > config.MaxPlayer query:free() end doShowTextDialog(cid,6500, str) setPlayerStorageValue(cid, store, os.time()+exausted) return true end Em managerID, coloque o id do Account Manager, você pode encontra-lo na database na seção "players".1 ponto
-
Deixando Exp e Catch mais dificil no Poketibia
Deixando Exp e Catch mais dificil no Poketibia
Lord Danilus reagiu a principe sharingan por uma resposta no tópico
1 pontoSalve, salve galera do Tibia King, blz ?! Vamos primeiro deixar a Exp mais dificil ? Vamos lá....... 1º Vá no Config.lua aperte CTRL + F e digite Rates. Deixe o seu Rates igual ou Parecido, vou explicar: Agora vá em Data/XML/Stages Se tiver igual ou parecido deixe ou modifique, como desejar. Se não estiver desse jeito, copie e cole. Ali em "minlevel="1" É o minimo lvl ou seja lvl "1" até o lvl 20 o xp do serv vai ser 6 minlevel é o minimo level minimo, maxlevel é do minimo level até um certo lvl, ou seja o level maxlevel. O xp vem do multiplier. Você pode ir modificando com a sua preferencia. Agora vamos configurar o Catch !! Vá em data/actions/scripts abra o arquivo "catch.lua" Procure por isso: local monster = getItemName(itemEx.uid):match("dead (.*)") if item.itemid == ID_GREATBALL then chances = (chance[monster]) * 2 elseif item.itemid == ID_SUPERBALL then chances = (chance[monster]) * 3 elseif item.itemid == ID_ULTRABALL then chances = (chance[monster]) *4 else chances = chance[monster] end Ali é só modificar os numeros para a capacidade de catar pokemon. Ajudei ? Não custa nada dar Rep + Qualquer duvida comentem1 ponto -
(Resolvido)[PEDIDO] Nascer respawn com player na tela
Isso precisa ser feito nas source, e compilar novamente com o arquivo spawn.cpp editado. Se quiser, siga o tutorial abaixo: Em spawn.cpp Procure por bool Spawn::findPlayer(const Position& pos) E no lugar de: bool Spawn::findPlayer(const Position& pos) { SpectatorVec list; g_game.getSpectators(list, pos); Player* tmpPlayer = NULL; for(SpectatorVec::iterator it = list.begin(); it != list.end(); ++it) { if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->hasFlag(PlayerFlag_IgnoredByMonsters)) return true; } return false; } Coloque: bool Spawn::findPlayer(const Position& pos) { SpectatorVec list; g_game.getSpectators(list, pos); Player* tmpPlayer = NULL; for(SpectatorVec::iterator it = list.begin(); it != list.end(); ++it) { if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->hasFlag(PlayerFlag_IgnoredByMonsters)) return false; } return false; } Pronto, irá spawnar com ou sem player na tela, já foi testado por mim.1 ponto
-
(Resolvido)Deixa Clone Com Buff
(Resolvido)Deixa Clone Com Buff
Tace reagiu a xWhiteWolf por uma resposta no tópico
1 pontoColoquei uma variavel chamada names onde vc coloca todos os nomes que quiser sempre separando por virgula e entre aspas1 ponto -
(Resolvido)Deixa Clone Com Buff
(Resolvido)Deixa Clone Com Buff
Tace reagiu a xWhiteWolf por uma resposta no tópico
1 pontoa cada up que vc der vai ser um dia a mais que eu vou demorar pra resolver isso pra ti. Eu já falei que vou fazer cara, para de ficar pressionando... já é o terceiro script que eu vou resolver pra você e eu te digo que não gosto de ser pressionado e você continua pressionando.. não vai haver uma próxima vez.1 ponto -
(Resolvido)Spells para remover os summons
(Resolvido)Spells para remover os summons
Tace reagiu a xWhiteWolf por uma resposta no tópico
1 pontogetCreatureSummons(cid) Info This functions checks for creature summons list. Returns false if creature not found, otherwise table with creatures list (NOTE: Can be empty!) Example local summons = getCreatureSummons(cid) if(table.maxn(summons) <= 0) then -- no summons doPlayerSendCancel(cid, "You don't have any summons..") return false end -- remove all summons for _, pid in ipairs(summons) do doRemoveCreature(pid) end1 ponto