Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/18/10 em todas áreas

  1. Aqui estamos nós denovo, para falar de scripts! Obvio a coluna se chama assim... Depois de muita ladainha vamos finalmente criar um script, mas não da maneira errada que muito de nós fazemos, e sim de uma maneira "correta". O que aconteceria se mandassemos 50 pedreiros construirem um predio? Provavelmente fariam ele, mas será que teria a mesma segurança do que com um engenheiro? Respondido Agora mandando 50 pedreiros fazerem um serviço como construir um comodo numa casa antiga. Sem duvida eles fariam muito bem sem nenhuma pessoa superior. O engenheiro seria uma alusão ao planejamento. Sem planejamento é muito complicado fazer algo grande. Um script grande como uma arena, dominação de castelo, uma quest grande como inquisition. Porém scripts mais simples como vara de pescar, uma quest simples como demon helmet, já se pode fazer mais rapidamente. Quando se é programador, dependendo da empresa temos os coordenadores, analista que fazem o planejamento, fazem um UML (ou diagramas de blocos) no nosso caso um papel com umas anotações basicas já são uteis. Um exemplo pratico de quest simples. Demon Helmet Vamos fazer o planejamento dela, que apesar de tosco se você tentar em algo que deseja fazer ajuda. Estou ignorando as recompensas. O que é? Uma sala com -Alguns demons e banshees -Uma sala de recompensa com três baus fechada com uma pedra -Uma alavanca. Ai a tal da quest (foto n eh minha) O que faz? -Quando você clica na alavanca, a pedra some liberando a passagem para a sala de recompensa -Cria um teleport de saida. Quando você clica denovo, a pedra volta e o teleport some. Como eu faço? Se você leu o possibilidades vai saber, provavelmente esse é facil, outros serão dificeis. Bem o que faz? Se você leu a unica ação que fazemos é usar a alavanca. Ou seja evento onUse que é uma ACTION Já sabemos que é uma action, então vamos começar nosso script. Vamos supor que ja temos o mapa feito. Criaremos a alavanca as quest e tudo mais. Qual é a melhor maneira de se identificar uma UNICA alavanca que fará uma ação? Meio explicito usando UniqueID. No meu caso o UID (Unique ID) é 8550 por organização pessoal. Então começaremos nosso script com a base de toda action. function onUse(cid, item, frompos, item2, topos) end Ah mas tal script ta assim function onUse(cid, item, pos, itemEx, topos) end DANE-SE! è mesma coisa, contando que você coloque em todas funções os parametros cid,item,pos,itemex como está em cima, não fará diferença Bem agora teremos que fazer o script identificar o item... Esse script será direcionado para o UID 8550. Porém a alavanca tem dois estados ativo(1946) e desativo (1945). Vamos identificar adicionando if item.itemid == 1945 then Então ai ele pergunta se ela está desativada E para finalizar colocaremos um end e um else caso ela seja 1946. Por que não colocamos um else if? -Porque uma alavanca ou é 1945 ou 1946. Então se não for 1945 é 1946 e vice versa. Ficando assim function onUse(cid, item, frompos, item2, topos) if item.itemid == 1945 then else end end Vamos codificar caso ela esteja desativada. Nesse caso ela removerá a pedra e criará o teleport e ativará a alavanca. Primeiro vamos identificar a posição que o teleport será criado,a posição da alavanca e aonde iremos quando entramos no teleport. No meu caso é: local gatepos = {x=1069, y=653, z=15, stackpos=1} -- posição da pedra local telepos = {x=1071, y=652, z=15, stackpos=1} -- posição do teleport local gopos = {x=1073, y=653, z=14, stackpos=1} -- aonde iremos depois E seus thingpos: local getgate = getThingfromPos(gatepos) local gettele = getThingfromPos(telepos) E agora removeremos a pedra, transformaremos a alavanca e criaremos o teleport doRemoveItem(getgate.uid,1) --Remove o teleport doTransformItem(item.uid,item.itemid+1) -- Transforme a alavanca doCreateTeleport(1387, gopos, telepos)--cria o teleport Pronto! 80% está feito. Porque? a parte da alavanca ativada, é apenas inverter nossa ação. Criaremos a pedra,desativamos a avalanca e tiramos o teleport doCreateItem(1355,1,gatepos) doTransformItem(item.uid,item.itemid-1) doRemoveItem(gettele.uid,1) E ainda melhoramos meu script antigo que foi feito sem planejamento. function onUse(cid, item, frompos, item2, topos) local gatepos = {x=1069, y=653, z=15, stackpos=1} local telepos = {x=1071, y=652, z=15, stackpos=1} local gopos = {x=1073, y=653, z=14, stackpos=1} local getgate = getThingfromPos(gatepos) local gettele = getThingfromPos(telepos) if item.itemid == 1945 then doRemoveItem(getgate.uid,1) doTransformItem(item.uid,item.itemid+1) doCreateTeleport(1387, gopos, telepos) else doCreateItem(1355,1,gatepos) doTransformItem(item.uid,item.itemid-1) doRemoveItem(gettele.uid,1) end end Não planejou? Se lascou! Bem aqui está um script planejado. Mas planejamento não quer dizer que não tenha erros. Mas fica mais facil encontra-los. Bem deixo a cargo de quem ler isso encontrar erros existente ai. Eu encontrei dois. Que será tema do proximo artigo. Evitando problemas. Até lá
    2 pontos
  2. Mount System - 100% inovador! Fala galerinha, é mais uma vez eu trazendo Scripts para o pessoal do XTibia, dessa vez eu dei uma "inovadinha" no script e fiz um vídeo explicando sobre ele, confira! Vídeo sobre o sistema: http://www.youtube.com/watch?v=xpyI4FtY7dM Bom vamos logo ao script: Primeiramente vamos fazer uma pequena alteração no arquivo items.xml, abra-o e procure por "giant eye", mude esse nome para "mysterious pet", assim: <item id="11191" name="mysterious pet"><attribute key="weight" value="120" /></item> Agora vamos adicionar as actions, vá até a pasta "Actions" e abra o arquivo "Actions.xml" e adicione esta tag: <action itemid="11191" event="script" value="mount.lua"/> Ok, agora volte a pasta "Actions" e abra a pasta "Scripts", faça uma arquivo chamado "mount.lua" e adicione isto: -- [( Mount System 1.4 created by Doidin for XTibia.com )] --function onUse(cid, item)local outfit = {lookType = 342} -- Outfit da montaria!local exhaust = 60 -- Tempo para player poder usar o item novamente! (tempo em segundos)local time = 60 -- Tempo para ficar na montaria! (tempo em segundos)local speed = 300 -- Velocidade adicionada ao player após usar o item! (300 = velocidade, quanto maior mais rapido...)local mana = 1300 -- Quantidade de mana que o player necessita para usar o sistema!local premium = "yes" -- Apenas players premium accounts "yes" or "no"!?local storage = 9393 -- Não mexa aqui!if premium == "yes" and not isPremium(cid) thenreturn doPlayerSendTextMessage(cid, 23, "Sorry, only premium players.")endif(getCreatureMana(cid) < mana) thenreturn doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)endif (getPlayerStorageValue(cid, storage) <= os.time()) thendoCreatureSay(cid, "Yeeeah!!!\nYou went up on his ride.", 19)doSetCreatureOutfit(cid, outfit, time*1000)doChangeSpeed(cid, speed)doSendMagicEffect(getCreaturePosition(cid), 34)setPlayerStorageValue(cid, storage, os.time()+exhaust)doPlayerAddMana(cid, -mana)addEvent(doChangeSpeed, time*1000+40, cid, -speed)addEvent(doPlayerSendTextMessage, time*1000+45, cid, 23, "Mount System is time out!")addEvent(doSendMagicEffect, time*1000+50, getCreaturePosition(cid), 2)doRemoveItem(item.uid, 1)elsedoPlayerSendCancel(cid, "Sorry, you only can again use this item after "..exhaust.." seconds.")endreturn TRUEend Pronto agora configure o script da maneira que você quiser! Caso queira mudar a outfit da sua montaria clique aqui e saiba mais. OBS: A inteção do script é algum NPC te vender um item que no caso é o "mysterious pet" e esse item é super raríssimo, ele tem a função de te dar um "PET" misterioso por um certo tempo para você usar ele como montaria! Aaah só pra constatar eu tive uma pequena ajuda dos meus amigos MatheusMkalo e do Vodkart.. ;] Espero que tenham gostado do script e do vídeo! ;] <* Não poste em outros fórums, exclusivo ao XTibia.com *>
    1 ponto
  3. joaohd

    [Talkaction] Name Changer

    Bom, sem muito papo, vamos ao script: Em data/talkactions/scripts, crie um arquivo chamado namechange.lua e coloque isto dentro: -- Creditos a Won Helder, apocarai, MatheusMkalo function onSay(cid, words, param) local maxLen = 15 -- tamanho maximo do nome local itemid = 2361 ------ Numero do Item que será removido local proibido = {"!","@","*"} -- simbolos proibidos for i = 1, #proibido do if string.find(tostring(param), proibido[i]) then doPlayerSendCancel(cid,"Não pode usar símbolos em seu nome.") return TRUE end end if tostring(param) == "" then -- checkar se não é nome vazio doPlayerSendCancel(cid, "Você deve informar um nome.") return TRUE end if string.len(tostring(param)) > maxLen then doPlayerSendCancel(cid, "Você pode usar no máximo " .. maxLen .. " letras.") return TRUE end if not getTilePzInfo(getCreaturePosition(cid)) then doPlayerSendCancel(cid,"So pode ser usado em pz.") return TRUE end if getPlayerItemCount(cid, itemid) >= 1 then doPlayerRemoveItem(cid, itemid, 1) db.executeQuery("UPDATE `players` SET `name` = '"..param.."' WHERE `id` = "..getPlayerGUID(cid)..";") doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.") addEvent(doRemoveCreature, 5*1000, cid, true) else doPlayerSendCancel(cid,"Você não possui o item " .. getItemNameById(itemid) .. ".") end return TRUE end E em talkactions.xml: <talkaction words="!changename" event="script" value="namechange.lua"/> Pronto. Para usar diga: !changename NOME NOVO Créditos: Won Helder, apocarai, MatheusMkalo flw
    1 ponto
  4. Doidin

    [Talkaction] Comando De Invasão!

    Fala galerinha XTibiana, Bom agora são exatamente 06:23 da manha e eu estava sem nada pra fazer, então tava vendo as raids de um servidor meu e resolvi criar um script simples porem um pouquinho diferente de invasão por Talkaction! Bom vamos logo ao script: Vá até a pasta Talkactions abra o arquivo Talkactions.xml e adicione esta Tag: <talkaction log="yes" access="4" words="/invas" event="script" value="invas.lua"/> Agora vá até a pasta Scripts dentro da pasta Takactions, crie um arquivo chamado invas.lua e adicione isto dentro: -- [( Invasion Talk created by Doidin for XTibia.com )] -- function onSay(cid, words, param, channel) local pos_invas = {x=138,y=66,z=7} -- Coordenada da invasão! (Basta configurar essa) local monster1 = "Vampire Bride" -- Boss que irá aparecer na invasão! local monster2 = "Vampire" -- Monstro de apoio que irá aparecer na invasão! local mensage1 = "A powerful vampire is invading the north of Carlin with intent to destroy everything!" -- 1º Mensagem da invasão! local mensage2 = "It seems not to reach monsters, come fight!" -- 2º Mensagem da invasão! broadcastMessage(mensage1, MESSAGE_EVENT_ADVANCE) doSummonCreature(monster1, {x=pos_invas.x, y=pos_invas.y, z=pos_invas.z}) doSummonCreature(monster2, {x=pos_invas.x, y=pos_invas.y+3, z=pos_invas.z}) doSummonCreature(monster2, {x=pos_invas.x+2, y=pos_invas.y, z=pos_invas.z}) doSummonCreature(monster2, {x=pos_invas.x, y=pos_invas.y, z=pos_invas.z-5}) addEvent(broadcastMessage, 20*1000, mensage2, MESSAGE_EVENT_ADVANCE) end Bom é isso ai, tem gente que vai dizer que prefere as raids, mais tem outros que irá preferir assim... ;] Abraços...
    1 ponto
  5. Vodkart

    Multi Linguagem

    Sistema de Multi Linguaguem 1- O que é e como funciona? Uma palavra exemplo "uma coisa", que permite aos jogadores um jogo mais fácil do idioma do servidor exterior. Dizer "uma coisa" eu quero dizer o conjunto de funções (não só uma) para ajudar a escrever scripts em que as informações transmitidas para os jogadores serão exibidos em diferentes idiomas. Bem, bem, vamos continuar... 2- Instalação. vá até Data\lib abre o 050-function.lua e adicione: ---------------Linguaguem--------------- local config = { default = 1, storage = 11548, languages = { [1] = "english", [2] = "portugues" } } function getPlayerLanguage(cid) local status = getPlayerStorageValue(cid, config.storage) if(status == -1 or status == 0) then setPlayerStorageValue(cid, config.storage, config.default) end return getPlayerStorageValue(cid, config.storage) end function getPlayerLanguageName(cid) local status = getPlayerStorageValue(cid, config.storage) if(status == -1 or status == 0) then setPlayerStorageValue(cid, config.storage, config.default) end return config.languages[getPlayerStorageValue(cid, config.storage)] end function setPlayerLanguage(cid, languageId) return setPlayerStorageValue(cid, config.storage, languageId) end function getLanguagesList() return config.languages end Para adicionar uma nova língua deve ser colocada na tabela: [id] = "Nova Lingua" obs: só não se esqueça da virgula. Bem, o sistema foi instalado. Somente o jogador pode mudar isso, o script é simples ele que irá fornecer informações básicas sobre o sistema e permitir a alteração do idioma. Agora vá até Data\Talkactions\script crie um arquivo.lua e renomeie para language.lua function onSay(cid, words, param, channel) local msgs = { info = {"Multi language system\n\n commands:\n /lang language_number - if you want to set language\n\nLanguage list:\n", "Multi language system\n\n Comando:\n /lingua numero da linguaguem - Se você quiser mudar o idioma seleciona na lista\n\nLista linguagens:\n"}, succes_set = {"You change your language to ", "Você mudou o Idioma para "}, fail_set = {"Wrong param format.", "Param formato invalido."} } local t = string.explode(param, ",") if(not t[1]) then local languages = getLanguagesList() local msg = msgs.info[getPlayerLanguage(cid)] for id, name in pairs(languages) do msg = msg .."".. id ..". ".. name .."\n" end doPlayerPopupFYI(cid, msg) elseif(t[1]) then setPlayerLanguage(cid, tonumber(t[1])) local msg = msgs.succes_set[getPlayerLanguage(cid)] .."".. getPlayerLanguageName(cid) doPlayerSendTextMessage(cid, 22, msg) elseif(t[2]) then local msg = msgs.fail_set[getPlayerLanguage(cid)] doPlayerSendCancel(cid, msg) end return TRUE end Em talkactions.xml adicione a tag: <talkaction words="/lang" event="script" value="language.lua"/> No início alguns podem ter problemas com a edição das informações apresentadas pelo roteiro, mas todos os problemas desapareceram depois de ler o próximo passo. 3- Utilizando o novo sistema. Para exibir as mensagens em uma linguagem específica seria necessária a informação em uma linguagem que o jogador atua. Isto é possível graças ao "getPlayerLanguage(cid)", que retorna o id da linguagem escolhida pelo jogador. Então, no início de cada script é bom para fazer uma variável que irá armazenar esta informação: local lingua = getPlayerLanguage(cid) Ok, mas onde obter o conteúdo das informações? A melhor maneira é armazená-lo (eles) na tabela... Para visualizar esta mensagem em um jogador apenas deve se referir ao id correspondente, para esse fim, usamos uma variável que armazena o id do idioma do jogador: local lingua = getPlayerLanguage(cid) local info = {"message in english", "mensagem em portugues"} local exibe_informa = info[lingua] Para visualizar a mensagem simplesmente usar o código da funções, tais como: doPlayerSendTextMessage(cid, 22, exibe_informa) 4. Screen's
    1 ponto
  6. moskitinho

    Ezio Tokumoto

    Olá pessoal, Pra fechar a semana com chave de ouro trago a vocês um tutorial do membro 'tokumoto' um dos melhores designers que conheci este ano, espero que gostem a possam aprender algo com ele. Bom galera é isso, na proxima semana vocês vão conferir alguns tutoriais exclusivos para o XTibia, fiquem atentos no Temporada de Caça e no meu canal do YouTube. Obs.: Não deixem de conferir o novo video no tópico de postagens do Screencast, tem lá Indicações e um Video Tutorial muito banaca!
    1 ponto
  7. Vodkart

    Função "doplayeraddpremiumpoints"

    nd mano agr ja temos um npc de vender premium points \o quanto mais melhor né uhu o importante é que você está se dedicando nessa area e vc leva muito jeito p/ codigo LUA parabens ai jhow
    1 ponto
  8. Doidin

    Quest Sómente Uma Vez

    Tenta esse script de porta: Action: -- [( XTibia.com )] -- function onUse(cid, item, frompos, item2, topos) local doorpos = {x = frompos.x, y = frompos.y, z = frompos.z, stackpos = 253} local playerpos = getPlayerPosition(cid) local storage = 8788 if getPlayerStorageValue(cid, storage) == -1 then if playerpos.y == doorpos.y + 1 and playerpos.x == doorpos.x then doMoveCreature(cid, 0) elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y then doMoveCreature(cid, 1) elseif playerpos.y == doorpos.y - 1 and playerpos.x == doorpos.x then doMoveCreature(cid, 2) elseif playerpos.y == doorpos.y and playerpos.x == doorpos.x + 1 then doMoveCreature(cid, 3) elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y - 1 then doMoveCreature(cid, 4) elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y - 1 then doMoveCreature(cid, 5) elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y + 1 then doMoveCreature(cid, 6) elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y + 1 then doMoveCreature(cid, 7) end setPlayerStorageValue(cid, storage, 1) else doPlayerSendTextMessage(cid,22,"Você só pode passar pela porta uma vez.") end return TRUE end ATUALIZEI O SCRIPT, ARRUMEI UM BUG...
    1 ponto
  9. Vodkart

    [Gift] To Kakilo 2

    Bom como aquela não agradou em muitos aspectos da sign tanto quanto nos efeitos usados e na tipo resolvi fazer outra... espero que goste... abraços fera
    1 ponto
  10. PedrinhuHenrique

    [Encerrado] Liberar Portas?

    Coloca como você colocou o ip estático! Por exemplo: Se colocou 192.168.1.90, lá no roteador se tem que colocar esse IP para liberar as portas do TEU PC. No config.lua se tem que colocar o ip global: www.meuip.com.br
    1 ponto
  11. gabrielf10

    Mudando Itens Iniciais

    Bom, Galera, agora vou ensinar aos iniciantes que não sabem como mudar os itens iniciais no seu serv. 1. Vá até a pasta do seu servidor e entre em Data/CreatureScripts/Scripts/Firstitems. 2. Veja o Code e a Introdução Abaixo. Introdução: Vermelho:Os Número em Vermelho São Os IDs Dos Itens que tem os Nomes Escritos Ao Lado Direito. Azul:Os Nomes em Azul São Os Nomes Dos Itens Iniciais, Cujos IDs, Estão Escritos No Lado Esquerdo da Tela. 3-Feche,Salve E Seja Feliz.(Se Não Funcionar ou der algum Erro,Reporte-o Aqui, e eu ajudarei voce.) OBS:Os Itens Podem Ser Diferentes, Este Exemplo é do Slayer Yurots 8.4 Espero Ter Ajudado, Gabrielf10
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...