Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/29/17 em %
-
Quando seu servidor passa a ter um pouco mais de visibilidade, todo o cuidado é pouco, ainda mais com essa onda de "TEM VAGAS" por aí. Coisas pequenas podem afastar tanto jogadores atuais como aqueles que viriam a se interessar por seu jogo. Uma equipe incompetente pode ser um desses motivos. No TFS, o nome de quem responde o report é exibido como gamemaster, por padrão: Assim fica difícil evitar alguns problemas, inclusive para os jogadores provarem alguma quebra de conduta. Servidores como a PxG notaram isso e fizeram uma alteração para exibir o nome do gamemaster em questão: pra isso, basta ir até o arquivo protocolgame.cpp e procurar por "Gamemaster": switch(type) { case SPEAK_CHANNEL_RA: msg->putString(""); break; case SPEAK_RVR_ANSWER: msg->putString("Gamemaster"); break; default: msg->putString(!creature->getHideName() ? creature->getName() : ""); break; } substituindo por creature->getName() ficando: switch(type) { case SPEAK_CHANNEL_RA: msg->putString(""); break; case SPEAK_RVR_ANSWER: msg->putString(creature->getName()); break; default: msg->putString(!creature->getHideName() ? creature->getName() : ""); break; } então é só compilar, pronto!2 pontos
-
Apaga isso do script item:remove(1)2 pontos
-
3 Passos para divulgar seu OTServ de graça!
samlecter reagiu a Administrador por um tópico no fórum
PRECISANDO DE MAIS PLAYERS? E se eu te disser que em 3 passos simples você engaja um marketing certeiro para o seu servidor de GRAÇA? É sério, você não precisa clicar em nenhum anúncio ou pagar qualquer centavo. Hoje, graças à forte comunidade brasileira de open tibia, você pode ter seu ATS de tibia com mais de 1000 players, se seguir o rumo certo. Tirando os gastos com a hospedagem do servidor (da qual recomendamos a utilização da otpanel) você normalmente tem gastos com promotes no facebook, compra de banners em sites, pagamentos na lista .org para não ser banido... aquela mesma historinha de sempre. Vamos direto ao ponto! 1 Tendo o servidor online, sem bugs e pronto para lançamento: faça login com seu facebook na otserv-list.com (é 100% seguro e seu e-mail não é compartilhado com ninguém). Clique aqui para logar na otserv-list.com. 2 Agora que está logado na lista, o próximo passo é cadastrar o seu servidor gratuitamente. Para fazer isto, clique no botão visível no topo do site ou acessando o painel de controle, veja as imagens: 3 Estamos quase lá, seu servidor já está cadastrado e recebendo novos players. Agora o próximo passo é expandir sua divulgação, mostrando um pouco mais do servidor aos players. Você pode editar a vontade a descrição do seu servidor na otserv-list.com, mas não da pra adicionar imagens ou vídeos. Não tem problema, basta colar lá na descrição o link de um tópico que você vai criar aqui: http://www.xtibia.com/forum/forum/1179-otservlist/?do=add. Para isso, você precisará de uma account no xtibia, leva menos de 1 minuto para criar! Compre um promote especial na lista e receba 15% de desconto na compra de um anúncio no xtibia. Fale com: Contato@xtibia.com1 ponto -
Boa noite galera Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros. Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui). Então vamos lá. Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros. Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml: <event type="think" name="monsters" event="script" value="monsters.lua"/> <event type="attack" name="monstersatt" event="script" value="monsters.lua"/> Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque: Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem. Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag: <script> <event name="minionatt"/> <event name="minion"/> </script> Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos: O código está bem auto explicativo. Qualquer dúvida me avisem. Espero que gostem. Abraços,1 ponto
-
Sim era esse o problema acabei deixando o servidor em sqlite mesmo por um tempo até que eu tenha mais tempo para mexer no site. Obrigado por tentar ajudar.1 ponto
-
[Resolvido] [PEDIDO] Invasão automática e aleatória
Nogard reagiu a jeriposcleide por uma questão
Valeu xD REP+ Duvida Sanada, podem fechar o topico!1 ponto -
[Resolvido] [PEDIDO] Invasão automática e aleatória
jeriposcleide reagiu a Nogard por uma questão
local configInv = {msg = "A criatura |MONSTER| foi sumonada!", pos = {{x = 95, y = 122, z = 7}, {x = 99, y = 122, z = 7}, {x = 95, y = 122, z = 7}}, monster = {"Demon", "Hydra", "Dragon"}}function onThink(interval, lastExecution) local randomMonster = configInv.monster[math.random(#configInv.monster)] local msg = string.gsub(configInv.msg, "|MONSTER|", randomMonster) doBroadcastMessage(msg) doCreateMonster(randomMonster, configInv.pos[math.random(#configInv.pos)] ) return trueend1 ponto -
os cara quer comparar otland mano mesma coisa que levar RPG para briga de faca kkk mas beleza na minha opinião de membro desse fórum a muitos anos eu acredito sim que o xtibia esta melhorando a cada dia falta uma caminhada ainda para voltar ao que era antes porém esta caminhando para a direção certa1 ponto
-
Acredito que o cenário de tíbia ao contrario do que muitos pensam não esta decaindo, assim como todos os jogos ele teve seu auge, mais ele entrou na sua zona de conforto, digamos de passagem. Porem a comunidade de OTservers e Derivados (não gosto muito) em relação ao fórum ficou baixa pelo motivo de que a antiga administração do fórum foi caótica para o fórum, acabou decaindo de mais a visão dos membros em relação ao fórum, abrindo brécha para a concorrência, tanto que o nosso Suporte e Conteúdos do xTibia é sim, superior!. e podemos sim fazer o fórum voltar a ser como era antes, claro, nada imediato, podemos levar alguns meses, porem temos sim condições e inúmeros métodos de reerguer a nossa comunidade, em questão ao PodCast @Frenvius, eu vou entrar com ideias assim que terminem as reformas aqui em casa, porque estou impossibilitado de realizar qualquer planejamento no momento (até domingo pelo menos). Como vejo muitos membros apenas criticando em relação ao fórum, eu gostaria também que proporcionalmente fossem dadas ideias e planos/projetos que possam ser aplicado em nosso fórum em nossa área de Soluções, eu ficaria muito feliz de ver os membros ativo em tal área. Abraços pessoal <31 ponto
-
1 ponto
-
a tabela players n abre? é isso?1 ponto
-
A não ser que você coloque uma condição nisso, vai ficar bem estranho. Atrapalharia bastante o diálogo dos jogadores.1 ponto
-
[Resolvido] como unir 2 sprites.
rafaelzera reagiu a Nogard por uma questão
Você poderia usar duas outfits pra isso, chamando a segunda no onMove.1 ponto -
nil = nada function onSay (cid, words, param) if param == nil then return doPlayerSendCancel(cid, "Escreva o parâmetro.") and false end print (param) end1 ponto
-
Não fez muito sentido essa wall pra esse cemitério! Boa sorte na próxima vez e esse telhado nao combinou muito..1 ponto
-
[NTO] Base NTO Foxter
gabrielolsen reagiu a ZiKaNiGhTh por um tópico no fórum
Ótimo servidor, parabéns!1 ponto -
Magias Com Vários Efeitos
lekomooooon reagiu a cheveko por um tópico no fórum
Olá pessoal XTibiano! Estou aqui para ensinar a vocês como criar magia com aqueles vários efeitos em UMA só! Bom, vou postar uma magia aqui, e vou explicar em partes: local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat3, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat4, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat5 = createCombatObject() setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat5, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat6 = createCombatObject() setCombatParam(combat6, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat6, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat6, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat7 = createCombatObject() setCombatParam(combat7, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat7, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat7, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat8 = createCombatObject() setCombatParam(combat8, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat8, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat8, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat9 = createCombatObject() setCombatParam(combat9, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat9, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat9, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) local combat10 = createCombatObject() setCombatParam(combat10, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat10, COMBAT_PARAM_EFFECT, 36) setCombatFormula(combat10, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15) Aqui é o CORPO da magia. Como assim o Corpo? É o EFEITO, DANO, FORMULA DE DANO da MAGIA! local combat10 = createCombatObject(): É o número do efeito da magia, ou seja, não pode ser repetido, senão a magia vai se repetir, então coloque em ordem: 1,2,3~ setCombatParam(combat10, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE): É o DANO que a magia irá dar, exemplo: Se quiser um dano de ENERGIA, você põe: setCombatParam(combat10, COMBAT_PARAM_TYPE,COMBAT_ENERGYDAMAGE setCombatParam(combat10, COMBAT_PARAM_EFFECT, 36): Aqui é o efeito de quando a MAGIA for ATINGIR o alvo, exemplo: Quando você soltar um Exori Flam no alvo terá uma explosão de fogo, então aqui será o efeito que você quiser. Os efeitos podem ser encontrados no Global, na pasta DATA do seu OT setCombatFormula(combat10, COMBAT_FORMULA_LEVELMAGIC, -0.1, -10, -0.3, -15): Caso seu OT seja assim, a formula é complicada, não sei direito mais ACHO que é assim: Aqui está no sentido de MAGIC LEVEL entao será, 0.1*ML, -10DANO, (MINIMO) -0.3*ML, -15DANO (MÁXIMO) (Os danos estão em -, pra dar dano NEGATIVO nos alvos), eu já prefiro por essa fórmula: function onGetFormulaValues(cid, level, maglevel) min = -(maglevel * 3) - 5 (Aqui será o dano Mínimo, ML * 3) - 5 (Já expliquei o por que do dano NEGATIVO) max = -(maglevel * 3) - 10 (Aqui será o dano Máximo, ML * 3) - 10(Já expliquei o por que do dano NEGATIVO) Muito bem! Aprendemos o corpo da Magia! Agora vamos Aprender as ÁREAS. local arr1 = { {0, 0, 0,}, {0, 2, 0,}, {0, 0, 0,}, {1, 0, 0,}, } local arr2 = { {0, 0, 0,}, {0, 2, 0,}, {1, 0, 0,}, {0, 0, 0,}, } local arr3 = { {0, 0, 0,}, {1, 2, 0,}, {0, 0, 0,}, {0, 0, 0,}, } local arr4 = { {0, 0, 0,}, {0, 3, 0,}, {0, 0, 0,}, {0, 0, 0,}, } local arr5 = { {0, 0, 0,}, {0, 2, 1,}, {0, 0, 0,}, {0, 0, 0,}, } local arr6 = { {0, 0, 0,}, {0, 2, 0,}, {0, 0, 0,}, {0, 0, 1,}, } local arr7 = { {0, 0, 0,}, {0, 2, 0,}, {0, 0, 1,}, {0, 0, 0,}, } local arr8 = { {0, 0, 0,}, {0, 2, 1,}, {0, 0, 0,}, {0, 0, 0,}, } local arr9 = { {0, 0, 0,}, {0, 3, 0,}, {0, 0, 0,}, {0, 0, 0,}, } local arr10 = { {0, 0, 0,}, {1, 2, 0,}, {0, 0, 0,}, {0, 0, 0,}, } Muito bem! No local arr1~10 = { é a ÁREA do corpo da MAGIA que fizemos acima, exemplo: No local arr10 = { É a área do Corpo da Magia "10" = local combat10 = createCombatObject() Agora vou explicar os 0,1,2,3... Bom, no 0 é onde a magia NÃO sera afetada, no 1 é o onde a magia SERÁ afetada, no 2 é onde será sintuado o PERSONAGEM, no 3 é quando a magia também cairá sobre o JOGADOR, só que ele não será afetado. Muito bem! Aprendemos a Área! Bom, agora você será "obrigado" a por isso, é apenas um complemento pros efeitos: local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) local area3 = createCombatArea(arr3) local area4 = createCombatArea(arr4) local area5 = createCombatArea(arr5) local area6 = createCombatArea(arr6) local area7 = createCombatArea(arr7) local area8 = createCombatArea(arr8) local area9 = createCombatArea(arr9) local area10 = createCombatArea(arr10) setCombatArea(combat1, area1) setCombatArea(combat2, area2) setCombatArea(combat3, area3) setCombatArea(combat4, area4) setCombatArea(combat5, area5) setCombatArea(combat6, area6) setCombatArea(combat7, area7) setCombatArea(combat8, area8) setCombatArea(combat9, area9) setCombatArea(combat10, area10) local function onCastSpell1(parameters) doCombat(parameters.cid, parameters.combat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, parameters.combat2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, parameters.combat3, parameters.var) end local function onCastSpell4(parameters) doCombat(parameters.cid, parameters.combat4, parameters.var) end local function onCastSpell5(parameters) doCombat(parameters.cid, parameters.combat5, parameters.var) end local function onCastSpell6(parameters) doCombat(parameters.cid, parameters.combat6, parameters.var) end local function onCastSpell7(parameters) doCombat(parameters.cid, parameters.combat7, parameters.var) end local function onCastSpell8(parameters) doCombat(parameters.cid, parameters.combat8, parameters.var) end local function onCastSpell9(parameters) doCombat(parameters.cid, parameters.combat9, parameters.var) end local function onCastSpell10(parameters) doCombat(parameters.cid, parameters.combat10, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var,combat1 = combat1,combat2 = combat2,combat3 = combat3,combat4 = combat4,combat5 = combat5,combat6 = combat6,combat7 = combat7,combat8 = combat8,combat9 = combat9,combat10 = combat10 } Aqui você terá que por TODAS as Áreas feitas na sua Magia! Lembrando de seguir as ordens 1,2,3,4~ Agora a duração de cada Magia No final, vamos por apenas o tempo das Magias... addEvent(onCastSpell1, 0, parameters) addEvent(onCastSpell2, 200, parameters) addEvent(onCastSpell3, 400, parameters) addEvent(onCastSpell4, 600, parameters) addEvent(onCastSpell5, 800, parameters) addEvent(onCastSpell6, 1000, parameters) addEvent(onCastSpell7, 1200, parameters) addEvent(onCastSpell8, 1400, parameters) addEvent(onCastSpell9, 1600, parameters) addEvent(onCastSpell10, 1800, parameters) end Aqui é o seguinte, quantos segundos após um efeito, outro efeito acontecerá? Aqui está assim: a cada 0.2 segundos acontece um efeito... Lembrando que: 0 = Acontecimento IMEDIATO 1000 = 1 segundo Se você quiser enfeitar mais, você pode por textos animados como: doSendAnimatedText(getThingPos(cid), "NOME!", TEXTCOLOR_COR) Agora, a magia ficaria assim: Caso queira adicionar mais algum efeito, somente precisa por +1 CORPO pra magia, +1 Área, +1 Complemento, +1 Tempo de Duração Bem pessoal! É isso! Espero que tenham entendido! Aceito críticas, xingamentos, esculachamentos e sugestões, apesar, estou querendo ajudar os novatos! Então... É isso que consigo ajudar!1 ponto