Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/26/17 em todas áreas
-
Eae Galera da Ekz Entao fiz um launcher em c# e queria compartilhar com a comunidade, o launcher e simples e serve para otclient porem tem as sources e se vc quiser editar para usar o old client fique a vontade. Link Download Launcher+Source Scan tbm fiz um video explicando como funciona obs: Para o Launcher funcionar vc prescisa por na pasta do client o .exe do launcher, o config.ini e a dll , todos estao no winrar do link de download.1 ponto
-
autotarget.xml: [LUA]<?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Auto Target System" version="1.0" author="xOtservx" enabled="yes"> <event type="login" name="AutoTargetLogin" event="script"><![CDATA[ function onLogin(cid) return registerCreatureEvent(cid, "AutoTarget") end]]></event> <event type="think" name="AutoTarget" event="script"><![CDATA[ function onThink(cid, interval) if getPlayerStorageValue(cid, 25471) ~= "on" then return true end if getCreatureTarget(cid) then return true end local monsterScreen = {} for x = -7, 7 do for y = -5, 5 do creature = getTopCreature({x = getThingPos(cid).x + x, y = getThingPos(cid).y + y, z = getThingPos(cid).z}).uid if isMonster(creature) then table.insert(monsterScreen, creature) end end end if #monsterScreen == 0 then return true end monsterTarget = #monsterScreen[1] if #monsterTarget > 1 then local type = type(getPlayerStorageValue(cid, 25472)) ~= "string" and "distancia" or getPlayerStorageValue(cid, 25471) for i = 1, #monsterScreen do if type == "distancia" then if getDistanceBetween(getThingPos(monsterScreen[i]), getThingPos(cid)) < getDistanceBetween(getThingPos(monsterTarget), getThingPos(cid)) then monsterTarget = monsterScreen[i] end elseif type == "forte" then if getCreatureMaxHealth(monsterScreen[i]) > getCreatureMaxHealth(monsterTarget) then monsterTarget = monsterScreen[i] end end end end doMonsterSetTarget(cid, monsterTarget) return true end]]></event> <talkaction words="!autotarget;/autotarget" event="buffer"><![CDATA[ function onSay(cid, words, param) if param == "on" then setPlayerStorageValue(cid, 25471, "on") return doPlayerSendTextMessage(cid, 27, "Você ligou o sistema de auto target, configure ele para !autotarget distancia ou !autotarget forte .") elseif param == "off" then setPlayerStorageValue(cid, 25471, "off") return doPlayerSendTextMessage(cid, "27, Você desligou o sistema de auto target.") elseif param == "distancia" or param "forte" then if getPlayerStorageValue(cid, 25471) ~= "on" then return doPlayerSendTextMessage(cid, "27, Você precisa estar com o sistema de auto target ligado (!autotarget on)") end setPlayerStorageValue(cid, 25472, param) return doPlayerSendTextMessage(cid, "27, Você trocou o modo do auto target para " .. param .. ".") end end]]></talkaction> </mod>[/LUA] coloque o xml na pasta mods do ot. comandos:1 ponto
-
Client Próprio [8.54 - 10.XX]
lekomooooon reagiu a Frenvius por um tópico no fórum
Fala galero, me deparei com um pessoal pedindo ajuda com isso e vi que não tinha tutorial aqui no fórum ainda, e já que muita gente ainda usa isso, ficadicae: Passo 1: Primeiramente, será necessário dois IPs direcionando para o ip do seu servidor, um com 17 caracteres e outro com 19. Tipo esses: ot1.servegame.com (17 caracteres) otserv.servegame.com (19 caracteres) Você pode utilizar o noip.com para isso Passo 2: Você precisará do Notepad++, não tem ele instalado ainda? No problem, só clicar no link ai e baixar o/ Depois que você baixar e instalar, abra o Tibia.exe que deseja editar com o Notepad++ e aperte Ctrl+F. Procure pelos IPs abaixo (um de cada vez): login01.tibia.com login02.tibia.com login03.tibia.com login04.tibia.com login05.tibia.com Substitua todos esses IPs do tibia pelo seu IP de 17 caracteres criado no passo 1. Feito isso, procure pelos IPs abaixo (novamente, um de cada vez ? tibia01.cipsoft.com tibia02.cipsoft.com tibia03.cipsoft.com tibia04.cipsoft.com tibia05.cipsoft.com Substitua todos esses IPs do tibia pelo seu IP de 19 caracteres criado no passo 1. Passo 3: Beleza, terminando de substituir os IPs, vai faltar só substituir a RSA key do Client Procure por: 132127743205872284062295099082293384952776326496165507967876361843343953435544496682053323833394351797728954155097012103928360786959821132214473291575712138800495033169914814069637740318278150290733684032524174782740134357629699062987023311132821016569775488792221429527047321331896351555606801473202394175817 E substitua por: 109120132967399429278860960508995541528237502902798129123468757937266291492576446330739696001110603907230888610072655818825358503429057592827629436413108566029093628212635953836686562675849720620786279431090218017681061521755056710823876476444260558147179707119674283982419152118103759076030616683978566631413 Pronto, salve o arquivo e teste Qualquer problema/duvidas, comentem!1 ponto -
getStringBar(Vr,Vm,quant) - Barra de progresso
GOD Vitor reagiu a loladobolado por um tópico no fórum
Eaí. Estava criando um sistema de pet por channels, daí senti que seria legal fazer com que tivesse uma barrinha de experiência Ficará tipo assim: (40 quadradinhos) O legal é que dá pra você modificar a largura da barrinha, mas manter os mesmos valores, como na foto: (60 quadradinhos) Daí você pode modificar os valores, como por exemplo, 7 de 10 em 20 quadradinhos: A função é a seguinte: function getStringBar(Vr,Vm,quant) local retorno = {barra,min=Vr,max=Vm,porcentagem=math.floor((Vr/Vm)*100)} local Q = quant/Vm Vr = Vr*Q Vm = Vm*Q str = "[" local trigger = false for i = 1, Vm do if i <= Vr then str = str .. "= else if not trigger then str = str .. "|" trigger = true end str = str .. "-" end end retorno.barra = str..]" return retornoend Ela retornará o seguinte array: retorno = { barra (que será a barrinha inteira, tipo [=====|----------] min (que é o valor usado, como o 7 da terceira foto) max (o valor máximo usado, como o 10 da terceira foto) porcentagem (que é a porcentagem do 7 para o 10, no caso 70%) } Exemplo de uso: local gsb = getStringBar(10,20,50)doPlayerSendTextMessage(cid, "4", gsb.min.." "..gsb.barra.." "..gsb.max.." ("..gsb.porcentagem.."%)") Que dará o seguinte resultado: Daí vai de sua imaginação! Esclarecendo: > getStringBar(valor,valor máximo,quantidade de quadradinhos) Esta função não é muito simples de se usar, mas quis deixar retornando o array mesmo, até pra aumentar as possibilidades de uso. Talvez ela seja uma função daquelas que você usa uma vez a cada vinte códigos, mas sempre é bom deixá-la por perto. Valeu!1 ponto -
não tenho base otp 2.5 mas sim a bolz 2.5 que é otima para projeto ! SERVER:https://www.4shared.com/zip/1ujFRZKAba/PokeXJirachi.html CLIENTE: https://www.4shared.com/rar/U23fm86xba/Client__OTC_bolz_25__Sam.html1 ponto
-
@Jair Kevick Até onde me lembro foi você que postou esse servidor.1 ponto
-
pode ser nesse código mesmo, bem no início: Reset_rate = 1000001 ponto
-
As imagens em si ficam em data/images/ui, como janelas e progressbar. Mas, pra uma alteração mais detalhada você precisaria mexer no .otui de cada module em questão.1 ponto
-
Se a intenção é só adicionar vida, você precisa remover essas linhas: local off = pokes[pokemon].offense * Reset_rate * Resetslocal def = pokes[pokemon].defense * Reset_rate * Resetslocal agi = pokes[pokemon].agility * Resetslocal spatk = pokes[pokemon].specialattack * Reset_rate * Resets doItemSetAttribute(myball.uid, "offense", getItemAttribute(myball.uid, "offense") + off)doItemSetAttribute(myball.uid, "defense", getItemAttribute(myball.uid, "defense") + def)doItemSetAttribute(myball.uid, "speed", getItemAttribute(myball.uid, "speed") + agi)doItemSetAttribute(myball.uid, "specialattack", getItemAttribute(myball.uid, "specialattack") + spatk) Sobre o erro, esse: Reset_rate provavelmente era uma variável usada na boost stone e você apenas alterou o nome. Logo, ela não existe. Nessa linha: local vit = pokes[pokemon].vitality * Reset_rate * Resets O resultado seria o valor existente em "pokes" (a vitalidade do Pokémon) vezes o valor atual de resets + 1 (o valor que está sendo adicionado), vezes o bônus ganho. Crie uma variável chamada Reset_rate com o valor de vitalidade que você quer seja adicionado a cada "reset".1 ponto
-
Sim, mas a quantia de caracteres deve ser exata. Você pode usar o Insert pra preencher os espaços restantes com valor nulo.1 ponto
-
ShowOff Arisen Trapzer
Arisen Trapzer reagiu a Sexyboyy por um tópico no fórum
Parabéns! apesar de que precisa melhorar luz / sombra, ficou muito bom1 ponto -
Quest_reset.lua function onStepIn(cid, item, position, fromPosition)local TotReset = getPlayerStorageValue(cid,2310)if TotReset >= 10 thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Boa sorte na quest!!!")elsedoTeleportThing(cid, fromPosition)doSendMagicEffect(getCreaturePos(cid), 1)doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Voce precisa ter 10 {Resets} para passar!!!")endreturn trueend Movements.xml <movevent type="StepIn" actionid="32000" event="script" value="Quest_reset.lua"/> Adicione o Action Id no piso com o Editor de mapas ( RME ) e so quem tem 10 resets ira passar pelo piso. !1 ponto
-
Well, I know some of these sprites, they're cool but a bit old.1 ponto
-
[Removido] Pokémon Hp - Open Source
aleknpto reagiu a ClaudioMar231o por um tópico no fórum
Não da pra baixar o cliente nem o Server + source pelo MEGA, Peço que resolva ou Exclua o Tópico.1 ponto -
ShowOff Arisen Trapzer
Arisen Trapzer reagiu a America por um tópico no fórum
Muito Bom, Realmente Spritear é algo que leva tempo mais você está adiantado no tempo por ser sua primeira sprite, está incrível mesmo eu não sendo da arêa de designer/spriter eu reconheço um bom trabalho quando vejo um, continue assim, abraço. PS: O Formato PNG é o melhor para Sprites. Att: America1 ponto -
ShowOff Arisen Trapzer
Arisen Trapzer reagiu a Benny por um tópico no fórum
Rapaz, se for comparar com a primeira sprite que eu fiz cê é um profissional haha Não tenho como te ajudar muito nisso, até porque eu também não sei nada. Mas me agradou Abração!1 ponto -
Seria interessante se só membros com 50 posts+ pudessem usar a ferramenta de rep, ou algo do tipo. Não resolveria, mas amenizaria. Aliás, os avatares estão pequenos demais. xd1 ponto
-
Algumas sprites para a páscoa: Feitos para o PokePro.1 ponto
-
Curti em cara! Usou transparência?1 ponto
-
Olá eu venho trazer ao Xtibia á função OnMove, bom sem mais delongas vamos ao código. Vá em creatureevent.h e procure por: CREATURE_EVENT_DIRECTION , Embaixo do texto acima cole: CREATURE_EVENT_MOVE , Depois procure por: uint32_t executeDirection(Creature* creature, Direction old, Direction current); Embaixo do texto acima cole: uint32_t executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition); Vá em creatureevent.cpp e procure por: else if(tmpStr == "direction") m_type = CREATURE_EVENT_DIRECTION; Embaixo do texto acima cole: else if(tmpStr == "move") m_type = CREATURE_EVENT_MOVE; Depois procure por: case CREATURE_EVENT_DIRECTION: return "onDirection"; Embaixo do texto acima cole: case CREATURE_EVENT_MOVE: return "onMove"; Depois procure por: case CREATURE_EVENT_OUTFIT: return "cid, old, current"; Embaixo do texto acima cole: case CREATURE_EVENT_MOVE: return "cid, fromPosition, toPosition"; Agora encima da função: uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current) Coloque: uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition){ //onMove(cid, old, current) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamPosition(scriptstream, "fromPosition", fromPosition, 0); env->streamPosition(scriptstream, "toPosition", toPosition, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", creature->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); LuaScriptInterface::pushPosition(L, fromPosition); LuaScriptInterface::pushPosition(L, toPosition); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; }} Agora em game.cpp procure por: else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } } Embaixo do ultimo " } " cole isso: bool deny = false; CreatureEventList moveEvents = creature->getCreatureEvents(CREATURE_EVENT_MOVE); for(CreatureEventList::iterator it = moveEvents.begin(); it != moveEvents.end(); ++it) if(!(*it)->executeMove(creature, currentPos, destPos)) deny = true; if(deny) return RET_NOTPOSSIBLE; Pronto, Basta compilar e utilizar. Créditos Darkhaos (Por postar em outro fórum)Error404 (Por trazer ao Xtibia)1 ponto
-
Olá galera do Xtibia, venho hoje trazer um sistema muito útil como pode ver no Título ele remove casa dos players que não logam mais. Explicação: Sabe aqueles players filho da mãe que compram as melhores casas e não logam mais no servidor e enche a porra da casa de item pros novos players não comprar? Pois é esse sistema dara um jeito nesses safados! xD Este script é apenas um arquivo que você colocará em sua pasta mods e ele executará toda vez que o servidor for reiniciado/ligado, ou seja: Quando o servidor ligar ele irá verificar os players que não logam a X dias (configurável) e então expulsa-los da casa movendo seus items para o depot deixando a casa sem dono. Bom chega de explicação e vamos ao que interessa; Na pasta principal do servidor, onde fica a distro que roda o servidor e tudo mais, entre na pasta MODS e crie um arquivo com o nome de cleanhouses.xml e dentro coloque o seguinte codigo: <?xml version="1.0" encoding="UTF-8"?><mod name="Cleanhouses" version="1.04" author="Yan Liima-Night" contact="xtibia.com" enabled="yes"> <description> v.1.04 - Adicionado 'onlyNonPremium' configurável. Versão sem erros por favor caso não é avançado na área não modifique nada. Criado e modificado por Yan Liima Nick: [ADM] Night Este mod irá limpar casas de jogadores inativos e mover os seus itens para o depósito.explicação das configurações: days - Se o jogador não tiver logado para este número de dias de sua casa será liberado. log - true/false, é para habilitar o registro de quais casas foram limpas. file - caminho para o arquivo de log, onde os logs serão armazenados. Ignorado se 'log' definido como falso onlyNonPremium - se definido como 'true', o script irá limpar apenas as casas dos jogadores que não lougou X dias. Outras indicações: NÃO remova doSaveServer() no final, caso contrário, se o servidor parar de funciona antes que o servidor salve você vai se arrepender =) </description> <globalevent name="cleanhouses" type="start" event="buffer"><![CDATA[ local config = { days = 60, log = true, file = getDataDir() .. "/logs/cleanhouses.txt", onlyNonPremium = true } local ns_query =[[ SELECT houses.owner, houses.id as hid, houses.name as house_name ,players.name FROM houses LEFT JOIN players ON players.id=houses.owner LEFT JOIN accounts ON players.account_id=accounts.id WHERE players.lastlogin < (UNIX_TIMESTAMP() - ]] ..config.days.. [[*24*60*60) ]] ..(config.onlyNonPremium and ' AND accounts.premdays=0 ' or '')..[[ AND players.world_id =]] .. getConfigValue("worldId") local house = db.getResult(ns_query) local logs = " Houses cleaned:\n\n" if house:getID() ~= -1 then repeat logs = logs .. house:getDataString('house_name') ..", owned by " .. house:getDataString('name') .. "\n" setHouseOwner(house:getDataInt('hid'), 0) until not house:next() house:free() else logs = logs .. "There were no houses to clean." end if config.log then doWriteLogFile(config.file, logs) end addEvent(doSaveServer, 1000) ]]></globalevent></mod> Pronto, salve e feche. Toda vez que o servidor iniciar irá expulsar os players que não logam aos dias configuráveis. Como configurar: days = 60 * É o número em DIAS que o player terá que ficar sem logar para perder a casa. Aconselho a não mexer, caso queira modificar algo aconselho ser avançado na área para não causar error no sistema. Este sistema funciona em qualquer TFS. Créditos Yan Liima Bom eu tinha publicado um post igual esse faz anos so que não lembro minha conta, e pegaro meu post postaro em outro fórum que não merece ser citado com outros créditos estou apenas avisando. Te ajudei?? REP + e ficamos quites... Atenciosamente, Yan Liima Abraços!1 ponto