Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''script''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

  1. Eu consegui essa base mas não entendo nada, tipo, nada mesmo me ajudem por favor, como faço pra ver o servidor e tals ? Vem tudo separado...
  2. No meu ot tem a funçao q da usar 2 armas. mas queria impedir de usar a mesma arma. o script impediria de equipar as duas igual. Alguém pode ajudar pf ! *----* TFS 0.4
  3. Olá gente, queria pedir a vcs o seguinte, tipo, queria que ao soltar tal pokemon da ball chamasse essa função aqui especificamente para esse pokemon. sendScreanSound(cid, "Nome Do Som.mp3") tipo, essa função é de uma script de som, que ela faz com que determinada script solte um som. e é desse jeito que eu quero. tipo queria que ao soltar o pokemon Bulbasaur, ativasse essa função sendScreanSound(cid, "Bulbasaur.mp3") ai se eu soltasse um Alakazam, ativasse essa. sendScreanSound(cid, "Alakazam.mp3") e assim por diante, eu conseguir ativar essa função na goback, para ativa um som quando solta a ball, e quando volta o pokemon para ball, mas n funciona desse jeito ai que pedi, pq ele só toca o som para a ball, e n para um determinado pokemon. desculpa se n ficou muito bem explicado, se n intenderam eu posso tentar explicar de outra forma. agradeço desde já do rep+ quem me ajudar ^^
  4. Olá xtibianos! Acredito que esse seja meu primeiro tutorial feito por mim mesmo aqui no fórum, espero que gostem e aprovem Rep + Introdução: Nesse tutorial, vou lhes ensinar como instalar e configurar o sistema de PagSeguro automático, para que quando o pagamento for Aprovado pelo PagSeguro, o sistema entregar os pontos automaticamente. Testado e funcionando em Gesior e Modern Acc. Funciona para qualquer versão de Tibia, desde que seja em MySQL. Quando você for testar, pode acontecer que os pontos sejam entregues com um atraso de no máximo 5~10 minutos depois de Aprovado o pagamento, porém, geralmente os pontos são entregues NA HORA do Aprovado pagamento. Instalação: Primeiramente vamos adicionar uma tabela na sua DataBase do MySQL, Executem esta query para criar a tabela: Feito isso, vamos editar ou adicionar se você já não tiver, essas linhas no seu htdocs/config/config.php : Depois, vamos adicionar essas linhas no seu htdocs/index.php : Agora, troque todo o seu htdocs/shopsystem.php (pode variar, mas no gesior geralmente é shopsystem.php)por este: Também troque todo o seu htdocs/donate.php (pode variar, mas no gesior geralmente é donate.php) por este: Agora, crie um novo arquivo .php com o nome pag_retorno.php com este conteúdo: Por último mas não menos importante, entre no site do PagSeguro e logue, após logar, vai aparecer várias opções na parte inferior do site do PagSeguro, clique em "Retorno Automático". Nesta página, é onde você gera o seu Token PagSeguro e configura sua URL de retorno. Você deve ativar a URL de retorno, e colocar este link na URL de Retorno: Pronto, já está tudo OK, agora vou ensinar como configurar algumas partes de alguns arquivos que citei acima. Configuração Adicional: Depois que você já alterou as informações no config.php no que é pedido, algumas alterações devem ser feitas também no arquivo htdocs/pag_retorno.php : (não esqueça de editar as partes que pedem informações sobre usuario, senha, nome db do MYSQL) 1 - Nas linhas: Você deve alterar o que está sendo pedido, e no "127.0.0.1", se você usa seu site no mesmo PC ou Dedicado/VPS que o seu Server, pode deixar "127.0.0.1" mesmo, se não (no caso de usar domínio), deve colocar ali o seu IP Externo Numérico do Server. 2 - Nas linhas: Esta parte é a que entrega os pontos automaticamente pra account, se você tem algum tipo de promoção no seu server, deve alterar aqui conforme sua promoção, exemplo: Se você tem a promoção de Double Points no seu Server, deve alterar: Por este: Para que os pontos sejam DOBRADOS na hora de entregar automaticamente, entendeu? Bom Galera, é isso aí, espero que gostem. Dúvidas, Sugestões ou Críticas, postem aqui para que eu possa atender a todos. Créditos: Tutorial feito 100% por mim (Lucas502 - xtibia.com) Te Ajudei? Então REP+ aew! EDIT: Adicionados Spoilers para melhor visualização do tópico.
  5. Oneshot

    Dual Wield

    Tendo visto a crescente quantidade de pedidos por armas que possam ser usadas simultaneamente nas duas mãos, resolvi criar um tutorial apenas para esclarecer que esse código já existe compilado nas mais recentes revisões do The Forgotten Server. Você pode escolher quais itens poderão ser equipamentos nas duas mãos e claro restringir esses itens depois para apenas uma vocação. 1. Para criar seu item que pode ser equipado nas duas mãos, abra o items.xml e navegue até o ID do item desejado. Por exemplo, mostrarei abaixo o ID da Magic Sword: <item id="2400" article="a" name="magic sword"> <attribute key="description" value="It is the Sword of Valor." /> <attribute key="weight" value="4200" /> <attribute key="defense" value="35" /> <attribute key="attack" value="48" /> <attribute key="weaponType" value="sword" /> <attribute key="extradef" value="3" /> </item> 2. Adicione o atributo dualwield com valor 1 no código XML do item. <item id="2400" article="a" name="magic sword"> <attribute key="description" value="It is the Sword of Valor." /> <attribute key="weight" value="4200" /> <attribute key="defense" value="35" /> <attribute key="attack" value="48" /> <attribute key="weaponType" value="sword" /> <attribute key="extradef" value="3" /> <attribute key="dualwield" value="1" /> </item> Pelo que pude testar os danos não se somam, mas sim são causados dois ataques ao invés de um, ou seja a velocidade de ataque do jogador aumenta. Funciona com qualquer tipo de arma, desde swords até rods e wands. Funcional em: The Forgotten Server 0.4 rev3777 em diante
  6. 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
  7. Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda! Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores. Quem quiser pode ver um vídeo comentado de como o sistema funciona: Dito isso vou ensinar vocês como instalar isso no server: Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo -------------- TASK SYSTEM -------------- registerCreatureEvent(cid,"tasksystem") if getPlayerStorageValue(cid, 95673) < 0 then setPlayerStorageValue(cid, 95673, 0) end if getPlayerStorageValue(cid, 95674) < 0 then setPlayerStorageValue(cid, 95674, 0) end ----------------------------------- Ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão) <!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele: local storages = { name = 95672, count = 95673, maxcount = 95674, } local config = { partycount = true, --- true ou false pra ativar/desativar que os kills dos membros da party contem pra voce killdistance = 7 --- distancia que conta os kills } function onKill(cid, target, lastHit) if isMonster(target) and getPlayerStorageValue(cid, storages.maxcount) > 3 and getCreatureMaster(target) == target and (not(isInParty(cid)) or config.partycount ~= true) then if getCreatureName(target):lower() == string.lower(getPlayerStorageValue(cid, storages.name)) then setPlayerStorageValue(cid, storages.count, getPlayerStorageValue(cid, storages.count) + 1) if getPlayerStorageValue(cid, storages.count) == getPlayerStorageValue(cid, storages.maxcount) then doPlayerSendTextMessage(cid, 19, "You finished your task.") elseif getPlayerStorageValue(cid, storages.count) < getPlayerStorageValue(cid, storages.maxcount) then doPlayerSendTextMessage(cid, 20, "Killed ".. getCreatureName(target) .."s [".. getPlayerStorageValue(cid, storages.count) .."/".. getPlayerStorageValue(cid, storages.maxcount) .."].") end end elseif isMonster(target) and getCreatureMaster(target) == target and isInParty(cid) and config.partycount == true then leader = getPartyLeader(cid) party = getPartyMembers(leader) for i = 1, #party do pid = party[i] if getDistanceBetween(getThingPos(target), getThingPos(pid)) < config.killdistance then if getPlayerStorageValue(pid, storages.maxcount) > 3 then if getCreatureName(target):lower() == string.lower(getPlayerStorageValue(pid, storages.name)) then setPlayerStorageValue(pid, storages.count, getPlayerStorageValue(pid, storages.count) + 1) if getPlayerStorageValue(pid, storages.count) == getPlayerStorageValue(pid, storages.maxcount) then doPlayerSendTextMessage(pid, 19, "You finished your task.") elseif getPlayerStorageValue(pid, storages.count) < getPlayerStorageValue(pid, storages.maxcount) then doPlayerSendTextMessage(pid, 20, "Killed ".. getCreatureName(target) .."s [".. getPlayerStorageValue(pid, storages.count) .."/".. getPlayerStorageValue(pid, storages.maxcount) .."].") end end end end end end return true end Terminada a parte da contagem de kill vamos ao NPC em si. Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele: <npc name="Magnus" script="data/npc/scripts/zezeniaa.lua" access="5" lookdir="1"> <health now="1000" max="1000"/> <look type="134" head="39" body="113" legs="38" feet="0" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|.I've been wondering if you would never appear.. Are you interested in a {challenge} or you're just looking for your {reward}?" /> </parameters> </npc> Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} -- OTServ event handling functions start 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 -- OTServ event handling functions end function creatureSayCallback(cid, type, msg) -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself. if (not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid -------------------------------- ALL CONFIG CAN BE DONE HERE -------------------------- local short = 100 + (math.random(0,6) * 50) -- quantidade de monstros no curto local median = 500 + (math.random(0,6) * 50) -- quantidade de monstros no mediano local long = 1000 + (math.random(0,10) * 100) -- quantidade de monstros no longo local config = { levelcollect = 30, --- level pra poder fazer tasks do tipo collect time = 8 * 60 * 60, --- tempo que vc vai ficar sem poder falar com ele caso abandone uma task (em segundos) bonus = 1.2, --- bonus de exp/gold caso a task escolhida seja random multiplicator = 1 --- multiplicador de exp/gold (coloque de acordo com a necessidade do seu server) } local easy = { [1] = "Goblin", [2] = "Troll", [3] = "Rotworm", [4] = "Dwarf", [5] = "Amazon", [6] = "Elf", [7] = "Wolf", [8] = "Orc", [9] = "Minotaur" } local eacollect = { [1] = {id = 5880, count = 20}, -- iron ore [2] = {id = 5902, count = 15}, -- honeycomb [3] = {id = 5878, count = 10}, -- minotaur leather [4] = {id = 5890, count = 20}, -- chicken feather [5] = {id = 5894, count = 15}, -- bat wing [6] = {id = 5896, count = 10}, -- bear pawn [7] = {id = 5897, count = 20}, -- wolf pawn [8] = {id = 5921, count = 15}, -- heaven blossom [9] = {id = 3956, count = 10} -- elephant tusk } local medium = { [1] = "Cyclops", [2] = "Ghoul", [3] = "Dragon", [4] = "Mammoth", [5] = "Vampire", [6] = "Fire Devil", [7] = "Fire Elemental", [8] = "Valkyrie", [9] = "Monk" } local medcollect = { [1] = {id = 5876, count = 35}, -- lizard leather [2] = {id = 5678, count = 30}, -- tortoise egg [3] = {id = 5898, count = 25}, -- beholder eye [4] = {id = 5899, count = 35}, -- turtle shell [5] = {id = 2229, count = 30}, -- skull [6] = {id = 5877, count = 25}, -- dragon leather [7] = {id = 5920, count = 30} -- dragon scale } local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate" } local hardcollect = { [1] = {id = 5882, count = 50}, -- red dragon scale [2] = {id = 5948, count = 45}, -- red dragon leather [3] = {id = 5930, count = 40}, -- behemoth claw [4] = {id = 5879, count = 50}, -- giant spider silk [5] = {id = 5954, count = 45}, -- demon horn [6] = {id = 6500, count = 40}, -- demoniac essence [7] = {id = 5944, count = 45}, -- soul orb } local storages = { name = 95672, count = 95673, maxcount = 95674, difficult = 95675, length = 95676, delay = 95677, type = 95678, } local gold = 1000 * ((getPlayerStorageValue(cid, storages.length)) + (getPlayerStorageValue(cid, storages.difficult))) * config.multiplicator local experience = ((getExperienceForLevel(getPlayerLevel(cid) + 1) - getExperienceForLevel(getPlayerLevel(cid))) / 100) * ((getPlayerStorageValue(cid, storages.length)) * (getPlayerStorageValue(cid, storages.difficult))) * config.multiplicator -------------------------------- END OF ALL CONFIG -------------------------- local type = getPlayerStorageValue(cid, storages.type) if (msgcontains(msg, 'task') or msgcontains(msg, 'challenge')) and (getPlayerStorageValue(cid, storages.delay) - os.time()) <= 0 then if getPlayerStorageValue(cid, storages.maxcount) > 3 and getPlayerStorageValue(cid, storages.type) == 1 then talkState[talkUser] = 6 selfSay('Your task is to kill {'..getPlayerStorageValue(cid, storages.maxcount)..' '..getPlayerStorageValue(cid, storages.name)..'s}. Hurry with this or you want to {give up}?!', cid) elseif getPlayerStorageValue(cid, storages.maxcount) > 3 and getPlayerStorageValue(cid, storages.type) == 2 then talkState[talkUser] = 6 selfSay('Your task is to collect {'.. getPlayerStorageValue(cid, storages.maxcount)..' '.. getItemNameById(getPlayerStorageValue(cid, storages.name)) ..'s}. Hurry with this or you want to {give up}?!', cid) else talkState[talkUser] = 1 selfSay('I have two types of tasks, you want to {kill} monsters or to {collect} some items for me? You can also let me choose a {random} one for you, garanting a final bonus in your reward.', cid) end elseif (msgcontains(msg, 'kill') and talkState[talkUser] == 1) then talkState[talkUser] = 2 setPlayerStorageValue(cid, storages.type, 1) selfSay('I have all kinds of tasks, you want a {easy}, {medium} or are you up to a {hard} one?', cid) elseif (msgcontains(msg, 'collect') and talkState[talkUser] == 1 and getPlayerLevel(cid) >= config.levelcollect) then talkState[talkUser] = 2 setPlayerStorageValue(cid, storages.type, 2) selfSay('I have all kinds of tasks, you want a {easy}, {medium} or are you up to a {hard} one?', cid) elseif (msgcontains(msg, 'collect') and talkState[talkUser] == 1 and getPlayerLevel(cid) < config.levelcollect) then talkState[talkUser] = 1 selfSay('You can only do collect tasks once you reach level '..config.levelcollect..'.', cid) ------- difficult --------- elseif (msgcontains(msg, 'random') and talkState[talkUser] == 1) then talkState[talkUser] = 4 selfSay('Are you sure about this?', cid) setPlayerStorageValue(cid, storages.type, math.random(1,2)) setPlayerStorageValue(cid, storages.difficult, math.random(2,4) * config.bonus) setPlayerStorageValue(cid, storages.length, math.random(2,4) * config.bonus) elseif (msgcontains(msg, 'hard') and talkState[talkUser] == 2) then talkState[talkUser] = 3 selfSay('I have all kinds of tasks, you want a {short}, {median} or are you up to a {long} one?.', cid) setPlayerStorageValue(cid, storages.difficult, 4) elseif (msgcontains(msg, 'medium') and talkState[talkUser] == 2) then talkState[talkUser] = 3 selfSay('I have all kinds of tasks, you want a {short}, {median} or are you up to a {long} one?.', cid) setPlayerStorageValue(cid, storages.difficult, 3) elseif (msgcontains(msg, 'easy') and talkState[talkUser] == 2) then talkState[talkUser] = 3 selfSay('I have all kinds of tasks, you want a {short}, {median} or are you up to a {long} one?.', cid) setPlayerStorageValue(cid, storages.difficult, 2) ------- bye --------- elseif (msgcontains(msg, 'no')) and isInArray({1, 6, 7}, talkState[talkUser]) then talkState[talkUser] = 0 selfSay('Clearly you are not ready. We can talk later...', cid) ------- length --------- elseif (msgcontains(msg, 'short') and talkState[talkUser] == 3) then talkState[talkUser] = 4 selfSay('Are you sure about this?', cid) setPlayerStorageValue(cid, storages.length, 2) elseif (msgcontains(msg, 'median') and talkState[talkUser] == 3) then talkState[talkUser] = 4 selfSay('Are you sure about this?', cid) setPlayerStorageValue(cid, storages.length, 3) elseif (msgcontains(msg, 'long') and talkState[talkUser] == 3) then talkState[talkUser] = 4 selfSay('Are you sure about this?', cid) setPlayerStorageValue(cid, storages.length, 4) ----------- give up option ----------- elseif (msgcontains(msg, 'give up') and talkState[talkUser] == 6) then selfSay('Are you saying that you want to give up this task? I will not give you any other task in the next '.. (config.time/3600) ..' hour(s).', cid) talkState[talkUser] = 7 elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 7) then selfSay('Since you will not help me, get out of here.', cid) setPlayerStorageValue(cid, storages.maxcount, 0) setPlayerStorageValue(cid, storages.delay, os.time() + config.time) talkState[talkUser] = 0 ----------------------- ------- checking --------- elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 4) then local length = getPlayerStorageValue(cid, storages.length) local difficult = getPlayerStorageValue(cid, storages.difficult) if type == 1 then if length == 2 then setPlayerStorageValue(cid, storages.maxcount, short) elseif length == 3 then setPlayerStorageValue(cid, storages.maxcount, median) else setPlayerStorageValue(cid, storages.maxcount, long) end if difficult == 2 then setPlayerStorageValue(cid, storages.name, easy[math.random(1, #easy)]) elseif difficult == 3 then setPlayerStorageValue(cid, storages.name, medium[math.random(1, #medium)]) else setPlayerStorageValue(cid, storages.name, hard[math.random(1, #hard)]) end setPlayerStorageValue(cid, storages.count, 0) talkState[talkUser] = 0 selfSay('OK then.. your task is to kill '..getPlayerStorageValue(cid, storages.maxcount)..' '..getPlayerStorageValue(cid, storages.name)..'s. Do not spare any monster!', cid) elseif type == 2 then if length == 2 then setPlayerStorageValue(cid, storages.maxcount, eacollect[math.random(1, #eacollect)].count) elseif length == 3 then setPlayerStorageValue(cid, storages.maxcount, medcollect[math.random(1, #medcollect)].count) else setPlayerStorageValue(cid, storages.maxcount, hardcollect[math.random(1, #hardcollect)].count) end if difficult == 2 then setPlayerStorageValue(cid, storages.name, eacollect[math.random(1, #eacollect)].id) elseif difficult == 3 then setPlayerStorageValue(cid, storages.name, medcollect[math.random(1, #medcollect)].id) else setPlayerStorageValue(cid, storages.name, hardcollect[math.random(1, #hardcollect)].id) end setPlayerStorageValue(cid, storages.count, 0) talkState[talkUser] = 0 selfSay('OK then.. your task is to collect {'.. getPlayerStorageValue(cid, storages.maxcount)..' '.. getItemNameById(getPlayerStorageValue(cid, storages.name)) ..'s}. Bring me the proof that you made it!', cid) end elseif (msgcontains(msg, 'no') and talkState[talkUser] == 4) then talkState[talkUser] = 0 selfSay('Ok, come back when you have the guts.', cid) ------- reward --------- elseif msgcontains(msg, 'reward') then if type == 1 then if getPlayerStorageValue(cid, storages.count) >= getPlayerStorageValue(cid, storages.maxcount) and getPlayerStorageValue(cid, storages.maxcount) > 3 then selfSay('You finished the quest, now you want to receive your reward in {gold} or in {experience}?', cid) talkState[talkUser] = 5 else selfSay('There is no reward for those who did not complete a challenge.', cid) talkState[talkUser] = 0 end end if type == 2 then if getPlayerItemCount(cid, getPlayerStorageValue(cid, storages.name)) >= getPlayerStorageValue(cid, storages.maxcount) and getPlayerStorageValue(cid, storages.maxcount) > 3 then selfSay('You finished the quest, now you want to receive your reward in {gold} or in {experience}?', cid) talkState[talkUser] = 5 else selfSay('There is no reward for those who did not complete a challenge.', cid) talkState[talkUser] = 0 end elseif (type < 1) then selfSay('There is no reward for those who did not complete a challenge.', cid) talkState[talkUser] = 0 end ---------- checking rewards --------------- elseif (msgcontains(msg, 'gold') and talkState[talkUser] == 5 ) then if (type == 1) or (doPlayerRemoveItem(cid, getPlayerStorageValue(cid, storages.name), getPlayerStorageValue(cid, storages.maxcount)) and type == 2) then for k, v in pairs(storages) do setPlayerStorageValue(cid, v, 0) end doPlayerAddMoney(cid, gold) talkState[talkUser] = 0 selfSay('Thanks for your help, here is your prize..', cid) else selfSay('Something went wrong..', cid) end elseif (msgcontains(msg, 'experience') and talkState[talkUser] == 5) then if (type == 1) or (doPlayerRemoveItem(cid, getPlayerStorageValue(cid, storages.name), getPlayerStorageValue(cid, storages.maxcount)) and type == 2) then for k, v in pairs(storages) do setPlayerStorageValue(cid, v, 0) end doPlayerAddExperience(cid, experience) talkState[talkUser] = 0 selfSay('Thanks for your help, here is your prize..', cid) else selfSay('Something went wrong..', cid) end ----------------------- msg when blockek -------------- elseif (msgcontains(msg, 'task') or msgcontains(msg, 'challenge')) and (getPlayerStorageValue(cid, storages.delay) - os.time()) > 0 then talkState[talkUser] = 0 selfSay('I can not trust you since you failed in the last job. You will have to wait until I feel that I can trust you again..', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) FEITO ISSO ESTÁ TERMINADO Agora aprendendo a configurar: No tasksystem vc pode editar isso daqui: Citar Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server. Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill. No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:partycount = true, --- true ou false pra ativar/desativar que os kills dos membros da party contem pra voce killdistance = 7 --- distancia que conta os kills Citar Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores. Citar levelcollect é o level mínimo pra fazer tasks do tipo collect. time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas) bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2) multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador. Citar local short = 100 + (math.random(0,6) * 50) -- quantidade de monstros no curto local median = 500 + (math.random(0,6) * 50) -- quantidade de monstros no mediano local long = 1000 + (math.random(0,10) * 100) -- quantidade de monstros no longo Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula! Ex: adicionando Morgaroth na tabela de hard local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10]. O restante das tabelas são separadas para o banco de dados das tasks de collect: Citar segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count; Ex: [1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos. No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50. PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor. Créditos: xWhiteWolf
  8. Script: Level up = Ful Mana e Full Health Função: Ao evoluir sua vida e mana regenera no máximo Testado: Versão 8.6 INSTALANDO vá na pasta creaturescript/scripts e cria um arquivo no formato .lua com o nome de fullmh e cole isto: function onAdvance(cid, skill, oldlevel, newlevel) if skill == SKILL__LEVEL then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) doCreatureAddMana(cid, getCreatureMaxMana(cid)) end return TRUE end em seguida, em login.lua adicione o evento registerCreatureEvent(cid, "fullmh") depois em creaturescript.xml adicione a tag: <event type="advance" name="fullmh" event="script" value="fullmh.lua"/>
  9. Olá galerinha do Xtibia, Queria 1 NPC que o Player comprar 1 Spells. Exemplo comprar a spells - Housenka por 15 vip coins. o id eu que ageito. ai o player falar Housenka ai a magia vai , se não comprar não vai. REP + Durante 1 semana. VLW!
  10. •[Pokemon] PDA v1.8 (Slicer) com editaçoes no mapa (totalmente refeito)• • Menu: ├ Informações; ├ Ediçoes; ├ Erros; ├ Prints; ├ Download; ├ Senha do ADM; └ Creditos. • Informações Basicas • • Edições / Ajustes • • Erros Do Servidor • • PrintScreen • • Download's • PDA v1.8 Mapa totalmente refeito (4Shared). Client ja vem junto com o server. http://www.4shared.com/rar/m5QfBBFf/PDA_V18_f_Creditos_-_Slicer_St.html Versão v0.2 http://www.mediafire.com/?o7xmeczpb7az5yj @Client ja vem junto a pasta do servídor, Good luck ! OBS: Se gostarem do server, Comentem e deem sua sugestão para atalizar, não irei pedir 'rep+' pois pra min isso não muda nada, mais sim contribui meu trabalho • Creditos • Slicer - Por ataliza diariamente o PDA v1.8 sendo uns dos melhore servidor pokemon ja posto pra dowload. Stylo Maldoso - Por ter refeito o mapa. Brunin123 por criar o pda Gabrielxtu por ter me ajudado <3 Equipe Pdaventures pelo mapa
  11. Bom, eu percebi que algo que poderia deixar os servidores bem legais seria um foco maior nas guilds em si. Então, resolvi criar um sistema que fosse melhorar isso, e surgiu o Advanced Guild System. Atualizações 22/01/14 - Publicação da versão 1.0 21/04/14 - Adição de mais tratamento de erros Informações O AGS, em si, não faz nada. Isso mesmo. Ele é uma biblioteca com várias funções focadas para guilds. Além disso, ele também faz algumas modificações no seu banco de dados ao ser instalado: Cria a tabela guild_storages; Adiciona a coluna pontos na tabela guilds, se ela não existir; Adiciona a coluna balance na tabela guilds, se ela não existir; Adiciona a coluna guild_id na tabela players; Adiciona um gatilho(trigger) para atualizar a coluna guild_id toda vez que ocorrer uma mudança na tabela guilds. Para acompanhar essa biblioteca e mostrar sua utilidade, fiz alguns sistemas utilizando ela: Guild Rank; Guild Tasks; Guild Banker. Funções Instalação Código Salve-o como guildlib.lua em data/lib Problemas na Instalação? Caso uma ou mais das colunas adicionadas já existam no seu banco de dados, execute as queries manualmente: Depois disso, considere seu AGS instalado.
  12. Eae Galera do EKS É o seguinte Hoje trago a vocês o Baiak Rox Editado por Min Espero que Gostem Oque eu Fiz ? | Novo Visual do Templo Totalmente ICE | Critical System | Task System | Dodge System | Run Event (CORRIDA MALUCA) | Reset System (ÁREA EXCLUSIVA COM CASTELO E HUNTS) para resetar fale !reset | Guild Frags System ( ACESSO AO PROMOTE E ITENS EXCLUSIVOS ) | War System (100% RODANDO EM SQLITE) | Cast System (100% Roda em Mysql ) ( Para Ativar vai em Config.lua e ache | enableCast = false | mude para true ) | PvP Balanceado Agora com mais RPG | Armas Arrumadas Para Melhor PvP | Varios Eventos Automaticos | Battle Field Event | Capture The Flag 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 | Distro 0.4 Rodando 100% ( Se For 64x Bits) | Refinamento ( Aprimora seus Equipamentos ) | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Outras Coisas | SENHA DO GOD: rox/styller | Aqui Vai Umas Prints | Castelo Reset System | Nova Imagem do Templo | Área Donate | Mostra de Itens Donate + Eventos | Download http://www.4shared.c..._DeathRock.html | Scan https://www.virustot...sis/1403139305/ | Créditos DeathRocks LuanLuciano Vinny
  13. Ele pode ser útil para muitos OTS com Gesior Account Maker 2012, pois não há opção "remover red skull" na loja de SMS. Basta ir em data/actions/scripts, criar um arquivo .lua com o nome de skullremove e adicionar o seguinte código - function onUse(cid, item, frompos, item2, topos) local skull = getCreatureSkullType(cid) local bad_skulls = {SKULL_RED,SKULL_BLACK} if(isInArray(bad_skulls, skull)) then doPlayerSetSkullEnd(cid, 0, skull) doRemoveItem(item.uid, 1) db.executeQuery('UPDATE `killers`, `player_killers` SET `killers`.`unjustified` = 0 WHERE `killers`.`unjustified` = 1 AND `player_killers`.`player_id` = ' .. getPlayerGUID(cid) .. ' AND `killers`.`id` = `player_killers`.`kill_id`') doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your skull has been removed!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have red/black skull!") end return true end Adicione esta tag em action.xml - <action itemid="IDDOITEM" event="script" value="skullremove.lua"/> Créditos - Gesior.pl
  14. Bom, como um individuo(Vudi) não sabe cumprir o que fala, vou postar o sistema aqui.(não cabe ao post explicar aqui) Bom, aqui está o smeargle system, igual o da PxG. Vamos lá. 1 - Vá na pasta Lib, substitua seu cooldown bar.lua por isso: 2 - Ainda no Lib, no fim(depois do ultimo end) do Some Functions.lua, adicione isso: 3 - Agora no order.lua, do Actions, em baixo de: Adicione: 4 - Se seu servidor ja tiver os spells, sketch 1, sketch 2... Substitua por esses(data/lib/pokemon moves.lua): Se não, use os mesmos acima, não esqueça de adicionar no spells.xml. 5 - Agora, vá em talkactions/scripst, abra o move1.lua e substitua: Por Depois: Por: Pronto, se tiver feito tudo certo, funcionará. Como ficará: Como usar: Créditos: Eu(Todo o script)
  15. Bom galera, quis fazer o script pra ajudar um membro da comunidade.. Espero que gostem! É um script simples, que a cada 1 hora online, dá um item para o player. Esse tempo online será salva num espaço na sua database, e depois vou aprimorar o script para criar um rank dos mais online. De qualquer forma, modificações desse script viram, então aguardem. Em creaturescript.xml adicione: <event type="login" name="tempo_on_reward" event="script" value="rewardON.lua"/> <event type="logout" name="tempo_on_reward2" event="script" value="rewardON.lua"/> Em login.lua adicione: registerCreatureEvent(cid, "tempo_on_reward2") Agora, na pasta scripts, cria um arquivo chamado rewardON.lua e adicione dentro: -- Script made by GstavoLiber -- -- Config -- storage = 2001 -- storage que vai salvar o tempo online temporariamente. item = 2160 -- id do item que será dado como presente hora = 3600 -- tempo em segundos a ficar online para receber o premio count = 50 -- qntidade do item premio -- Config -- function onLogin(cid) if(getPlayerStorageValue(uid, storage) >= hora )then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já está logado a 1 hora! Você receberá seu prêmio em breve. " ) doPlayerAddItem(uid, item, count) local rest = getPlayerStorageValue(uid, storage) - hora local query = db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";") setPlayerStorageValue(uid, storage, 0) setPlayerStorageValue(uid, storage, rest) return TRUE else setPlayerStorageValue(uid, storage, getPlayerStorageValue(uid, storage) + os.time()) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Fique logado por 1 hora para ganhar premio! Lembre-se de deslogar e logar para recebe-lo. " ) end return TRUE end function onLogout(cid) setPlayerStorageValue(uid, storage, getPlayerStorageValue(uid, storage) + os.time()) return TRUE -- return false impede o jogador de dar logout end Pessoal, tenho uma leve impressão que eu errei na lógica, então caso não funcione o de cima, testa esse de baixo: -- Script made by GstavoLiber -- -- Config -- storageInit = 2001 -- storage que vai salvar o tempo online temporariamente. storageFinish = 2002 -- storage que vai salvar o tempo online temporariamente. storageTotal = 2003 item = 2160 -- id do item que será dado como presente hora = 3600 -- tempo em segundos a ficar online para receber o premio count = 50 -- qntidade do item premio -- Config -- function onLogin(cid) setPlayerStorageValue(uid, storageInit, os.time()) if(getPlayerStorageValue(uid, storageTotal) >= hora )then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já está logado a 1 hora! Você receberá seu prêmio em breve. " ) doPlayerAddItem(uid, item, count) local rest = getPlayerStorageValue(uid, storageTotal) - hora local query = db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";") if(rest > 0) then setPlayerStorageValue(uid, storageTotal, rest) else setPlayerStorageValue(uid, storageTotal, 0) end return TRUE else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Fique logado por 1 hora para ganhar premio! Lembre-se de deslogar e logar para recebe-lo. " ) end return TRUE end function onLogout(cid) setPlayerStorageValue(uid, storageFinish, os.time()) setPlayerStorageValue(uid, storageTotal, getPlayerStorageValue(uid, storageTotal) + (getPlayerStorageValue(uid, storageFinish) - getPlayerStorageValue(uid, storageInit))) return TRUE -- return false impede o jogador de dar logout end Obrigado pela atenção, Já ia esquecendo, tem que adicionar na sua database em MYSQl, o seguinte query: ALTER TABLE players ADD total_time_on int(16) not null AFTER frags; Mude a palavra frags, para o nome da ultima coluna da sua table players. Se Possível +REP -GstavoLiber
  16. Meu Novo sistema de Forja, Procurei aqui no Xtibia e não achei um Sistema de Forja Completo e Facil de Configurar. Meu Segundo Script *-* Versão Testada: TFS 0.4 (8.60) Sistema de Forja V1.0 Vamos la Video: em Actions.xml Adicione: <action uniqueid="16451" event="script" value="forjar.lua" /> Crie um Arquivo LUA em Actions>Scripts com o nome de "forjar.lua" e adicione isso dentro: function onUse(cid, item, item2, frompos, topos, pos)local config = {["Magic Plate Armor"] = {t1=2476,t2=2464,t3=2472}, -- t1 = ID do ITEM 1 |---| t2 = ID do ITEM 2 |---| t3 = ID do ITEM a ser FORJADO --["Dragon Scale Mail"] = {t1=2489,t2=2487,t3=2492},}local r1 = {x = 222, y = 217, z = 7, stackpos= 2} -- Posição 1 ( NÃO MEXA NO stackpos= 2 )local r2 = {x = 224, y = 217, z = 7, stackpos= 2} -- Posição 2 ( NÃO MEXA NO stackpos= 2 )local r3 = {x = 223, y = 217, z = 7} -- Posição do Item a Ser Criadolocal q1 = getThingfromPos(r1)local q2 = getThingfromPos(r2)for i, x in pairs(config) doif (q1.itemid == x.t1 and q2.itemid == x.t2) or (q1.itemid == x.t2 and q2.itemid == x.t1) thendoRemoveItem(q1.uid, 1)doRemoveItem(q2.uid, 1)addEvent(doCreateItem, 1000, x.t3, 1, r3)doSendMagicEffect(r3, 47)addEvent(doSendMagicEffect, 900, r3, 39)doPlayerSendTextMessage(cid, 22, "Parabéns, Você Forjou Um " .. i .. ".")breakendendreturn TRUEend na Alavanca Colocar a UniqueID: 16451 Configurando: ["Magic Plate Armor] = {t1=2476,t2=2464,t3=2472}, Vermelho: Nome do Item a Ser Forjado Azul: ID do Item1 necessário para forjar o item Vermelho Roxo: ID do Item2 necessário para forjar o item Vermelho Verde: ID do Item Vermelho Você Também Pode Adicionar Novas "Receitas" para Forjas !! Só Adicionar só 1 Linha a Mais Iguais a Outras mudando as Configurações Posição: local r1 = {x = 222, y = 217, z = 7, stackpos= 2} -- Posição do Item1 ( NÃO MEXA NO stackpos= 2 ) local r2 = {x = 224, y = 217, z = 7, stackpos= 2} -- Posição do Item2 ( NÃO MEXA NO stackpos= 2 ) local r3 = {x = 223, y = 217, z = 7} -- Posição do Item Vermelho Talkaction para mostrar os Itens de Forja talkactions.xml Adicione isso: <talkaction words="!forjas" script="forjas.lua"/> Crie um arquivo forjas.lua na pasta talkactions>scripts e adicione isso dentro: function onSay(cid, words, param)file = io.open('forjas.txt','r')notice = file:read(-1)doShowTextDialog(cid,9004,notice)file:close()end Agora na Pasta Principal do Seu OT, onde tem a pasta DATA, as DLLs e o .exe do seu ot Crie um Arquivo .txt ( arquivo de texto ), renomeie para forjas.txt e dentro dele adicione os materiais de Forjas para os seus Players não se perderem. Bom é Isso, Gostou ? REP+ =) Aprendii usar in pairs(table) *--* Créditos: Eu Pelo Script, Idéia sei la quem teve '-', e aos meus amigos que estão me ajudando bastante =)
  17. Antes de começar, este sistema tem sido feito por Xafterin / KylerXX. PokeServer equipe do XTibia -> pelas descrições do pokemon. thalia eu acho que o gerente de projeto. Strack -> Ajuda para completar o código de registro. Você precisa baixar um arquivo RAR contendo uma pasta com todas as descrições. Aqui -> Link Quando você descer as descrições de arquivos, conjunto de descrições na pasta "data/actions/scripts" em seu servidor. Testado em: TFS 0.3.6 Bem, nós data/lib/000-constant.lua [/ b]. E acrescentar o seguinte: pokestorages = { [7274] = {"001","Bulbasaur"}, [7275] = {"002","Ivysaur"}, [7276] = {"003","Venusaur"}, [7277] = {"004","Charmander"}, [7278] = {"005","Charmeleon"}, [7279] = {"006","Charizard"}, [7280] = {"007","Squirtle"}, [7281] = {"008","Wartortle"}, [7282] = {"009","Blastoise"}, [7283] = {"010","Caterpie"}, [7284] = {"011","Metapod"}, [7285] = {"012","Butterfree"}, [7286] = {"013","Weedle"}, [7287] = {"014","Kakuna"}, [7288] = {"015","Beedril"}, [7289] = {"016","Pidgey"}, [7290] = {"017","Pidgeotto"}, [7291] = {"018","Pidgeot"}, [7292] = {"019","Rattata"}, [7293] = {"020","Raticate"}, [7294] = {"021","Spearow"}, [7295] = {"022","Fearow"}, [7296] = {"023","Ekans"}, [7297] = {"024","Arbok"}, [7298] = {"025","Pikachu"}, [7299] = {"026","Raichu"}, [7300] = {"027","Sandshrew"}, [7301] = {"028","Sandslash"}, [7302] = {"029","Nidoran(M)"}, [7303] = {"030","Nidorina"}, [7304] = {"031","Nidoquin"}, [7305] = {"032","Nidora(F)"}, [7306] = {"033","Nidorino"}, [7307] = {"034","Nidokin"}, [7308] = {"035","Clefairy"}, [7309] = {"036","Clefable"}, [7310] = {"037","Vulpix"}, [7311] = {"038","Ninetales"}, [7312] = {"039","Jigglypuff"}, [7313] = {"040","Wigglytuff"}, [7314] = {"041","Zubat"}, [7315] = {"042","Golbat"}, [7316] = {"043","Oddish"}, [7317] = {"044","Gloom"}, [7318] = {"045","Vileplume"}, [7319] = {"046","Paras"}, [7320] = {"047","Parasect"}, [7321] = {"048","Venomat"}, [7322] = {"049","Venomoth"}, [7323] = {"050","Diglett"}, [7324] = {"051","Dugtrio"}, [7325] = {"052","Meowth"}, [7326] = {"053","Persian"}, [7327] = {"054","Psyduck"}, [7328] = {"055","Golduck"}, [7329] = {"056","Mankey"}, [7330] = {"057","Primeape"}, [7331] = {"058","Growlithe"}, [7332] = {"059","Arcanine"}, [7333] = {"060","Poliwag"}, [7334] = {"061","Poliwhirl"}, [7335] = {"062","Poliwrath"}, [7336] = {"063","Abra"}, [7337] = {"064","Kadabra"}, [7338] = {"065","Alakazam"}, [7339] = {"066","Machop"}, [7340] = {"067","Machoke"}, [7341] = {"068","Machamp"}, [7342] = {"069","Bellsprout"}, [7343] = {"070","Weepinbell"}, [7344] = {"071","Victreebell"}, [7345] = {"072","Tentacool"}, [7346] = {"073","Tentacruel"}, [7347] = {"074","Geodude"}, [7348] = {"075","Graveler"}, [7349] = {"076","Golem"}, [7350] = {"077","Ponyta"}, [7351] = {"078","Rapidash"}, [7352] = {"079","Slowpoke"}, [7353] = {"080","Slowbro"}, [7354] = {"081","Magnemite"}, [7355] = {"082","Magneton"}, [7356] = {"083","Farfetch'd"}, [7357] = {"084","Doduo"}, [7358] = {"085","Dodrio"}, [7359] = {"086","Seel"}, [7360] = {"087","Dewong"}, [7361] = {"088","Grimer"}, [7362] = {"089","Muk"}, [7363] = {"090","Shellder"}, [7364] = {"091","Cloyster"}, [7365] = {"092","Gastly"}, [7366] = {"093","Haunter"}, [7367] = {"094","Gengar"}, [7368] = {"095","Onix"}, [7369] = {"096","Drowzee"}, [7370] = {"097","Hypno"}, [7371] = {"098","Krabby"}, [7372] = {"099","Kingler"}, [7373] = {"100","Voltorb"}, [7374] = {"101","Electrode"}, [7375] = {"102","Eggxecute"}, [7376] = {"103","Eggxecutor"}, [7377] = {"104","Cubone"}, [7378] = {"105","Marowak"}, [7379] = {"106","Hitmonlee"}, [7380] = {"107","Hitmonchan"}, [7381] = {"108","Likitung"}, [7382] = {"109","Koffing"}, [7383] = {"110","Weezing"}, [7384] = {"111","Rhyhorn"}, [7385] = {"112","Rhydon"}, [7386] = {"113","Chansey"}, [7387] = {"114","Tangela"}, [7388] = {"115","Kangaskhan"}, [7389] = {"116","Horsea"}, [7390] = {"117","Seadra"}, [7391] = {"118","Goldeen"}, [7392] = {"119","Seaking"}, [7393] = {"120","Staryu"}, [7394] = {"121","Starmie"}, [7395] = {"122","Mr.Mime"}, [7396] = {"123","Scyther"}, [7397] = {"124","Jynx"}, [7398] = {"125","Electrabuzz"}, [7399] = {"126","Magmar"}, [7400] = {"127","Pinsir"}, [7401] = {"128","Tauros"}, [7402] = {"129","Magikarp"}, [7403] = {"130","Gyarados"}, [7404] = {"131","Lapras"}, [7405] = {"132","Ditto"}, [7406] = {"133","Eevee"}, [7407] = {"134","Vaporeon"}, [7408] = {"135","Jolteon"}, [7409] = {"136","Flareon"}, [7410] = {"137","Porygon"}, [7411] = {"138","Omanite"}, [7412] = {"139","Omastar"}, [7413] = {"140","Kabuto"}, [7414] = {"141","Kabutops"}, [7415] = {"142","Aerodactyl"}, [7416] = {"143","Snorlax"}, [7417] = {"144","Articuno"}, [7418] = {"145","Zapdos"}, [7419] = {"146","Moltres"}, [7420] = {"147","Dratini"}, [7421] = {"148","Dragonair"}, [7422] = {"149","Dragonite"}, [7423] = {"150","Mewtwo"}, [7424] = {"151","Mew"} } pokemons = { -- { number of storage, itemid on click pokedex, number} ["Bulbasaur"] = {7274, 2222, 1}, ["Ivysaur"] = {7275, 2435, 2}, ["Venusaur"] = {7276, 2222, 3}, ["Charmander"] = {7277, 2222, 4}, ["Charmeleon"] = {7278, 2222, 5}, ["Charizard"] = {7279, 2222, 6}, ["Squirtle"] = {7280, 2222, 7}, ["Wartortle"] = {7281, 2222, 8}, ["Blastoise"] = {7282, 2222, 9}, ["Caterpie"] = {7283, 2222, 10}, ["Metapod"] = {7284, 2222, 11}, ["Butterfree"] = {7285, 2222, 12}, ["Weedle"] = {7286, 2222, 13}, ["Kakuna"] = {7287, 2222, 14}, ["Beedrill"] = {7288, 2222, 15}, ["Pidgey"] = {7289, 2222, 16}, ["Pidgeotto"] = {7290, 2222, 17}, ["Pidgeot"] = {7291, 2222, 18}, ["Ratatta"] = {7292, 2222, 19}, ["Raticate"] = {7293, 2222, 20}, ["Spearow"] = {7294, 2222, 21}, ["Fearow"] = {7295, 2222, 22}, ["Ekans"] = {7296, 2222, 23}, ["Arbok"] = {7297, 2222, 24}, ["Pikachu"] = {7298, 2222, 25}, ["Raichu"] = {7299, 2222, 26}, ["Sandshrew"] = {7300, 2222, 27}, ["Sandslash"] = {7301, 2222, 28}, ["Nidoran(H)"] = {7302, 2222, 29}, ["Nidorina"] = {7303, 2222, 30}, ["Nidoqueen"] = {7304, 2222, 31}, ["Nidoran(M)"] = {7305, 2222, 32}, ["Nidorino"] = {7306, 2222, 33}, ["Nidoking"] = {7307, 2222, 34}, ["Clefairy"] = {7308, 2222, 35}, ["Clefable"] = {7309, 2222, 36}, ["Vulpix"] = {7310, 2222, 37}, ["Ninetales"] = {7311, 2222, 38}, ["Jigglypuff"] = {7312, 2222, 39}, ["Wigglytuff"] = {7313, 2222, 40}, ["Zubat"] = {7314, 2222, 41}, ["Golbat"] = {7315, 2222, 42}, ["Oddish"] = {7316, 2222, 43}, ["Gloom"] = {7317, 2222, 44}, ["Vileplume"] = {7318, 2222, 45}, ["Paras"] = {7319, 2222, 46}, ["Parasect"] = {7320, 2222, 47}, ["Venomat"] = {7321, 2222, 48}, ["Venomoth"] = {7322, 2222, 49}, ["Diglett"] = {7323, 2222, 50}, ["Dugrio"] = {7324, 2222, 51}, ["Meowth"] = {7325, 2435, 52}, ["Persian"] = {7326, 2222, 53}, ["Psyduck"] = {7327, 2222, 54}, ["Golduck"] = {7328, 2222, 55}, ["Mankey"] = {7329, 2222, 56}, ["Primeape"] = {7330, 2222, 57}, ["Growlithe"] = {7331, 2222, 58}, ["Arcanine"] = {7332, 2222, 59}, ["Poliwag"] = {7333, 2222, 60}, ["Poliwhirl"] = {7334, 2222, 61}, ["Poliwrath"] = {7335, 2222, 62}, ["Abra"] = {7336, 2222, 63}, ["Kadabra"] = {7337, 2222, 64}, ["Alakazam"] = {7338, 2222, 65}, ["Machop"] = {7339, 2222, 66}, ["Machoke"] = {7340, 2222, 67}, ["Machamp"] = {7341, 2222, 68}, ["Bellsprout"] = {7342, 2222, 69}, ["Weepinbell"] = {7343, 2222, 70}, ["Victreebell"] = {7344, 2222, 71}, ["Tentacool"] = {7345, 2222, 72}, ["Tentracruel"] = {7346, 2222, 72}, ["Geodude"] = {7347, 2222, 74}, ["Graveler"] = {7348, 2222, 75}, ["Golem"] = {7349, 2222, 76}, ["Ponyta"] = {7350, 2222, 77}, ["Rapidash"] = {7351, 2222, 78}, ["Slowpoke"] = {7352, 2222, 79}, ["Slowbro"] = {7353, 2222, 80}, ["Magnemite"] = {7354, 2222, 81}, ["Magneton"] = {7355, 2222, 82}, ["Farfetch'd"] = {7356, 2222, 83}, ["Doduo"] = {7357, 2222, 84}, ["Dodrio"] = {7358, 2222, 85}, ["Seel"] = {7359, 2222, 86}, ["Dewong"] = {7360, 2222, 87}, ["Grimer"] = {7361, 2222, 88}, ["Muk"] = {7362, 2222, 89}, ["Shellder"] = {7363, 2222, 90}, ["Cloyster"] = {7364, 2222, 91}, ["Gastly"] = {7365, 2222, 92}, ["Haunter"] = {7366, 2222, 93}, ["Gengar"] = {7367, 2222, 94}, ["Onix"] = {7368, 2222, 95}, ["Drowzee"] = {7369, 2222, 96}, ["Hypno"] = {7370, 2222, 97}, ["Krabby"] = {7371, 2222, 98}, ["Kingler"] = {7372, 2222, 99}, ["Voltorb"] = {7373, 2222, 100}, ["Electrode"] = {7374, 2222, 101}, ["Eggxecute"] = {7375, 2435, 102}, ["Eggxecutor"] = {7376, 2222, 103}, ["Cubone"] = {7377, 2222, 104}, ["Marowak"] = {7378, 2222, 105}, ["Hitmonlee"] = {7379, 2222, 106}, ["Hitmonchan"] = {7380, 2222, 107}, ["Likitung"] = {7381, 2222, 108}, ["Koffing"] = {7382, 2222, 109}, ["Weezing"] = {7383, 2222, 110}, ["Rhyhorn"] = {7384, 2222, 111}, ["Rhydon"] = {7385, 2222, 112}, ["Chansey"] = {7386, 2222, 113}, ["Tangela"] = {7387, 2222, 114}, ["Kangaskhan"] = {7388, 2222, 115}, ["Horsea"] = {7389, 2222, 116}, ["Rotworm"] = {7390, 2222, 117}, ["Goldeen"] = {7391, 2222, 118}, ["Seaking"] = {7392, 2222, 119}, ["Staryu"] = {7393, 2222, 120}, ["Starmie"] = {7394, 2222, 121}, ["Mr.Mime"] = {7395, 2222, 122}, ["Scyther"] = {7396, 2222, 123}, ["Jynx"] = {7397, 2222, 124}, ["Electrabuzz"] = {7398, 2222, 125}, ["Magmar"] = {7399, 2222, 126}, ["Pinsir"] = {7400, 2222, 127}, ["Tauros"] = {7401, 2222, 128}, ["Magikarp"] = {7402, 2222, 129}, ["Gyarados"] = {7403, 2222, 130}, ["Lapras"] = {7404, 2222, 131}, ["Ditto"] = {7405, 2222, 132}, ["Eevee"] = {7406, 2222, 133}, ["Vaporeon"] = {7407, 2222, 134}, ["Jolteon"] = {7408, 2222, 135}, ["Flareon"] = {7409, 2222, 136}, ["Porigon"] = {7410, 2222, 137}, ["Omanite"] = {7411, 2222, 138}, ["Omastar"] = {7412, 2222, 139}, ["Kabuto"] = {7413, 2222, 140}, ["Kabutops"] = {7414, 2222, 141}, ["Aerodactyl"] = {7415, 2222, 142}, ["Snorlax"] = {7416, 2222, 143}, ["Articuno"] = {7417, 2222, 144}, ["Zapdos"] = {7418, 2222, 145}, ["Moltres"] = {7419, 2222, 146}, ["Dratini"] = {7420, 2222, 147}, ["Dragonair"] = {7421, 2222, 148}, ["Dragonite"] = {7422, 2222, 149}, ["Mewtwo"] = {7423, 2222, 150}, ["Mew"] = {7424, 2222, 151} } Bem, explicar os valores da tabela "pokemons" no arquivo 000-constant.lua. RED COLOR -> é o storage do voe quando pokemon se cadastra (não alterar, para precuación). ORANGE COLOR -> O itemid da imagem do portrait. YELLOW COLOR -> é a descrição de nome de arquivo. (Não modifique). (Não modifique). Agora vá para "data/actions/scripts" e crie um arquivo chamado "pokedex.lua" e cole isto em: function addPoke(cid, storage) setPlayerStorageValue(cid, storage, 1) end function onUse(cid, item, fromPosition, itemEx, toPosition) if not isCreature(itemEx.uid) then return doPlayerSendCancel(cid, "Invalid action.") end local showpokedex = "" local img = "" local p = pokemons[getCreatureName(itemEx.uid)] if p then img = p[2] showpokedex = doShowTextDialog(cid, img, io.open('data/actions/scripts/descriptions/'.. p[3] ..'.txt'):read("*all")) if isMonster(itemEx.uid) then return getPlayerStorageValue(cid, p[1]) ~= 1 and doPlayerSendTextMessage(cid, 22, "Now you registered ".. getCreatureName(itemEx.uid) .." into pokedex!") and doPlayerSendTextMessage(cid, 22, "You gain ".. p[1]-7300 .." experience!") and doPlayerAddExperience(cid, p[1]-7300) and showpokedex and addPoke(cid, p[1]) or getPlayerStorageValue(cid, p[1]) == 1 and showpokedex end end if getCreatureName(itemEx.uid) == getCreatureName(cid) then local list = "Pokedex registration: \n" local pokemonss = 0 for i = 7274,7424 do if getPlayerStorageValue(cid, i) == 1 then list = list.."\n[".. pokestorages[i][1] .."] - ".. pokestorages[i][2] .."" pokemonss = pokemonss + 1 elseif getPlayerStorageValue(cid, i) == -1 then list = list.."\n[".. pokestorages[i][1] .."] - Uknown pokemon" end end doPlayerSendTextMessage(cid, TALKTYPE_ORANGE_1, "You have ".. pokemonss .." unlocked pokemons.") doShowTextDialog(cid, item.itemid, "".. list .."\n\nEnd of registration.") end return true end Você não precisa modificar nada do script pokedex.lua f você não sabe. en actions.xml adiciona isso: <action itemid="id of pokedex" event="script" value="name.lua" allowfaruse="1"/> Ok, agora uma imagem do Pokémon Registration:
  18. Bom, vim trazer a vocês o sistema de potion igual ao da pxg... Gostaria de falar que peguei esse sistema do servidor PDA e so mudei umas coisinhas pra ele healar o pokemon do mesmo jeito que o da pxg Actions/scripts/potion.lua: Actions/actions.xml: OBS: Consertem os id's dos items e as cores do animated text. Creditos: Slicer, Brun123, eu e qm ajudo fazer o sistema original do PDA
  19. Queria 1 Script Que Tipo , Quando o Druid Ou sorcerer Chegasse ao Level 45 , Ganhasse 50 Sd's. Somente Mages. e tbém qria 1 Pra editar pra kina e pra paladin ! Valendo Rep ++ ______________________________________ #Dúvida Senada
  20. Ta sendo um desafio pra mim, estou a 7 dias tentando arrumar isso. Tenho uma magia com um sistema que empurra o jogador para direção que ele estiver olhando, feito pelo DOKMOS porem não consigo colocar dano nessa magia com formula porque da um dos seguintes erros: Erros Quote [19/03/2012 14:47:48] data/spells/scripts/outras/ice push.lua:onCastSpell [19/03/2012 14:47:48] Description: [19/03/2012 14:47:48] (luaCreateCombatArea) This function can only be used while loading the script. ou [19/03/2012 15:03:15] [C]: in function 'getn' [19/03/2012 15:03:15] data/lib/Getposfromarea.lua:2: in function 'getPosfromArea' [19/03/2012 15:03:15] data/spells/scripts/outras/ice push.lua:72: in function <data/spells/scripts/outras/ice push.lua:55> As formas que eu tentei foram essas: Usando local combat Quote local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) function onGetFormulaValues(cid, level, skill) min = -(level * 0.90 + skill * 0.70) * 1.0 max = -(level * 1.00 + skill * 0.80) * 1.0 return min, max end setCombatCallback(combat1, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") local function UM(cid) local area1 = { {0, 0, 0}, {0, 0, 0}, {1, 1, 1}, {0, 1, 0}, {0, 3, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, } pos = getPosfromArea(cid,area1) n = 0 local area1 = createCombatArea(area1) setCombatArea(combat1, area1) while n < #pos do n = n+1 doSendMagicEffect(pos[n],2) thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253} if isCreature(getThingfromPos(thing).uid) == TRUE then doPushCreature(getThingfromPos(thing).uid,getPlayerLookDir(cid)) end end end local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) function onGetFormulaValues(cid, level, skill) min = -(level * 0.90 + skill * 0.70) * 1.0 max = -(level * 1.00 + skill * 0.80) * 1.0 return min, max end setCombatCallback(combat2, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") local function DOIS(cid) local area2 = { {1, 1, 1}, {1, 1, 1}, {0, 0, 0}, {0, 0, 0}, {0, 3, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, } pos = getPosfromArea(cid,area2) n = 0 while n < #pos do n = n+1 doSendMagicEffect(pos[n],2) thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253} if isCreature(getThingfromPos(thing).uid) == TRUE then doPushCreature(getThingfromPos(thing).uid,getPlayerLookDir(cid)) end end end function onCastSpell(cid, words, param) doSendAnimatedText(getThingPos(cid), "Ice", 215) addEvent(UM, 1, cid) addEvent(DOIS, 300, cid) return TRUE end Usando function oncastspell Quote function onCastSpell(cid, words, param) local function UM(cid) local area = { {0, 0, 0}, {0, 0, 0}, {1, 1, 1}, {0, 1, 0}, {0, 3, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, } pos = getPosfromArea(cid,area) n = 0 while n < #pos do n = n+1 doSendMagicEffect(pos[n],2) thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253} if isCreature(getThingfromPos(thing).uid) == TRUE then doPushCreature(getThingfromPos(thing).uid,getPlayerLookDir(cid)) end end end local function DOIS(cid) local area = { {1, 1, 1}, {1, 1, 1}, {0, 0, 0}, {0, 0, 0}, {0, 3, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, } pos = getPosfromArea(cid,area) n = 0 while n < #pos do n = n+1 doSendMagicEffect(pos[n],2) thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253} if isCreature(getThingfromPos(thing).uid) == TRUE then doPushCreature(getThingfromPos(thing).uid,getPlayerLookDir(cid)) end end end doSendAnimatedText(getThingPos(cid), "Ice", 215) addEvent(UM, 1, cid) addEvent(DOIS, 300, cid) return TRUE end Alguem me ajuda por favor, essa ultima empurra mas nao da dano, alguem pode me ajudar?? REP+ pra quem solucionar por 1 mes vei, de verdade
  21. Fala galerinha do XTibia tudo bom? Venho aqui apresentar o novo Destruction Map V7.0 (8.6) Bom, como consegui o 6.0 para fazer o 7.0 ? Meu amigo, o criador dos destruction estava sem tempo para ele faze-lo, então, eu pedi a ele, se ele pudesse me passar o 6.0 que eu iria fazer. O Destruction Serv V6.0 ja teve no XTibia por um tempo, mas foi apagado por virus. Vamos deichar de Papo e vamos conhecer o Server ??? Informações sobre o Mapa: Mapa totalmente Editado Reflection Boots funcionando 100% Novas Spells Novos Itens Novos Monster Novas Scripts E muito mais... Screen Shot (SS) Temple: Flatron VIP Temple: Eu estou sem tempo para postar novas fotos, mas logo logo mais fotos terão Download Pasta: http://www.4shared.c...on_Map_V70.html Scan: https://www.virustot...459ed/analysis/ Download Distro, dlls... http://www.4shared.c...ro_e_Dlls.html? Scan https://www.virustot...sis/1336049191/ Gostou ??? Então da um REP+ Ai custa nada Créditos: Hannibals(Por editar o Map) Obelisko754(Por editar o Map) Doidin (Distro, dlls...) E outros membros do Xtibia por alguns script. Espero que Gostem
  22. Hug0

    NPC Ferreiro

    Aew galera blz? Eu utilizo o servidor The OTX Server Global - Version: (3.10) e queria fazer um npc que tivesse as seguintes características. Ele em tese vai ser um npc ferreiro só que no script dele eu quero que ele receba uma arma X (ex: shiny blade) e refine a mesma, mais tendo a chance de falhar esse processo exemplo Ele vai pegar a arma mais itens de refinamento e deixar ela +1 no caso ele teria 90% de chance se acertar. E ele poderia refinar os itens ate +7 sendo que na ultima so teria 10% de chance. Caso desse erro a arma voltaria para o +0 no caso a arma original.. Sei que tem scrips de upgrade porem nessa versão que utilizo nenhum funcionou, e testei mais de 10 scripts diferentes. Não apresentam erros no distro mais tbm não fazem a função para qual foram feitos.
  23. NAO SEI COMO FAZ MAS QUERIA SABER DE UM SCRIPT E AONDE COLOCA PARA QUE O ITEM TIPO : HELMET FIQUE NO SLOT HEAD SEM PODER POR NA MAO OU NO SLOT FLECHA PRECISO FIXISALO ALGUEM SABE O MEU SERVER É O YUROTS GOD BON 1.2 TIBIA 8.10!!!
  24. EDIT-- Como prometido adicionei velocidade na montaria, e fiz um sistema de blokeio para impossibilitar abrir o loot da criatura e assim debugar o server, aumentei o tempo de montaria e só espero que gostem --------------------------------------------------------------------------------------------------- Novato na area galera, bom esse sistema vai funcionar assim voce mata o War wolf clika nele (quando ele tiver morto) e voce vira um orc rider e o corpo dele some (pra deixar mais realista pra variar)... sem mais delongas peguei esse script do usuario chain q nao tinha nada a ver com esse abaixo e o editei, depois posto o link original -- Montaria system by Chain and Modified for Saymon14 ;D local function montar(parametros) cid = params[1] if getPlayerStorageValue(cid, 5555) == 1 then setPlayerStorageValue(cid,montado,-1) doPlayerSendTextMessage(cid,22,"Voce desceu da montaria.") if voc == 1 or voc == 5 then elseif voc == 2 or voc == 6 then elseif voc == 3 or voc == 7 then elseif voc == 4 or voc == 8 then end end end function onUse(cid, item, frompos, item2, itemEx, topos) --Configs-- local mount_creature = 6009 -- id do corpo da criatura local vipstorage = 1111 -- id do storagevalue do vip local voc = getPlayerVocation(cid) local sex = getPlayerSex(cid) params = { [1]=cid, [2]=lvl, [3]=voc, [4]=ml } roupamontado1 = {lookType = 4} roupamontado2 = {lookType = 4} roupamontado3 = {lookType = 4} roupamontado4 = {lookType = 4} local speed = 40 getCreatureSpeed(cid) montado = getPlayerStorageValue(cid,5555) vip = getPlayerStorageValue(cid,vipstorage) --end of configs-- --ACTION TIME!-- if item.itemid == mount_creature then addEvent(montar, 120000, params) --Sorc if voc == 1 or voc == 5 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado1, 120000) --Druid elseif voc == 2 or voc == 6 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado2, 12000) --Pally elseif voc == 3 or voc == 7 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado3, 120000) --Kina elseif voc == 4 or voc == 8 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado4, 120000) --No Voc elseif voc == 0 then doPlayerSay(cid,"Eu nao tenho voc!", 17) --- else return 0 end end return TRUE end <action itemid="6009" script="mwolf.lua" /> esse ID 6009 é o corpo do War Wolf, esse script gasta 1 de Soul para montar. DICA: tire o loot do War Wolf do seu server porque se os players mexer no loot dele tipo pega o food dentro do corpo vai dar DEBUG no server. SS: para os troxas coleguinhas que axam que só fiz Copiar, Colar, ta ai o LINK Original(CREDITOS 100% ao usuario CHAIN): Clique aqui INSTALANDO: va em \data\actions\scripts, copie qualquer arquivo e cole edit, dentro dele cole o codigo la de cima, e em seguida cole a tag no actions.XML -------------------------------------------------------------------------------- Finalizado ai em cima vamos seguir para um novo script Sistema de Montaria com Orc Marauder: -- Montaria system by Chain and Modified for Saymon14 ;D local function montar(parametros) cid = params[1] if getPlayerStorageValue(cid, 5555) == 1 then setPlayerStorageValue(cid,montado,-1) doPlayerSendTextMessage(cid,22,"Voce desceu da montaria.") if voc == 1 or voc == 5 then elseif voc == 2 or voc == 6 then elseif voc == 3 or voc == 7 then elseif voc == 4 or voc == 8 then end end end function onUse(cid, item, frompos, item2, itemEx, topos) --Configs-- local mount_creature = 11241 -- id do corpo da criatura local vipstorage = 1111 -- id do storagevalue do vip local voc = getPlayerVocation(cid) local sex = getPlayerSex(cid) params = { [1]=cid, [2]=lvl, [3]=voc, [4]=ml } roupamontado1 = {lookType = 342} roupamontado2 = {lookType = 342} roupamontado3 = {lookType = 342} roupamontado4 = {lookType = 342} local speed = 40 getCreatureSpeed(cid) montado = getPlayerStorageValue(cid,5555) vip = getPlayerStorageValue(cid,vipstorage) --end of configs-- --ACTION TIME!-- if item.itemid == mount_creature then addEvent(montar, 120000, params) --Sorc if voc == 1 or voc == 5 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado1, 120000) --Druid elseif voc == 2 or voc == 6 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado2, 12000) --Pally elseif voc == 3 or voc == 7 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado3, 120000) --Kina elseif voc == 4 or voc == 8 then doSendAnimatedText(getPlayerPosition(cid), "Uhuuuu!...", TEXTCOLOR_ORANGE) setPlayerStorageValue(cid,montado,1) doChangeSpeed(cid, speed) doRemoveItem(item.uid, 1) doSendMagicEffect(roupamontado1, 14) doSetCreatureOutfit(cid,roupamontado4, 120000) --No Voc elseif voc == 0 then doPlayerSay(cid,"Eu nao tenho voc!", 17) --- else return 0 end end return TRUE end <action itemid="11241" script="marauder.lua" /> Mesma coisa do outro só mudei o ID (11241) do corpo e o Looktype para os novatos que nao sabem modificar... SS LEMBRE SE Tire o loot das duas criaturas acima porque senao, dar DEBUG
  25. Remere's Map Editor - Criando e Modificando Extensões Olá, fiz este tutorial a um tempo atrás e agora o reformulei, espero que encontrem o que procuram e entendam o conteúdo, estarei atualizando para deixá-lo mais completo conforme o tempo, quaisquer dúvidas estarei atendendo no tópico. O tópico atenderá a quem precisar modificar alguma extensão de auto-border ou organização no Remere's Map Editor, este, seguira a ordem proposta no sumário:Borders.xml Grounds.xml Walls.xml INTRODUÇÃO Auto-border é uma ferramenta do RME utilizada para adicionar itens de um modo que formem seu padrão ou ligação, em outras palavras, o auto-border faz algumas partes do mapa para você (em outros pontos de vista, o mapa todo); você pode utilizar esta ferramenta de duas maneiras: Apenas usando-a: Seu mapa ficará quadrado/simples/desorganizado; Usando como Base: Esta é uma ação de muitos mappers que, mesmo não gostando do auto-border, utilizam para achar o pack do item selecionado, ao invés de procurar este manualmente. Outros, produzem bases ou marcações no mapa para depois completar utilizando suas habilidades. INICIANDO Antes de tudo, faça um backup do seu map editor, caso você não saiba, basta copiar a pasta que você vai modificar. Durante este tutorial, estarei utilizando a versão 8.60. Começarei com borders.xml por ser fácil de entender, porém trabalhoso. Borders.xml é o arquivo que fará a ferramenta Auto-Border adicionar, automaticamente, bordas no ground que você utilizar através desta ferramenta. É importante ressaltar, que as configurações contidas neste arquivo possuirão um ID que fará uma ligação com o arquivo grounds.xml; dessa forma, nunca esqueça de configurar corretamente o ID que você terá que adicionar em grounds.xml. Estrutura e FunçõesBorders.xml possui uma estrutura simples de entender, inicia com: <materials>E finaliza com: </materials>Entre essas duas linhas, que são a primeira e a útilma, as configurações de cada borda são organizadas como: <border id="A"> -- B -- <borderitem edge="C" item="D"/> </border>Além destas, o arquivo pode conter outras funções que são fundamentais para a organização base do RME, entretanto, está contido a estrutura base para uma funcionalidade simples; abaixo você pode similar as referências e entender esta estrutura: A - Esta função registra a borda fazendo uma ligação com um ground (em grounds.xml), este id você cria, mas deve garantir que não esteja repetido, pois se houver duas bordas com o mesmo ID ou dois grounds com o mesmo id, a ferramenta entrará em colapso e este item não funcionará como auto-border. Você saberá se cometeu um erro na hora de abrir o editor ou utilizar o item; B - Aqui você pode adicionar um nome à borda, para poder localizá-la mais facilmente, isto é opcional e você deve tomar cuidado para que o texto esteja neste padrão: -- Nome -- C - A parte mais complicada e importante é a posição dos itens que comportaram o funcionamento deste específico auto-border, em C, você deve especificar a posição da borda conforme o padrão abaixo, sempre siga esta ordem, mantendo um padrão nas suas extensões, que ficará mais fácil de criar/modificar: C - Em C, você adiciona o id das bordas conforme a configuração de posição mostrada acima; Ao adicionar as bordas de grass (os ids) conforme a posição da "Rosa dos Ventos", o script fica assim: <borderitem edge="n" item="4542"/> <borderitem edge="e" item="4543"/> <borderitem edge="s" item="4544"/> <borderitem edge="w" item="4545"/> <borderitem edge="cnw" item="4546"/> <borderitem edge="cne" item="4547"/> <borderitem edge="csw" item="4548"/> <borderitem edge="cse" item="4549"/> <borderitem edge="dnw" item="4550"/> <borderitem edge="dne" item="4551"/> <borderitem edge="dsw" item="4552"/> <borderitem edge="dse" item="4553"/> Um script de uma borda completo deve estar como o modelo abaixo (apenas a estrutura, os ids e nome podem ser diferentes): <materials> </border>... <border id="2" group="1"> -- grass border -- <borderitem edge="n" item="4542"/> <borderitem edge="e" item="4543"/> <borderitem edge="s" item="4544"/> <borderitem edge="w" item="4545"/> <borderitem edge="cnw" item="4546"/> <borderitem edge="cne" item="4547"/> <borderitem edge="csw" item="4548"/> <borderitem edge="cse" item="4549"/> <borderitem edge="dnw" item="4550"/> <borderitem edge="dne" item="4551"/> <borderitem edge="dsw" item="4552"/> <borderitem edge="dse" item="4553"/> </border> <border id="3"... </materials> Grounds.xml é o arquivo responsável pelos tiles que são adicionados com bordas automáticas no RME, neste, você adicionará funções que determinam os tiles e suas respectivas repetições/variações, assim como o id da borda criada. É uma parte fácil de lidar, porém há funções que você deve decorar para saber como esta ferramenta funcionará no RME. Estrutura e FunçõesVeja abaixo a estrutura principal de grounds.xml: <materials> <materials> <brush name="A" type="ground" server_lookid="B" z-order="C"> <item id="D" chance="E"/> <border align="outer" id="F"/> <border align="inner" to="none" id="G"/> </brush> </materials>Para entender a estrutura, siga em ordem as referências e associe com o que já foi dito anteriormente: A - Aqui você deve escrever, em minúsculo, o nome do seu ground; este nome será colocado em tilesets.xml para que o editor saiba que a ferramenta existe e onde colocá-la; B - Em B, deve ser posto o id do tile, este, aparecerá na paleta para identificar a ferramenta; C - Z-order é a função que diz se o as bordas do seu tile ficarão por cima/por baixo de outros tiles, se a dúvida for: Por que esta função se encontra em ground.xml e não em borders.xml, leia: Ao colocar um ground em cima do outro, este que já estava será removido; o script do ground adicionado deve identificar o que acontecerá com suas bordas, veja as imagens para entender: Perceba que o ground de terra fica abaixo do ground Lawn, que é a grama escura; respectivamente, o ground de grass fica acima do ground Lawn. Isso acontece por que ambos os três possuem um z-order diferente, conforme as imagens: z-order="2800"> z-order="1000"> z-order="5100"> D - Nesta parte, você coloca o id do seu ground, pode colocar vários grounds, um em baixo do outro (repetindo a função) que a ferramenta fará eles saírem de ordem aleatória no mapa, conforme a prioridade decidida, confira: <item id="4526" chance="2500"/> <item id="4527" chance="10"/> <item id="4528" chance="25"/> <item id="4529" chance="25"/> <item id="4530" chance="25"/> <item id="4531" chance="25"/> <item id="4532" chance="25"/> <item id="4533" chance="25"/> <item id="4534" chance="15"/> <item id="4535" chance="25"/> <item id="4536" chance="25"/> <item id="4537" chance="25"/> <item id="4538" chance="20"/> <item id="4539" chance="20"/> <item id="4540" chance="20"/> <item id="4541" chance="20"/> E - Como o próprio nome já diz, esta é a função que determina a prioridade do ground, no script acima, perceba que cada ground tem um chance id igual ou diferente, o objetivo disso é fazer os grounds saírem com a mesma proporção, ou um ground aparecer mais vezes que outros grounds. F - Outer, que em português significa Exterior, é a borda que contornará um ground por fora, basta adicionar o id da borda que você quer que faça parte do ground, ele ficará assim: G - Inner, que em português significa Interior, é a borda que contornará um ground por dentro, esta função é muito utilizada para grounds adicionados em montanhas, pois geralmente a borda faz ligação com a parte de baixo que é a montanha: Após finalizar estas funções, se fez certo, você já terá o seu ground funcionando corretamente, abaixo darei um exemplo desse script completo: <brush name="grass" type="ground" server_lookid="4526" z-order="3500"> <item id="4526" chance="2500"/> <item id="4527" chance="10"/> <item id="4528" chance="25"/> <item id="4529" chance="25"/> <item id="4530" chance="25"/> <item id="4531" chance="25"/> <item id="4532" chance="25"/> <item id="4533" chance="25"/> <item id="4534" chance="15"/> <item id="4535" chance="25"/> <item id="4536" chance="25"/> <item id="4537" chance="25"/> <item id="4538" chance="20"/> <item id="4539" chance="20"/> <item id="4540" chance="20"/> <item id="4541" chance="20"/> <item id="470" chance="0"/> <border align="outer" id="2"/> <border align="inner" to="none" id="1"/> </brush> Walls.xml é o arquivo que cria suas ferramentas de walls, não é complicado, assim como o grounds.xml, você deve entender as funções; depois que criar, só precisa adicionar o nome em tileset.xml e usar. Estrutura e FunçõesA estrutura de Walls.xml é composta por: <materials> <brush name="A" type="wall" server_lookid="B"> <wall type="C"> </wall> <wall type="D"> </wall> <wall type="E"> </wall> <wall type="F"> </wall> </brush> Eu separei o script acima para entender melhor sua estrutura, veja os passos abaixo depois as funções completas: A - Como nos outros scripts, aqui vai o nome, em minúsculo, que identificará o script em tilesets.xml; B - Em B, deve ser posto o id do tile, este, aparecerá na paleta para identificar a ferramenta; C - Wall type se refere aos diferentes tipos da walls, existem 4 no padrão tibiano, a primeira da ordem é a <wall type="horizontal">, como mostra a figura: D - Aqui encontra-se o segundo tipo de wall, a <wall type="vertical">, como mostra a figura: E - A terceira wall é a <wall type="corner">, como mostra a figura: F- A quarta e última é a <wall type="pole">, como mostra a figura: <wall type="horizontal"> <item id="A" chance="500"/> <door id="B" type="normal" open="false"/> <door id="B" type="normal" open="true"/> <door id="B" type="locked" open="false"/> <door id="B" type="locked" open="true"/> <door id="B" type="quest" open="false"/> <door id="B" type="quest" open="true"/> <door id="B" type="magic" open="false"/> <door id="B" type="magic" open="true"/> <door id="B" type="hatch_window" open="false"/> <door id="B" type="hatch_window" open="true"/> <door id="B" type="window"/> </wall> <wall type="vertical"> <item id="A" chance="500"/> <door id="B" type="normal" open="false"/> <door id="B" type="normal" open="true"/> <door id="B" type="locked" open="false"/> <door id="B" type="locked" open="true"/> <door id="B" type="quest" open="false"/> <door id="B" type="quest" open="true"/> <door id="B" type="magic" open="false"/> <door id="B" type="magic" open="true"/> <door id="B" type="hatch_window" open="false"/> <door id="B" type="hatch_window" open="true"/> <door id="B" type="window"/> </wall> <wall type="corner"> <item id="A" chance="1000"/> </wall> <wall type="pole"> <item id="A" chance="1000"/> </wall> A - Em A, vai o id da wall conforme a configuração "Horizontal, Vertical, Corner ou Pole". São respectivamente: B - Em B, é configurado o id da wall para as configurações mostradas a baixo, lembre-se que a mesma configuração vale para os tipos de walls "Horizontal, Vertical, Corner ou Pole", siga os exemplos: Normal: <door id="B" type="normal" open="false"/> <door id="B" type="normal" open="true"/> False: A função com false vai o ID da porta normal fechada. True: A função com true vai o ID da porta normal Aberta. Locked: <door id="B" type="locked" open="false"/> <door id="B" type="locked" open="true"/> False: A função com false vai o ID da porta trancada fechada. True: A função com true vai o ID da porta trancada Aberta. Magic: <door id="B" type="magic" open="false"/> <door id="B" type="magic" open="true"/> False: A função com false vai o ID da porta mágica fechada. True: A função com true vai o ID da porta magica Aberta. Quest: <door id="B" type="quest" open="false"/> <door id="B" type="quest" open="true"/> False: A função com false vai o ID da porta de quest fechada. True: A função com true vai o ID da porta de quest Aberta. Janelas <door id="B" type="hatch_window" open="false"/> <door id="B" type="hatch_window" open="true"/> <door id="B" type="window"/> Quaisquer dúvidas, estou a disposição!
×
×
  • Criar Novo...