Jump to content
Close

Leaderboard


Popular Content

Showing content with the highest reputation since 07/13/19 in all areas

  1. 4 points
    Yan Liima

    [8.60] TFS 0.4 Rev3996 War & Cast

    Salve salve pessoal, no inicio desse ano estava dando uma estudada e mexendo com a TFS 0.4 rev3884, e vi que havia alguns bugs e que não tinha Cast incluso. Com base nisso decidi atualizar e otimizar a source, já que ainda ela é uma das mais utilizadas no mundo de Otserv. Um rapaz tinha me procurado e comprado ela por um preço razoavel, mas ao descobrir que ele estava revendendo por um preço bem maior, decidi compartilhar esse meu trabalho com vocês! Acredito que possa ser uma das melhores REV atualmente. Conto com o seu feedback, caso haja algum bug, algo que tenha que mudar/optimizar, não exite em avisar aqui no tópico. Toda ajuda será bem vinda xD The Forgotten Server, Tibia Versão: 8.60 O que contém nela? Dentro da pasta contém o config.lua com todas as tag já adicionadas. Não esquecam de executar a Query do Cast na sua DB: Downloads uint8(Effects até 255) Distro: TheForgottenServer.exe Src + datapack: Source & Data ------------------------------------------------------- Downloads uint16(Effects até 65534) Distro: TheForgottenServer.exe Src + datapack: Source & Data É necessário fazer a modificação do Hexadecimal no cliente. Aqui tem um já pronto: Cliente.exe (só será necessario se utilizar a src com o uint 16.) ------------------------------------------------------- Scans: Distro(uint8) & Distro(uint16) Source Cliente Obs: Os virus detectado é um falso positivo, então não se preocupem! E para quem se interessa em saber onde se localiza os code do Cast, aqui está uma imagem. Você pode achar procurando por "//CAST" Façam um ótimo aproveito :D
  2. 3 points
    Em data/actions/scripts, crie um arquivo .lua, nomeie-o e cole o código dentro. Em data/actions, abra o arquivo actions.xml e adicione esta tag: <action itemid="1445;3365" event="script" value="SEU ARQUIVO.lua"/> Em itemid você passa o id dos barris e separa eles por vírgulas, assim você não precisa criar 1 tag para cada barril. Em data/creaturescripts/scripts, abra o login.lua e procure pela função onLogin(cid). Abaixo dela adicione: local barrelStr = {264017, 264028} -- Coloque aqui as storages de cada barril for i,_ in ipairs(barrelStr) do if getPlayerStorageValue(cid, barrelStr[i]) < 0 then setPlayerStorageValue(cid, barrelStr[i], 0) end end OBS: As storages de cada barril precisam ser diferentes uma da outra. Esse script que você vai adicionar em creaturescripts é pra que quando o player logue ele já receba a storage 0 e a contagem de usos (quantas vezes ele poderá usar o barril) ocorra sem erros.
  3. 2 points
    vá até data\creaturescripts\scripts e crie um arquivo.lua e renomeie para preparedeathred.lua dentro coloque: function onDeath(cid, corpse, deathList) if (getPlayerSlotItem(cid, 2).itemid == 13755) then -- id do colar doCreatureSetDropLoot(cid, getPlayerSkullType(cid) >= 4 and true or false) if getPlayerSkullType(cid) >= 4 then doPlayerRemoveItem(cid, 13755, 1) end end return true end em data\creaturescripts\scripts\login.lua adiciona a linha: registerCreatureEvent(cid, "RedSkullAmulet") creaturescripts.xml adicione: <event type="death" name="RedSkullAmulet" event="script" value="preparedeathred.lua"/> em items.xml deixa assim: <item id="13755" article="a" name="Amulet Vip"> <attribute key="description" value="Protect All 6%, Dropa os items apenas RedSkull" /> <attribute key="weight" value="500" /> <attribute key="absorbPercentAll" value="6" /> <attribute key="slotType" value="necklace" />
  4. 2 points
    No tibia RL, o barriu some após a carga acabar. https://www.tibiawiki.com.br/wiki/Mana_Cask Uma dica: Para fazer funcionar na house, basta adicionar o barril em um constructionkit em actions, editar o item.otb para poder dar moveable no barril e um script onMove para que o mesmo não seja possível ser arrastado para fora da house. Cria um barril em items.xml/otb ou edita algum que não será utilizado, adiciona cargas nele e decayto 0 Exemplo: <attribute key="charges" value="1000"/> <attribute key="showcharges" value="1"/> <attribute key="decayTo" value="0"/> Você deve por também: <attribute key="fluidSource" value="mana potion"/> ou <attribute key="fluidSource" value="health potion"/> Acho que só isso já deve funcionar. Claro que, você deve testar para saber se as cargas estão contando ao utilizar um vial vazio no cask. Também precisa ver se ao utilizar 100 vials vazios, ele vai encher todos de uma só vez Eu criei roshamuul 8.6, oramond, war zone... Tudo é possível, só não fica perfeito XD Até exercise weapon para 8.6 eu fiz, mas a galera q joga na 8.6 nem sabe oq é isso
  5. 2 points
    marcot

    Aprendendo sobre funções LUA

    Vou tentar explicar essa parte do CID de uma forma mais prática, demonstrando diferenças entre C e C++ e você pode tirar suas conclusões. Considere o pedaço de código abaixo, escrito na linguagem C (usaremos short em vez de bool, porque é C) struct Player { int id; short isPremmium; }; Nesse caso temos um tipo de dado Player, com um id e uma flag indicando se o jogador possui premmium. Vamos agora declarar uma variável de tipo player: struct Player jogador; jogador.id = 0; jogador.isPremmium = 0; Agora, uma função que verificaria se esse jogador possui premmium ou não, ficaria mais ou menos assim: short isPremmium(struct Player jogador) { return jogador.isPremmium; } Por que o jogador foi passado como parâmetro? Oras, porque a função precisa dele para ter o acesso, variáveis globais não são uma boa prática! Agora, vamos levar para um caso que não precisaria, na linguagem C++ Considere o código abaixo, correspondente ao anterior: class Player { private: int id; bool isPremmium; public: Player(int id, bool isPremmy); bool isPremmium() { return this->isPremmium; } }; Nesse caso, para criar um jogador e verificar se ele tem premmium, teriamos o seguinte pedaço de código: // Criando jogador de id=0 e não tem premmy Player* player = new Player(0, false); if (player->isPremmy()) { // Código } Note que, apesar de isPremmy não ter parâmetro, ainda temos a referência do objeto player criado na linha 2, anterior ao "isPremmy". De uma forma ou outra, você precisa especificar qual é o jogador em questão, isso vem das próprias linguagens de programação! Caso não tenha entendido muito bem algumas expressões utilizadas, recomendo dar uma estudada no básico de algumas linguagens como C/C++/LUA e ver outras partes teóricas como Programação Orientada a Objetos (é um conceito bem fácil de ser compreendido, depois que você entendeu o básico).
  6. 2 points
    @Aldimun Para configurar é bem simples, segue como está no script e gg. Entre os colchetes [...] vai o id do barril. local config = { [1445] = { str = 5050512, -- Storage uses = 2, -- Quantas vezes pode usar o barril flask = 7636, -- ID flask potion = 7618 -- ID potion }, [3365] = { str = 50505326, -- Storage uses = 2, -- Quantas vezes pode usar o barril flask = 7636, -- ID flask potion = 7620 -- ID potion } } function onUse(cid, item, fromPosition, itemEx, toPosition) local barrel = config[item.itemid] if barrel then if getPlayerStorageValue(cid, barrel.str) < barrel.uses then local flasks = getPlayerItemCount(cid, barrel.flask) if flasks > 0 then doPlayerRemoveItem(cid, barrel.flask, flasks) doPlayerAddItem(cid, barrel.potion, flasks) setPlayerStorageValue(cid, barrel.str, (getPlayerStorageValue(cid, barrel.str) + 1)) else doPlayerSendTextMessage(cid, 27, "You don't have empty potion flasks.") end else doPlayerSendTextMessage(cid, 23, "It is empty.") end end return true end No login.lua adicione isso: local barrelStr = {11231231, 123123123, 1231231} -- Todas as storages dos barris for i,_ in ipairs(barrelStr) do if getPlayerStorageValue(cid, barrelStr[i]) < 0 then setPlayerStorageValue(cid, barrelStr[i], 1) end end O código acima vai fazer com que todos os player, ao logar, recebam a storage 1, assim não ocorrerá erro no contador de usos lá no barril. OBS: Lembre-se de não deixar as storages iguais.
  7. 2 points
    DdJs

    Teleports Room | 10.98

    Teleports Room Version: 10.98 TPsRoom.rar [Scan] Type: .RAR Size: 11KB Position(s): [X: 1005 Y: 1029 Z: 9] File password: tibiaking 34 Monsters TPs 15 Quests/Events TPs Images:
  8. 1 point
    teste a sourcer do fireelement é a melhor https://github.com/Fir3element/3777 @oficekkk
  9. 1 point
    DdJs

    Movements piso que da dano

  10. 1 point
    kkkkkkkkk qual id do brass set? ainda ta ganhando esse lixo?
  11. 1 point
    @bpm91 faltou as virgula nessa parte firstItems[4] = { 2412 2449 2405 } o correto é: firstItems[4] = { 2412, 2449, 2405 }
  12. 1 point
    não tem a tag no creaturecript.xml adiciona: <event type="login" name="FirstItemLogin" event="script" value="firstitems.lua"/>
  13. 1 point
    só agora que vi, erro meu function HaveCreatureArena(area, remove, clean) for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end if clean ~= false then doCleanTile(pos,false) end end end end local from, to = {x = 1105, y = 1113, z = 7}, {x = 1115, y = 1123, z = 7} local t = { lvl = 100, Time = 15, -- em minutos entrada = { {x = 1045, y = 1014, z = 6}, -- pos players {x = 1045, y = 1015, z = 6} }, saida = { {x = 1110, y = 1122, z = 7}, -- pos para onde eles irão {x = 1110, y = 1123, z = 7} }, monstros = { {{x = 1108, y = 1116, z = 7}, "Orc"}, -- defina pos dos montros e nomes {{x = 1108, y = 1117, z = 7}, "Orc"}, {{x = 1108, y = 1118, z = 7}, "Orc"}, {{x = 1108, y = 1119, z = 7}, "Orc"} } } function VarAnihiPlayer(cid) if not isCreature(cid) then return LUA_ERROR end if isInRange(getPlayerPosition(cid), t.saida[1], t.saida[#t.saida]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end end function getPlayersInArea(fromPos, toPos) local players = {} for _, pid in ipairs(getPlayersOnline()) do if isInRange(getPlayerPosition(pid), fromPos, toPos) then table.insert(players, pid) end end return players end function onUse(cid, item, fromPosition, itemEx, toPosition) local check = {} if #getPlayersInArea(from, to) > 0 then doPlayerSendCancel(cid, 'Aguarde, tem jogadores fazendo a quest.') return true end for _, k in ipairs(t.entrada) do local x = getTopCreature(k).uid if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then doPlayerSendCancel(cid, 'Está faltando player ou alguém não possui level '..t.lvl..' ou mais.') return true end table.insert(check, x) end HaveCreatureArena({from,to}, true, true) for _, summon in pairs(t.monstros) do doCreateMonster(summon[2], summon[1]) end for i, tid in ipairs(check) do doSendMagicEffect(t.entrada, CONST_ME_POFF) doTeleportThing(tid, t.saida, false) addEvent(VarAnihiPlayer, t.Time*1000, tid) doSendMagicEffect(t.saida, CONST_ME_ENERGYAREA) end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end
  14. 1 point
    acho que pode ser algum MOD na pasta MODS, da uma olhada, pode estar gerando conflito,
  15. 1 point
    Explicação: Este sistema proporciona ao jogador a compra de determinada cave por "X" tempo, cada conta poderá comprar somente 1 cave por vez... Lá o jogador poderá upar livremente. Também poderá chamar um amigo para upar na sua cave!! O sistema é o mais completo do mercado, vou estar falando do mesmo abaixo. OBS: Não esqueça de executar a query para funcionar!! Exclusive Cave System Features Dentro do pacote terá duas versões: versão 1 : É para vendar as caves em money(Gold's) Versão 2: É para vender as caves por items, por exemplo por moedas especiais como scarab coins(ID 2159) O sistema é feito por banco de dados O tempo da cave é mostrado em tempo real Você poderá chamar um amigo para sua cave e também remove-lo quando quiser. Existe um globalevents especifico para mostrar no default quando uma cave ficou disponível para venda! (Irá informar o nome da cave o preço dela!) Você poderá configurar a cave para vender por exemplo: - Level minimo e máximo! - Tempo de duração da cave - Se precisa ser premium account para comprar a cave! Quando o tempo da cave expira tanto o dono da cave como o friend invitado são removidos da cave, mesmo estando offline ou online! Comandos exclusivos: Comando para dono da cave: /mycave - Mostra informações da sua cave, como: - Nome da cave - Nome do seu amigo de cave(caso tiver invitado) - Quando tempo falta para expirar o tempo da sua cave /addcavefriend - Adiciona um amigo seu para que ele possa entrar e sai da sua cave quando quiser... Obs: Tem um exhausted de 1 hora(configurável) para não ficar toda hora tirando e colocando amigo na cave. /removecavefriend - Remove o seu amigo da sua cave(caso ele esteja dentro da cave tanto offline quanto online, ele é removido) /cavetime - Mostra quando tempo falta para expirar a sua cave Comando para amigo invitado da cave: /cavefriendtime - Mostra quando tempo falta para expirar a cave que ele invitado. /caveleave - Comando para ele se kikar da cave que está invitado. Comandos adicionais importante para todos: /cavelist -- Mostra em uma janela todas as caves do servidor /cave ID -- Neste comando você terá que usar o ID da cave que deseja saber as infor,ações, por exemplo: /cave 1 -- Irá mostrar em uma janela todas as informações desta cave, como: -Nome da cave -Preço da cave -Level Minimo e Level Maximo para comprar a cave -Se nesta cave precisa ser Premium Account para comprar ou não. /cavepurchase -- Filtra em uma janela somente as caves que estão disponíveis para compra. ---------------------------------------------------------------------------------------------------------------------------------------------------- Configurações: Vá na lib e irá se deparar com duas tabelas... Esta primeira tabela é onde você irá adicionar novas caves e atribuir as configurações, exemplo: exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}} } [1] -- Entre os colchetes é o ID da cave, favor colocar e ordem. name = "Demon Hunter" -- Entre as aspas "" Você atribui o nome da cave price = 1000 -- Preço em gps da sua cave(caso use a versão que vende em gps) level = {min = 8, max =30} -- Aqui voce coloca o level min e max que o jogador tem que ser para comprar a cave time = 4 -- Tempo em horas que o jogador poderá ficar na cave premium = false -- Se para comprar a cave terá que ser premium (false ou true) enter = {x = 284, y = 223, z = 7} -- Pos de entrada da cave from = {x = 275, y = 219, z = 5}, -- Aqui você deverá pegar a pos do começa da cave to = {x = 302, y = 240, z = 7} - - -- Aqui você deverá pegar a pos final da cave!(como se fosse um quadrado. e como adicionar mais caves por exemplo? Assim: exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}}, [3] = {name = "Ciclops Cave", price = 5000, level = {min = 20, max = 50}, time = 2, premium = true, enter = {x = 198, y = 320, z = 7}, from = {x = 200, y = 340, z = 7}, to = {x = 250, y = 390, z = 7}} } ---------------------------------------------------------------------------------------------------------------------------------------------------- explicando a segunda tabela: exclusives_caves_config = { storage = 547575, check = 547576, comand_add_exaust = {hours = 1, storage = 547577}, -- tempo para nao ficar toda hora tirando e colocando amigo mensagem = "[Exclusive Cave System] Você foi removido ou o tempo da %s cave expirou!", serve_mensagem = "[Exclusive Cave System] A cave %s acabou de ficar liberada para venda por %d Gold's, aproveitem para compra-la no NPC!" } storage -- nao mexer! check -- não mexer!! comand_add_exhausted -- é o tempo que jogador poderá voltar a invitar outro jogador, está configurado para 1 hora!! mensagem -- não mexa serve_mensagem -- não mexa tbm kkk Só baixar e executar as querys!! Cave System.rar
  16. 1 point
    Jededias321

    [TFS 0.4] 8.60 com Tela Extendida

    Gente muita gente tinha dificuldade em extender a tela do cliente do Tibia, então eu resolvi ajudar. Está aqui a distro TFS 0.4 rev 3777, com o OTCLIENT mais atualizado. Não coloquei datapack incluso, vocês podem baixar qualquer datapack 8.60 que vai ser compatível. Podem repostar suas modificações, mas coloquem meu crédito. Conteúdo: Distro, Otclient + SRC de ambos. Banco de dados MYSQL: https://www.mediafire.com/file/pa9xuav9kz4j2gg/tibia.sql/file Download: (39.88 MB, descompactado fica 106 MB) https://www.mediafire.com/file/6oo987114fvf8x7/TFS_860_com_tela_maior.rar/file Scan: https://www.virustotal.com/gui/file/a283cfbaadf383ad115e7452abd1c505ef4e404872595740cad5ce0f6867fc95/detection Imagens:
  17. 1 point
    local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_SUBID, 2) setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) setCombatCondition(combat, exhaust) Onde tem "10000" = 10 segundos, é o tempo do exhaust em geral,tenta colocar "0".
  18. 1 point
    marcot

    [ERRO SCRIPT] castlewar

    Esse erro ele tá te dizendo que ele não encontrou a função getTomorrowsDate... Você pegou esse script de onde? Potencialmente por lá vc acha ela
  19. 1 point
    Pedrohero

    [HERO BAIAK] VAGAS NA STAFF

    Fala rapaziada! Abri um novo OT Baiak, hoje! 12/07 já começou a entrar bastante players e tô precisando formar uma equipe. Se você tiver experiência em algo como (Script, Mapper ou consegue dar um bom suporte aos players) entra em contato comigo por aqui ou por Whastapp (21) 969893677. Abraços!
  20. 1 point
    Você pode usar o actionid em um item qualquer. Exemplo da tag com actionid 1111: <movevent type="StepIn" actionid="1111" event="script" value="NOMEDOARQUIVO.lua"/>
  21. 1 point
    Dwarfer

    [Pedido]Aprender spell ao matar um monstro

    Em data/creaturescripts/scripts, crie um arquivo.lua e cole isto dentro: local t = { ["rotworm"] = {name = "light", level = 8}, ["dwarf"] = {name = "haste", level = 15}, ["dwarf soldier"] = {name = "heal friend", level = 10} } function onKill(creature, target) local targetMonster = target:getMonster() if not targetMonster then return true end if isSummon(target:getId()) then return true end local m = t[targetMonster:getName():lower()] if not m then return true end local player = creature:getPlayer() if not player then return true end if player:canLearnSpell(m.name) and not player:hasLearnedSpell(m.name) then if player:getLevel() >= m.level then player:learnSpell(m.name) player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have learnt the spell '" .. m.name .. "'. Open your spellbook and the check the words.") end end return true end No creaturescripts.xml, adicione a tag: <event type="kill" name="MonsterSpell" script="NOMEDOARQUIVO.lua" /> Em data/creaturescripts/scripts/login.lua, adicione a linha: player:registerEvent("MonsterSpell") Não tive como testar, mas creio que funcionará. Edite o nome do monstro, o nome da magia e o level mínimo para aprender a magia conforme os exemplos que deixei.
  22. 1 point
    Aqui no TibiaKing mensagens como UP e BUMP são proibidas, utilize o botão subir este tópico. Esta é uma mensagem automática! Pedimos que leia as regras do fórum!
  23. 1 point
    local cfg = { playerStorage = 60999, globalStorage = 60999, time = 60 * 60 * 24, -- Tempo em segundos positions = { {x=33060, y=31623, z=15}, {x=33066, y=31623, z=15}, {x=33060, y=31627, z=15}, {x=33066, y=31627, z=15} } } function isCooldownReady() return os.time() > getGlobalStorageValue(cfg.globalStorage) end function onUse(cid, item, frompos, item2, topos) if not isCooldownReady() then return true end for _, t in pairs(cfg.positions) do doSummonCreature("Demon", t) end setPlayerStorageValue(cid, cfg.playerStorage, 1) setGlobalStorageValue(cfg.globalStorage, os.time() + cfg.time) end No script acima eu coloco como valor de storage o tempo atual somado ao tempo (segundos) necessário para a quest poder ser ativada novamente. Eu fiz uns testes bem básicos aqui com tempos pequenos (como de 10 segundos) e aparentemente funciona.
  24. 1 point
    @bpm91, outra coisa que eu esqueci de perguntar, você quer que o timer funcione de qual forma? Cada player pode invocar os monstros uma vez por dia; Os monstros só podem ser invocados uma vez por dia, independente do jogador que o tenha feito;
  25. 1 point
    marcot

    ANSWERED pegando key do bau

    Ele está te dizendo aí que tentou chamar a função doSetItemActionId e disse que isso é um valor nil, porque se não me engano em LUA tudo que não tá criado é nulo. Não sei qual base está utilizando, mas a função de setar um action id para o TFS 0.4 é essa: doItemSetActionId(uid, aid) Onde uid é o unique id do item e aid possivelmente o id que você quer.
  26. 1 point
    Tenta rodar esse SQL na sua database: SET GLOBAL sql_mode='';
  27. 1 point
    Brunds

    ANSWERED Script Box

    @ITALOx Essa parte é os itens raros que o player ganhar vai enviar mensagem para o servidor avisando que o jogador tal ganhou um item raro na box no caso ai é o id do item raro
  28. 1 point
    @KOLISAO Entendi.. thanks! @Aldimun Vou deixar aqui o script que criei, se quiser usar fica a seu critério hue
  29. 1 point
    KOLISAO

    ANSWERED Exausted nas portas

    se for otx2... Em config.lua: timeBetweenActions = 500 timeBetweenExActions = 1000 timeBetweenCustomActions = 500 Diminui os valores até você achar melhor.
  30. 1 point
    Brunds

    ANSWERED Script Box

    @ITALOx Achei esse script aqui tinha um bug e corrigi testei e funcionou na minha base 8.54 0.3.6 acredito que vai funcionar em 0.4 também obs: dei uma incrementada adicionei um texto e um efeito configurável no script Script \/
  31. 1 point
    movie

    Real Baiak - Uma nova experiência.

    Updates - 13/07/2019 Novos mini-prints Participe do nosso servidor de Discord, lá temos novidades quase todos os dias! Clique aqui para ir até lá.
  32. 1 point
    victor4312

    Ajuda castle 24 horas

    seu mapa esta feito, falta instalar os scripts, segue...
  33. 1 point
    ZoR

    ANSWERED Problema na spell

    local function onCastSpell1(parameters) if not isPlayer(parameters.cid) then return true end if getCreatureTarget(parameters.cid) ~= 0 then local target = getThingPosition(getCreatureTarget(parameters.cid)) local pos = {x=target.x+0, y=target.y+0, z=target.z+0} local efeito_monster = getCreatureTarget() doSendMagicEffect(pos, 274) -- Id do efeito. doSendMagicEffect(efeito_monster, 123) -- id efeito end return isPlayer(parameters.cid) and doCombat(parameters.cid, combat1, parameters.var) end testa ae @Brunds
  34. 1 point
    Coltera

    Show OFF - Mapping

    HUNTS: Estarei postando algumas imagens do meu projeto (O tópico não tem prazo de Atualização: (??/??/????)). * (Mapa simples e poucos detalhes) * --------------------------------------------------- Atualização: 06/07/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 25/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 14/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 02/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 27/05/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 25/05/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 02/02/2019 --------------------------------------------------- 1 2 3 CIDADE: --------------------------------------------------- Atualização: 27/01/2019 --------------------------------------------------- 1 2 3 4 5 6 7 8 9
  35. 1 point
    1. Atacar com a arma e usar runa ao mesmo tempo. Em player.cpp, procure por: else if((!weapon->hasExhaustion() || !hasCondition(CONDITION_EXHAUST, EXHAUST_COMBAT)) && weapon->useWeapon(this, tool, attackedCreature)) Troque por: else if(!weapon->hasExhaustion() && weapon->useWeapon(this, tool, attackedCreature)) 2. Usar runa enquanto corre. Em player.cpp, remova essa linha: setNextAction(OTSYS_TIME() + getStepDuration(dir)); Créditos: Xellath
  36. 1 point
    Coltera

    Show OFF - Mapping

    Tópico atualizado! - HUNTS: 1 2
  37. 1 point
    Removido: *Boss Room *Rank Task *Prêmios para os 10 primeiros a terminar todas as tasks Adicionado: *Daily Task System (Sistema exclusivo de Task diario, podendo pegar 1x a cada 24 hrs, irei explicar mais depois.) *Task agora é por progresso, você não pode sair e voltar, terá que terminar a task 1 para avançar para a task 2, assim sucessivamente. *Task Points *Level para realizar a task *Nova talkaction que mostra uma janela de informações sobre o level da task, premios que irá receber, progresso, etc... *Items para entrega(Se o jogador deverá levar algum item junto com a quantidade de monstro morta) para finalizar a task *Sistema de look Task (Varia de acordo com a sua quantidade de Task Points, podendo ficar por exemplo como "Huntsman", "Ranger", etc...(alterável) *Mods e npc mais "clean", várias linhas removidas e o sistema está mais rápido *Vou Adicionar "scripts extras" Como: --> Tile que só passa quem tiver permissão depois de finalizar determinada quest --> Npc de Boss Room para entrar e enfrentar o monstro quem fez determinada quest [+] Resumo do Task system + Daily Task System [+] Task System: É o sistema de task "original", onde consiste em matar determinada quantidade de monstros(E entregar certo itens <- é configurável), para receber recompensas como Exp, Money e Items. Algumas mudanças do simple task 3.0 para o 4.0 foram: [+] O sistema agora é por progresso, isso quer dizer que você terá que ir terminando a quest para avançar para a seguinte. [+] O sistema Também recebeu uma alteração, fazendo com que as Tasks precisem que o jogador tenha um level determinado [+] A tabela para edição está mais fácil, fazendo com que você adicione ou remova monstros com mais tranquilidade, inclusive alterações das Rewards da Task. Daily Task System: É um sistema que desenvolvi para que os jogadores sempre estejam se comunicando com o npc de Task, no caso da Task Diaria, vária de acordo com o level do jogador, por exemplo: Jogadores entre level 6 ao 49 poderá cair em uma dessas 3 Task Diarias: Orcs, Tarantulas ou Wyverns Jogadores entre level 50 ao 79 poderá cair em uma dessas 3 Task Diarias: Dragons, Wailing Widows ou Ancient Scarabs E por ai vai, claro que você poderá aumentar as Task Diarias dependendo do level, eu fiz 3 para cada level que é pra postar, mas tudo isso você pode aumentar! Dependendo do seu servidor. E sim, você pode fazer a TASK "ORIGINAL" e a TASK "DIARIA" ao mesmo tempo! Ambas são distintas e possuem Rewards diferenciadas! No caso da Task diaria, levando em conta que você começou a fazer ela no dia 08/01 ás 20:00 Hrs, você tem até o dia 09/01 ás 20:00Hrs para termina-la e receber a recompensa, caso termine antes, a Task diaria só irá ficar disponível para repetição a partir desta mesma data 09/01 20:00 Hrs; [+] Caso você não termine a tempo, não tem problema, basta esperar este horário e começar uma nova Task. [+] Caso você começou a Daily Task e terminou antes desta data. mas por algum motivo esqueceu de entregar e a mesma passou do prazo, não tem importância, caso você tenha matado todos os monstros até 09/01 20:00 Hrs, você poderá entregar está Task em qualquer horário para receber suas Rewards e começar uma task a partir do momento em que você entregou! (INJUSTIÇA AQUI NÃO CARALHO). [+] Comandos Adicionais [+] /task -- Mostra as informações da sua Task Atual, como Nome da Task, Level, Rewards, Monstros que você poderá matar, Se tem que entregar algum Item junto, etc... /task daily -- É basicamente mostra a mesma informação da Task Principal, porém mostra também qual o prazo limite para entrega da task. /task counter -- É um comando que ATIVA ou DESATIVA o contador de monstros mortos na task no seu Channel. [+] Imagens [+] Cline neste link para ver algumas imagens da Task : http://imgur.com/a/eLIY3 ------------------------------------------------ // -------------------------------------------------------------- [+] Instalação do Sistema [+] Requisitos: Nível Médio de conhecimento em scripting LUA Pasta Mods Simple Task.xml https://pastebin.com/raw/P5hqMC3j NPC: Ludger.xml https://pastebin.com/raw/R56yLWHw simple_task.lua https://pastebin.com/raw/1mRzJ6aJ ---------------------------------------------- // ---------------------------------- [+] configuração [+ ] Task System Principal task_sys = { [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000} } [1] --> O número entre os colchetes [] significa a ordem da Task, como a Task é por progresso sempre começará no 1 e irá pro [2], assim sucessivamente. name --> É o nome da task que o jogador irá fazer. start --> é a storage que indicará se o jogador começou a Task monster_list ={} --> É o nome dos monstros em que o jogador deverá caçar para completar a Task level --> É o level necessário para dar inicio á Task count --> É o número de monstros que o jogador tem que matar para completar a Task points --> Aqui determinada quantos Task points o jogador irá receber ao completar a Task items = {} --> Aqui determinada se além de matar os monstros, o jogador terá que entregar item também! Caso tenha só colocar o {ITEM_ID, QUANTIDADE} EX: items = {{2173,1}{2160,10},{2493,2}} rewad --> Aqui determinada se o jogador irá receber itens ao terminar a Task, mesma formula do items /\ reward = {{2520,1},{2173,1}} exp --> Se o jogador irá receber Exp ao terminar a task. 0 ou quantidade de exp Money --> Se o jogador irá receber dinheiro ao terminar a task. 0 ou quantidade de dinheiro Daily Task System daily_task = { [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000} } Segue o padrão da Task original, exceto que não precisa entregar items para o npc! Como funciona A randomização de level de acordo com a Daily task? Procure por está tabela em MODS local t = { [{6,49}] = {1,3}, [{50,79}] = {4,6}, [{80,129}] = {7,9}, [{130,math.huge}] = {10,12} } entre as chaves e colchetes é o level do jogador para as Daily Task, Você pode adicionar quantas você quiser! Digamos que: [{6,49}] = {1,3} --> Quer dizer que entre o level 6 ao 49 o jogador poderá cair na Daily Task número 1(Orcs), 2(Tarantulas) ou 3(Wyvern)! [{50,79}] = {4,6} --> Quer dizer que entre o level 50 ao 79 o jogador poderá cair na Daily Task número 4(Dragons), 5(Wailing Widows) ou 6(Ancient Scarabs)! ... [{130,math.huge}] = {10,12} --> Quer dizer que o jogador level 130 ou MAIS poderá cair na Daily Task número 10(Undead Dragons), 11(HydraS) ou 12(Ghastly Dragons)! Look Rank System Procure por está tabela em MODS local ranks = { [{1, 20}] = "Huntsman", [{21, 50}] = "Ranger", [{51, 100}] = "Big Game Hunter", [{101, 200}] = "Trophy Hunter", [{201, math.huge}] = "Elite Hunter" } Entre 1-20 Task points o Rank será Huntsman Entre 21-50 Task posints o Rank será Ranger Entre 51-100 Task Points o rank será Big Game Hunter etc... Altere como quiser!
  38. 1 point
    @jakons local config = { max = 3, -- numero de players permitido com o mesmo ip group_id = 1 -- kikar apenas player com o group id 1 } local accepted_ip_list = {} -- lista dos players permitidos a usar MC, exemplo: {"200.85.3.60", "201.36.5.222"} local function antiMC(p) if #getPlayersByIp(getPlayerIp(p.pid)) >= p.max then doRemoveCreature(p.pid) end return true end function onLogin(cid) if getPlayerGroupId(cid) <= config.group_id then if isInArray(accepted_ip_list,doConvertIntegerToIp(getPlayerIp(cid))) == false then addEvent(antiMC, 1000, {pid = cid, max = config.max+1}) end end return true end *script não é de minha autoria.
  39. 1 point
    Coltera

    Show OFF - Mapping

    Tópico atualizado! - HUNTS: 1 2
  40. 1 point
    Coltera

    Show OFF - Mapping

    Tópico atualizado! - HUNTS: 1 2
  41. 1 point
    DdJs

    Merchant Island | 8.60

    Merchant Island Version: 8.60 Type: .Rar Size: 55KB Position(s): [X: 1074 Y: 1011 Z: 7] File password: tibiaking Images:
  42. 1 point
    xWhiteWolf

    Critical Skill System

    Fala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser: creaturescripts.xml: <!-- CRITICAL SYSTEM --> <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua: --- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then setPlayerStorageValue(cid, 48913, 0) end creaturescritps\scripts\critical.lua: --[[Critical System ------------------------- By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior) Agora em actions.xml adicione: <action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione: --- CRITICAL System by Night Wolf local config = { effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado } function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!") return 0 end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo: <action itemid="1294" << ID do item que será usado pra dar a skill. A config tá bem simples: effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado. Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque. Espero que vcs gostem, qualquer coisa deixem os comentários aqui. Obs: aqui tá uma foto Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui: <script> <event name="critical"/> </script> coloque antes de </monster> Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players.
  43. 1 point
    Para quem não sabe como funciona o script : O player usa um certo item e se ele for dono de alguma house ele será teleportado para ela. • Adicionando o script • Em "data/actions/scripts/tphouse.lua" : function onUse(cid, item, fromPosition, itemEx, toPosition) if hasCondition(cid, CONDITION_INFIGHT) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Desculpe,voce esta em batalha.") end if getPlayerLevel(cid) < getConfigInfo("levelToBuyHouse") then return doPlayerSendCancel(cid, "Sorry, not possible.") end if not getHouseByPlayerGUID(getPlayerGUID(cid)) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Desculpe voce nao tem house.") end doTeleportThing(cid, getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))) doRemoveItem(item.uid, 1) return true end Em "data/actions/actions.xml" : <action itemid="7722" event="script" value="tphouse.lua"/> Créditos : MaXwEllDeN por ajudar em algumas funções. • Configurando •
  44. 1 point
    xWhiteWolf

    Dodge System 8.54+

    poderia elaborar melhor? o sistema só não funciona com o item duplicado? e o item em questão está fazendo o papel da pedra de adicionar level?
  45. 1 point
    Na pasta layout, abra seu basic.css e procure por: #HeaderArtworkDiv { position: absolute; text-align: center; background-position: top center; background-attachment: scroll; background-repeat: no-repeat; top: 0px; height: 800px; width: 100%; altere: position: absolute; para: position: fixed; acesse seu site, aperte ctrl + f5 e estará feito. REP+ plz.
  46. 1 point
    xWhiteWolf

    Dodge System 8.54+

    puts agr, esqueci totalmente de rever esse tópico aqui, me perdoa.. ainda precisa de ajuda? vc tem ctza q instalou certinho?
  47. 1 point
    ViitinG

    [action] Canoa em Movimento

    Bom para quem não sabe,este é um script que faz o character andar em conjunto com a canoa.(você pode configurar a rota) (Testado em TFS 0.3.6 e TFS 0.2.14) Como criar : Adicione a actionid 6901 no meio da canoa. Onde a canoa deve ir você coloca o itemid 4820. Você tem que usar as bordas com o mesmo ID que está nas configurações endborders. "data/actions/actions.xml" : (TFS 0.3/0.4) <action actionid="6901" event="script" value="other/movingboat.lua"/> (TFS 0.2/1.0) <action actionid="6901" script="other/movingboat.lua"/> "data/actions/scripts/movingboat.lua" : local config = { endborders = {4644, 4646}, speed = 300, ignorefirstborders = 3 } local fight = createConditionObject(CONDITION_INFIGHT) setConditionParam(fight, CONDITION_PARAM_TICKS, -1) local function comparePos(poss, pos) return pos.x == poss.x and pos.y == poss.y end local n, s = 0, 0 local function getRightPos(poss, last) ps = { {x = poss.x, y = poss.y - 1, z = poss.z}, {x = poss.x + 1, y = poss.y, z = poss.z}, {x = poss.x, y = poss.y + 1, z = poss.z}, {x = poss.x - 1, y = poss.y, z = poss.z} } for _, pos in pairs(ps) do if(getTileItemById(pos, 4820).uid > 0) then if(not comparePos(last, pos)) then p = pos return p end else for b = 1, #config.endborders do if(getTileItemById(pos, config.endborders[b]).uid > 0 and s > config.ignorefirstborders) then n = n + 1 p = pos return p and n end end end end end local function doTravel(cid, poss, last) getRightPos(poss, last) travel = p.x > poss.x and "east" or (p.y < poss.y and "north" or (p.y > poss.y and "south" or (p.x < poss.x and "west" or "false"))) if n > 1 then p = poss end if(travel == "false") then if(getCreatureCondition(cid, CONDITION_INFIGHT)) then doRemoveCondition(cid, CONDITION_INFIGHT) end n = 0 s = 0 return false end local des = { ["north"] = {cPos = {{x = p.x, y = p.y - 1, z = p.z}, p, {x = p.x, y = p.y + 1, z = p.z}}, dir = 0, boat = {3587, 3589, 3591}}, ["east"] = {cPos = {{x = p.x + 1, y = p.y, z = p.z}, p, {x = p.x - 1, y = p.y, z = p.z}}, dir = 1, boat = {3596, 3594, 3592}}, ["south"] = {cPos = {{x = p.x, y = p.y + 1, z = p.z}, p, {x = p.x, y = p.y - 1, z = p.z}}, dir = 2, boat = {3591, 3589, 3587}}, ["west"] = {cPos = {{x = p.x - 1, y = p.y, z = p.z}, p, {x = p.x + 1, y = p.y, z = p.z}}, dir = 3, boat = {3592, 3594, 3596}} } local x = des[travel] if(x) then for x = p.x - 2, p.x + 2 do for y = p.y - 2, p.y + 2 do pos = {x = x, y = y, z = p.z} for id = 3587, 3596 do if(getTileItemById(pos, id).uid > 0) then doRemoveItem(getTileItemById(pos, id).uid, 1) end end end end for c = 1, #x.boat do its = doCreateItem(x.boat[c], 1, x.cPos[c]) if(n > 0 and c == 2) then doSetItemActionId(its, 6901) end end doTeleportThing(cid, x.cPos[2], false) doCreatureSetLookDir(cid, x.dir) if(n > 1) then if(getCreatureCondition(cid, CONDITION_INFIGHT)) then doRemoveCondition(cid, CONDITION_INFIGHT) end n = 0 s = 0 return false end s = s + 1 end return addEvent(doTravel, config.speed, cid, p, poss) end function onUse(cid, item, fromPosition, itemEx, toPosition) if(getCreatureCondition(cid, CONDITION_INFIGHT)) then return doPlayerSendCancel(cid, "You can't travel when you're in a fight.") end doTeleportThing(cid, toPosition) doAddCondition(cid, fight) doTravel(cid, getPlayerPosition(cid), getPlayerPosition(cid)) return true end "data/movements/movements.xml" : (TFS 0.3/0.4) <movevent type="StepIn" itemid="4820" event="script" value="water.lua"/> (TFS 0.2/1.0) <movevent event="StepIn" itemid="4820" script="water.lua"/> "data/movements/scripts/water.lua" : local boatids = {3589, 3594} function onStepIn(cid, item, position, fromPosition) for _, id in pairs(boatids) do if(getTileItemById(fromPosition, id).uid > 0) then return doTeleportThing(cid, fromPosition) end end return true end Se você usa TFS 0.3/0.4, adicione isto em "data/lib/050-function.lua" (se você ja não tiver). function doSetItemActionId(uid, actionid) return doItemSetAttribute(uid, "aid", actionid) end Creditos : 99% - Limos o/. 1% - ViitinG.
  48. 1 point
    Nolis

    [NPC] Elfo Ferreiro V1.0

    Testado em: TFS 1.0 (10.31) Funciona em: TFS 1.0 e TFS 0.4 Descrição: Você leva uma determinada espada até o npc, fala com ele, ele vai pegar essa espada e ficar com ela por um certo tempo (3min), claro, você irá pagar uma quantia. Ao retornar, sua espada estará melhorada (no caso dos ids utilizados o npc irá trocar o item). Se houver algum bug, reporte que arrumaremos. Créditos: Jamison, Daniel. ---------- • ---------- Diálogo: 22:21 Daniel [250]: hi 22:21 Blacksmith Elf: Hello Daniel! I'm a Blacksmith Elf, I can transform your item! 22:21 Daniel [250]: transform 22:21 Blacksmith Elf: From time to time fate smiles upon those who take great risks and have strong dreams! If you have money, we can try to transform your umbral swords, axes, clubs, bows, crossbows or spellbooks. 22:21 Daniel [250]: club 22:21 Blacksmith Elf: One handed or two handed? 22:21 Daniel [250]: one handed 22:21 Blacksmith Elf: Do you want to spend your money to transform your crude umbral mace, yes or no? 22:21 Daniel [250]: yes 22:21 Blacksmith Elf: Great! Alright, I need a while to finish this club for you. Come ask me later. 22:22 Daniel [250]: hi 22:22 Blacksmith Elf: Hello Daniel! I'm a Blacksmith Elf, I can transform your item! 22:22 Daniel [250]: transform 22:22 Blacksmith Elf: Have you left anything here to transform ? 22:22 Daniel [250]: yes 22:22 Blacksmith Elf: You must wait until : 22:24:49. 22:25 Daniel [250]: hi 22:25 Blacksmith Elf: Hello Daniel! I'm a Blacksmith Elf, I can transform your item! 22:25 Daniel [250]: transform 22:25 Blacksmith Elf: Have you left anything here to transform ? 22:25 Daniel [250]: yes 22:25 Blacksmith Elf: Here you have it. ---------- • ---------- Fotos ---------- • ---------- Script: data/npc/Blacksmith Elf.lua data/npc/scripts/blacksmith_elf.lua
  49. 1 point
    xWhiteWolf

    ANSWERED [PEDIDO] Editar Items.

    Você coloca no items.xml oque vc quer que o item faça, experimenta usar comandos de itens parecidos: Exemplo: Quero que o set de Knight dê skill de club/sword/axe.. daí vc procura algum item que faça isso e só copia a parte que aumenta a skill <attribute key="skillSword" value="3" /> <attribute key="skillAxe" value="3" /> <attribute key="skillClub" value="3" /> Se você quiser que aumente distance é só colocar <attribute key="skillDist" value="3" /> para absorver danos é bem simples <attribute key="absorbPercentPhysical" value="3" /> <attribute key="absorbPercentEarth" value="5" /> <attribute key="absorbPercentDeath" value="6" /> <attribute key="absorbPercentFire" value="-3" /> <attribute key="absorbPercentIce" value="2" /> Perceba que o PercentFire está negativo, é porque ele tem fraqueza contra fogo, positivo ele é bom contra o elemento, negativo ele é fraco contra o elemento. Pra aumentar ML é só usar: <attribute key="magiclevelpoints" value="1" /> Pra aumentar speed é só procurar a BOH e copiar: <attribute key="speed" value="20" /> E não esquece de colocar no final <attribute key="showattributes" value="1" /> para que apareçam os atributos quando o player der look no item. Em <attribute key="slotType" value="necklace" /> Você escolhe que tipo de item aquilo é, os values são: body, two-handed, one-handed, ammo, ring, necklace, legs, feet, head, backpack E PARA FINALIZAR DECLARE TUDO NO MOVEMENTS.XML: <movevent type="Equip" itemid="IDDOITEM" slot="TIPO DE SLOT" event="function" value="onEquipItem"/> <movevent type="DeEquip" itemid="IDDOITEM" slot="TIPO DE SLOT" event="function" value="onDeEquipItem"/> itemid="IDDOITEM" troque IDDOITEM pelo ID DO ITEM (BEM ÓBVIO, NÉ?) slot="TIPO DE SLOT" coloque um dos slots possíveis, os que são possiveis estão nessa lista aqui: armor feet legs head shield pickupable necklace ring OBSERVAÇÃO FINAL: O SLOT QUE VC DECLARAR NO MOVEMENTS TEM QUE SER DO MESMO TIPO QUE O ITEMS.XML ------------------------------------------------------------------------------------------------------------------------------------------------------------------- Agora as flechas/bows/armas: Essas não precisam declarar no movements.xml mas precisam de um script no weapon.xml 1) Flechas As flechas são bem simples: <attribute key="slotType" value="ammo" /> <attribute key="attack" value="25" /> <attribute key="maxHitChance" value="90" /> <attribute key="weaponType" value="ammunition" /> <attribute key="ammoType" value="arrow" /> <attribute key="shootType" value="arrow" /> slotype = ammo para ficar no lugar da munição (ammo) Attack vc muda a vontade pro que vc quiser MaxHitChance = chance de acertar o hit, qualquer numero menor que 100 apresenta uma chance do hit falhar WeaponType= Tipo de arma, flechas são munições então deixe sempre ammunition ammoTyoe = Tipo de munição, pode ser "arrow" ou "bolt" dependendo doque vc quiser usar, um bow ou um crossbow shootType é o efeito que vai sair, no caso dessa aí seria uma arrow normalzinha mas vc pode colocar qualquer flecha que exista ou até mesmo copiar efeitos de runas Dê ctrl+F no items.xml em shootType e copie diferentes tipos e vá vendo no servidor qual se encaixa melhor na sua opinião. 2) Bows e Crossbows Eu te aconselho copiar de algum item que já exista o modificar oque você quiser <attribute key="slotType" value="two-handed" /> <attribute key="weaponType" value="distance" /> <attribute key="ammoType" value="bolt" /> <attribute key="range" value="5" /> <attribute key="hitChance" value="1" /> isso daqui é um crossbow duas mãos que ataca bolt (podia ser arrows tb) a uma distância de no máximo 5 SQM (modifique o range) a chance de hit padrão dele é 1 e essa hit chance soma com a da munição 3) Wands e Rods <attribute key="weight" value="2900" /> <attribute key="weaponType" value="wand" /> <attribute key="shootType" value="ice" /> <attribute key="range" value="3" /> peso, tipo (mesmo que seja uma rod o tipo é "wand"), tipo de efeito que sai dela (no caso é o ice), distância que ataca (no caso, 3 sqm) Agora no weapons.xml: <wand id="2190" level="7" mana="2" min="8" max="18" type="energy" event="function" value="default"> <!-- Wand of Vortex --> <vocation id="1"/> </wand> id do item, level pra usar, custo de mana por hit, dano minimo e maximo, tipo de ataque, event (deixe function para ele fazer tudo que vc colocou no items.xml) value= não mexa a menos que vc seja um programador C++, vocation vc coloca as classes que podem usar. 1= sorc, 2= druid, 3= pally, 4= kina, 5= master sorc, 6= elder druid, 7= royal pally, 8= elit kina OBS: Você pode colocar isso também para que quando o player dê look não apareça o nome da classe que pode usar aquele determinado item (isso é util quando vc declarar que ambos sorceres e master sorcerers podem usar o item, evitando as repetições quando o player der look no item <vocation id="5" showInDescription="0"/> <vocation id="1"/> 4) Outros tipos de arma É bem simples, só edite oque quiser seguindo o modelo: <attribute key="weight" value="6800" /> <attribute key="defense" value="65" /> <attribute key="attack" value="90" /> <attribute key="weaponType" value="sword" /> <attribute key="extradef" value="5" /> <attribute key="elementIce" value="30" /> <attribute key="slotType" value="two-handed" /> <attribute key="decayTo" value="2401" /> <attribute key="duration" value="60" /> weight = peso defense= defesa q ela dá attack = ataque weapontype = Tipo de arma (sword, axe, club) extradef = defesa extra (fica Defesa 65 +5 nesse caso) ElementIce = adiciona dano elemental à arma, pode usar também ElementFire, ElementEarth e ElementEnergy slotType = se a arma é duas mãos ou não (caso não seja apenas retire essa linha) decayTo = apos um tempo igual a duration (em segundos) ela vira o item de ID 2401 (se não quiser isso apenas remova essas duas ultimas linhas) OBSERVAÇÃO FINAL: Tudo que você não quiser utilizar é só remover a linha do items.xml, e todo tipo de edição em armas deve ser declarado no weapons.xml seguindo o exemplo. (COMO VOCÊ NÃO TÁ CRIANDO NENHUM ITEM E SIM EDITANDO OS QUE JÁ EXISTEM EU TE ACONSELHO A PROCURAR O ITEM LÁ DANDO CTRL F E PROCURANDO PELO ID DOQUE SAIR ADICIONANDO UM MONTE DE LINHA A MAIS QUE TALVEZ DÊ CONFLITO COM AS QUE JÁ EXISTAM). OS ITENS QUE VC COLOCAR PRA DAR SKILL, ML OU PORCENTAGEM ELEMENTAL VOCÊ DEVE DECLARAR NO MOVEMENTS.XML E SE ESSE ITEM FOR PARA UMA DETERMINADA VOCAÇÃO VOCÊ DEVE DECLARAR TAMBÉM SEGUINDO O EXEMPLO: <movevent type="Equip" itemid="7886" slot="feet" event="function" value="onEquipItem"> <vocation id="1"/> <vocation id="5" showInDescription="0"/> <vocation id="2"/> <vocation id="6" showInDescription="0"/> </movevent> <movevent type="DeEquip" itemid="7886" slot="feet" event="function" value="onDeEquipItem"/>
  50. 1 point
    Vodkart

    Getguildleadername(Guildname)

    é uma função que pega o nome do leader da guild,dá para fazer algo interessante como adicionar itens ao lider da guild depois de completar um "war",etc adicionando: 050-function function getGuildLeaderName(GuildName) -- function by vodkart local leader = db.getResult("SELECT `players`.`name` FROM `players` WHERE `players`.`id` = (SELECT `guilds`.`ownerid` FROM `guilds` WHERE `guilds`.`name` = ".. db.escapeString(GuildName) .. ")") if(leader:getID() ~= -1) then return leader:getDataString("name") end return nil end exemplo de uso em talkactions: FLW exemplo em actions: function onUse(cid, item, frompos, item2, topos) local leader,pid = getGuildLeaderName(getPlayerGuildName(cid)),getPlayerByName(leader) local item = 2400 if getPlayerGuildId(cid) <= 0 then return doPlayerSendCancel(cid, "You are not a guild member.") elseif (not pid or isPlayerGhost(pid)) then return doPlayerSendCancel(cid, "Sorry, The Leader [".. leader .."] is offline and will not receive the item!") end doPlayerAddItem(pid,item,1) return TRUE end nesse script o jogador vai puchar a alavanca ou clicar em alguma coisa e vai ser adicionado um item para o lider da sua guild
This leaderboard is set to Sao Paulo/GMT-03:00

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução! A publicação do seu anuncio é instantânea!

×
×
  • Create New...