Ir para conteúdo
  • Cadastre-se

Movements - Ao equipar item utilizar os atributos contidos no itens.xml e também executar script personalizado


Posts Recomendados

Olá nobre senhores, tudo bem com vocês?

Servidor: TFS 0.3.6

Cliente:    8.60

 

Estou com a seguinte ideia, criar conjuntos de equipamentos em meu servidor, que aumente os atributos do player ao utilizar o conjunto/set completo, exemplo:

warrior_set.png.3591617f40d84d93e1ef64ff072ec988.png

 

Um exemplo dos itens contidos no meu itens.xml:

<item id="2487" article="a" name="warrior armor">
    <attribute key="weight" value="9000" />
    <attribute key="armor" value="13" />
    <attribute key="skillSword" value="1" />
    <attribute key="skillAxe" value="1" />
    <attribute key="skillClub" value="1" />
    <attribute key="slotType" value="body" />
    <attribute key="healthGain" value="2" />
    <attribute key="healthTicks" value="3000" />
	<attribute key="description" value="+2 HP every 3s, Sale value: $5000" />
</item>

 

Em meu movements.xml:

<movevent type="Equip" itemid="2487" level="30" slot="armor" event="function" value="onEquipItem">
	<vocation id="8" />
</movevent>
<movevent type="DeEquip" itemid="2487" slot="armor" event="function" value="onDeEquipItem" />

 

Entretanto eu fico limitado aos eventos de Equip default, se eu altero para meu script full_set.lua:

<movevent type="Equip" itemid="2487" level="30" slot="armor" event="script" value="full_set.lua">
	<vocation id="8" />
</movevent>

 

Executando meu script  eu perco os atributos contidos no itens.xml, tais como o aumento de skill, ganho de HP por segundo e também qualquer vocação pode utilizar o equipamento.

 

Simplificando, é possível utilizar os recursos padrões de Equip do movements e adicionar um/mais scripts personalizáveis sem perder as funcionalidades da function onEquipItem?

Meu objetivo é quanto mais partes do set o jogador possuir, mais bônus ele obterá, um exemplo:

 

Warrior Set

[2 peças] - Aumenta em 100 HP total

[4 peças] - Aumenta em 2 shielding

 

Eu tenho uma ideia de colocar essa verificação no creaturescripts, entretanto não gostaria de tomar esse rumo pois acredito que poderia sobrecarregar meu servidor com as verificações por thing.

Efetuei consultas pela internet e geralmente o pessoa que tem essa duvida utiliza itens que não tem status, tipo um ring, no meu caso é diferente.

 

Possível solução: Seria utilizar o código Equip padrão no meu script e depois aplicar meu código, entretanto eu não encontrei em nenhum local esse script de Equip,

 

