Ir para conteúdo

Cat

Héroi
  • Registro em

  • Última visita

Tudo que Cat postou

  1. TFS 0.4 (storage / level) local t = { [7017] = {100}, [7018] = {200}, } fica: t[item.actionid][1]2 ? Alguém pode elaborar uma explicação de como eu faço para aplicar isso em diferentes ocasiões? Um exemplo, pode ser um movement de teleport ou uma action de porta que requer level para funcionar. Qual a forma correta?
  2. Cat postou uma resposta no tópico em Suporte & Pedidos
    Como eu disse, isso é algo que só a pratica te ensina. Pode ir me marcando a vontade sempre que precisar, mesmo que for algo pequeno. Fico feliz em ajudar. O fórum precisa de mais mappers ativos, e você pode ser um grande mapper eu vejo. Sobre os grounds, se forem 3, analise qual deles vai ser o mais profundo e qual vai cobrir mais. Faça os desenhos dos formatos de acordo com essa profundidade. Há diversas formas, mas geralmente se a terra for o mais fundo, coloque em menos quantidade e em partes em que o desenho da grama para a terra faz um L. Vou explicar melhor e vc tenta, esse é o meu método: Primeiro desenhe os grounds sem as bordas, selecione as falhas e.. parece dificil, mas se você contorna qualquer ground, começando com essas bordas: o resultado pode ser melhor: Dica de tutorial: https://tibiaking.com/forums/topic/84154-como-criar-bordas-bonitas/
  3. Cat postou uma resposta no tópico em Suporte & Pedidos
    gostei disso É o primeiro mapa de um mapper que se diz iniciante que eu vejo, que não me doí os olhos Claro que tem muito a melhorar nesse mapa, mas é a base perfeita para se começar um, vou dizer o por que: 1 - Você comete as falhas perfeitas! • Erros são a chave para a aprendizagem e evolução. No mapping, quando nos deixamos levar e desenhamos formatos, impulsivamente cometemos falhas. Elas servem para nos dar "perspectiva fora do quadrado". (Supondo que um quadrado seria o formato perfeito na perspectiva tibiana) São essas que eu marquei na print abaixo. É através delas que você encontra o formato perfeito para um bom mapa. Enquanto alguns mappers tentam reproduzir a ideia baseando-se em algo já visto outros simplesmente encontram sentido e usam a criatividade para fugir do padrão e criar sua própria arte. Você pode ser esse segundo mapper. Seus formatos me chamaram muito a atenção, especialmente as montanhas. a. -- Selecionei esse pedaço do isolamento de grama morta (tem outras 4 falhas ali que podem ser trabalhadas como esta), veja o que pode ser feito, apenas mexendo nas bordas: b. -- Você desenhou essa ponta para o sudoeste e através dela pode criar outras sub direções usando um joguinho de bordas maroto, mas como se trata de dois grounds é bom não exagerar. Agora veja o que acontece se acrescentamos um terceiro ground: c. E que tal um quarto? d. E se adicionarmos um quinto, onde isso vai parar? e. É lógico que esse mapa está spamado, com 5 grounds é preciso ter um controle maior pois são proporções diferentes, requer noção de relevo, combinação de detalhes por conjunto, transição de temas, noção de ramificação, entre outros. Eu gostaria de continuar, mas acredito que você vai aprender muito mais praticando. Abaixo umas dicas de nature pro seu mapa:
  4. Vamos descobrir do que cada um gosta? Fiz essa lista de principais sistemas com possibilidades de expansão, o que lhe agrada mais?
  5. Vim disponibilizar esse código de chest que eu tava precisando e não achei em lugar algum. Agradecimento ao @Sttorm que me ajudou a entender a estrutura do código. Comprar mesmo item com 2 moedas diferentes! (Chest Action) 23:31 Sao necessarios 50 gold coin e 50 crystal coin para realizar esta compra. 23:32 Voce comprou crown backpack por 50 gold coin e 50 crystal coin data/actions/actions.xml: (mude baus/bau01.lua se o seu esquema for diferente) <action actionid="6012" event="script" value="baus/bau01.lua"/> data/actions/scripts/baus/bau01.lua: ( " ) local coin = 2148 -- id da primeira moeda local coin2 = 2160 -- id da segunda moeda local eff = 28 -- efeito mágico ao comprar o item local lever = { [7017] = {50, 50, 10522} -- [actionid] = {quantidade da moeda 1, quantidade da moeda 2, id do item a comprar} } function onUse(cid,item,fromPosition,itemEx,toPosition) if getPlayerItemCount(cid, coin) >= (lever[item.actionid][1]) and getPlayerItemCount(cid, coin2) >= (lever[item.actionid][2]) then doPlayerRemoveItem(cid,coin,lever[item.actionid][1]) doPlayerRemoveItem(cid,coin2,lever[item.actionid][2]) doPlayerAddItem(cid,lever[item.actionid][3], isItemStackable(lever[item.actionid][3]) and 1) doPlayerSendTextMessage(cid,22,"Voce comprou " .. getItemNameById(lever[item.actionid][3]) .." por "..lever[item.actionid][1].." " ..getItemNameById(coin).. " e "..lever[item.actionid][2].." " ..getItemNameById(coin2)) doSendMagicEffect(getCreaturePosition(cid), config.eff) else return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sao necessarios "..lever[item.actionid][1].." " ..getItemNameById(coin).. " e "..lever[item.actionid][2].." " ..getItemNameById(coin2).. " para realizar esta compra.") end end
  6. vc seu lindo me ajudo pra krl a entender algumas funções / Tópico: adicionei outra versão do script de movements, com did = 2 -- configurável.
  7. Venho trazer a vocês essa adaptação que eu fiz pra minha datapack. Estava configurando novas door ids e pesquisei alguns tópicos procurando por scripts específicos, e não encontrei. Além disso, notei que muitas pessoas tiveram problemas para adicionar novas portas utilizando o script comum doors ou outros; ou não foram respondidas em vários tópicos. CONFIGURAR NOVAS DOOR IDS! Esse código é para novas portas especiais, duplicadas, de eventos ou quests.. Demonstração: Instalação: Utilizarei os ids: Horizontal: Fechada: 12149 / Aberta: 12151 Vertical: Fechada: 12158 / Aberta: 12160 ------- • ------- PARTE 1 --- • --- • Abra data/itens/itens.xml e altere os dois ids das portas que você quer editar, assim como eu fiz: <item id="12149" article="a" name="closed door"> <attribute key="type" value="door" /> <attribute key="blockprojectile" value="1" /> </item> <item id="12151" article="an" name="open door"> <attribute key="type" value="door" /> </item> <item id="12158" article="a" name="closed door"> <attribute key="type" value="door" /> <attribute key="blockprojectile" value="1" /> </item> <item id="12160" article="an" name="open door"> <attribute key="type" value="door" /> </item> • Em data/movements/scripts crie uma pasta doors - Nessa pasta você poderá adicionar outros ids de portas futuramente e manter organizado. - Dentro de doors, crie dois arquivos: closingdoorH e closingdoorV (.lua) e cole o mesmo código abaixo nos dois: - Se seus ids forem diferentes presta atenção nessa parte, na antepenúltima linha dos dois scripts: --> | doTransformItem(item.uid, item.itemid - 2) | <-- • O que essa linha faz: - Se a minha porta ABERTA é ID12151, ao tirar o pé pra fora dela essa linha vai fazer a porta se transformar em 2 ids anteriores, nesse caso a porta FECHADA ID 12149. (12151 - 12149 = 2) - Então por exemplo, se a sua porta aberta for 12180 e a fechada 12150, é assim que tem que ser: --> | doTransformItem(item.uid, item.itemid - 30) | <-- Código: function onStepOut(cid, item, position, fromPosition) if(getTileInfo(position).creatures > 0) then return true end local newPosition = {x = position.x, y = position.y, z = position.z} if(isInArray(verticalOpenDoors, item.itemid)) then newPosition.x = newPosition.x + 1 else newPosition.y = newPosition.y + 1 end doRelocate(position, newPosition) local tmpPos = position tmpPos.stackpos = -1 local i, tmpItem, tileCount = 1, {uid = 1}, getTileThingByPos(tmpPos) while(tmpItem.uid ~= 0 and i < tileCount) do tmpPos.stackpos = i tmpItem = getTileThingByPos(tmpPos) if(tmpItem.uid ~= item.uid and tmpItem.uid ~= 0 and not isMoveable(tmpItem.uid)) then doRemoveItem(tmpItem.uid) else i = i + 1 end end doTransformItem(item.uid, item.itemid - 2) return true end Se preferir, use a versão configurável pra não se perder nas linhas: Em data/movements/movements.xml <movevent type="StepOut" itemid="12151" event="script" value="doors/closingdoorh.lua"/> <movevent type="StepOut" itemid="12160" event="script" value="doors/closingdoorv.lua"/> ------- • ------- PARTE 2 --- • --- Em data/actions/actions.xml adicionei: <action itemid="12149" event="script" value="doors/door01.lua"/> <action itemid="12158" event="script" value="doors/door02.lua"/> • Em data/actions/scripts crie uma pasta doors - Nessa pasta você poderá adicionar outros ids de portas futuramente e manter organizado. - Dentro de doors, crie dois arquivos: door01 e door02. - No meu caso, como as duas portas tem a mesma diferença de IDS o script fica o mesmo, então vou colar apenas 1 e você configura como quiser. door01.lua/door02.lua function onUse(cid, fromPos, toPos, itemEx) local config = { did = 2, -- Diferença de IDS entre a portas fechada/aberta level = 100, -- level necessario eff = 14, -- efeito ao abrir a porta txt = MESSAGE_EVENT_ADVANCE, -- txt = tipo e cor da mensagem. -- -- ... -- Exemplo: txt = MESSAGE_EVENT_ADVANCE, -- } -- -- MESSAGE_STATUS_CONSOLE_RED -> Texto em vermelho no default chat. -- MESSAGE_STATUS_CONSOLE_ORANGE -> Texto em laranja no default chat. -- MESSAGE_STATUS_CONSOLE_BLUE -> Texto em azul no default chat. -- MESSAGE_EVENT_ADVANCE -> Texto em branco na tela. -- MESSAGE_STATUS_WARNING -> Texto em vermelho na tela. -- MESSAGE_INFO_DESCR -> Texto em verde na tela. -- MESSAGE_EVENT_DEFAULT -> Texto em branco no server log. } local levelcheck = getPlayerLevel(cid) if levelcheck >= config.level then doTeleportThing(cid, toPos) doSendMagicEffect(getCreaturePosition(cid), (config.eff)) doTransformItem(itemEx.uid, itemEx.itemid + config.did) else doPlayerSendTextMessage(cid, config.txt, "Voce precisa ter level " ..config.level.." para entrar aqui") end end Informações no script.
  8. Cara acho que isso é pelas sources, não achei configuração desse item no data.. O piso amarelo é para stairs, se você pisar nele vai descer um andar o vermelho é tile invisível mesmo. Opção A pra contornar o problema: -Escolha um item invisível RAW/blank, que não esteja sendo usado em nenhum outro lugar. -Antes de editar o mapa, de um CTRL + SHFT + F (ou vá em Edit - Replace Item) -Troque o 460 pelo blank e faça suas edições, quando terminar, vá em Replace novamente e troque o blank para o 460. Opção B - Ctrl + G vai deixar a marcação vermelha mais transparente se vista por baixo. Opção C - Edite o seu tiiba.dat/tibia.spr usando object builder ou dat editor.
  9. @Sttorm Perfeito meu querido. O item recebido cai no chão se eu nao tenho slot livre, como faz pra não receber o item se não tiver cap ou espaço na bp?
  10. @Sttorm agora aparece isso e isso quando mata o monstro:
  11. @KotZletY O outro tópico é um sistema diferente, que eu usarei nesse e em outros montros. Eu to tentando fazer um mosnter, que sempre que eu mato 5 dele, o player recebe um item e duas storages para a contagem: Ex: !check = Você matou ao todo 50 monstros e recebeu 10 itens.
  12. Como o script ta adicionado aqui: creaturescripts.xml <event type="Kill" name="Sol" event="script" value="sol.lua"/> login.lua registerCreatureEvent(cid, "Sol") e local storage = { a = 13456, -- Storage que ganhará ao matar o monstro b = 34156, -- Storage que ganhará ao matar 5 monstros c = 12345 -- Storage que ganhará ao ganhar o item } if getCreatureStorage(cid, 13451) == -1 then doCreatureSetStorage(cid, storage.a, 0) doCreatureSetStorage(cid, storage.b, 0) doCreatureSetStorage(cid, storage.c, 0) doCreatureSetStorage(cid, 13451, 1) end return true sol.lua E o monstro para teste: ... </loot> <script> <event name="Sol"/> </script> </monster> Erros no console: Ao matar o monstro: @Sttorm e o script de checar as quantidades ta mostrando -1 pra quem não matou nenhum, tentei ajustar pra só enviar a msg pra quem tiver a storage > = 0 mas não deu certo
  13. @Sttorm Como eu entrego essa storage? É só um monstro específico. Utilizo isso? <script> <event name="X"/> </script> E se eu fizer assim: local storage = { a = 13456, -- Storage que ganhará ao matar o monstro b = 34156, -- Storage que ganhará ao matar 5 monstros c = 12345 -- Storage que ganhará ao ganhar o item } local required = 5 -- Quantos monstros terá que matar local itemid, count = 2160, 5 -- Item ID e sua count local monsters { d = {"Demon", "dragon", "orc"], } function onDeath(cid, corpse, deathList) local killer = deathList[1] if isPlayer(killer) and isMonster(cid) then if getMonsterInfo(monsters.d) then doCreatureSetStorage(killer, storage.a, getCreatureStorage(killer, storage.a) + 1) if getCreatureStorage(killer, storage.a) >= required then doCreatureSetStorage(killer, storage.a, 0) doCreatureSetStorage(killer, storage.b, getCreatureStorage(killer, storage.b) + 1) doCreatureSetStorage(killer, storage.c, getCreatureStorage(killer, storage.c) + 1) doPlayerAddItem(killer, itemid, count) doPlayerSendTextMessage(killer, 18, "Voce recebeu ".. count .." ".. getItemInfo(itemid).name .." ao matar o monstro.") return true end return true end return true end return true end
  14. @Sttorm Esses monstros que dão itens especiais são "estrelas", "sois".. (outlook do wisp) Pensei que seria bacana quando eles cometessem suicídio apareça uma combinação de efeitos + mensagem que de a entender que ele se auto explodiu. Ou ele pode se transformar no "distance effect = 37", bola de holy. E ir para algum lugar. Ou vários efeitos 37 vem até ele, ele sobrecarrega e explode. Algo nessa lógica, pode usar a criatividade, agradeço a disposição desde já.
  15. TFS 0.4 - THE FORGOTTEN SERVER 8.60 publicado por Firelement Fiz esse pedido: É possível fazer com que um monstro tenha X chance de se suicidar? Nesse caso impedindo que o player de o last hit e receba a storage..
  16. TFS 0.4 - THE FORGOTTEN SERVER 0.4 (8.60), publicado por Firelement. Pedido: Eu encontrei esse código do Vankk: (pedido abaixo) local k = { ["Demon"] = { items = { {2160,10} -- item } } } function onKill(cid, target) for name, pos in pairs(k) do if (name == getCreatureName(target)) then doPlayerAddItem(cid, k.items[1], k.items[2]) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS) end end return true end Função do código: Ao matar X quantidade do mesmo monstro, o player recebe um item especial. O jogador pode verificar através de um comando (!exemplo) quantos monstros ele já matou ao todo. Ex: (detalhe: apenas quem der o last hit recebe a contagem) Matei 5 bosses, msg: você matou 5 bosses e recebeu um item. Matei mais 5, msg: " " " Usei comando !check, msg: você matou ao todo 10 bosses e recebeu 2 itens Eu também queria entender como faz isso, se alguém que estiver disposto a fazer e puder explicar como eu agradeço.
  17. ['fist'] = {0}, ['club'] = {1}, ['sword'] = {2}, ['axe'] = {3}, ['distance'] = {4}, ['shield'] = {5}, ['fish'] = {6}, ['magic'] = {7}, ['level'] = {8},
  18. Atenção - links off achei esse servidor na otland, não sei se é o mesmo mas o nome é: https://mega.nz/#!dc9j3TyZ!NcdcYth8CYWBcGHs1CbHGgDCvCxIsNxyzWAC0AwW_zQ https://otland.net/threads/10-36-norah-pl-rpg.229888/
  19. @xWhiteWolf Pra cada level do skill vir apenas o item daquele level e não aleatório? Não entendi a parte do config.chance
  20. @amora murder To a um tempao sem spritear, fiz um edit da sua sword com AA (pelo menos tentei)
  21. Cat postou uma resposta no tópico em Mapping Show Off
    concordo, to tentando fazer uma mesclagem de dois roofs, vou tentar de outra forma
  22. Cat postou uma resposta no tópico em Mapping Show Off
    que acharam desse telhado?
  23. Esse sistema é incrível, boa contribuição @EddyHavoc Não queria estragar mas tive que dar um rep
  24. Qual a proposta do servidor? Sistemas, hunts, eventos, itens, vocações, etc... No mais, o mapa ta bem legal. Estilo cidade tibiana mesmo

Informação Importante

Confirmação de Termo