Líderes
-
Fir3element
HéroiPontos1305Total de itens -
Thiago Rulexz
MembroPontos376Total de itens -
-
CarlosHenrique7457
MembroPontos491Total de itens
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 04/29/15 em todas áreas
-
Cast System(Prototipo)
3 pontosEu desenvolvi ontem um cast system básico. Ele é baseado em todos os casts que você acha por ai, especialmente esse daqui: https://github.com/otland/forgottenserver/pull/994 O que ele tem diferente? Até agora se mostrou estável, não dá debugs nem crasha a distro(o mais importante) e é bem simples. Fiz ele por que os casts disponiveis não foram feitos em sua maioria por programadores, e sim amadores que se propuseram a adaptar a source do Elf(um desenvolvedor antigo do tfs) de 0.3.x para 1.0+. Esses casts tem um codigo bem feio e mal organizado. Eu tentei fazer algo mais bem feito e organizado. Não recomendo a usar em produção(servidor online com players). No futuro pretendo adicionar mais comandos como banir, kick, trocar o nome do spectador, etc. Por enquanto o foco é testar se tá 100% estavel(sem dar crash). Source: https://github.com/HeavenIsLost/cast Executavel(32 bits): http://www.mediafire.com/download/f9pe9fp921bhi47/theforgottenserver+Cast.exe Schema para ser adicionado no banco de dados: CREATE TABLE IF NOT EXISTS `live_casts` ( `player_id` int(11) NOT NULL, `cast_name` varchar(255) NOT NULL, `password` boolean NOT NULL DEFAULT false, `description` varchar(255), `spectators` smallint(5) DEFAULT 0, UNIQUE KEY `player_id_2` (`player_id`), FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB; Comando para ativar o cast(encontrado no talkactions.xml): Comandos que o caster pode dar(dentro do channel do cast): Ps: esse funciona melhor do que o do Djarek por que não envolve multithread e tals.3 pontos
-
[Função] ucwords(str)
[Função] ucwords(str)
Tricoder e 2 outros reagiu a Fir3element por uma resposta no tópico
3 pontosÉ semelhante a função que existe em PHP, transforma a primeira letra de cada palavra da string em maiúscula. function ucwords(str) str = str:lower():gsub("(%l)(%w*)", function(x, y) return x:upper() .. y end) return str end Exemplo: print(ucwords("aBCde ABCDE aBBcDDe")) Resultado: Abcde Abcde Abbcdde3 pontos -
Critical Skill System
Critical Skill System
joaopedrodepaiva reagiu a xWhiteWolf por uma resposta no tópico
1 pontoFala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser: creaturescripts.xml: <!-- CRITICAL SYSTEM --> <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua: --- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then setPlayerStorageValue(cid, 48913, 0) end creaturescritps\scripts\critical.lua: --[[Critical System ------------------------- By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior) Agora em actions.xml adicione: <action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione: --- CRITICAL System by Night Wolf local config = { effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado } function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!") return 0 end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo: <action itemid="1294" << ID do item que será usado pra dar a skill. A config tá bem simples: effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado. Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque. Espero que vcs gostem, qualquer coisa deixem os comentários aqui. Obs: aqui tá uma foto Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui: <script> <event name="critical"/> </script> coloque antes de </monster> Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players.1 ponto -
[8.54] Servidor + Client Naruto B&W [EXCLUSIVO]
OLÁ USUARIOS DO TIBIA KING .. HOJE ESTAREI TRAZENDO UMA NOVIDADE .. O SERVIDOR DE NTO EXCLUSIVO DO NTO BLACK & WHITE(AKELE OT NOVO QUE FOI CRIADO A 1 MES POR E MIN E POR O [ADM] Johnatan). VALE LEMBRAR QUE O NTO BLACK WHITE FOI UM DOS SERVIDORES DE NARUTIBIA QUE MAIS CRESCEU NOS ULTIMOS TEMPOS .. EM APENAS 1 SEMANA DE NTO JÁ ATINGIMOS A META DE 70 ~ 80 USUARIOS ONLINE FIXOS DIARIOS, E ESSE É O SERVIDOR MAIS RECENTE DO NTO BLACK WHITE BASEADO NO DO SERVIDOR MADARA RINNEGAN EDITADO POR MIN E POR O JOHNATA. ANTES DE MAIS NADA GOSTARIA DE EXPLICAR O MOTIVO DE TAR POSTANDO O SERVER .. BEM O JOHNATAN ERA QUEM FAZIA PRATICAMENTE TUDO NAS ATUALIZAÇÕES E TAALS .. POREM ELE PAROU COM NTO AI TIVE QUE DESMONTAR O NTO B&W PORQUE EU NÃO TINHA CONDIÇÕES PRA DAR CONTA DO NTO SOZINHO. CHEGA DE BLABLA E VAMOS LÁ!! [+] NOVIDADES & CARACTERISTICAS [+] ERROS E BUGS [+] PRINTS DO SERVER [+] DOWNLOAD [+] CREDITOS [+] NOVIDADES & CARACTERISTICAS [+] ERROS E BUGS [+] PRINTS DO SERVER [+] Downloads Servidor Naruto B&W: Clique Aqui Client(descompilado): Clique Aqui [+] Creditos - Madara Rinnegan (servidor base) - [ADM] Johnata Editar Praticamente Todo o Servidor - Eu Por umas Besteiras q eu Coloquei e Por Postar GOSTOU DO SERVIDOR? DA UM REP++1 ponto
-
[10.90] Vanaheim Global Opensource - TFS 1.2
[10.90] Vanaheim Global Opensource - TFS 1.2
wiz444 reagiu a Bruno Minervino por uma resposta no tópico
1 pontoUm método diferente de agir. Escolhas diferentes, um projeto surpreendente, e o melhor é opensource. Sim, você pode ter acesso a este servidor que estou desenvolvendo em parceria com a Serversoft para você. Um servidor com uma mega estrutura para suportar seus jogadores online sem nenhum problema como: debug, bug de clonagem, instabilidade entre diversos outros dos servidores free's disponíveis para download nessa vasta internet tibiana. Uma inovação no ramo de OTservers, distribuindo não só a datapack como as sourcers e os sistemas, absolutamente tudo que você procura. Basta baixar, compilar... Mas eu não sei compilar. Não há problema nisso, o OTPanel da Serversoft faz tudo isso para você. Basta clicar num botão de "play" e ver a mágica acontecer. O projeto Vanaheim, foi criado com o intuito de ser inteiramente grátis para toda a comunidade. Um servidor no qual a diversão é o fator principal, um projeto com viabilidade absoluta por todos os tibianos. O projeto conta com uma área exclusiva no GitHub para que todos possam acompanhar a evolução do mesmo, dia a dia, diversas atualizações estarão disponíveis a todos. Desde uma action até uma modificação na source vocês terão acesso. O servidor conta com um mapa Global Full, quando eu digo full, quero dizer que está 99.99% do mapa completo, sem bugs entre outros. Um servidor que você escolhe a rate experience/skill que desejar, ele vai se adaptar! Você pode escolher se quer ou não que as quests tenham as missões originais 100%! E o melhor? Além do servidor estar disponível para download ele está online para quem quiser conhecer o projeto, ajudar de alguma forma e o melhor de tudo, se divertir. Venha se divertir: http://www.vanaheimglobal.com RATES Level 8 - 50: 300x Level 51 - 80: 200x Level 81 - 100: 150x Level 101 - 140: 90x Level 141 - 160: 70x Level 161 - 180: 60x Level 181 - 200: 50x Level 201 - 230: 40x Level 231 - 260: 30x Level 261 - 290: 20x Level 291 - 310: 15x Level 311 - 340: 10x Level 341 - 350: 8x Level 351 - 380: 6x Level 381 - 430: 4x Level 431 - 450: 2x Level 451+: 1x Skill: 40x Magic: 8x Loot: 3x EVENTOS Em Breve. IMAGENS Em Breve. GITHUB Para acompanhar e baixar o servidor atualizado, segue o link do nosso projeto no GitHub: DOWNLOADS Servidor Mapa Yasir Scan CRÉDITOS TFS Team Orts Project Bruno Minervino1 ponto -
Perfect Upgrade System
1 pontoNome: Perfect Upgrade System Tipo: Biblioteca, Action, Sistema Autor: Oneshot Essa é a versão final do Perfect Refine System ou Perfect Upgrade System criado por mim. É um sistema construído em cima de funções em POO (orientação a objetos), o que o torna muito versátil, possibilitando a outros programadores/scripters criarem seus próprios sistemas com base na biblioteca. A função do sistema é simples. Não passa de um sistema de refino, presente em todos os servidores, onde você usa um item em um equipamento e este fica mais forte e ganha um nome caracterizando o nível de força - bem clichê - mas muito interessante. Meu sistema é um pouco diferente dos outros, pois possui algumas características exclusivas, listadas abaixo: O nível máximo configurável é praticamente ilimitado O sistema funciona com armas de combate corpo-a-corpo, bows e crossbows. O refino pode falhar, não acontecendo nada, regredindo o nível ou resetando ele. Há um sistema nativo de broadcasts, que são enviados quando um jogador consegue refinar um equipamento até um certo nível ou maior. As chances são configuradas manualmente e sua randomização é muito precisa. Há dois modos de instalar o sistema em seu servidor, o primeiro é baixar a pasta com os scripts necessários e apenas copiar as chaves nos arquivos XMLs ou então seguir o curto tutorial de instalação. Crie um arquivo chamado upgradesystem.lua na pasta data/lib e copie o conteúdo abaixo: --[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true}, [11] = {10, true, true}, [12] = {5, true, true} }, broadcast = 7, attributes = { ["attack"] = 2, ["defense"] = 1, ["armor"] = 1 }, message = { console = "Trying to refine %s to level +%s with %s%% success rate.", success = "You have upgraded %s to level +%s", fail = "You have failed in upgrade of %s to level +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "The targeted %s is already on max upgrade level.", notupgradeable = "This item is not upgradeable.", broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!", invalidtool = "This is not a valid upgrade tool.", toolrange = "This upgrade tool can only be used in items with level between +%s and +%s" }, tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, isEquipment = function(self) local weaponType = self:getItemWeaponType() return ((weaponType > 0 and weaponType < 7) or self.item.armor ~= 0) end, setItemName = function(self, name) return doItemSetAttribute(self.item.uid, "name", name) end, chance = function(self) local chances = {} chances.upgrade = (self.levels[self.item.level + 1][1] or 100) chances.downgrade = (self.item.level * 5) chances.erase = (self.item.level * 3) return chances end } function UpgradeHandler:new(item) local obj, ret = {} obj.item = {} obj.item.level = 0 obj.item.uid = item.uid for key, value in pairs(getItemInfo(item.itemid)) do obj.item[key] = value end ret = setmetatable(obj, {__index = function(self, index) if _G[index] then return (setmetatable({callback = _G[index]}, {__call = function(self, ...) return self.callback(item.uid, ...) end})) else return UpgradeHandler[index] end end}) if ret:isEquipment() then ret:update() return ret end return false end function UpgradeHandler:update() self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0) end function UpgradeHandler:refine(uid, item) if not self.item then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable) return "miss" end local tool = self.tools[item.itemid] if(tool == nil) then doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool) return "miss" end if(self.item.level > #self.levels) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name)) return "miss" end if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range))) return "miss" end local chance = (self:chance().upgrade + tool.info.chance) doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance))) if(tool.info.removeable == true) then doRemoveItem(item.uid, 1) end if chance * 100 > math.random(1, 10000) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1))) if (self.item.level + 1) >= self.broadcast then doBroadcastMessage(self.message.broadcast:format(getCreatureName(uid), self.item.name, (self.item.level + 1))) end self:setItemName((self.item.level > 0 and self:getItemName():gsub("%+(%d+)", "+".. (self.item.level + 1)) or (self:getItemName() .." +1"))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value) end end return "success" else if(self.levels[self.item.level][3] == true and (self:chance().erase * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name)) self:setItemName(self.item.name) for key, value in pairs(self.attributes) do if self.item[key] > 0 then doItemSetAttribute(self.item.uid, key, self.item[key]) end end elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1))) self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 1)))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item[key] + value * (self.item.level - 1))) end end else doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1))) end return "fail" end end Crie um arquivo chamado upgrade.lua em data/actions/scripts e cole o conteúdo abaixo: function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end local obj = UpgradeHandler:new(itemEx) if(obj == false) then return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable) end local status = obj:refine(cid, item) if status == "success" then --doSendAnimatedText(toPosition, "Success!", COLOR_GREEN) doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) elseif status == "fail" then --doSendAnimatedText(toPosition, "Fail!", COLOR_RED) doSendMagicEffect(toPosition, CONST_ME_POFF) else doSendMagicEffect(toPosition, CONST_ME_POFF) end return true end No arquivo actions.xml, cole a seguinte linha: <action itemid="8306" event="script" value="upgrade.lua"/> Para adicionar mais níveis de refino no sistema, edite a seguinte tabela: levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true} }, Por padrão, ela já está configurado como na maioria dos MMORPGs, 10 níveis de refino, com chances de sucesso, regressão e "quebra". Mas se você quiser, por exemplo, adicionar mais dois níveis, siga o modelo, sempre colocando uma vírgula no final com exceção da última linha da tabela: levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true}, [11] = {10, true, true}, [12] = {5, true, true} }, O primeiro valor é chance de sucesso, o segundo se o item pode regredir na tentativa e o terceiro é se o item para "quebrar" (perder todo o nível de refino). Para criar novas ferramentas (itens) de refinar, configure a tabela abaixo: tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, Seguindo o mesmo esquema da tabela anterior, vírgulas em todas as linhas com exceção da última, seguindo o modelo abaixo. Por exemplo, uma ferramenta de ID 8303 que refine do level +6 ao +10, que dê 10% de chance bônus e que seja finita, eu faço assim: tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, [8310] = {range = {6, 10}, info = {chance = 10, removeable = true}} }, Em breve vídeo de demonstração com sistema em funcionamento. Perfect Upgrade System.rar1 ponto
-
Launcher AutoUpdate C#
Launcher AutoUpdate C#
premii reagiu a GabrielSapient por uma resposta no tópico
1 pontoGalera sempre procurei um Launcher AutoUpdate para meu servidor, depois de muita pesquisa e pouco conhecimento consegui fazer um em C#, está ai: 1. Download: • Download | • Scan 2. Oque ele faz: • Verifica a existência da versão local na pasta do cliente; • Se a versão do arquivo não existir, ele assume que a versão é "1.0" e cria um arquivo de versão; • Verifica arquivo .xml no servidor de atualização; • Baixar atualizações para todas as versões maiores do que a versão atual do cliente (atualiza tudo em apenas formato de arquivo .zip); • Extrai os arquivos .zip; • Exclui os arquivos .zip após a extração; • Arquiva a versão atualizada na pasta do cliente; • E, finalmente, desbloqueia o botão "Start Game". 3. Como editar: • Abra o arquivo .sln na pasta "VS Project" com o Visual Studio: Procure por: string Server = "http://127.0.0.1/Updates/"; • Altere o http://127.0.0.1/Updates/ para qualquer URL que você estará hospedando suas atualizações. • Agora vamos procurar por: Process.Start("OTClient PkR DX9.exe", "\\Pokémon Rusty"); • Modifique o OTClient PkR DX9.exe pelo nome do .exe do seu Client. • \\Pokémon Rusty e a pasta que está seu .exe e vai ficar seu Launcher. (troque sem tirar os "\\") • No Visual Studio, selecione o controle WebBrowser(Neste caso, o nome "patchNotes") e alterar a url do "http://127.0.0.1/"para o caminho do arquivo index.html, na pasta do host: OBS: Isto á opcional, é apenas um template em .html. Você pode remove-lo e editar da maneira deseja. • Agora apenas jogue o .exe, .dll e o arquivo version da pasta "Launcher\VS Project\Launcher v2\bin\Debug ou Release" para a pasta de seu Client: Pronto! Agora e com o Site. • No host do site, apos colarmos a pasta Updates, editamos o arquivo Updates.xml, para cada atualização adicionamos um <update> fechamos com </update> como no exemplo do arquivo. Colocamos o arquivo atualização em .zip nessa mesma pasta, editando a versão e o nome no arquivo: • No arquivo version.txt colocamos a versão da nova atualização: • Uma dica para o .zip de atualização é colocar em pastas o caminho no client desejado a fazer update. Exemplo: data/things/854 nesta pasta colocaremos os arquivos que será substituído, no exemplo foi Tibia.spr e .dat. Depois compactamos e deixamos na pasta Updates, sem esquecer de colocar o nome no arquivo Updates.xml. 4. Dica • Pronto! Agora e só criar um instalador com o launcher, com atalho na área de trabalho (o launcher é o .exe que você colocou no client). Você pode modificar o launcher do jeito que quiser, o arquivo index.html e etc. Quando abrir o arquivo ele irá atualizar, liberar o botão "Start Game", e quando você clicar vai fechar o Launcher e abrir o Client. 5. Créditos Eu - Pelo launcher e pelo tutorial.1 ponto -
[creaturescripts] Senha para porta
Bom para quem não sabe como funciona o script,é basicamente uma senha para conseguir abrir uma porta e após um tempo a porta se fecha automaticamente,podendo ser configurado o tempo/senha/porta. • Adicionando o script • Em "data/creaturescripts/creaturescripts.xml" adicione está tag : <event type="textoparaporta" name="Senha" event="script" value="senhaporta.lua"/> Em "data/creaturescripts/scripts/login.lua" adicione está tag no final do script : registerCreatureEvent(cid, "Senha") Em "data/creaturescripts/scripts/senhaporta.lua" adicione este script : local uniqueids = {8049, 8050} local passwords = { ["TibiaKing"] = {doorpos = {x = 163, y = 36, z = 7}, doorid = 6257, blackboardpos = {x = 162, y = 36, z = 7}, blackboardid = 1811, uniqueid = 8049, doorclosetime = 10}, ["TK"] = {doorpos = {x = 1000, y = 1000, z = 7}, doorid = 1213, blackboardpos = {x = 1000, y = 1000, z = 7}, blackboardid = 1811, uniqueid = 8050, doorclosetime = 10} } function onTextEdit(cid, item, newText) local x = passwords[newText] local function onCloseDoor() if(getTileItemById(x.doorpos,x.doorid+1).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid+1).uid, x.doorid) doSendMagicEffect(x.doorpos, CONST_ME_MAGIC_RED) end end for _, check in pairs(uniqueids) do if item.uid == check then if x and item.uid == x.uniqueid then if(getTileItemById(x.doorpos,x.doorid).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid).uid, x.doorid + 1) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Sua Senha "'..newText..'" esta correta, voce pode entrar.') addEvent(onCloseDoor,x.doorclosetime*1000) doRemoveItem(item.uid, 1) local blackboard = doCreateItem(x.blackboardid,1,x.blackboardpos) doItemSetAttribute(blackboard, "uid", x.uniqueid) else doRemoveItem(item.uid, 1) local blackboard = doCreateItem(x.blackboardid,1,x.blackboardpos) doItemSetAttribute(blackboard, "uid", x.uniqueid) doPlayerSendCancel(cid, 'A porta ja esta aberta, feche-a ou espera ela se fechar.') end else doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid, 'Sua senha "'..newText..'" esta incorreta.') end end end return true end • Configurando • Creditos : Limos Imagens :1 ponto
-
[WebSite] Gesior Tfs 1.0 Modificado by Malblofor
Olá pessoal do TK. Hoje venho colocar web modificado do Gesior.pl (Modificado layout) Essa versão do Gesior funciona na versão 0.3.6 e 0.4 e 1.0 do TFS! (Testado TFS 1.0) - Layout Atualizado (Layout/Buttons/Icons) [Modificado] - Shop System / Shop Admin - Shop System (PagSeguro) - Create Account (Sem Bug) - 100% Estável - Sem Bug Index, News Ticker Aconselho usar a versão do Xampp mais atual. Imagem: Já vem com install.php para instalar coloque a pasta htdocs Entre em localhos:8090/install.php Para modificar seu PagSeguro editar a linha buypoints.php e altere essa linha <input type="hidden" name="email_cobranca" value="SEU EMAIL DO PAGSEGURO AQUI"> Download: htdocs.rar Testem e comentem, não sou o criador (apenas modifiquei o layout e adicionei o Pagseguro), mas posso dar ajudar nas dúvidas... Gostou ? Da REP +1 ponto
-
[Video-Aula] Configurando Xampp,Roteador,Firewall, Etc...
fala ae galera bom como prometido fiz uma video-aula encinando a configurar o seu xampp versão (1.7.3), abrir porta no roteador, abrir portas no firewall, configurar o config.lua, o config do site (modern acc), rápida explicação de como criar ip no, no-ip. acho que é isso bom espero que ajude vocês fiquem com o video: DOWNLOAD: Xampp 1.7.3 ASSISTA EM HD https://www.youtube.com/watch?v=Z2r2wGWpVWU tópico para configurar root, do seu xampp Clique Aqui o tópico é bem explicativo para se algum passo que você não entender da video aula pode também olhar no tópico. se gostou da +rep créditos Brunds (pelo video) alissonfgp (pelo tópico)1 ponto
-
Custom Cliente - Todas as versões - Qualquer IP
Custom Cliente - Todas as versões - Qualquer IP
BrunoWots reagiu a runeraserver por uma resposta no tópico
1 pontoFala galera, Vejo muita gente com dúvida de como fazer custom clients. Neste tutorial vou ensinar para vocês criar custom clients de todas as versões e com qualquer ip. 1º Passo: • Baixe o programa NotePad http://notepad-plus-plus.org/repository/6.x/6.7.5/npp.6.7.5.Installer.exe 2º Passo: • Vá no diretório onde está instalado o client que deseja editar, clique com o direito em Tibia.exe e selecione "Edit with Notepad++" 3º Passo: • Pressione ctrl + f e busque por login01.tibia.com e substitua pelo seu ip, (exemplo.com.br). Perceba que login01.tibia.com + os 3 NUL que aparecem, somam 20 caracteres (NUL conta como 1). O seu IP deverá conter 20 caracteres ou menos. Exemplo: exemplo.com.br possui 14 caracteres Como o meu exemplo possui 14 caracteres e login01.tibia.comNULNULNUL possui 20, vou ter que preencher esses 6 caracteres que faltam com 6 NUL. Para isso, você deverá deixar o cursos de texto na frente do seu ip (exemplo.com.br"AQUI") e ir para Plugins>Converter>Conversion. Digite 0 em decimal e clique em (ASCII: Insert) 6 vezes, devendo ficar assim: exemplo.com.brNULNULNULNULNULNUL (Lembrando que acrescenta 6 NUL no caso do exemplo, o seu IP deverá completar os 20 caracteres podendo haver mais ou menos NULs). Procure por esses ips e faça os passos acima em todos: login01.tibia.com login02.tibia.com login03.tibia.com login04.tibia.com login05.tibia.com tibia01.cipsoft.com tibia02.cipsoft.com tibia03.cipsoft.com tibia04.cipsoft.com tibia05.cipsoft.com Feito isso, procure por: 132127743205872284062295099082293384952776326496165507967876361843343953435544496682053323833394351797728954155097012103928360786959821132214473291575712138800495033169914814069637740318278150290733684032524174782740134357629699062987023311132821016569775488792221429527047321331896351555606801473202394175817 Substitue por: 109120132967399429278860960508995541528237502902798129123468757937266291492576446330739696001110603907230888610072655818825358503429057592827629436413108566029093628212635953836686562675849720620786279431090218017681061521755056710823876476444260558147179707119674283982419152118103759076030616683978566631413 Créditos: Gesior1 ponto -
[Exclusivo]Baiak ZIK VIP 15 Editado DeathRocks
[Exclusivo]Baiak ZIK VIP 15 Editado DeathRocks
brendonbh reagiu a DeathRocks por uma resposta no tópico
1 pontoEba Eba Galerinha do TK Eu Aqui do Novo para Trazer o Baiak ZIK VIP 15 que muitos me pediram para fazer Espero que Gostem da Edição |- Mudanças Ocorrida | Melhorado Mapa e Adicionado Varias Áreas | Novos Itens | Novas Questes | Novos Bichos | Adicionado VIP 15 | Retirado Bugs no Mapa... | Retirado Varios Bugs no Distro | Novo Visual do Templo | Critical System | Dodge System | Reset System,para resetar fale !reset | Guild Frags System | PvP Balanceado Agora todas vocações estão no balanço | Armas Arrumadas Para Melhor PvP | Varios Eventos | Invasões no Templo de Boss Automatico | Battle Field Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Muitas Outras Coisas | Confira ! | Senha do ADM: god/god | Aqui tem Algumas Imagens ! Templo Parte Direita Templo Parte Centro Treiners Abaixo do Templo Novo Visual Npc Hero Vendendo Itens Heros Castle WAR 24 Horas | Download | Scan | Créditos | Gostou ? De um GOSTEI e tamos quites1 ponto -
Tutorial resolvendo clonagem com elfbot TFS 0.3.6
Tutorial resolvendo clonagem com elfbot TFS 0.3.6
wiinz reagiu a Valakinhas por uma resposta no tópico
1 pontoAcredito que exista muitos TFS por ai que possui o Tal bug de clonagem de items com as hotkey com o elfbot. ou derrubando servidores de tfs com o bug no npc tipo esse Como Resolver ? primeiro de tudo você precisa ter os seguintes items Source do servidor do TFS 0.3.6 DEV para compilação Não irei posta o tutorial por completo ensinando a compila e tals vo só deixar no esquema e vocês compilam o resto com outro tutorial aqui mesmo no Tibiaking baixa o module:\/ http://www.mediafire.com/download/aes46c3uq7u8rg4/modules.rar Vai em: data\npc\lib\npcsystem faça a copia do seu module.lua caso de errado e substitua o seu atual que ta la por esse do download. em seguida entre nas source do seu servidor e abre o npc.cpp pesquisa por e Substitua por esse em seguida abre o DEV e recompile seu TFS {tutorial} em outros topicos Depois de compilado vamos fazer o teste: Pronto sem bug no npc Agora os Creditos: gpedro: pela script Limos da Otland pelo module.lua e a min por sofre 2 dias para resolver isso e vim aqui posta a soluçao Meu primeiro Tuto1 ponto -
[TalkAction] Prision System
[TalkAction] Prision System
Vodkart reagiu a Bruno Carvalho por uma resposta no tópico
1 pontoVersão testada: 9.4+ (Pode funcionar em anteriores) Descrição: O script de cadeia feito por FreaksOt onde eu modifiquei e fiz algumas alterações. Alterações: - Quando prende o player ele não fica mais em um local fixo, você pode configurar para coloca-lo em outras celas. - O tempo pode ou não ser fixo, é só você digitar /jail (nome do player) para um tempo fixo ou /jail (nome do player), (tempo) para coloca-lo com um tempo especifico. -- OBS: O tempo é posto em segundos. (120 segundos = 2 minutos) TAG: <talkaction log="yes" words="/jail;!jail;/prender;!prender;/unjail;!unjail;/desprender;!desprender" access="3" event="script" value="prisao.lua"/> [/code] [i][b]Script:[/b][/i] data/talkaction/prisao.lua [code] grouprequired = 3 jailedstoragevalue_time = 1338 jailedstoragevalue_bool = 1339 local jailpos = { [1] = {x = 59, y = 52, z =6}, [2] = {x = 59, y = 52, z =5}, [3] = {x = 55, y = 47, z =6}, [4] = {x = 55, y = 47, z =5}, [5] = {x = 55, y = 52, z =6}, [6] = {x = 55, y = 52, z =5}, [7] = {x = 59, y = 47, z =5}, [8] = {x = 63, y = 52, z =5} } local unjailpos = { x = 63, y = 54, z =6 } jail_list = {} jail_list_work = 0 function checkJailList(param) addEvent(checkJailList, 1000, {}) for targetID,player in ipairs(jail_list) do if isPlayer(player) == TRUE then if getPlayerStorageValue(player, jailedstoragevalue_time) < os.time() then doTeleportThing(player, unjailpos, TRUE) setPlayerStorageValue(player, jailedstoragevalue_time, 0) setPlayerStorageValue(player, jailedstoragevalue_bool, 0) table.remove(jail_list,targetID) doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, 'Você saiu da cadeia, tente não fazer coisas malvadas da próxima vez para não ser preso novamente. Cuide-se amigo.') end else table.remove(jail_list,targetID) end end end function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, ",") if jail_list_work == 0 then jail_list_work = addEvent(checkJailList, 1000, {}) end local jail_time = -1 for word in string.gmatch(tostring(t[1]), "(%w+)") do if tostring(tonumber(word)) == word then jail_time = tonumber(word) end end local isplayer = getPlayerByName(t[1]) if isPlayer(isplayer) ~= TRUE then isplayer = getPlayerByName(string.sub(t[1], string.len("jail_time")+1)) if isPlayer(isplayer) ~= TRUE then isplayer = getPlayerByName(string.sub(t[1], string.len("jail_time")+2)) if isPlayer(isplayer) ~= TRUE then isplayer = getPlayerByName(string.sub(t[1], string.len("jail_time")+3)) end end end local default_jail = 30 if(t[2]) then default_jail = t[2] end if jail_time ~= -1 then jail_time = jail_time * 60 else jail_time = default_jail end if (words == '!prender' or words == '/prender') then if getPlayerGroupId(cid) >= grouprequired then if isPlayer(isplayer) == TRUE then doTeleportThing(isplayer, jailpos[math.random(#jailpos)], TRUE) setPlayerStorageValue(isplayer, jailedstoragevalue_time, os.time()+jail_time) setPlayerStorageValue(isplayer, jailedstoragevalue_bool, 1) table.insert(jail_list,isplayer) doPlayerSendTextMessage (cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Você prendeu o player: '.. getCreatureName(isplayer) ..' ate ' .. os.date("%H:%M:%S", getPlayerStorageValue(isplayer, jailedstoragevalue_time)) .. ' (agora é: ' .. os.date("%H:%M:%S", os.time()) .. ').') doPlayerSendTextMessage (isplayer, MESSAGE_STATUS_CONSOLE_ORANGE, 'Voce foi preso por '.. getCreatureName(cid) ..' ate ' .. os.date("%H:%M:%S", getPlayerStorageValue(isplayer, jailedstoragevalue_time)) .. ' (agora é: ' .. os.date("%H:%M:%S", os.time()) .. ').') else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Este jogador não existe ou esta offline.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem permissão para prender players.") end elseif (words == '!desprender' or words == '/desprender') then if getPlayerGroupId(cid) >= grouprequired then if isPlayer(isplayer) == TRUE then if getPlayerStorageValue(isplayer, jailedstoragevalue_bool) == 1 then doTeleportThing(isplayer, unjailpos, TRUE) setPlayerStorageValue(isplayer, jailedstoragevalue_time, 0) setPlayerStorageValue(isplayer, jailedstoragevalue_bool, 0) table.remove(jail_list,targetID) doPlayerSendTextMessage(isplayer, MESSAGE_STATUS_CONSOLE_ORANGE, 'O player '.. getCreatureName(cid) ..' te tirou da prisão. Te vejo em breve!!!') doPlayerSendTextMessage (cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Você tirou da prisão o player: '.. getCreatureName(isplayer) ..'.') else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Este jogador não está preso.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Este jogador não existe ou esta offline.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem permissão para prender players.") end end return true end Config: local jailpos = { -- Local das selas onde o player vai aparecer. local unjailpos = { x = 63, y = 54, z =6 } -- Local onde ele irá sair. local default_jail = 30 -- Tempo padrão. [/code] [i][b]Créditos:[/b][/i] [i]FreaksOt[/i] [i]Comedinha (Bruno Carvalho)[/i]1 ponto -
[Tutorial] Arrumando o bug do status offline Gesior Tfs 1.0
Bom, eu passei por um problema quando estava testando o Gesior no meu OTServer: mesmo com o server online e portas liberadas o site continuava mostrando como offline. Eu vi que algumas pessoas sugeriram trocar no arquivo layout.php isto: if($config['status']['serverStatus_online'] == 1) por isto: if($config['status']['serverStatus_online'] >= 0) mas eu vi que estava errado, pois ele iria mostrar o server como online mesmo que não estivesse. Então eu andei olhando os códigos, mexendo nos arquivos e acabei achando o erro. No arquivo load.compat.php, dentro da pasta system, na linha #254 (pelo menos aqui) eu encontrei o seguinte código: $statusInfo = new ServerStatus($config['server']['ip'], $config['server']['statusPort'], 1); onde está escrito 'statusPort' eu percebi que no config.lua não tinha isto, pois lá estava 'statusProtocolPort'. Então basta trocar esta linha por: $statusInfo = new ServerStatus($config['server']['ip'], $config['server']['statusProtocolPort'], 1); Espero ter ajudado!1 ponto
-
Liberando espaço de sprites no old client
Liberando espaço de sprites no old client
miguelshtaek1 reagiu a GabrielSapient por uma resposta no tópico
1 pontoConsegui liberar mais de 15 mil sprites usando essa ferramenta no Object Builder. 1. Baixe o Object Builder na seção: GitHub Latest commits compiled Latest commits Lembrando que necessário o Adobe Air para rodar qualquer versão do Object Builder. 2. Siga: 2.1: Abra suas sprites por ele; OBS: Faça um backup de suas sprites antes, este programa ainda está em beta, mas comigo foi certinho. 2.2: Tools> Sprites Optimizer: 2.3: Deixe desse jeito para melhor resultado, e clique em Start: 2.4: Veja o resultado: 3. Créditos: Eu - pelo tutorial; Nailson - Por ser o criador do object builder, e contribuições de: https://github.com/Mignari/ObjectBuilder/graphs/contributors.1 ponto -
Passagem secreta diferente
Passagem secreta diferente
Breniinx reagiu a xWhiteWolf por uma resposta no tópico
1 pontoEai pessoal, vim trazer hoje um sistema de passagem secreta que um amigo viu no Baiak-wars. Não sei qual server é esse e eu não jogo tibia então pra mim tanto faz mas ele gravou um vídeo, pediu um igual e obviamente eu não fiz um igual porque o sistema dos caras era muito ruim uhauheuhauheuhauheuhuhauhe Enfim, comecei um script do 0 pra fazer exatamente oque ele queria e foi isso daqui que eu consegui: Explicação: Você clica em algum item escondido pelo mapa e abre uma passagem secreta que vai durar X segundos (configurável), após esse tempo a passagem se fecha; Note que nessas imagens ele não tá escondido já que tem uma FUCKING ARVORE NO MEIO DE UM DESERTO mas você pode colocar uma tocha em cima de uma parede e colocar o actionid na tocha pra ativar e vai ficar super foda e com muito rpg Ué, mas oque tem de diferente dos outros scripts? Bem, ele é super fácil de configurar e ele dá a sensação de que o item foi arrastado :] Bom, se isso não foi o bastante pra você entender então observe essas fotinhas Tendo entendido tudo vamos à parte mais legal da coisa (SCRIPTAR!!!!) Você vai precisar criar um arquivo em actions\scripts chamado hidden.lua com o seguinte conteúdo: local positions = { [1] = {pos = {x=139, y=77, z=7}, id = 1718}, [2] = {pos = {x=140, y=77, z=7}, id = 1718}, [3] = {pos = {x=139, y=76, z=7}, id = 6855, toid = 6884}, [4] = {pos = {x=140, y=76, z=7}, id = 6855, toid = 6884}, } local createpos = { [1] = {pos = {x=138, y=77, z=7}, id = 1718}, [2] = {pos = {x=141, y=77, z=7}, id = 1718} } local tempo = 5 function onUse(cid, item, frompos, item2, topos) if getTileItemById(positions[1].pos, positions[1].id).uid < 100 then doPlayerSendCancel(cid, "Is already open.") return true end doCreatureSay(cid, "You have ".. tempo .." seconds.", 19) function criar_paredes() for i = 1, #positions do if i <= (#positions/2) then doCreateItem(positions[i].id, 1, positions[i].pos) local obst = getTileItemById(createpos[i].pos, createpos[i].id).uid doSendMagicEffect(createpos[i].pos, 2) doRemoveItem(obst, 1) elseif i > (#positions/2) then local obst = getTileItemById(positions[i].pos, positions[i].toid).uid doTransformItem(obst, positions[i].id) end end return true end for i = 1, #positions do local obst = getTileItemById(positions[i].pos, positions[i].id).uid if i <= (#positions/2) and obst ~= 0 then doRemoveItem(obst, 1) doSendMagicEffect(positions[i].pos, 2) doCreateItem(createpos[i].id, 1, createpos[i].pos) elseif i > (#positions/2) and obst ~=0 then doTransformItem(obst, positions[i].toid) end end addEvent(criar_paredes, tempo*1000) return true end Feito isso vc vai precisar declarar no actions.xml a forma que você quer utilizar o script <action actionid="27004" script="hidden.lua"/> note que vc pode colocar algum itemid, actionid ou uniqueid de sua escolhe, só lembre de mudar no map editor dependendo da forma que vc escolher. Agora eu vou ensinar vocês a configurarem o meu monstrinho *-* aqui você tem o tempo que a passagem vai ficar aberta aqui você vai editar o seguinte: na primeira são as posições dos itens e seus respectivos id's posição das duas prateleiras e seus id's posição das paredes, id dela e pra qual id ela vai ser transformada. aqui você tem as posições que sua prateleira vai se mover e os id's dela. Lembrando que você pode se sentir livre pra adicionar oque vc quiser e deixar do seu gosto, só lembrando que se vc quiser adicionar mais items ou diminuir itens é só alterar nas duas tabelas seguindo a mesma lógica. Metade pra prateleira, metade pra parede e uma tabela pra fazer as prateleiras se moverem. Os créditos são 60% meus e 40% do @MaXwEllDeN por ter me dado um norte no começo do script. Qualquer coisa comenta aí e dá aquele rep+ pra ajudar ;]1 ponto -
[TALKACTION] Item Por Vocaçao
[TALKACTION] Item Por Vocaçao
jonatasfl reagiu a tonyplyson por uma resposta no tópico
1 pontoOlá Galera , eu estava sem fazer nada (Normal) , e resolvi criar uma talkaction que adiciona item ao player se ele tiver uma certa vocaçao eu criei essa script em 2 versoes , Uma o player pode pegar qualquer level e so pode pegar uma vez. outra que o player precisa ser um certo level(CONFIGURAVEL) , e so pode pegar uma vez! Então vamos Lá (Versao Sem Level) Abra o Talkaction/Scripts Lá voce copia um arquivo .lua e renomeia para *ItemVocation*. e lá dentro voce coloca -- TonyPlyson Scripts -- function onSay(cid,words) items = {X, XX, XXX, XXXX} quant = 1 storage = 101010 msg = "Voce Ganhou o Item Correspondente a Sua Vocaçao" -- Edite Aqui a Mensagem De Sucesso msg2 = "Voce já pagou o Item Correspondente a Sua Vocaçao" -- Edite aqui a menssagem de erro if getPlayerStorageValue(cid,storage) == -1 then doPlayerAddItem(cid,items[getPlayerVocation(cid)],quant) setPlayerStorageValue(cid,storage,1) doPlayerSendCancel(cid,msg) else doPlayerSendCancel(cid,msg2) end return true end Agora , Vamos Editar os items X = Item Sorcerer XX = Item Druid XXX = Item Paladin XXXX = Item Knight Pronto ! Esse Ai está pronto , Basta Adicionar a TAG <talkaction words="!itemvocation" event="script" value="itemvocation.lua"/> ----------------------------------------- Agora é A versao (Com Level) function onSay(cid,words) items = {X, XX, XXX, XXXX} quant = 1 storage = 101010 level = 10 -- Edite o Level Nesesário msg = "Voce Ganhou o Item Correspondente a Sua Vocaçao" -- Edite Aqui a Mensagem De Sucesso msg2 = "Voce já pagou o Item Correspondente a Sua Vocaçao" -- Edite aqui a menssagem de erro msg3 = "Voce nao é level "..level.." para fazer essa quest" -- Edite a menssagem de Level Insuficiente if getPlayerStorageValue(cid,storage) == -1 and getPlayerLevel(cid) >= level then doPlayerAddItem(cid,items[getPlayerVocation(cid)],quant) setPlayerStorageValue(cid,storage,1) doPlayerSendCancel(cid,msg) elseif getPlayerLevel(cid) <= level then doPlayerSendCancel(cid,msg3) elseif getPlayerStorageValue(cid,storage) >= 1 then doPlayerSendCancel(cid,msg2) end return true end Agora vamos editar os items X = Item Sorcerer XX = Item Druid XXX = Item Paladin XXXX = Item Knight Agora em "Level" , voce muda o level nesesário para usalo Agora basta adicionar a mesma tag <talkaction words="!itemvocation" event="script" value="itemvocation.lua"/> Flw , se for usar no seu server , Dá REP+ se nao for usar , so veio para ver o conteudo , Da REP + Flw galerinha1 ponto -
Query q Deleta os Chars inativos sqlite
DELETE FROM `players` WHERE `name` <> 'Account Manager' AND `level` = 8;1 ponto
-
(Resolvido)XP não muda1!1!onze!
(Resolvido)XP não muda1!1!onze!
Formigao1211 reagiu a CarlosHenrique7457 por uma resposta no tópico
1 pontoTente assim /attr set text "Texto que quer1 ponto -
(Resolvido)[Dúvida PDA] Editar XP e Level
(Resolvido)[Dúvida PDA] Editar XP e Level
GabrielVB13 reagiu a CarlosHenrique7457 por uma resposta no tópico
1 pontoVa em \data\XML abra stages.xml Ae vc muda aonde este em " " Se vc quiser muda ainda + a exp vc deve ir em \data\lib abrir configuration.lua ae vc muda aonde ta esse 50, lembrando se vc colocar 1 vai ficar 1x se colocar 2 vai fica 2x mas a exp. e vc tem que mudar de todos os pokes.1 ponto -
[Ajuda] Me ajudem á resolver erros na distro de Poketibia 8.54
1 ponto
- (Resolvido)XP não muda1!1!onze!
(Resolvido)XP não muda1!1!onze!
Formigao1211 reagiu a CarlosHenrique7457 por uma resposta no tópico
1 pontoPronto so muda teu config pra esse -- The Forgotten Server Config -- Account manager accountManager = "yes" namelockManager = "no" newPlayerChooseVoc = "yes" newPlayerSpawnPosX = 2000 newPlayerSpawnPosY = 2000 newPlayerSpawnPosZ = 7 newPlayerTownId = 1 newPlayerLevel = 8 newPlayerMagicLevel = 0 generateAccountNumber = "no" -- Unjustified kills redSkullLength = 10 * 12 * 30 * 30 blackSkullLength = 24 * 12 * 30 * 30 dailyFragsToRedSkull = 10 weeklyFragsToRedSkull = 30 monthlyFragsToRedSkull = 70 dailyFragsToBlackSkull = dailyFragsToRedSkull weeklyFragsToBlackSkull = weeklyFragsToRedSkull monthlyFragsToBlackSkull = monthlyFragsToRedSkull dailyFragsToBanishment = dailyFragsToRedSkull weeklyFragsToBanishment = weeklyFragsToRedSkull monthlyFragsToBanishment = monthlyFragsToRedSkull blackSkulledDeathHealth = 40 blackSkulledDeathMana = 0 useBlackSkull = true useFragHandler = true advancedFragList = false -- Banishments notationsToBan = 3 warningsToFinalBan = 4 warningsToDeletion = 5 banLength = 7 * 24 * 60 * 60 killsBanLength = 8 * 24 * 60 * 60 finalBanLength = 30 * 24 * 60 * 60 ipBanishmentLength = 1 * 24 * 60 * 60 broadcastBanishments = true maxViolationCommentSize = 200 violationNameReportActionType = 2 autoBanishUnknownBytes = false -- Battle worldType = "pvp" protectionLevel = 1 pvpTileIgnoreLevelAndVocationProtection = true pzLocked = 50 * 700 huntingDuration = 60 * 1000 criticalHitChance = 7 criticalHitMultiplier = 1 displayCriticalHitNotify = false removeWeaponAmmunition = false removeWeaponCharges = false removeRuneCharges = "no" whiteSkullTime = 5 * 10 * 100 noDamageToSameLookfeet = false showHealingDamage = false showHealingDamageForMonsters = false fieldOwnershipDuration = 5 * 1000 stopAttackingAtExit = false oldConditionAccuracy = false loginProtectionPeriod = 10 * 1000 deathLostPercent = 10 stairhopDelay = 2 * 1000 pushCreatureDelay = 2 * 1000 deathContainerId = 1987 gainExperienceColor = 215 addManaSpentInPvPZone = true squareColor = 0 allowFightback = true -- Connection config worldId = 0 ip = "baiakcrazy.servegame.com" bindOnlyConfiguredIpAddress = false loginPort = 7171 gamePort = 7172 adminPort = 7171 statusPort = 7171 loginTries = 10 retryTimeout = 5 * 1000 loginTimeout = 60 * 1000 maxPlayers = 893 motd = "Bem Vindo ao Baiak Crazy!" displayOnOrOffAtCharlist = false onePlayerOnlinePerAccount = true allowClones = false serverName = "Baiak 8.60" loginMessage = ".:: Bem Vindo ao Baiak Crazy! Tenha um bom jogo!" statusTimeout = 5 * 60 * 1000 replaceKickOnLogin = true forceSlowConnectionsToDisconnect = false loginOnlyWithLoginServer = false premiumPlayerSkipWaitList = false -- Database sqlType = "sqlite" sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "" sqlDatabase = "theforgottenserver" sqlFile = "forgottenserver.s3db" sqlKeepAlive = 0 mysqlReadTimeout = 10 mysqlWriteTimeout = 10 encryptionType = "plain" -- Deathlist deathListEnabled = true deathListRequiredTime = 1 * 60 * 1000 deathAssistCount = 19 maxDeathRecords = 5 -- Guilds ingameGuildManagement = true levelToFormGuild = 8 premiumDaysToFormGuild = 0 guildNameMinLength = 4 guildNameMaxLength = 40 -- Highscores highscoreDisplayPlayers = 20 updateHighscoresAfterMinutes = 3 -- Houses buyableAndSellableHouses = true houseNeedPremium = true bedsRequirePremium = true levelToBuyHouse = 100 housesPerAccount = 0 houseRentAsPrice = false housePriceAsRent = false housePriceEachSquare = 1000 houseRentPeriod = "never" houseCleanOld = 0 guildHalls = false -- Item usage timeBetweenActions = 200 timeBetweenExActions = 1000 checkCorpseOwner = true hotkeyAimbotEnabled = true maximumDoorLevel = 500 -- Map mapName = "Baiak Yurots" mapAuthor = "Luiz Baiak #Facebook." randomizeTiles = true useHouseDataStorage = false storeTrash = true cleanProtectedZones = true mailboxDisabledTowns = "-1" -- Startup defaultPriority = "high" niceLevel = 5 coresUsed = "-1" optimizeDatabaseAtStartup = true removePremiumOnInit = true confirmOutdatedVersion = false -- Muted buffer maxMessageBuffer = 4 bufferMutedOnSpellFailure = false -- Miscellaneous allowChangeOutfit = true allowChangeColors = true allowChangeAddons = true disableOutfitsForPrivilegedPlayers = false bankSystem = true saveGlobalStorage = true displaySkillLevelOnAdvance = false spellNameInsteadOfWords = false emoteSpells = false promptExceptionTracerErrorBox = true storePlayerDirection = false monsterLootMessage = 3 monsterLootMessageType = 25 separateViplistPerCharacter = false -- Ghost mode ghostModeInvisibleEffect = false ghostModeSpellEffects = true -- Limits idleWarningTime = 14 * 60 * 1000 idleKickTime = 1000 * 1000 * 10000 expireReportsAfterReads = 1 playerQueryDeepness = 2 maxItemsPerPZTile = 0 maxItemsPerHouseTile = 0 -- Premium-related freePremium = true premiumForPromotion = true -- Blessings blessingOnlyPremium = true blessingReductionBase = 30 blessingReductionDecreament = 5 eachBlessReduction = 8 -- Rates experienceStages = true rateExperience = 10 rateExperienceFromPlayers = 5 rateSkill = 1555 rateMagic = 5555 rateLoot = 25 rateSpawn = 50000 -- Monster rates rateMonsterHealth = 1.0 rateMonsterMana = 1.0 rateMonsterAttack = 1.0 rateMonsterDefense = 1.0 -- Experience from players minLevelThresholdForKilledPlayer = 0.9 maxLevelThresholdForKilledPlayer = 1.1 -- Stamina rateStaminaLoss = 1 rateStaminaGain = 3 rateStaminaThresholdGain = 12 staminaRatingLimitTop = 41 * 60 staminaRatingLimitBottom = 14 * 60 rateStaminaAboveNormal = 1.5 rateStaminaUnderNormal = 0.5 staminaThresholdOnlyPremium = true -- Party experienceShareRadiusX = 30 experienceShareRadiusY = 30 experienceShareRadiusZ = 1 experienceShareLevelDifference = 2 / 3 extraPartyExperienceLimit = 20 extraPartyExperiencePercent = 5 experienceShareActivity = 2 * 60 * 1000 -- Global save globalSaveEnabled = false globalSaveHour = 8 shutdownAtGlobalSave = true cleanMapAtGlobalSave = false -- Spawns deSpawnRange = 2 deSpawnRadius = 50 -- Summons maxPlayerSummons = 2 teleportAllSummons = false teleportPlayerSummons = false -- Status ownerName = "Baiiak Lula" ownerEmail = "@baiaklula - Twitter" url = "http://tibiaking.com" location = "American" displayGamemastersWithOnlineCommand = false -- Logs adminLogsEnabled = false displayPlayersLogging = true prefixChannelLogs = "" runFile = "" outLogName = "" errorLogName = "" truncateLogsOnStartup = false1 ponto- (Resolvido)CSF-Check we-re running as root
(Resolvido)CSF-Check we-re running as root
Fir3element reagiu a Nightz por uma resposta no tópico
1 pontoVocê precisa estar com o super usuário (root) para instalar. Digite: sudo su E em seguida tente instalar.1 ponto- [Pedido] Shop System Diferente?
[Pedido] Shop System Diferente?
deivaoo reagiu a Thiago Rulexz por uma resposta no tópico
1 pontohttp://www.tibiaking.com/forum/topic/55639-novo-shop-gesior-acc/ è este ai... o cara só modificou um poco1 ponto- (Resolvido)XP não muda1!1!onze!
(Resolvido)XP não muda1!1!onze!
Formigao1211 reagiu a Thiago Rulexz por uma resposta no tópico
1 pontoPoste os arquivos... Config.lua e na pasta xml stages.xml1 ponto- (Resolvido)[AJUDA] Script de chave
function onUse(cid, item, frompos, item2, topos) portafechada = 5105 -- coloque aqui o ID da porta fechada portaaberta = 5106 -- coloque aqui o ID da porta aberta uidporta = 5011 -- coloque aqui o UID da porta idkey = 2091 -- coloque aqui o id da key if item.itemid == idkey and item2.itemid == portafechada and item2.uid == uidporta then doTransformItem(item2.uid,portaaberta) addEvent(function() doTransformItem(item2.uid,portafechada) end, 1000 * 30) doRemoveItem(item.uid) elseif item.itemid == idkey and item2.itemid == portaaberta and item2.uid == uidporta then doTransformItem(item2.uid,portafechada) doRemoveItem(item.uid) else doPlayerSendTextMessage(cid,22,"Sorry, not possible.") end return 1 end1 ponto- tempo no scrpit
1 ponto60 * 1000 = 1 Minuto. 5 * 60 * 1000 = 5 Minutos.1 ponto- Cast System(Prototipo)
Cast System(Prototipo)
luanluciano93 reagiu a Yamaken por uma resposta no tópico
1 pontoAtualizado. Adicionado comandos para o caster. Fixado o problema com a senha do cast.1 ponto- Tutorial
Tutorial
komuki zkm reagiu a Caronte por uma resposta no tópico
1 pontohttp://www.tibiaking.com/forum/forum/263-tutoriais-e-dicas-de-infraestrutura/ Veja tutoriais de como abrir um servidor num VPS ( Virtual Private Server ). Qualquer dúvida pode postar no tópico de tutorial ou nesse aqui, postando o link do tutorial e a dúvida.1 ponto- Tutorial
Tutorial
komuki zkm reagiu a Caronte por uma resposta no tópico
1 pontoSem suporte fora do fórum, por favor, retire os dados para que o tópico seja movido para a seção correta. Existem vários tutoriais de como colocar online, inclusive, algumas empresas oferecem também tutoriais individuais e suporte ao cliente. O tópico foi movido para a área correta, preste mais atenção da próxima vez! Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680 Este tópico foi movido: De: "OTServ → Aprovação de Tópicos de Conteúdos" Para: "OTServ → Suporte OTServ → Suporte de OTServ Geral" Obrigado pela compreensão, espero que sua dúvida seja sanada.1 ponto- tempo no scrpit
1 ponto- (Resolvido)Ajuda em quest vip
1 pontoTente assim: local t = { storage = 34534 } function onUse(cid, item, fromPos, itemEx, toPos) if getPlayerStorageValue(cid, t.storage) <= 0 then doPlayerSendTextMessage(cid, 25, "Você agora é VIP.") setPlayerStorageValue(cid, t.storage, 1) else doPlayerSendTextMessage(cid, 25, "Você já é VIP.") end return true end1 ponto- (Resolvido)[Pedido] Recompensa Diferente
Tá querendo "copiar" o RPG mesmo em kkkkkkkkkkk @topic Você registrou em login.lua ? Como mencionou o Zipter98?1 ponto- (Resolvido)Retirar Frase
(Resolvido)Retirar Frase
Ceds reagiu a Thiago Rulexz por uma resposta no tópico
1 pontoceds... poste o index.php do seu site Utilize spoiler... Como? [-spoiler] mimimimi [-/spoiler] retire os - e no local de mimimi adicione o código1 ponto- Query q Deleta os Chars inativos sqlite
DELETE FROM `players` WHERE `name` <> 'Account Manager' AND `level` = 8 AND `lastlogin` < ( Numero que voce pegou do UNIX_TIMESTAMP() ) - 20 * 24 * 60 * 60 Se não funcionar tente trocar <> por !=1 ponto- Cliente 8.60 - Traduzido
1 pontoValeu, está parado no momento mas talvez eu volte a traduzir .1 ponto- Script RESET 10.76
Script RESET 10.76
Zzjj reagiu a Fir3element por uma resposta no tópico
1 pontoConsegui testar agora. player.cpp, troque sua função getDescription por essa:1 ponto- OTChecker - Notificações de players e servers
O servidor do OT Checker estava passando por instabilidades. Agora já deve estar tudo ok.1 ponto- Script RESET 10.76
Script RESET 10.76
Marjer reagiu a Fir3element por uma resposta no tópico
1 pontoVolta o player.lua para o que tava antes.1 ponto- Script RESET 10.76
Script RESET 10.76
Ramon Bernardo reagiu a Fir3element por uma resposta no tópico
1 pontoplayer.cpp, troque: s << "yourself."; por: int32_t value; getStorageValue(1020, value); if(value < 0) value = 0; s << "yourself [Resets: " << value << "]."; Se funcionar, me avise que faço o resto.1 ponto- Script RESET 10.76
Script RESET 10.76
Marjer reagiu a Fir3element por uma resposta no tópico
1 pontoNão tinha visto que era look em items Essa parte de look em lua é bem chato, acho que teria que refazer todas as opções... Recomendo mudar na source.1 ponto- Script RESET 10.76
Script RESET 10.76
Marjer reagiu a Fir3element por uma resposta no tópico
1 pontoDiz ai, se possível me envie uma MP pra eu ver seu post. @edit Tinha um bug no sistema de reset, usa esse: local config = { backToLevel = 8, exp = 4200, redskull = false, battle = false, pz = false, stages = { {resets = 4, level = 350, vip = 330}, {resets = 9, level = 355, vip = 335}, {resets = 14, level = 360, vip = 340}, {resets = 19, level = 365, vip = 345}, {resets = 24, level = 380, vip = 350}, {resets = 29, level = 390, vip = 355}, {resets = 34, level = 410, vip = 360}, {resets = 39, level = 430, vip = 365}, {resets = 44, level = 450, vip = 370} } } function onSay(cid, words, param) local function getResets(cid) local resets = getPlayerStorageValue(cid, 1020) return resets < 0 and 0 or resets end local function setResets(cid, count) setPlayerStorageValue(cid, 1020, getResets(cid) + count) end if config.redskull and getCreatureSkullType(cid) == 4 then return doPlayerSendCancel(cid, "Voce precisa estar sem red skull para resetar.") elseif config.pz and not getTilePzInfo(getCreaturePosition(cid)) then return doPlayerSendCancel(cid, "Voce precisa estar em protection zone para resetar.") elseif config.battle and getCreatureCondition(cid, CONDITION_INFIGHT) then return doPlayerSendCancel(cid, "Voce precisa estar sem battle para resetar.") end local resetLevel = 0 for x, y in ipairs(config.stages) do if getResets(cid) <= y.resets then resetLevel = isPremium(cid) and y.vip or y.level break end end if getPlayerLevel(cid) < resetLevel then return doPlayerSendCancel(cid, "Voce precisa do level " .. resetLevel .. " ou mais para resetar.") end setResets(cid, 1) local guid = getPlayerGUID(cid) doRemoveCreature(cid, true) db.query("UPDATE `players` SET `level` = " .. config.backToLevel .. ", `experience` = " .. config.exp .. " WHERE `id` = " .. guid) return true end1 ponto- NPC que atende com palavras diferente de hi
NPC que atende com palavras diferente de hi
ZwhiteDog reagiu a runeraserver por uma resposta no tópico
1 pontoFala galera, Venho compartilhar com vocês minha Queen Eloise, ela responde apenas se falar Hail Queen Eloise. obs: O NPC não está com a ação de promotion, o intuito do post é apenas pra quem não sabe como alterar a maneira do NPC pegar o focus do player. No exemplo abaixo, o npc só responderá se o player falar (hail queen eloise) local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if (msgcontains(msg, 'hail') and msgcontains(msg, 'queen') and msgcontains(msg, 'eloise') and (not npcHandler:isFocused(cid))) then npcHandler:say("I greet thee, my loyal subject", cid, true) npcHandler:addFocus(cid) talkState[cid] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) No exemplo abaixo o npc responderá se o player falar oi: if ((msgcontains(msg, 'oi') and (not npcHandler:isFocused(cid))) then1 ponto- [Tutorial] Criando quest log
[Tutorial] Criando quest log
jacksonsns reagiu a Vampira por uma resposta no tópico
1 ponto*Criando quest log por Action* Como eu não achei nenhum tutorial desse por aqui resolvi criar um, neste tutorial ensinarei vocês a criar um quest log para suas quests Oque é quest log: Quest Log tem a função de armazenar as quests que você fez ou está fazendo, mostrar em que parte da QUEST você está e como seguir adiante, etc... Em data/XML abra o arquivo chamado quests.xml nele vai ter mais ou menos assim: Entendendo: Vermelho = Nome da sua Quest Verde = Storage ID da Quest que vai aparecer no Quest Log Azul = Numéro de Início da Quest Negrito = Nome da Missão Rosa = Storage da Missão Laranja = Valor de Início da Missão Marrom = Valor de Finalização Preto = Descrição da Missão Bom, agora que nós já entendemos o que cada coisa faz, podemos dar continuidade com o SCRIPT. aonde estáNome da Quest você deve colocar o Nome que vai aparecer no Quest Log, depois que você inseriu o nome da sua Quest você deve ir na pasta data/actions/scripts e achar o arquivo .lua da sua Quest, nele você apertaCTRL+F e depois digita isso aqui: Depois que você encontrar este comando clique em Cancelar, depois vai ter mais ou menos isso: Exemplo: Relembrando que a cor Verde é o nosso Storage ID e o Azul é o nosso Comando de Início Agora que nós achamos o nosso Storage ID e o nosso Comando de Início podemos preencher a primeira linha da nossa Quest assim: Explicando um pouco para poder continuarmos com nosso Tutorial, uma quest é composta de Storages Values, cada movimento que você avança em sua Quest é dado um Storage Value novo. EX: Você pega a Quest (Ganhou seu primeiro Storage Value), Você abriu o Baú (Ganhou seu Storage Value Final.). Isso quando você está fazendo a Quest por Action. Então nós entendemos que na primeira linha da Quest nós precisamos por o Value de quando você pega a Quest. Agora continuando com o SCRIPT... Nós vimos que o nosso Storage ID era 1 e o nosso Comando de Início era 1, então nós acabamos de preencher a primeira linha com os números que encontramos. Agora nós vamos para a segunda linha, primeiramente você deve colocar o nome da sua missão, dai você me pergunta: - Nós já não colocamos o nome da nossa Quest? Resposta: Sim, nós colocamos o NOME DA QUEST agora vamos colocar o NOME DA MISSÃO, ou seja, aqueles nomes que fica no retângulo de cima quando você da SHOW na QUEST, aquilo é uma Missão. Bom, depois que você colocou o Nome da sua Missão, como eu havia explicado antes sobre Storages Values, nós devemos pegar agora o nosso primeiro Storage Value novamente e o nosso primeiro Comando de início, ficando assim: Pronto, nós preenchemos o nosso StorageValue e o nosso Comando de Início agora nós precisamos inserir o valor de término, depois que você pega o Baú (como expliquei ali em cima) você recebe o seu segundo Storage Value digamos que o meu seja assim: Observe que o Storage Value de quando você pega o Baú tem 2 em vez de 1, isto porque o 2 é o número de encerramento da missão, então nós devemos colocar assim na segunda linha: Resumindo, a nossa missão começa logo quando você recebe a missão do NPC e ela se completa quando você abre o Baú. Agora que a parte mais difícil já foi, vamos para a parte mais fácil do nosso SCRIPT, a Descrição da missão (a frase que aparece no quadro de baixo). Esse é o número da descrição, no caso nós colocamos apenas uma Missão então seria uma Descrição, se você colocar 2 Missão, você vai colocar e na outra você vai colocar depois da nossa missionstate tudo que devemos fazer é colocar nossa descrição onde está "Descrição da Missão.", ficando assim: Lembrando que nunca se deve usar carácteres especiais, como: Terminamos aqui nosso tutorial espero que tenham gostado Creditos: meu Inspiração: joaovbz1 ponto- [DOWNLOAD] Tibia Resident Evil 8.54
[DOWNLOAD] Tibia Resident Evil 8.54
murilo.cvl reagiu a danilo belato por uma resposta no tópico
1 pontoos link para baixa n ta pegano podia arruma eles1 ponto- [DOWNLOAD] Tibia Resident Evil 8.54
[DOWNLOAD] Tibia Resident Evil 8.54
murilo.cvl reagiu a Yzon por uma resposta no tópico
1 pontoEu não consigo baixar o client, tem como disponibilizar um novo link? VLW1 ponto- [PEDIDO] QUERIA O SERVER E O CLIENT DO [NARUTIBIA ROBINHOOD]
-Servidor 1.8 : http://www.mediafire.com/?sf8yrlmxo4qxak7 -Client Descompilado : http://www.mediafire.com/?tddq5l6cvg5dd1a -Sources [by: Fireelement][Editado por Christian letti para funfar em ubuntu 12.0] + Site ModernAcc : http://www.4shared.com/rar/ASlDaC9m/Stigal_e_Beeki_-_Source_NTO_Sh.html? Créditos pelo Servidor: Robinhood Ajudei ? da um Gostei aê1 ponto- [Resolvido] [Erro] - Duplicate uniqueID
Na verdade não e um erro e um aviso '-' vai no RME e vai em Search UniquesID acha as duas ou mais Uniques q tão com essa id apaga uma c não serve pra nada ou muda no script Mais mano creio q e uma alavanca da poi no caso ai acho q conheco o mapa tinha a mesma unique duplicada k olha ae '1 ponto- [Gesior Acc] Pagina character.php estilizada com HP, MANA e etc
[Gesior Acc] Pagina character.php estilizada com HP, MANA e etc
ZwhiteDog reagiu a PaulinhoAraujo por uma resposta no tópico
1 pontoxD1 pontoLíderes está configurado para São Paulo/GMT-03:00 - (Resolvido)XP não muda1!1!onze!
Informação Importante
Confirmação de Termo