Quem puder me ajudar eu ficaria eternamente grato já que esse é um sistema chave no meu projeto, agradeço desde já :(

Editado por Doria Louro (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 09/11/2023 em 11:47, Doria Louro disse:

Warrior Set

[2 peças] - Aumenta em 100 HP total

[4 peças] - Aumenta em 2 shielding

pra isso seria necessário criar os atributos na source com um map de atributos a serem adicionados, caso vc add na source os atributos do item, eles automaticamente contam com o Equip e DeEquip, eu fiz esse sistemas pro baiak-hells, um pouco diferente pois dava dano e def

Link para o post
Compartilhar em outros sites
22 horas atrás, FeeTads disse:

pra isso seria necessário criar os atributos na source com um map de atributos a serem adicionados, caso vc add na source os atributos do item, eles automaticamente contam com o Equip e DeEquip, eu fiz esse sistemas pro baiak-hells, um pouco diferente pois dava dano e def

tem como distribuir pra gente nao ? xD

Link para o post
Compartilhar em outros sites
  • 5 months later...

A Solução que encontrei foi essa:
Em movements/scripts/ crie um arquivo com o nome de fullset.lua

-- Ao Equipar um equipamento
function onEquip(cid, item, slot, boolean)
    if not boolean then
        --Aqui será chamado o seu script personalizado, no meu caso ele verifica todos os itens 
    	--equipados no personagem e verifica se são do msm set, caso seja adiciona o buff ao jogador,
    	--caso a contagem de itens do set seja melhor que o minimo para o buff do set ele remove o buff 
    	--caso esteja ativo no personagem
    	--(OBS)Dessa forma os itens mantem seu atributos originais e é chamado o script personalizado também
    end
    if item.uid > 0 then
        return callFunction(cid, item.uid, slot, boolean)
    end
    return true
end
-- Ao desequipar um equipamento
function onDeEquip(cid, item, slot, boolean)
    if boolean then
        --Aqui será chamado o seu script personalizado, no meu caso ele verifica todos os itens 
    	--equipados no personagem e verifica se são do msm set, caso seja adiciona o buff ao jogador,
    	--caso a contagem de itens do set seja melhor que o minimo para o buff do set ele remove o buff 
    	--caso esteja ativo no personagem
    	--(OBS)Dessa forma os itens mantem seu atributos originais e é chamado o script personalizado também
    end
    if item.uid > 0 then
        return callFunction(cid, item.uid, slot, boolean)
    end
    return true
end

 

Em movements/movements.xml será preciso renomear todos os movimentos envolvendo os equipamentos, ex:

<!-- Ao equipar essa armadura é atribui ao personagem os atributos padrões do item (+10% proteção ice) e executado seu script personalizado -->
<movevent type="Equip" level="100" itemid="8884" slot="armor" event="script" value="custom/fullSet.lua">
	<vocation id="4" />
	<vocation id="8" />
</movevent>
<!-- Mesma coisa aqui, porém remove os atributos do item (-10% proteção ice) e executa novamente seu script personalizado -->
<movevent type="DeEquip" itemid="8884" slot="armor" event="script" value="custom/fullSet.lua" />

 

Eu alterei todo meu movements.xml para poder estar constantemente verificando se o jogador está com a quantidade minima de equipamentos equipados para poder assim adicionar o bonus de fullSet.

 

Lembrando que apenas descrevi a solução do problema que postei anteriormente, o script de fullSet foi desenvolvido por mim e no futuro estarei disponibilizando para a comunidade.

 

Att Manoel Louro 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Imperius
      Tinha visto isso no servidor do MegaTibia / Kaldrox e achei bem interessante.
       
      Todos os tópicos que encontrei sobre o assunto de alterar a cor das mensagens dos GMs, CMs e ADM no channel Help para vermelho, falavam que tinham que fazer uma configuração na própria source do servidor.
       
      Fiz uma gambiarra que funciona, sem a necessidade de mexer na source do servidor e de utilizar comandos para isso. Testei somente em TFS 0.4 e funciona tranquilamente.
       
      segue abaixo como configurar em seu otserver:
       
      data > talkactions > scripts > crie um arquivo chamado gmsayred.lua e cole o código abaixo:
       
      function onSay(cid, words, param, channel) if channel == CHANNEL_HELP then for _, pid in ipairs(getPlayersOnline()) do doPlayerSendChannelMessage(pid, '', "".. getCreatureName(cid) .. ": ".. words, TALKTYPE_CHANNEL_R1, CHANNEL_HELP) end return true end end  
      em talkactions.xml cole a tag abaixo:

       
      <!-- Gamemasters --> <talkaction default="yes" filter="quotation" logged="no" access="3" event="script" value="gmsayred.lua"/>    
      e pronto! Agora é só enviar alguma mensagem no Help que a mensagem ficará em vermelho.
       

       
    • Por Sphynx1
      Olá galera, vocês conhecem as lendas dos Trolls de baixo da ponte? Eles estão sempre na espreita, aguardando alguém para roubar, assassinar, estuprar e comer suas almas (as últimas partes são brincadeira). Me baseando nessa lenda eu fiz esse simples script, é um dos primeiros códigos que consigo desenvolver sozinho(tive ajuda), eu espero que ajude alguém em algum lugar do tempoespaço, é um script ótimo se você assim como eu gosta de pontes e também sempre teve a vontade de incrementar alguns de seus mapas com scripts.




       
      1º. Acesse a pasta raiz do seu servidor, logo após siga o seguinte caminho: data/movements e abra o arquivo movements.xml. O código que você devera adicionar dentro deste arquivo está listado abaixo.
      <movevent type="StepIn" actionid="DigiteONumeroDeUmaActionAqui" event="script" value="ponte.lua"/>  
      2º. Dentro de data/movements abra a pasta 'scripts' e crie um arquivo .lua nomeado de 'ponte', dentro deste adicione o seguinte código.
      function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) local configuration = { monstrosTime = 1*5*1000, -- tempo até a criatura aparecer tempoDeStorage = 1*20*1000, -- em quanto tempo será removido a storage e se tornará possivel as criaturas resurgirem storage = 987459, -- numero da storage monsters = { [1] = {name = "Troll Champion", pos = {x = 1001, y = 1110, z = 9}}, -- Nome, quantidade e posição dos monstros, altere a vontade [2] = {name = "Troll", pos = {x = 1000, y = 1107, z = 9}}, [3] = {name = "Troll", pos = {x = 1007, y = 1109, z = 9}} } } if isPlayer(cid) == true then if getPlayerStorageValue(cid, configuration.storage) < 1 then doCreatureSay(cid, "A ponte não parece segura e quando você dá o primeiro passo ouve um grunhido e nota a presença de um ser estranho.", TALKTYPE_ORANGE_1) -- MSG que você quer exibir addEvent(function() for k, v in pairs(configuration.monsters) do doCreateMonster(v.name, v.pos) end end, configuration.monstrosTime) setPlayerStorageValue(cid, configuration.storage, 1) addEvent(function() setPlayerStorageValue(cid, configuration.storage, 0) end, configuration.tempoDeStorage) end end return true end  
      3º. Inicie o seu servidor e adicione o número da 'ActionID' que você inseriu em 'movements.xml' a algum piso de sua preferência, no caso eu adicionei no meio da ponte. Seja criativo.
    • Por lordzetros
      TFS 1.3 - TESTADO EM VERSÃO 10.98
      * Introdução *
       
          Bom, estive navegando no Fórum e vi que o usuário @Cleiton Felipi pediu um script que ao player entrasse no teleport de um X monstro, um Demon por exemplo, listasse qual hunt o jogador queria entrar. Achei interessante, e resolvi desenvolver e postar no TK, já que não tinha ainda, :).
       
       
       
      * Sobre o sistema *
       
           Você utiliza diversas hunts com vários tps criados no mapa no seu servidor do mesmo monstro? Bom, este script será muito útil para você! Pois ele permitirá que você habilite ao jogador em qual hunt ele quer caçar, por exemplo, se tiver Demon 01, Demon 02, Demon 03, Demon X, basta apenas você criar um tp indicando o monstro e que uma janela irá aparecer com a lista de opções de hunts, prático, né? Segue imagens de demonstração:


       
       
      OBS¹.: Você pode colocar TODOS OS MONSTROS neste script, contando que tenha o actionID que ficará no teleporte, não é de uma quantidade limitada, em outras palavras, você pode adicionar as hunts de Demon, Frost Dragon, Dragon, ..., tudo aqui, apenas mudando o actionID (tudo configurável, não se preocupe).
       
      * Instalação *
       
      Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro:
      --[[ Script - Lordzetros Fórum Tibia King ]] local config = { titulo = "BEM VINDO(A) A JANELA DE HUNTS!", -- Título da Janela mensagem = "Selecione qual hunt voce deseja ir:", -- Mensagem abaixo do título da janela } CONFIG_TPS_JANELA = { [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, [19091] = { {nome = "Frost 01", pos = {x = 98, y = 140, z = 7}}, {nome = "Frost 02", pos = {x = 93, y = 145, z = 7}}, {nome = "Frost 03", pos = {x = 91, y = 141, z = 7}}, {nome = "Frost 04", pos = {x = 94, y = 139, z = 7}}, {nome = "Frost 05", pos = {x = 95, y = 137, z = 7}}, }, } function onStepIn(creature, item, pos, fromPosition) if ((CONFIG_TPS_JANELA[item:getActionId()]) and creature:isPlayer()) then JANELA_TP_ACTION = item:getActionId() creature:teleportTo(fromPosition, true) creature:registerEvent("janela hunts") local janela = ModalWindow(1000, config.titulo, config.mensagem) for i, v in ipairs(CONFIG_TPS_JANELA[JANELA_TP_ACTION]) do janela:addChoice(i, v.nome) end janela:addButton(100, "Confirmar") janela:addButton(101, "Fechar") janela:setDefaultEnterButton(100) janela:setDefaultEscapeButton(101) janela:sendToPlayer(creature) end return true end  
      Em data/movements/movements.xml adicione o seguinte código abaixo de um semelhante:
      <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" />  
       
      Agora em data/creaturescripts/scripts/ crie um arquivo chamado creature_janela_hunts.lua e adicione dentro:
      function onModalWindow(player, modalWindowId, buttonId, choiceId) player:unregisterEvent("janela hunts") if (modalWindowId == 1000) then if (buttonId == 100) then local tele_pos = CONFIG_TPS_JANELA[JANELA_TP_ACTION][choiceId].pos player:teleportTo(tele_pos) local pos_t = Position(tele_pos) pos_t:sendMagicEffect(CONST_ME_MAGIC_BLUE) end end return true end  
      Em data/creaturescripts/creaturescripts.xml adicione o seguinte código abaixo de um semelhante:
      <event type="ModalWindow" name="janela hunts" script="creature_janela_hunts.lua"/>  
      * Configuração *
          Bom, apesar de que não seja difícil de configurar, é necessário uma explicação, vamos lá...
      1 - 
      [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, Em [19090] este número de dentro é o actionID que ficará no portal. Com ele será identificado de qual monstro se trata, bastando apenas configurar este número e o nome das opções de monstros que você quer aparecendo na janela, em seguida, a posição na qual o jogador será teleportado, seguindo a ordem. Segue imagem de como deve ficar o seu portal:

      OBS²: VOCÊ EDITA O ACTIONID NO SEU EDITOR DE MAPA COLOCANDO NO ID DO ITEM DE TELEPORTE.
      OBS³: PARA ADICIONAR NOVAS HUNTS NO SCRIPT, BASTA SEGUIR O PADRÃO QUE ESTÁ NO CÓDIGO, DO 19090 PARA O 19091.
       
      2 - (por fim)
      Em data/movements/movements.xml
      <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" /> itemID = Id do item que o player andará para abrir a janela de hunt
      Está como 5023 por conta que o magic forcefield é 5023, no qual utilizei para teste, aconselho você deixar da mesma forma (caso seja o mesmo id no seu servidor), ou mude, mas cuidado para não cometer algum erro.
       
       
      Enfim, algo simples, porém não encontrei no TK.
      Abraços.  
       
       
    • Por Barca Furada
      Boa noite meus caros colegas!
      Preciso de um Help!
       
       
      Quando eu coloco meu itens editados no meu xml e otb, acontece isso com os teleportes, perde todas as propriedades:
       
      No lado direito é sem meu Itemxml
      No lado Esquerdo é com meu Itemxml
       
      Como vcs pode vem ele perde a propriedade de destino!
       
      O arquivo Check File Signatures está desativados!
       
      Quando eu entro no REM com meu Itemxml, ele da essas mensagem de erro:
       
       
       
      Antes de fazer tudo isso eu No item editor, todos itens estava com essa borda vermelha, eu tinha dado reload em todos itens para o cliente OTCv8 conseguir visualizar, no primeiro momento achei que era isso que tinha acontecido para bugar meus teleportes, então eu dei reload em todos itens um por um e deixei o teleport sem dar reload, para ver se era esses o bug! e deu na mesma , quando edito o mapa para colocar novas hunt e cidade ele buga todos teleportes!
       
       
       
       
      No itemxml o teleport está com mesmo id!
       
      alguma alma bondosa para ajudar um colega?
    • Por Lekstar
      Fala galera do TK !
       
      estou utilizando um servidor Frozen-Hell, estou testando todas as actions, quests e etc.. e encontrei um bug. se o player chega ao skills 200 de fishing toda e qualquer fishing rod para de funcionar imediatamente, segue o erro :
       
       e em seguida meu script :
       
       
      Acho que o erro está relacionado ao random.math e ao maxchance2, nao tenho certeza pois nao entendo muito deste assunto. aguardo ajuda, obrigado !
       
       
      PS :  Se alguem tiver um event_shop para me ajudar, o que estou utilizando também está bugado, gostaria de saber como fazer um shop apenas clicando nos items e ao invés de utilizar dinheiro ele utilizara Event tokens, obrigado.
      Segue a imagem do shop :
       

       
       
      PS²: Sou novo no forum, se meu topico estiver irregular por favor me avisem !
       
      Att. Pedro H Chaves
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo