-
Total de itens
631 -
Registro em
-
Última visita
-
Dias Ganhos
13
Tudo que jhon992 postou
-
se for sóh 2 itens poem assim: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local itemID = 1234 -- id do item que sera removido local itemID2 = 5678 -- id do item que sera removido local quantRemove = 1 -- quantidade do item acima que sera removido local quantRemove2 = 5 -- quantidade do item acima que sera removido local storageGain = 5678 -- storage que o player vai ganhar quando o item for removido if (msgcontains(msg, 'yes') and getPlayerItemCount(cid, itemID) >= quantRemove and getPlayerItemCount(cid, itemID2) >= quantRemove2) then doPlayerRemoveItem(cid, itemID, quantRemove) doPlayerRemoveItem(cid, itemID2, quantRemove2) selfSay('MESAGEM QUE O NPC IRA FALAR AO REMOVER O ITEM AQUI ENTRE AS ASPAS.', cid) setPlayerStorageValue(cid, storageGain, 1) else selfSay('MESAGEM QUE O NPC IRA FALAR SE O PLAYER NÂO TIVER O ITEM AQUI ENTRE AS ASPAS.', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local itemID = 1234 -- id do anel local quantRemove = 1 -- quantidade do item acima que sera removido local storageGain = 5678 -- storage que o player vai ganhar quando o item for removido if (msgcontains(msg, 'yes') and doPlayerRemoveItem(cid, itemID, quantRemove)) then selfSay('MESAGEM QUE O NPC IRA FALAR AO REMOVER O ITEM AQUI ENTRE AS ASPAS.', cid) setPlayerStorageValue(cid, storageGain, 1) else selfSay('MESAGEM QUE O NPC IRA FALAR SE O PLAYER NÂO TIVER O ITEM AQUI ENTRE AS ASPAS.', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
Alguem Me Ensina Como Coloco Para Mostar Quanto As Potion Healar
tópico respondeu ao mandaiba de jhon992 em Lixeira Pública
Vai no config.lua e procura por: showHealingDamage = true Poem true, o seu provavelmente esta false. -
cria outra linha identica embaixo desta: doCreateMonster("Demon", getPlayerLookPos(cid)) -- no lugar de demon, poem o nome do monstro desejado doCreateMonster("Demon", getPlayerLookPos(cid)) -- no lugar de demon, poem o nome do monstro desejado
-
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 10, 28, 10, 29) local area = createCombatArea(AREA_CROSS7X7) setCombatArea(combat, area) function onCastSpell(cid, var) doCreatureAddHealth(getCreatureTarget(cid), math.random(900, 1000)) -- vai acertar no monstro que você ta atacando e tirar de 900 á 1000. doCombat(cid, combat, var) return TRUE end
-
Vai em data/actions/scripts, duplica um arquivo e nomeia para "alavancamonster" sem as aspas e nele cole: function onUse(cid, item, fromPosition, itemEx, toPosition) local effect = 30 -- efeito que aparecera no player local pos = getPlayerPosition(cid) doSendMagicEffect(pos, effect) doCreateMonster("Demon", getPlayerLookPos(cid)) -- no lugar de demon, poem o nome do monstro desejado if (item.itemid == 1945) then doTransformItem(item.uid, item.itemid+1) elseif (item.itemid == 1946) then doTransformItem(item.uid, item.itemid-1) end return TRUE end Afora em data/actions/actions.xml cole a tag: <action actionid="2345" event="script" value="alavancamonster.lua"/> E na alavanca no seu server poem o actionid 2345.
-
Vai em data/movements/scripts, duplica um arquivo e nomeia para "armatile" sem as aspas e nele cole: function onEquip(cid, item, position, fromPosition) pos = getCreaturePosition(cid) if (getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 123) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Não é possível usar o item nesta área.") return FALSE end return TRUE end Afora em data/movements/movements.xml cole a tag: <movevent type="Equip" itemid="2222" slot="ring" event="script" value="armatile.lua"/> Mude o slot na tag acima por um slot respectivo do item.
-
Desculpa aew por falar action, viajei lgl asuhdauh. O script do @fireelemental deve funcionar certinho por dinheiro, usa ele.
-
Não testei, mais deve funcionar. La vai: Vai em data/actions/scripts duplica um arquivo e nomeie para "tptype" sem as aspas e nele cole: function onStepIn(cid, item, pos) storageBattle = 102081 storageExausted = 102082 exaustedSeconds = 600 -- exausted em segundos if(exhaustion.check(cid, storageExausted) == TRUE) then if (exhaustion.get(cid, 102082) >= 60) then doPlayerSendCancel(cid, "Você só pode entrar no teleport após [" .. math.floor(exhaustion.get(cid, 102082) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, 102082) <= 60) then doPlayerSendCancel(cid, "Você só pode entrar no teleport após [" .. exhaustion.get(cid, 102082).."] segundos.") end return TRUE end if (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode usar com battle.") return TRUE end if (getCreatureSkullType(cid) > 0) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode usar com caveira.") return TRUE end if (getPlayerStorageValue(cid, 102081) <= 0) then setPlayerStorageValue(cid, 102081, 1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Agora você está em modo pacífico.") exhaustion.set(cid, storageExausted, exaustedSeconds) else setPlayerStorageValue(cid, 102081, 0) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Agora você está em modo ofensivo.") exhaustion.set(cid, storageExausted, exaustedSeconds) end return TRUE end Depois vai em data/actions/actions.xml e cole a tag: <action actionid="2015" event="script" value="tptype.lua"/> Agora vai em data/creaturescripts/creaturescripts.xml e cole a tag: <event type="combat" name="CombatAttack" event="script" value="combat.lua"/> Vai em data/creaturescripts/scripts, duplica um arquivo, nomeia para "combat" sem as aspas e nele cole: function onCombat(cid, target) if getPlayerStorageValue(cid, 102081) > 0 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode atacar.") return FALSE end return TRUE end E por último, abra o arquivo "login" na pasta data/creaturescripts/scripts e cole esta tag antes do último return true: registerCreatureEvent(cid, "CombatAttack") Só não esquece de com o mapa editor ir no teleport de sua preferencia e colocar o actionid = 2015.
-
Você deve primeiramente baixar o Dat Editor, que é uma ferramenta usada para adicinar novas sprites no seu cliente. Após baixar abra o Dat Editor e como ele abra o arquivo dat/spr do seu Tibia 8.6. E ali você faiz exportação e importação de sprites novas. Existem também varios tutoriais de como fazer isso, até aqui no XTibia, qualquer coisa é sóh procurar.
-
único geito eu acho que é indo no monstro desejado e alterar essas linhas: Ali em elements são as porcetagens que o monstro defende e em immunities é a que o monstro é imune. <elements> <element firePercent="100"/> <element physicalPercent="25"/> <element earthpercent="20"/> <element energyPercent="20"/> <element deathPercent="20"/> <element icePercent="-25"/> <element holyPercent="-10"/> </elements> <immunities> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities>
-
Primero vai em data/npc e duplica um arquivo, nomeie para "NomeDoNpcQueQuiser" sem as aspas e nele cole: <?xml version="1.0" encoding="UTF-8"?> <npc name="NomeDoNpcQueQuiser" script="questtp.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|, voce esta no caminho errado!"/> </parameters> </npc> Agora em data/npc/scripts, duplica um arquivo e nomeia para "questtp" sem as aspas e nele cole: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local steelboots = 1234 -- coloque o id da stell local goldingot = 5678 -- coloque o id da gold local teleport = {x=707, y=372, z=9} -- local que ira teleportar if (msgcontains(msg, 'quest') and doPlayerRemoveItem(cid, steelboots, 1) and doPlayerRemoveItem(cid, goldingot, 1)) then doTeleportThing(cid, teleport) else selfSay('Você esta no caminho errado!', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
como o script era antes sem a parte da quantidade de reset, quando ainda estava funcionando.?
-
Comando !removeskull Sómente Usado Em Pz. Rep+
tópico respondeu ao Rafaellm de jhon992 em Lixeira Pública
function onSay(cid, words, param, channel) if (getTilePzInfo(getCreaturePosition(cid)) == TRUE or getCreatureCondition(cid, CONDITION_INFIGHT) == FALSE) then if getCreatureSkullType(cid) == SKULL_RED then doPlayerRemoveMoney(cid, 2000000) doCreatureSetSkullType(cid, SKULL_NONE) else doPlayerSendTextMessage(cid, 22, "Você precisa de 2kk para remover a redskull.") end else doPlayerSendTextMessage(cid, 22, "Você não pode usar este comando estando com battle ou pz.") end return TRUE end -
É Possível? Item Que Aumenta Chance De Loot.
tópico respondeu ao igor6 de jhon992 em Lixeira Pública
Acho que o jeito eh ir no config.lua procurar por: rateLoot = 2.0 E aumentar como quiser! -
[Help]Erro 032-Position.lua - Como Proceder?
tópico respondeu ao hique12 de jhon992 em Lixeira Pública
nenhum dos dois, cola teu arquivo creaturescripts.xml aqui que eu falo que arquivo precisa... -
Eu entendi que era isso que se queria! Fiz uma talkaction que funciona como spell, tem exausted e talz. Sóh adicionar a linha do talk, dae quando fala "Exevo Port" cria um teleport aleatoriamente pra uma das cidades citadas e ao falar "Exevo Port sul" irá para as coordenadas da cidade do sul e assim susecivamente...
-
[Help]Erro 032-Position.lua - Como Proceder?
tópico respondeu ao hique12 de jhon992 em Lixeira Pública
Mais tem algum arquivo de event "onLogout", tens que ir no creaturescripts.xml e vê qual arquivo éh. Depois vai no arquivo correspondente na pasta script, e poem ele aqui. -
tenta usar esse talkactions que modifiquei, ta testado jah: function removeTp(lugardele) doRemoveItem(getThingfromPos(lugardele).uid, 1) end function onSay(cid, words, param) local config = { exhaustionInSeconds = 30, -- exausted em segundos. storage = 34534, pz = "no", -- players precisam estar em protection zone para usar? ("yes" or "no"). battle = "yes", -- players deve estar sem battle ("yes" or "no") custo = "no", -- se os teleport irão custa ("yes" or "no") premium = "no" -- se precisa ser premium account ("yes" or "no") } -------------Config Lugares---------------- local lugar = { ["sul"] = {{x=2461, y=2419, z=7}, 50, 2000}, -- posição={x,y,x}, lvl necessario=50, custo se tiver = 2000gps. ["west"] = {{x=2269, y=2264, z=7}, 50, 1000}, ["east"] = {{x=2997, y=2163, z=7}, 50, 2000}, ["nort"] = {{x=2531, y=1726, z=7}, 50, 2000}, ["center"] = {{x=2577, y=2086, z=7}, 50, 2000} } local locais = {"sul", "west", "east", "nort", "center"} -- coloque os nomes dos locais local tpmath = lugar[locais[math.random(1, 5)]] -- não mexa! local position = getPlayerPosition(cid) -- posição atual do player, não mexa! local tempo = 30 -- tempo e segundos para o teleport sumir -------------/Config Checkar não mecha---------------- local lugar = lugar[param] if (param == "check") then for name, pos in pairs(lugar) do text = "Destination: "..name..", Level required: "..pos[2].."," if(config.battle == "yes") then text = text.." Sorry, you are in battle." else text = text.." You can use while fighting: No" end if(config.pz == "yes") then text = text.." You should use in protection zone: Yes" else text = text.." You should use in protection zone: No" end if (pos[3] == TRUE) then text = text..", Cost: "..pos[4]..";" end doPlayerSendTextMessage(cid, 20, ""..text.."") end return TRUE end if(exhaustion.check(cid, config.storage) == TRUE) then if (exhaustion.get(cid, 34534) >= 60) then doPlayerSendCancel(cid, "You can only teleport after [" .. math.floor(exhaustion.get(cid, 34534) / 60 + 1) .."] minutes.") end if (exhaustion.get(cid, 34534) <= 60) then doPlayerSendCancel(cid, "You can only teleport after [" .. exhaustion.get(cid, 34534).."] seconds.") end return TRUE end if(config.pz == "yes") and (getTilePzInfo(getCreaturePosition(cid)) == FALSE) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"You should be in the protection zone for use.") return TRUE end if(config.premium == "yes") and (not isPremium(cid)) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Only players with premium account can use.") return TRUE end if(config.battle == "yes") and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You can not use in battle.") return TRUE end if lugar ~= nil then if not(lugar) then doPlayerSendTextMessage(cid, 22, "Sorry, this place does not exist.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE end if (getPlayerLevel(cid) <= lugar[2]) then doPlayerSendTextMessage(cid, 22, "Sorry, you don't have level. You need "..lugar[2].." level or more to be teleported.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE end if(config.custo == "yes") and (doPlayerRemoveMoney(cid, lugar[3]) == FALSE) then doPlayerSendTextMessage(cid, 22, "Sorry, you do not have enough money. You need "..lugar[3].." zenis to be teleported.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE end end if (param == "") then doCreateTeleport(1387, tpmath[1], {x=position.x+1, y=position.y, z=position.z}) lugardele = {x=position.x+1, y=position.y, z=position.z, stackpos=1} doCreatureSay(cid, "O teleport irá sumir em "..tempo.." segundos.", TALKTYPE_ORANGE_1) addEvent(removeTp, tempo*1000, lugardele) exhaustion.set(cid, config.storage, config.exhaustionInSeconds) return TRUE end exhaustion.set(cid, config.storage, config.exhaustionInSeconds) doCreateTeleport(1387, lugar[1], {x=position.x+1, y=position.y, z=position.z}) lugardele = {x=position.x+1, y=position.y, z=position.z, stackpos=1} doCreatureSay(cid, "O teleport irá sumir em "..tempo.." segundos.", TALKTYPE_ORANGE_1) addEvent(removeTp, tempo*1000, lugardele) return TRUE end
-
Mesmo assim não vai traduzir tudo. Você precisa das sources do seu otserv para traduzir, dae abra-a com o Dev-C++ e procure por alguma fala do account manager, la você encontrara todas as falas, só traduzilas e compilar as sources novamente. Meio complicado pra iniciante, então procure um tutorial de compilando otserv Dev-C++ aqui no XTibia.
-
[Help]Erro 032-Position.lua - Como Proceder?
tópico respondeu ao hique12 de jhon992 em Lixeira Pública
o erro deve ser no arquivo logout.lua na pasta "data/creaturescripts/scripts" posta o arquivo aqui que a galera da o geito. -
local naruto = {lookType = 180, lookHead = 79, lookBody = 91, lookLegs = 91, lookFeet = 91, lookTypeEx = 0, lookAddons = 0} local sasuke = {lookType = 181, lookHead = 86, lookBody = 86, lookLegs = 86, lookFeet = 86, lookTypeEx = 0, lookAddons = 0} function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getPlayerVocation(cid) == 1 then elseif(hasCondition(cid, CONDITION_OUTFIT) and getCreatureOutfit(cid).lookType == outfit.naruto) then elseif getPlayerVocation(cid) == 2 then elseif(hasCondition(cid, CONDITION_OUTFIT) and getCreatureOutfit(cid).lookType == outfit.sasuke) then end doSendMagicEffect(getThingPos(cid), 29) -- EFEITO QUE DARA return TRUE end function onStepOut(cid, item, position, fromPosition) doRemoveCondition(cid, CONDITION_OUTFIT) -- removendo sóh a condition de outfit return true end Não esquece das 2 tags no movementes.xml: <movevent type="StepIn" actionid="30205" event="script" value="nomedoscript.lua"/> <movevent type="StepOut" actionid="30205" event="script" value="nomedoscript.lua"/>
-
tinha feito errado, esta arrumado la em cima, ja editei!
- 4 respostas
-
- nao crie items vip
- otserv
-
(e 2 mais)
Tags:
-
Apareceu algum erro no executavel? tenta assim: function doPlayerAddMagLevel(cid, amount) for i = 1, amount do doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic')) end return true end function doPlayerAddSkill(cid, skill, amount, round) if(skill == SKILL__LEVEL) then return doPlayerAddLevel(cid, amount, round) elseif(skill == SKILL__MAGLEVEL) then return doPlayerAddMagLevel(cid, amount) end return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / getConfigInfo('rateSkill')) end function onUse(cid, item, frompos, item2, topos) local mlGain = 3 -- quantidade de ml que ira ganhar o player local skillGain = 5 -- quantidade de skill que ira ganhar o player if (getPlayerStorageValue(cid, 602032) < 1) then if (getPlayerVocation(cid) == 1 or getPlayerVocation(cid) == 5 or getPlayerVocation(cid) == 2 or getPlayerVocation(cid) == 6 or getPlayerVocation(cid) == 15 or getPlayerVocation(cid) == 16) then doPlayerAddMagLevel(cid, mlGain) doCreatureSay(cid,"Voce ganhou "..mlGain.." magic leveis!",TALKTYPE_ORANGE_1) end if (getPlayerVocation(cid) == 4 or getPlayerVocation(cid) == 8) then doPlayerAddSkill(cid, 2, skillGain) doPlayerAddSkill(cid, 3, skillGain) doCreatureSay(cid,"Voce ganhou "..skillGain.." skills!",TALKTYPE_ORANGE_1) end if (getPlayerVocation(cid) == 3 or getPlayerVocation(cid) == 7) then doPlayerAddSkill(cid, 4, skillGain) doCreatureSay(cid,"Voce ganhou "..skillGain.." skills!",TALKTYPE_ORANGE_1) end if (getPlayerVocation(cid) == 13 or getPlayerVocation(cid) == 14) then doPlayerAddSkill(cid, 1, skillGain) doCreatureSay(cid,"Voce ganhou "..skillGain.." skills!",TALKTYPE_ORANGE_1) end if (getPlayerVocation(cid) == 17 or getPlayerVocation(cid) == 18) then doPlayerAddSkill(cid, 0, skillGain) doCreatureSay(cid,"Voce ganhou "..skillGain.." skills!",TALKTYPE_ORANGE_1) end setPlayerStorageValue(cid, 602032, 1) else doCreatureSay(cid,"Voce ja fez esta quest.",TALKTYPE_ORANGE_1) end return TRUE end
-
Acho que assim funciona, mais nem testei. Sóh substituir la: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, ",") local ret = RETURNVALUE_NOERROR local pos = getCreaturePosition(cid) local id = tonumber(t[1]) -------------------------------------------------------------------------------------------- local execoesId = {12642, 12643, 12644} -- adicionar os ids que não poderão funcionar for i=0, #execoesId do if (id == tonumber(execoesId[i])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este id nao eh valido!") return true end end -------------------------------------------------------------------------------------------- if(not id) then id = getItemIdByName(t[1], false) if(not id) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end end local amount = 100 if(t[2]) then amount = t[2] end local item = doCreateItemEx(id, amount) if(t[3] and getBooleanFromString(t[3])) then if(t[4] and getBooleanFromString(t[4])) then pos = getCreatureLookPosition(cid) end ret = doTileAddItemEx(pos, item) else ret = doPlayerAddItemEx(cid, item, true) end if(ret ~= RETURNVALUE_NOERROR) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Couldn't add item: " .. t[1]) return true end doDecayItem(item) if(not isPlayerGhost(cid)) then doSendMagicEffect(pos, CONST_ME_MAGIC_RED) end return true end
- 4 respostas
-
- nao crie items vip
- otserv
-
(e 2 mais)
Tags:
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.