Ir para conteúdo

Nil Value

Campones
  • Total de itens

    75
  • Registro em

  • Última visita

Histórico de Reputação

  1. Upvote
    Nil Value deu reputação a Omega em [5] - Aplicações em OTservers (I)   
    Aplicando em OTServers - I



    Muito foi desenvolvido desde o início dos OTServers e, embora muitos não tenham observado isso, esse desenvolvimento foi lento. Inicialmente, era muito difícil criar scripts para OTS's, porque o suporte para tal era pequeno. Os primeiros scripts desenvolvidos eram somente actions e spells. Movements, globalevents, talkactions e, finalmente, creaturescripts foram introduzidos posteriormente. Por isso, vamos começar com aplicações básicas de actions, que são scripts que definem uma função chamada quando o jogador usa um item.

    Antes disso, vamos começar entendendo como funcionam os OTServers: o código-fonte, que é compilado e se transforma, em última instância, naquele executável que serve para abrir o servidor, é feito em C++, uma outra linguagem de programação. Essa parte define toda a base do servidor e é mais complicada de se editar, pois toda vez ele terá que ser compilado novamente. Por isso, utiliza-se Lua, uma linguagem de fácil edição. O código-fonte ou source code ou simplesmente, sources do servidor define o que acontecerá com as informações recebidas pelo cliente. Quando um jogador clica em um item, esse clique é enviado para o servidor, que encaminha essa resposta para um script Lua do tipo action. O servidor, então, lê esse código Lua e o executa.

    E é aí que nós, scripters Lua, entramos.

    Até agora abordamos um código para um baú de quest, mas com funções fictícias. Os códigos-fonte mais usados são os desenvolvidos pelo The Forgotten Server Team, mais conhecidos como TFS. Nele, existem várias funções que podemos usar em nossos códigos Lua. Vamos usar algumas funções dele a seguir, para criarmos um script de um baú de quest de verdade.

    Primeiramente, vamos pensar nas restrições: um baú de quest deve poder ser aberto apenas uma vez, certo? Essa é nossa primeira condição. Além disso, talvez queiramos fazer um baú específico para uma vocação. Essa será nossa segunda condição. Então, o jogador terá duas condições para cumprir e deverá receber uma mensagem avisando se não cumprir cada condição. Caso ambas sejam cumpridas, ele deverá ganhar a recompensa e algo que evite que ele abra novamente o baú. Vamos criar um esboço do código:

    Agora precisamos traduzir isso para as funções utilizadas e entendidas pelo servidor: a função básica, que é chamada quando um item é usado, se chama onUse e seus dois primeiros parâmetros são cid e item. Precisamos entender o que é o cid. Cada criatura dentro do servidor tem um número de identificação único para ela. Esse número é denominado cid – creature identification. Para executarmos alguma função para uma criatura ou para conseguirmos informação sobre essa criatura, precisaremos fornecer seu número de identificação como parâmetro dessa função. Segue no link uma lista de algumas das várias funções existentes nos servidores 8.6 – aqui.



    Várias informações dos jogadores podem ser guardadas no banco de dados do servidor (mais sobre isso no capítulo de Banco de dados e SQL). Inclusive informações que chamamos de storages, que podem ser usados para guardar números e strings e não são apagados quando o jogador loga ou morre. Para manipulá-los, podemos utilizar a função setPlayerStorageValue(cid, storageKey, value) e getPlayerStorageValue(cid, storageKey). Cada storage tem uma chave de identificação (storageKey). Se ele não tiver um valor definido, seu valor padrão é -1. Portanto, podemos utilizar essas funções para verificar se o jogador já fez ou não a quest, dessa forma:


    if getPlayerStorageValue(cid, storageKey) == -1 then
    jogador não fez a quest!
    else
    jogador já fez a quest!
    end
    Utilizando a lista das funções, tente selecionar as que você deverá usar para o script do baú.



    OBS.: deve-se ter cuidado para não repetir o número de um storageKey, pois pode haver conflito entre dois scripts diferentes. Assim, você pode escolher aleatoriamente um número com 6 ou mais algarismos, fazendo com que a chance de repetição seja muito pequena ou listando os storages que você já usou e conferindo para não repetir. Para verificar quais storages já foram usadas, utilize essa talkaction.

    Assim como várias outras constantes do servidor, cada vocação é associada a um número: sorcerer = 1, druid = 2, paladin = 3 e knight = 4. Para promotions, soma-se 4 ao número da vocação. Para ver o valor dessas e das outras constantes, vá na pasta data do seu servidor e procure pelo arquivo 000-constant.lua dentro da pasta lib.

    O script do nosso baú deverá ficar com uma cara mais ou menos assim:



    http://pastebin.com/BVQVzqhi



    Não se preocupe se você ainda não entendeu totalmente esse código, em breve você poderá fazê-lo completamente sozinho, se já não pode. Essa foi apenas uma introdução a aplicações em OTServers.

  2. Upvote
    Nil Value deu reputação a Vodkart em Perfect Vip System 3.0   
    Perfect Vip system 3.0
     
    Última atualização: 14/08/12
     
     
    Versão Testada:TFS 0.3.6 - 8.54 - 8.6 - 9.6
    Créditos pelas modificações: Kydrai,Vodkart e Marcryzius
     
     
    Oque Contém no Sistema vip 3.0?
     
     
     
    Comandos:
     
     
     
     
     
    Query
     
    Primeiro passado execute essa query na sua DB:
     

    ALTER TABLE `players` ADD `vipacess` INT(15) NOT NULL DEFAULT 0;
     
     
    Agora vá em Data/lib/050-function e adicione essas funções:
     

    function getCharacterAcess(cid) local query = db.getResult("SELECT `vipacess` FROM `players` WHERE `id` = "..getPlayerGUID(cid)) if query:getID() ~= -1 then return query:getDataInt("vipacess") end end function getCharacterDays(cid) local acess = math.ceil((getCharacterAcess(cid) - os.time())/(86400)) return acess <= 0 and 0 or acess end function HaveCharaterAcess(cid) return getCharacterDays(cid) > 0 and true or false end function setAcessTime(cid, time) return db.executeQuery("UPDATE `players` SET `vipacess` = "..time.." WHERE `id` = "..getPlayerGUID(cid)) end function addCharacterAcess(cid, days) local add = (days <= 0 and 1 or days)*86400 local time = getCharacterDays(cid) == 0 and (os.time() + add) or (getCharacterAcess(cid) + add) return setAcessTime(cid, time) end function doRemoveCharacterAcess(cid, days) local remove = days*86400 local time = getCharacterAcess(cid) - remove return setAcessTime(cid, (time <= 0 and 1 or time)) end function getVipAcessDate(cid) if HaveCharaterAcess(cid) then return os.date("%d/%m/%y %X", getCharacterAcess(cid)) end return false end
     
     
     
     
    Talkactions
     
    agora em talkactions/scripts
     
     
    vipsystemplayer.lua

    function onSay(cid, words, param) if(words == "!buyvip") then local days = 10 local price = 50000 if not doPlayerRemoveMoney(cid, price) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.") return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.") addCharacterAcess(cid, days) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem "..getCharacterDays(cid).." dias de VIP, ela acaba em "..getVipAcessDate(cid)) elseif(words == "!vipdays") then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem "..getCharacterDays(cid).." dias de VIP. "..(getCharacterDays(cid) > 0 and "ela acaba em "..getVipAcessDate(cid).."." or "")) end return true end
     
    vipsystemgod.lua

    function onSay(cid, words, param) if(words == "/checkvip") then if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end local player = getPlayerByName(param) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player "..player.." not found.") return true end return doPlayerPopupFYI(cid, "O jogador tem "..getCharacterDays(player).." dias de VIP no character.") elseif(words == "/addvip") then local t = string.explode(param, ",") if not tonumber(t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") return true end local player = getPlayerByNameWildcard(t[1]) if(not player)then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player not found.") end addCharacterAcess(player, tonumber(t[2])) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você adicionou "..tonumber(t[2]).." dias de VIP no player "..getCreatureName(player)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adicionados "..tonumber(t[2]).." dias de VIP no seu character.") elseif(words == "/delvip") then local t = string.explode(param, ",") if not tonumber(t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") return true end local player = getPlayerByNameWildcard(t[1]) if(not player)then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player not found.") end doRemoveCharacterAcess(player, tonumber(t[2])) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você removeu "..tonumber(t[2]).." dias de VIP do jogador "..getCreatureName(player)..".") end return true end
     
     
    em talkactions.xml adicione as tags:
     

    <talkaction words="!buyvip;!vipdays" event="script" value="vipsystemplayer.lua"/> <talkaction words="/addvip;/delvip;/checkvip" access="4" event="script" value="vipsystemgod.lua"/>
     
     
    Item Vip
     
    item que adiciona vip no character
     
    actions/script
     
    addvipdays.lua

    function onUse(cid, item, fromPosition, itemEx, toPosition) local days = 15 addCharacterAcess(cid, (days <= 0 and 1 or days)) doRemoveItem(item.uid,1) return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem "..getCharacterDays(cid).." dias de VIP, ela acaba em "..getVipAcessDate(cid)) end
     
    Actions.xml

    <action itemid="ID DO SEU ITEM" script="addvipdays.lua"/>
     
     
    Vip Door
     
    actions/script
     
    perfectvipdoor.lua

    function onUse(cid, item, frompos, item2, topos) if not HaveCharaterAcess(cid) then return doPlayerSendTextMessage(cid,22,"Você precisa ser vip para passar aqui.") end doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, topos, true) return true end
     
    actions.xml

    <action actionid="7779" script="perfectvipdoor.lua"/>
     
     
     
    Tile VIP
     
     
    em movements/scripts crie um arquivo.lua e renomeie para
     
     
    vipe.lua

    function onStepIn(cid, item, position, fromPosition) if item.actionid == 13700 and not HaveCharaterAcess(cid) then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"você não é vip.") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"bem vindo.") return true end
     
     
    Em movements.xml adicione a tag:
     

    <movevent type="StepIn" actionid="13700" event="script" value="vipe.lua"/>
     
     
     
    no seu piso coloque ACTIONID 13700
     
     
     
    Fim Vip
     
    em creaturescript/script
     
     
    endvip.lua

    function onLogin(cid) if getCharacterDays(cid) > 0 then setPlayerStorageValue(cid, 9898, 1) elseif getPlayerStorageValue(cid, 9898) == 1 and getCharacterDays(cid) <= 0 then doPlayerSetTown(cid, 1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerPopupFYI(cid, "Sua vip Account acabou.") setPlayerStorageValue(cid, 9898, -1) end return true end
     
    em creaturescript.xml adicione a tag:
     

    <event type="login" name="CheckVip" script="endvip.lua"/>
  3. Upvote
    Nil Value recebeu reputação de Kluivert em [PARTICIPE] A Melhor Assinatura #98   
  4. Upvote
    Nil Value deu reputação a Kluivert em [PARTICIPE] A Melhor Assinatura #98   
  5. Upvote
    Nil Value deu reputação a heavy2 em [Arquivado][POKETIBIA] Servidor do Bolz!   
    Eu ri' kkkkkkkkkkkkkk
     
    Toma teu Rep Nill!
  6. Upvote
    Nil Value recebeu reputação de heavy2 em [Arquivado][POKETIBIA] Servidor do Bolz!   
    Do que você esta falando ? você era um deles.
  7. Upvote
    Nil Value recebeu reputação de zerefshirou em [Arquivado][POKETIBIA] Servidor do Bolz!   
    Do que você esta falando ? você era um deles.
  8. Upvote
    Nil Value deu reputação a Benny em intro   
    estou aprendendo a usar o after effects

    ai eu vou brincando haha'


     

    https://www.youtube.com/watch?v=Mm4b4TgExPI&feature=youtu.be



  9. Upvote
    Nil Value recebeu reputação de Lucasmml em Galeria [Nil Value]   
    @all Obrigado Novamente

    @Topic
    Sasuke (Não ficou bom irei arrumar)


    #Edit


     
  10. Upvote
    Nil Value deu reputação a Killua em Item   
    doCreateItem(item.itemid, 2545, getThingPos(itemEx.uid)) Nessa linha vc tá tentando criar 2545 itens debaixo do monstro.... Use assim:
    doCreateItem(2545, 1, getThingPos(itemEx.uid)) Use assim que vai funcionar. Como vc quer que o dano seja calculado?? Obrigado por me lembrar, NIl.
  11. Upvote
    Nil Value deu reputação a Killua em Item   
    Ela não vai ser de dar use?? É uma arma que vc equipa, coloca pra atacar e pronto?
    Do jeito que eu fiz vc tem que dar use nela...
  12. Upvote
    Nil Value recebeu reputação de kttallan em [Spell] Bullet Storm, Water Pulse.   
    Óla hoje vim doar 2 Magias de Pokemon, sei que não e muita coisa mais se Alguém estiver precisando pode usar.



    • Não sou Scripter são apenas 2 Spells simples, todos os créditos do Slicer e claro pelo tutorial que ele fez.



    -> Codigo


     



    -> Download (Caso não consiga Adptar)

    http://www.mediafire.com/download/ad804z8asaagyrp/lib.rar



    -> Imagens






    Porfavor Comentem ;v

  13. Upvote
    Nil Value deu reputação a SmiX em DarkXPoke - Retomado   
    Atualização 1.0.1; Smeargle copia todos os moves do pokemon selecionado, não importa qual. Se o pokemon tiver 12 moves ele também terá. Imagem:  
  14. Upvote
    Nil Value deu reputação a Lordfire em Funções iteradoras em Lua   
    Iteradores são funções especiais criadas para iterar, ou seja, percorrer, listas, vetores (arrays), matrizes, tabelas ou o que quisermos. Nós criamos iteradores para usar na função for. Um exemplo de iterador que você já deve conhecer é o pairs. Vamos supor que eu tenha a seguinte tabela:
     

    k = {1, 2, 3, 4, 5}E eu queira iterar por todos eles imprimindo o seu quadrado. Como faríamos isso? Casualmente, o código seria este: 

    for i = 1, 5 do print(i ^ 2) endMas e se eu quiser fazer isso várias vezes? Com uma lista que não segue um padrão? Então criamos um iterador, mas primeiro, vamos entender a estrutura de um em pseudocódigo Lua: 

    function iterator(values) local pos = 0 --posição do iterador na lista return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] end return nil end endPerceba que eu não retorno um valor especifico ao chamar a função iterator(), eu retorno uma nova função. Essa função será chamada pelo for até que seu retorno seja nil, onde Lua assume que o iterador acabou. E como eu sei quando acaba? Simples, há uma variável (chamei, neste caso, de pos) que armazena a posição dentro do array values do próximo valor a ser retornado. A cada iteração, o valor aumenta em 1 dentro da função. Quando eu acessar um índice dentro do array que não existe, seu valor (values[pos]) será nil, portanto eu testo essa condição. 
    Parece bastante complexo, mas vamos voltar ao exemplo do quadrado. Chamarei minha função iteradora de square:
     

    function square(numbers) local pos = 0 return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] ^ 2 end return nil end endA cada chamada da função de retorno, eu aumento a posição e retorno este elemento elevado ao quadrado. Então, usarei a função assim: 

    for i in square(k) do print(i) endQue funciona como o esperado: 
    O que mais podemos fazer com iteradores? Podemos, por exemplo, bloquear uma palavra usando a função onTalk do xotservx:
     

    local palavra = "jujuba" function splitWords(phrase) local pos = 0, words = phrase:gmatch("%w+") return function() pos = pos + 1 if words[pos] ~= nil then return words[pos] end return nil end end function onTalk(cid, type, text, position) for w in splitWords(text) do if w = palavra then return false end end return true endClaro que esse exemplo é bastante simplório, mas demonstra a utilidade dos iteradores. Neste caso, eu testo todas as palavras que o player falou para encontrar uma palavra especifica que eu defini. Podemos transformar isso tudo em um loop while, para você entender um pouco melhor: 

    local words = splitWords(text) while w = words() do if w == nil then break end if w = palavra then return false end end end return trueUsando o iterador, ganhamos organização no código e o controle do for. Espero que façam bom uso de iteradores para organizar seus códigos
  15. Upvote
    Nil Value recebeu reputação de interpolbr em Fundo de Client.   
  16. Upvote
    Nil Value deu reputação a cristofermartins em Spr Editor [ 8.54/9.81 ][ versão 1.3 ]   
    Olá, meu nome é Cristofer Martins, sou programador e gameDesigner e atualmente faço parte da equipe Digimon Adventure Online. Estou aqui para apresentar o meu Spr Editor, que desenvolvi para a equipe por que outros editores não eram funcionais/simples o suficiente. Alem disso, vi que não há sprite editores para as novas versões do Tibia, dificultando a inserção/remoção/edição/exportação de Sprites dos novos arquivos SPRs.Alem disso, um outro motivo foi que tive uma pessima experiencia com o Demonic Editor, tentei exportar as Sprites do nosso SPR para uma pasta umas 20 vezes e sempre dava algum erro no meio do caminho. Por isso desenvolvi um Editor eu mesmo.
     



     

    Preview:


     
     






     

    Funções( no menu ):


     
    -Add: Adiciona n sprites ao editor. Basta clicar no add que irá aparecer a janela para você seleciona todas as sprites que você quiser( multi seleção ). Essas sprites serão adicionadas no final da lista de sprites. OBS: As imagens devem ser PNG e o fundo das sprites deve ser transparente, e não rosa, como é de costume.
     
    -Replace: Substitui n sprites no editor. Selecione com Ctrl ou até com o Shift as sprites no editor que você quer substituir, depois clique no menu em Replace. Irá aparecer uma janela aonde você seleciona as imagens PNG para serem substituidas. As sprites serão substituidas na sequencia, a primeira Sprite selecionada no editor vai ser substituida com a primeira imagem selecionada na pasta. O progresso do replace pode ser visto na barra de progresso.
     
    -Delete: "Deleta" n sprites da lista.Selecione com Ctrl ou até com o Shift as sprites no editor que você quer deletar, depois clique no menu em Delete. Essas IDs das sprites que são deletadas vão aparecer "" e o ID delas, elas são sprites vazias, sem conteudo que você substiuir com novas imagens e assim aproveitar essas IDS que não estão servindo para nada.
     
    Export: Exporta n Sprites. Basta selecionar com Ctrl ou com Shift ou clicando na sprite que o editor irá exportar essa sprite com fundo transparente. Você pode facilmente exportar todas as sprites para uma pasta ou apenas aquelas que lhe interessam. O progresso da exportação pode ser visto na barra de progresso.
     
    Clear: Limpa a lista de sprites e remove as imagens da memoria. Util para criar um arquivo SPR do zero, por exemplo.
     
    Exemplo multi select( para deletar, substituir ou exportar ):
     
     
     
     
     
     
     



     




    Abas Extract/Compile


     
    Extract: Nessa aba você clica em SPR file para abrir o arquivo SPR, escolhe a versão dessa SPR ali no "menu" do lado daonde tá escrito "version" e clica em Extract. O programa vai começar a extrair as sprites e adiciona-las a lista( as vezes a lista fica estatica basta clicar nela que ela atualiza com as sprites novas ) e o progresso da extração pode ver na barra de progresso.
     
    Compile: Nessa aba você compila as Sprites da lista para um arquivo SPR. Para isso basta clicar em "save" e escolher o arquivo SPR que vai ser salvo, escolher a versão desse arquivo SPR como feito em Extract e clicar em "Compile!". O progresso da compilação pode ser visto na barra de progresso.
     
     
     
     
     
     
     
     
     
     
     
     

    Outros


    Search by ID: Pesquisa uma sprite pelo ID. Caso essa id exista na lista, a lista se move até a a sprite.
     



     

    Download:


     

    SPREditor

     
     

    Scan:



    Virus Total

     



    Caso você encontre algum bug, reporte nesse topico por favor. Aceito sugestões.
    Caso exista alguma versão que não seja aceita no editor e você tem a signiture(assinatura) do arquivo spr, poste aqui que eu atualizo o version.ini.





  17. Upvote
    Nil Value deu reputação a SmiX em Mago Aprendiz - By Smix   
    Olá pessoal, hoje vou postar um npc para tíbia. Ele faz com que o player seja teleporta para uma hunt (posição definida no script) e pega um pouco da mana do player, e ele é meio doidinho. Acho que vão gostar dele.
    Vamos lá. Crie um arquivo .XML em data/npc, chamado profLuki e cole isso dentro:
     
     
     
    E na pasta data/npc/scripts crie um arquivo chamdo profLuck.lua e cole isso dentro:
     
     
     
    Pronto pessoal, fiz esse npc pra não ficar fazendo scripts só para pokemon. Espero que gostem.
  18. Upvote
    Nil Value recebeu reputação de Vinicius Osorio em Itens iniciais ot 8.6   
    Veja no Seu Creaturescripts/Firstitem.lua se não tiver
     
    Se não tiver aki
    http://www.xtibia.com/forum/topic/181586-tutorial-criando-um-firstitemslua-e-explicando/
  19. Upvote
    Nil Value deu reputação a Oneshot em Spread Loot   
    Spread Loot
    Este é um pedido feito no tópico A Fábrica

    Boa noite, galera.
     
    Este é o primeiro pedido atendido no meu tópico A Fábrica, foi um pedido feito pelo usuário OriGM.
     
    Consiste em um sistema de "espalhar" o loot do monstro em uma área delimitada de 1 sqm, torna o jogo bem real, afinal muitos MMORPGs, como Mu Online, Ragnarok, entre outros, "espalham" seu loot.
     
    Não tive como fazer diferentes testes, mas acho que funciona muito bem e não tem bugs severos, como criar itens em tiles bloqueados.
     
    A instalação é fácil como qualquer creaturescript.
     
    spreadloot.lua
    local function doSpreadLoot(fromPosition, toPosition, container) for slot = (getContainerSize(container.uid) - 1), 0, -1 do local item = getContainerItem(container.uid, slot) if not isContainer(item.uid) then local position = { x = math.random(fromPosition.x, toPosition.x), y = math.random(fromPosition.y, toPosition.y), z = fromPosition.z, } local itemEx = doCreateItemEx(item.itemid, item.type) if doTileAddItemEx(position, itemEx) then doRemoveItem(item.uid) end else doSpreadLoot(fromPosition, toPosition, item) doRemoveItem(item.uid) end end return true end function onKill(cid, target) if isMonster(target) then local position = getCreaturePosition(target) local name = getCreatureName(target) local fromPosition = {x = position.x - 1, y = position.y - 1, z = position.z} local toPosition = {x = position.x + 1, y = position.y + 1, z = position.z} addEvent(function() local container = getTileItemById(position, getMonsterInfo(name).lookCorpse) if container.uid > 0 then doSpreadLoot(fromPosition, toPosition, container) end end, 100) end return true end login.lua
    registerCreatureEvent(cid, "SpreadLoot") creaturescripts.xml
    <event type="kill" name="SpreadLoot" event="script" value="lootsystem.lua"/> Bom, isso é tudo, minha galera.
     
    Att,
    Oneshot Garou
  20. Upvote
    Nil Value recebeu reputação de Lucasmml em Galeria [Nil Value]   
    Sou inciante e gostaria de criticas e sugestões para melhorar meu desempenho, quando der tempo posto mais de minhas Sprites.





    Um assassino estilo Naruto ;



  21. Upvote
    Nil Value recebeu reputação de libanori em Galeria [Nil Value]   
    Sou inciante e gostaria de criticas e sugestões para melhorar meu desempenho, quando der tempo posto mais de minhas Sprites.





    Um assassino estilo Naruto ;



  22. Upvote
    Nil Value recebeu reputação de TioItachi em Galeria [Nil Value]   
    Sou inciante e gostaria de criticas e sugestões para melhorar meu desempenho, quando der tempo posto mais de minhas Sprites.





    Um assassino estilo Naruto ;



  23. Upvote
    Nil Value deu reputação a Zoobu em Galeria [Keviz]   
    Blz valeu vou tentar arrumar isso na próxima!

    Pequena sprite do Itachi xD

  24. Upvote
    Nil Value recebeu reputação de felippepsa em Outfit   
    Aqui esta amigo: http://www.xtibia.com/forum/topic/202276-vocation-outfit-v10/
     
    Deixe Assim CONFIG.LUA: allowChangeOutfit = true.
     
    [1] = {[0] = {136}, -- Uchiha
     
    [1] = E o numero da Vocação do Uchiha.
    {136} = E a Outfit do Uchiha.
  25. Upvote
    Nil Value deu reputação a meubk em Inanimate Object   
    Inanimate Object

    Bom venho trazer mais um script, sei que a idéia é meio boba, mais sei la, não tinha oque fazer, é o seguinte, vc pega uma pedra(configurado para o id: 8310) e dá use num objeto, espadas, armaduras, escudos, objetos de casa, qualquer o objeto que seje "moveable" ou seja objetos que vc pode arrastar, então o objetos tomara vida e sera seu summon, o atk e a vida dele, ira basear no seu level, quando o summon morre, o item volta ao normal aonde o summon morreu, é isso kkk, caso vc queira dar vida á algum objeto que não seja "moveable" tipo arvores, flores, etc, vc configura na tabela, e caso vc não quer que um item que é "moveable" ganhe vida, só configurar tbem, esta tudo comentado no script, para configurar do seu jeito, primeiramente vc deve criar o monstro.
     
    inanimate object.xml
    <?xml version="1.0" encoding="UTF-8"?> <monster name="Inanimate Object" nameDescription="a inanimate object" race="undead" experience="0" speed="250" manacost="0"> <health now="1" max="1"/> <look type="232" corpse="0"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="1"/> <flag pushable="1"/> <flag canpushitems="0"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> </attacks> <defenses armor="10" defense="20"/> </monster> tag:
    <monster name="Inanimate Object" file="inanimate object.xml"/> segundo passo crie outro xml, mais na pasta mod e cole o código:
     
    inanimateObject.xml
    <?xml version="1.0" encoding="UTF-8"?> <mod name="inanimateObject" enabled="yes" author="Miiller" forum="XTibia.com"> <config name="inanimateObjectLib"><![CDATA[ InanimateCfg = { levelForUse = 1, -- level para usar premium = false, -- somente premium pz = false, -- pode dar vida a objetos em pz house = false, -- pode dar vida a objetos em casas maxSummon = 1, -- maximo de summons specialItems = {}, -- items que mesmo não sendo "movable" que podem ganhar vida blockItems = {}, -- items que são "movable" mas não podem ganhar vida restoreItem = true, -- depois que o summon morre, restaurar o item } function object_attack(cid, object) if not isCreature(cid) or not isCreature(object) then return true end if getCreatureTarget(cid) > 0 then if getDistanceBetween(getThingPos(getCreatureTarget(cid)), getThingPos(object)) == 1 then doTargetCombatHealth(object, getCreatureTarget(cid), COMBAT_PHYSICALDAMAGE, -(getPlayerLevel(cid)/4), -(getPlayerLevel(cid)/2), CONST_ME_BLOCKHIT) end end addEvent(object_attack, 2000, cid, object) end ]]></config> <action itemid="8310" event="script"><![CDATA[ domodlib("inanimateObjectLib") function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) < InanimateCfg.levelForUse then return doPlayerSendCancel(cid, "You need level " .. InanimateCfg.levelForUse .. " for give life to an object.") end if not isPremium(cid) and InanimateCfg.premium then return doPlayerSendCancel(cid, "You need premium for give life to an object.") end if not isItemMovable(item2.itemid) and not isInArray(InanimateCfg.specialItems, item2.itemid) or isCorpse(item2.uid) or isCreature(item2.uid) or isInArray(InanimateCfg.blockItems, item2.itemid) then return doPlayerSendCancel(cid, "This object can not gain life.") end if #getCreatureSummons(cid) >= InanimateCfg.maxSummon then return doPlayerSendCancel(cid, "You already have many summons.") end if getPlayerItemCount(cid, item2.itemid) > 0 then return doPlayerSendCancel(cid, "Please, place this object in ground.") end if getTileHouseInfo(topos) and not InanimateCfg.house then return doPlayerSendCancel(cid, "This object can not gain life in house.") end if getTilePzInfo(topos) and not InanimateCfg.house then return doPlayerSendCancel(cid, "This object can not gain life in protection zone.") end local obj = doCreateMonster("Inanimate Object", topos) doConvinceCreature(cid, obj) setCreatureMaxHealth(obj, getPlayerLevel(cid)*2) doCreatureAddHealth(obj, getPlayerLevel(cid)*2) doSetItemOutfit(obj, item2.itemid) doSendMagicEffect(getThingPos(obj), 30) if InanimateCfg.restoreItem then doCreatureSetStorage(obj, 3214, item2.itemid) doCreatureSetStorage(obj, 3215, item2.type == 0 and 1 or item2.type) registerCreatureEvent(obj, "restoreItemSummonObj") end doRemoveItem(item.uid, 1) doRemoveItem(item2.uid, item2.type == 0 and 1 or item2.type) object_attack(cid, obj) return true end ]]></action> <creaturescript type="death" name="restoreItemSummonObj" event="script"><![CDATA[ function onDeath(cid, corpse, deathList) doCreateItem(getCreatureStorage(cid, 3214), getCreatureStorage(cid, 3215), getThingPos(cid)) doSendMagicEffect(getThingPos(cid), 30) return true end ]]></creaturescript> </mod> e acabou, as configurações esta no xml da pasta mod:
    InanimateCfg = { levelForUse = 1, -- level para usar premium = false, -- somente premium pz = false, -- pode dar vida a objetos em pz house = false, -- pode dar vida a objetos em casas maxSummon = 1, -- maximo de summons specialItems = {}, -- items que mesmo não sendo "movable" que podem ganhar vida blockItems = {}, -- items que são "movable" mas não podem ganhar vida restoreItem = true, -- depois que o summon morre, restaurar o item } configura do seu jeito kk
     
    só pegar o item 8310, e usar nos objetos, fico mto leegal kkkk
     
    fui
  • Quem Está Navegando   0 membros estão online

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