Jump to content
×
×
  • Create New...

Search the Community

Showing results for tags 'script'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • 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
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Categories

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

  1. Tipo do script: sistema de invasão Protocolo (versão do Tibia): 8.60 Servidor utilizado: TFS 0.4 SVN Nível de experiência: Não sei Adicionais/Informações: Queria um sistema de invasão com os seguintes eventos, igual ao do global. * Hora e dia; * Local para os monstros nascer; * E se ninguém matar o mostro sumir depois de 15mim ; * Enviar msg no broadcast; * De forma automática executar os raids. Tentei utilizar este sistema http://www.xtibia.com/forum/topic/156691-globalevents-invasao/ Mas não funcionou aqui.
  2. Dodge System por item V2 http://prntscr.com/7f2vl9 Para quem não sabe eu ja tinha feito um Dodge System ano passado, na época que eu não sabia nada, embora eu ainda não saiba nada to melhorando , eu tava sem nada para fazer ai decidir refazer, o script não tem nada de novo só foi modificado e melhorado algumas coisa. Para que não sabe dodge é um sistema que faz com que o player tenha uma certa porcentagem de esquiva de um ataque( por ele te esquivado ele não vai toma nenhum ataque e não apenas 50%) Então vamos la: Em creaturescript: Dodge System.lua function onStatsChange(cid, attacker, type, combat, value) local getStorage = getPlayerStorageValue(cid, 123455678) if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then local chance = math.random (0,100) if chance <= getStorage then doSendAnimatedText(getCreaturePos(cid), "MISS!", 214) doSendMagicEffect(getCreaturePosition(cid), 30) return false end end return true end Creaturescript.xml <event type="StatsChange" name="DodgeSystem" event="script" value="Dodge System.lua"/> Login.lua antes do ultimo return true registerCreatureEvent(cid, "DodgeSystem") if getPlayerStorageValue(cid, 123455678) == -1 then setPlayerStorageValue(cid, 123455678, 0) end em action: dodgestone.lua function onUse(cid, item, fromPosition, itemEx, toPosition) local max = 50 -- limite de dodge local storagedodge = 123455678 -- storage do dodge if getPlayerStorageValue(cid, storagedodge) >= max then return doPlayerSendTextMessage(cid,22,"Você ja chego no limite de Dodge.") else doPlayerSetStorageValue(cid, storagedodge, (getPlayerStorageValue(cid, storagedodge)) + 1) doPlayerSendTextMessage(cid,22, "DodgeSKILL:["..getPlayerStorageValue(cid, storagedodge).."/"..max.."].") doRemoveItem(item.uid, 1) end return true end action.xml tag <action itemid="Id do item" event="script" value="dodgestone.lua"/> Se tiver algum bug ou dica de como melhorar pode comentar ai nos cometários Ps. com base nesse da para fazer Critical System, Reflect System e da para usar como magia de esquiva, se precisar é so fala
  3. 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...
  4. 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
  5. 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 ^^
  6. 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.
  7. 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
  8. 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
  9. 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
  10. 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"/>
  11. 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!
  12. •[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
  13. | Melhorado Mapa e Adicionado Varias Áreas | Novos Itens | Novas Questes | Novos Bichos | Adicionado VIP 15 | Retirado Bugs no Mapa... | Retirado Varios Bugs no Distro | Novo Visual do Templo | Critical System | Dodge System | Reset System,para resetar fale !reset | Guild Frags System | PvP Balanceado Agora todas vocações estão no balanço | Armas Arrumadas Para Melhor PvP | Varios Eventos | Invasões no Templo de Boss Automatico | Battle Field Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Muitas Outras Coisas | Confira ! | Senha do ADM: god/god IMAGENS Templo Parte Centro Treiners Abaixo do Templo Novo Visual Npc Hero Vendendo Itens Heros Castle WAR 24 Horas | Download http://www.4shared.c...ks_Vip_15.html? | Scan https://www.virustot...sis/1403811216/ | Créditos DeathRocks sirrubilax
  14. 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.
  15. 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
  16. 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
  17. 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)
  18. 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
  19. Olá companheiros do xTibia Venho por meio deste post pedir com que me ajudem a criar um script de boss room para um servidor OTX .2 ... Sei que é antigo e quase ninguém usa mais ... porém eu baixei um e estou editando e fiz diversas modificações e seria jogar tempo fora e tanta dedicação ... voltei a mexer com Ot's depois de 10 anos e não sabia essas diferenças ... A minha duvida é a seguinte ... eu gostaria de um script de boss room que o jogador ou os jogadores pudessem fazer esse boss 1x a cada 24hrs ao puxar a alavanca ... ! com uma mensagem escrita o seguinte caso o jogador ja tivesse feito o boss ... "Você ja participou hoje volte amanhã" basicamente é isso ... obrigado =D
  20. 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 =)
  21. 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:
  22. 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
  23. 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
  24. 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
  25. Bom dia turma do Xtibia. Venho trazer um script que fiz para um usuário de outro fórum, abaixo seguem maiores informações sobre. Introdução: Bom, este script simula a máquina de Cassino conhecida como Cassino Slots, pra quem não conhece é a máquina que se encontra no spoiler abaixo: Como funciona? O jogador precisa escolher 1 (um) dos 10 (dez) itens disponíveis (da para configurar a quantidade de itens) como seu Item da Sorte, e após feito isso, terá que girar a alavanca e torcer para que a máquina sorteie 3 itens repetidos igual ao que o jogador em questão escolheu. Para tornar um pouco mais fácil de vencer, criei para que a máquina dê pequenos brindes à quem acertar 1 ou 2 itens dos sorteados (configurável). Como jogar? Para jogar é simples, como desenvolvi todo script em apenas um arquivo, para facilitar na criação, na instalação e até mesmo na jogabilidade, o jogo se baseia na posição em que o jogador está para identificar qual ação executar. Selecionar Item da Sorte: com seu personagem virado para baixo (sul), clique na alavanca e automaticamente o item da sorte aparecerá na mesa configurada no script, caso queira outro item, basta ir usando a alavanca até encontrar o item desejado. Como Jogar: Após ter selecionado seu item da sorte, que deve estar à mostra em cima da mesa própria, basta virar seu personagem para cima (norte) e clicar novamente na alavanca. E se virar esquerda ou direita?: Nada acontecerá, apenas uma mensagem ensinando como jogar será enviada para que o jogador se oriente. Dicas de instalação! Sugiro que quando for criar o mapa para o evento, não faça como do vídeo, pois os itens criados nas mesas não estão com atributos para que não possam ser movidos, sendo assim é provável que jogadores de má fé venham a roubar itens... Faça como a imagem abaixo: Instalando: Basta criar um arquivo na pasta “data/actions/scripts” chamado “cassino_slots.lua” e adicionar o código abaixo dentro: Agora em “actions.xml” adicione a tag abaixo: Agora basta configurar de acordo com as informações disponíveis no início do script. Vejam o vídeo demonstrativo do Sistema em funcionamento. Criado por: Adriano Swatt'