Ir para conteúdo

Omega

Marquês
  • Total de itens

    1165
  • Registro em

  • Última visita

  • Dias Ganhos

    13

Tudo que Omega postou

  1. Omega

    Chat kill no default

    function onKill(cid, target) if isPlayer(target) then doBroadcastMessage(getCreatureName(cid)..' ['..getPlayerLevel(cid)..'] matou '..getCreatureName(target)..' ['..getPlayerLevel(target)..']', 18) end return true end creaturescripts.xml <event type="kill" name="broadcast kill" script="broadkill.lua"/> registra no login.lua também registerCreatureEvent(cid, "broadcast kill")
  2. Poxa, cara, não sei se você já começou a fazer, mas eu acabei fazendo porque ele postou no meu outro tópico. Pedido atendido em http://www.xtibia.com/forum/topic/221530-sistema-de-quartel-general/
  3. function getPlayerTopMeleeSkill(cid) local skill = 0 local value = 10 for i = 1, 4 do if getPlayerSkillLevel(cid, i) > value then value = getPlayerSkillLevel(cid, i) skill = i end end return {skill = skill, value = value} end function onAdvance(cid, skill, oldLevel, newLevel) if not isKnight(cid) then return true end if getPlayerTopMeleeSkill(cid).skill > 3 then return true end local weap = {7415, 7390, 7434} if skill == 8 and newLevel >= 60 and getPlayerStorageValue(cid, 876125) == -1 then local topskill = getPlayerTopMeleeSkill(cid) if doPlayerAddItem(cid, weap[topskill.skill], 1, false) then doPlayerSendTextMessage(cid, 25, "Parabens, voce ganhou uma arma especial por passar do level 60!") setPlayerStorageValue(cid, 876125, 1) end end return true end
  4. Omega

    Script Arena

    Em creaturescripts/scripts, cria um arquivo chamado arena_pvp.lua com esse código: local pos1 = {x=111, y=222, z=7} -- Posição do canto superior esquerdo local pos2 = {x=222, y=333, z=7} -- Posição do canto inferior direito local exit = {x=231, y=444, z=7} -- Posição de saída da arena function onPrepareDeath(cid, killers) if isInArea(getThingPos(cid), pos1, pos2) then doTeleportThing(cid, exit) doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true) doRemoveConditions(cid, false) if isPlayer(killers[1]) then doPlayerSendTextMessage(cid, 25, 'You have defeated '..getCreatureName(cid)..'.') doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were defeated by '..getCreatureName(killers[1])..'.') end return false end return true end Em creaturescripts.xml, adicione: <event type="preparedeath" name="PVP Arena" event="script" value="arena_pvp.lua"/> Em creaturescripts/scripts, abra o login.lua e adicione perto dos demais registerCreatureEvent: registerCreatureEvent(cid, 'PVP Arena')
  5. Adorei a ideia, espero que vá pra frente e vocês ponham online. Assim que abrirem um test server aberto, avisem por favor que eu tô ansioso pra ver como isso vai ficar!
  6. Cara, explique melhor da próxima vez. Como não entendi exatamente o que você queria, fiz opção pra duas checagens: se o cara está em tal posição e se o cara tem tal storage. Basta colocar true no lugar do false que você quer checar e preencher adequadamente. Se não quiser checar nada e sempre teleportar quando o cara for logar, é só deixar tudo false. Salve como logoutteste.lua em creaturescripts/scripts function onLogout(cid) local checkpos = false -- Checar se o cara está na posição abaixo? local pos = {x=123, y=321, z=7} local checkStorage = false -- Checar se o cara tem o valor do storage abaixo? local storage = 66123 local stg_value = 1231 local TP_position = {x=160, y=50, z=7} -- Posição para a qual o jogador será enviado if checkpos then pos = getThingPos(cid) if pos.x == checkpos.x and pos.y == checkpos.y and pos.z == checkpos.z then doTeleportThing(cid, TP_position) end return true elseif checkStorage then if getPlayerStorageValue(cid, storage) == stg_value then doTeleportThing(cid, TP_position) return true end return true end doTeleportThing(cid, TP_position) return true end Creaturescripts.xml: <event type="logout" name="TesteLogout" event="script" value="logoutteste.lua"/> OBS.: não precisa registrar no login.lua por ser evento de logout
  7. function onStepIn(cid, item, position, fromPosition) if getPlayerStorageValue(cid, 666) >= os.time() then return true end doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, 'Apenas jogadores VIP podem passar.') return true end
  8. Pedido atendido: Sistema de Quartel General
  9. Atendendo ao pedido do LourencoTibia (http://www.xtibia.com/forum/topic/221228-peca-aqui-o-seu-sistemaevento/page-2#entry1563530) Explicação: Você cria uma casa. Através dessa casa você dá acesso a um lugar (preferivelmente pequeno). Nesse lugar você coloca uma alavanca e um quadro negro, placa, ou coisa do tipo. Ao puxar a alavanca, será ativado um respawn de um determinado monstro (configurável), limpando todos os outros monstros que existem nessa área, enviando uma msg para o jogador sobre qual respawn está ativado. Ao olhar para a placa/quadro/etc (você escolhe), o jogador receberá uma janela com os monstros que podem ser ativados e qual está ativo no momento. Códigos: Salve em actions/scripts como qgaction1.lua Salve em creaturescripts/scripts como qglook1.lua: TAGs Em creaturescripts.xml, adicione:<event type="look" name="QGboard1" event="script" value="qglook1.lua"/> Em actions.xml, adicione:<action actionid="> actionid de sua escolha <" script="qgaction1.lua"/> Em login.lua, adicione (próximo aos demais registerCreatureEvents)registerCreatureEvent(cid, "QGboard1") Configurações (preste atenção ou não irá funcionar) local aid = 75000 Aqui você deverá adicionar um actionid (diferente para cada QG) no quadro/placa/etc (pelo editor do mapa) e ele deverá ser o mesmo daquilocal monsters = { [1] = 'demon', [2] = 'vampire', [3] = 'dragon lord', [4] = 'hydra', } Aqui você deve configurar, ordenadamente, os monstros que estarão disponíveis do Quartel Generallocal posi = {x=49, y=217, z=7} local posf = {x=90, y=271, z=7} Aqui você deve configurar a posição inicial (canto superior esquerdo) e a posição final (canto inferior direito) do seu QGlocal gstorage1 = 8671 local gstorage2 = 8672 Aqui você deve colocar números aleatórios e diferentes em cada QG (lembre-se de editar nos dois arquivos e deixe assim para o primeiro QG)local respPos = { [1] = {x=57, y=223, z=7}, [2] = {x=79, y=223, z=7}, [3] = {x=56, y=224, z=7}, [4] = {x=82, y=242, z=7}, } Aqui você insere cada uma das posições dos spawns, dentro da área em que os monstros serão criadosO processo deverá ser repetido inteiro para cada novo QG, mudando, além das configurações, os nomes QGboard1, qglook1, qgaction1 para o número do QG que você está fazendo! Screenshot
  10. Minha namorada dá aula de violão na igreja dela e todo ano ela realiza um festival para que os alunos tenham uma chance de tocar para os familiares. O festival não tem fins lucrativos, é organizado no auditório de uma biblioteca pública (ou seja, de graça) e esse ingresso serve apenas para ajudar a pagar a decoração e como uma lembrança para os alunos (custará 2 reais cada um). Então resolvi pedir aqui um fundo legal aqui pra ajudar ela. [ ] Avatar / [ ] Sign / [Background] Outro. Qual? Fundo Ingresso do IV Festival do Violão Tema: Violão/Música Tamanho: 460 x 210 Tipografia: IV Festival do Violão Preferência (OPCIONAL/Qual designer que você prefere que atenda seu pedido): Informação Adicional: preferivelmente usar as cores azul/preto Agradeço desde já a quem puder ajudar OBS.: pra vocês ficarem com pena e ajudarem, vou postar o ingresso de 2011 (ela fez no powerpoint e paint)
  11. Omega

    PokeShow W.O

    Parabéns aí pra equipe! Bom projeto
  12. Até que ficou bem legal. Eu tinha pensado em usar um addEvent checando storage, mas não tinha imaginado uma maneira de impedir ambas as magias e achei que atrapalharia mais do que vale a pena, se usasse um espaço de tempo considerável. 15ms não mudam quase nada (mas faz com que a probabilidade disso acontecer seja quase nula). O problema é que só funciona com magias de target também e além disso, o usuário pediu pra dar dano nos dois, mas isso eu sei que dá pra ajeitar fácil. Encontrei um erro: Um deles deveria ser toPosition doSendDistanceShoot(fromPosition, midPosition, CONST_ANI_FIRE) doSendDistanceShoot(fromPosition, midPosition, CONST_ANI_FIRE) E a parte de calcular a posição do meio fica mais simples assim: x = (fromPosition.x + toPosition.x) / 2, y = (fromPosition.y + toPosition.y) / 2, z = fromPosition.z, E afinal, eu não errei. É uma questão de interpretação, você alterou as magias pra checar se o cara já usou, não se ele vai usar. O que eu quis dizer é que, em outros jogos, algumas magias demoram pra atingir o adversário, o que não é o caso do tibia, tornando IMPOSSÍVEL checar se o jogador vai ser atingido por uma magia em andamento, não uma magia "atrasada".
  13. E eu achando que aquele meu pacote tinha sido deixado de lado... aí só postam pra reclamar de erro ou ajuste. Que tal um 'Po, cara, valeu, vou usar aqui', só pra saber que tem gente usando, entende? function onUse(cid, item, fromPos, item2, toPos) local wallPos = {x=984, y=1021, z=9} local safePos = {x=984, y=1022, z=9} -- Caso existam itens ou jogadores no momento em que a wall deve ser recriada, essa é a posição para a qual eles serão movidos local wallId = 12902 -- itemid da parede que será removida local i = 0 for stack = 1, 254 do if getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).itemid == wallId then doRemoveItem(getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).uid, 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"A parede foi removida, você tem 5 segundos para sair daqui.") i = i + 1 end end if i == 0 then doSendMagicEffect(getCreaturePosition(cid), 2) return true elseif item.itemid % 2 == 0 then doTransformItem(item.uid, item.itemid-1) else doTransformItem(item.uid, item.itemid+1) end for t = 1, 3 do addEvent(doPlayerSendTextMessage, t * 1000, cid, 27, 'Corra, faltam '..(5-t)..' segundos para a passagem fechar.') end addEvent(doPlayerSendTextMessage, 4000, cid, 27, 'Corra, falta 1 segundo para a passagem fechar!') addEvent(doClosePassage, 5000, wallPos, safePos, wallId) return true end function doClosePassage(wallPos, safePos, wallId) for stack = 1, 254 do if getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).uid > 0 then doTeleportThing(getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).uid, safePos) end end doCreateItem(wallId, 1, wallPos) return true end Isso aí deve funcionar
  14. Salve esse código (creaturescripts/scripts/arenaitems.lua) function getPlayerTopMeleeSkill(cid) local skill = 0 local value = 10 for i = 1, 4 do if getPlayerSkillLevel(cid, i) > value then value = getPlayerSkillLevel(cid, i) skill = i end end return {skill = skill, value = value} end function onAdvance(cid, skill, oldLevel, newLevel) local weap = {7415, 7390, 7434} if skill == 8 and newLevel >= 60 and getPlayerStorageValue(cid, 876125) == -1 then local topskill = getPlayerTopMeleeSkill(cid) if doPlayerAddItem(cid, weap[topskill.skill], 1, false) then doPlayerSendTextMessage(cid, 25, "Parabens, voce ganhou uma arma especial por passar do level 60!") setPlayerStorageValue(cid, 876125, 1) end end return true end Adicione essa tag em creaturescripts.xml <event type="advance" name="AdvanceItems" event="script" value="arenaitems.lua"/> E isso em login.lua (embaixo dos outros registerCreatureEvent) registerCreatureEvent(cid, "AdvanceItems") E seja feliz =D
  15. Como o ProfissaoPK disse, você deve editar aqui: function onGetFormulaValues(cid, level, skill, attack, factor)local skillTotal, levelTotal = skill + attack * 8, level / 9return -(skillTotal * 2.4 + levelTotal), -(skillTotal * 9 + levelTotal)end Deixando mais simples: function onGetFormulaValues(cid, level, skill, attack, factor)-- Voce pode usar os parâmetros level, skill e attack (respectivamente: level do jogador, maior melee skill e ataque da arma)local formula = (skill + level + attack) * 0.8 -- Aqui voce edita o dano que a magia vai dar a partir desses parâmetrosreturn formula*-0.7, formula*-1.3end Tópico movido para a seção de dúvidas e pedidos resolvidos.
  16. Pedido atendido aqui: Ultimate Survival Cara, o que você quer é aquele coal basin que pega scarab coin do tibia. É um movement bem tranquilo, crie um tópico próprio que eu ou algum outro te ajudará. Queria deixar esse tópico apenas para eventos/sistemas... Eu vi seu tópico sobre esse pedido e ainda não consegui resolver esse problema. Por favor, não volte a postar duas vezes a mesma coisa e aqui não é espaço para pedidos desse tipo, pois você pode simplesmente criar (como já criou) seu próprio tópico. Em breve vou tentar atender ao seu primeiro pedido. Quanto ao segundo, aqui não é o espaço para edição de scripts já feitos.
  17. A pedido do vinnevinne, fiz esse mod, daí achei bem legal e resolvi postar fora do tópico Peça Aqui o Seu Sistema/Evento. Informações O jogador irá puxar uma alavanca, caso não tenha usado em um certo tempo (configurável) e não haja ninguém já dentro da arena, ele será teleportado e a arena irá iniciar em 10 segundos A arena deve ser quadrada de 10 x 10 a 12 x 12 para garantir que ocorra como planejado! Na arena, a primeira wave de monstros (configurável) será invocada após os 10 segundos. Quando o jogador matar o último monstro, ele receberá uma mensagem que a próxima wave começará em 5 segundos Caso ele chegue na última wave, ao matar o último monstro ele será teletransportado de volta ao seu templo, com uma medalha personalizada e seus prêmios (configuráveis) Caso ele morra em alguma wave, ele será teleportado para o templo, não morrerá e poderá ganhar prêmios configuráveis Todas as waves são configuráveis (prêmios, quantos e quais monstros) O máximo de monstros por wave é 55, mas não recomendo deixar acima de 30 Testado em 8.6 Código Arquivo Ultimate Survival.xml na pasta mods Screenshots Configuração Primeiramente, crie uma arena quadrada 12 x 12 no seu mapa. Evite muitas construções como pilares ou estruturas que impeçam o respawn Em seguida, pegue a posição do CANTO SUPERIOR ESQUERDO dessa arena e coloque as coordenadas aqui: posi = {x=x, y=y, z=z} Pegue a posição do CANTO INFERIOR DIREITO dessa arena e coloque as coordenadas aqui: posf = {x=x, y=y, z=z} Configurando as waves: waves = { [1] = {monsters = {'dragon', 'dragon lord'}, count = 30, reward = {exp = 0, item = 2148, amount = 1, money = 100}}, Você deve inserir os nomes dos monstros que serão invocados entre aspas (aleatoriamente), quantos serão invocados (count) e as recompensas que o jogador irá ganhar se morrer nessa wave (deixe tudo como false se não quiser que ele ganhe recompensas ao morrer nessa wave) A posição de entrada do jogador na arena deverá ser editada aqui: posc = {x=109, y=215, z=7} exhaust é o tempo que ele deverá esperar para entrar novamente na arena final_reward são as recompensas que ele ganhará ao terminar a arena Finalmente, a alavanca no mapa deverá ter action id 4599
  18. Isso é impossível, porque no tibia as magias acontecem instantaneamente, portanto, quando o jogador1 usar a primeira magia, vai acertar imediatamente o jogador2 e não tem como checar se o jogador2 planeja usar a mesma magia. Ou seja, não tem como fazer porque as magias NUNCA serão jogadas ao MESMO tempo, nem que a variação entre elas seja em alguns poucos milissegundos. Posso fazer? Ou o Oneshot faz e eu quebro a cara =P OBS.: como diz no início do tópico, qualquer um pode atender pedidos aqui, só façam o favor de avisar antes pra ninguém ficar perdendo tempo fazendo duas vezes a mesma coisa.
  19. Isso é impossível, porque no tibia as magias acontecem instantaneamente, portanto, quando o jogador1 usar a primeira magia, vai acertar imediatamente o jogador2 e não tem como checar se o jogador2 planeja usar a mesma magia. Ou seja, não tem como fazer porque as magias NUNCA serão jogadas ao MESMO tempo, nem que a variação entre elas seja em alguns poucos milissegundos.
  20. Erro meu, acho que consertei OBS.: quando for usar um script, deixa algum comentário ou curte, sei lá. É bom saber que tem gente que usa o que você fez e que não tá só de enfeite...
  21. Omega

    Teleport

    local function voltarAoNormal(pos) for stack = 1, 254 do pos.stackpos = 255 - stack if getThingFromPos(pos).itemid == 5419 then doRemoveItem(getThingFromPos(pos).uid) end endendfunction onStepIn(cid, item, position, lastPosition, fromPosition) local toPos = {x=123, y=321, z=7} -- Posição para onde o teleporte irá levar local tempo = 5 -- Em segundos para a concha voltar ao normal if item.itemid == 7552 then local itemPos = getThingPos(item.uid) doTeleportThing(cid, toPos) doSendMagicEffect(itemPos, 25) doSendMagicEffect(toPos, 25) doTransformItem(item.uid, item.itemid + 1) addEvent(doTransformItem, tempo * 1000, item.uid, 7552) doCreateItem(5419, 1, itemPos) addEvent(voltarAoNormal, tempo * 1000, itemPos) end return trueend TAG movements.xml <movevent type="StepIn" actionid="696969" script="concha.lua"/> Aí você coloca no mapa essa concha com id 7552 no mapa com o actionid 696969 (salva o código acima em movements/scripts com o nome de concha.lua) Tópico movido para a seção de dúvidas e pedidos resolvidos.
  22. @Kenny TAG globalevents.xml <globalevent name="Loteria Aleatoria" interval="180000" event="script" value="loteriarandom.lua"/> Arquivo loteriarandom.lua
  23. Cara, eu testei aqui e tá funcionando, então você tá configurando alguma coisa errada aí, até porque tá reclamando de um erro near (perto) de '<'. Sendo que no meu código não tem nenhum < ...
  24. Só se você não tiver o storage com o valor certo. Testei aqui e tá funcionando. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...