Jump to content

Search the Community

Showing results for tags 'Scripting'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Tibia King
    • Rules
    • Portal
    • FeedBack
  • Open Tibia
    • Otserv
    • Tools
    • Codes
    • Clients
    • Maps
    • Websites
  • Management of Ot Servers
    • Otserv Discussions & Research
    • Support and Requests
    • Otserv Tutorials
  • Tibia and Bots
    • Tibia
    • Bots
  • Others
    • Announcements
    • Other Programming Languages
    • Graphics and Design
    • Playground (Off-topic)

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 4262 results

  1. TFS 0.3.6 (8.54) Hail Tibiaking! Alguém poderia criar uma script de NPC que cobra 10 items do id: (11695) para teleportar para outro lugar? Vocês podem usar a script de boat como referencia: Eu irei usar esse NPC pra tirar o player da cidade, pois ela é gigantesca para um player que anda lento.
  2. Tinha postado um anti entrosa que consegui resolver em partes da war continuar depois de uma rodada. Mas tem um problema que se torna grave em questão que os monster ou summon se mata o player no evento entrosa o servidor cai, o erro ocorre no arquivo war.lua erro na linha 212, abaixo da imagem tem o arquivo lua inteiro.. self.frags[getPlayerGuildId(killer)] = self.frags[getPlayerGuildId(killer)] + 1
  3. Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). Ex. TFS 1.3; Base: Qual erro está surgindo/O que você procura? TFS 1.2 10.97-11.00 + GlobalFull OtherWorld + Hearth of Destruction Quest+ Battlefield + Last Man Standing + Capture The Flag + Zoombie Event + War Anti-Entrosa + WebSite + Database + Sources v30 Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  4. Tfs 0.4 Estou criando um narutibia e achei pelo forum uma script do jutsu katon sohenka, utilizei e deu certo sem nenhum problema de position,etc. So que quando utilizei essa script pra criar outros 2 ataques a posição sai errada, não sei o que fazer, não tem x,y,z na script! Gostaria que alguem me ajudasse a concertar a position, Agradeço desde já! Jutsu1: local acombat1 = createCombatObject() local acombat2 = createCombatObject() local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 308) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -180.2, 1, -170.2, 1) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 308) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -180.2, 1, -170.2, 1) arr1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr2 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0}, {1, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1}, {0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0} } local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) setCombatArea(acombat1, area1) setCombatArea(acombat2, area2) function onTargetTile(cid, pos) doCombat(cid,combat1,positionToVariant(pos)) end function onTargetTile2(cid, pos) doCombat(cid,combat2,positionToVariant(pos)) end setCombatCallback(acombat1, CALLBACK_PARAM_TARGETTILE, "onTargetTile") setCombatCallback(acombat2, CALLBACK_PARAM_TARGETTILE, "onTargetTile2") local function onCastSpell1(parameters) doCombat(parameters.cid, acombat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, acombat2, parameters.var) end function onCastSpell(cid, var) local position1 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} local position2 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} local position3 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} local position4 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} local position5 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position6 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position7 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position8 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position9 = {x=getCreaturePosition(cid).x-2, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position10 = {x=getCreaturePosition(cid).x-2, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position11 = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position12 = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position13 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position14 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position15 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position16 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position17 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position18 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position19 = {x=getCreaturePosition(cid).x+4, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position20 = {x=getCreaturePosition(cid).x+4, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local parameters = { cid = cid, var = var} addEvent(onCastSpell1, 100, parameters) addEvent(onCastSpell2, 400, parameters) return TRUE end Jutsu2 local acombat1 = createCombatObject() local acombat2 = createCombatObject() local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 304) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -130.4, 1, -124.4, 1) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 304) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -130.4, 1, -124.4, 1) arr1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr2 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) setCombatArea(acombat1, area1) setCombatArea(acombat2, area2) function onTargetTile(cid, pos) doCombat(cid,combat1,positionToVariant(pos)) end function onTargetTile2(cid, pos) doCombat(cid,combat2,positionToVariant(pos)) end setCombatCallback(acombat1, CALLBACK_PARAM_TARGETTILE, "onTargetTile") setCombatCallback(acombat2, CALLBACK_PARAM_TARGETTILE, "onTargetTile2") local function onCastSpell1(parameters) doCombat(parameters.cid, acombat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, acombat2, parameters.var) end function onCastSpell(cid, var) local position1 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} local position2 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} local position3 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} local position4 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} local position5 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position6 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position7 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position8 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position9 = {x=getCreaturePosition(cid).x-2, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position10 = {x=getCreaturePosition(cid).x-2, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position11 = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position12 = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position13 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position14 = {x=getCreaturePosition(cid).x+2, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position15 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position16 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position17 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local position18 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position19 = {x=getCreaturePosition(cid).x+4, y=getCreaturePosition(cid).y+2, z=getCreaturePosition(cid).z} local position20 = {x=getCreaturePosition(cid).x+4, y=getCreaturePosition(cid).y+3, z=getCreaturePosition(cid).z} local parameters = { cid = cid, var = var} addEvent(onCastSpell1, 100, parameters) addEvent(onCastSpell2, 400, parameters) return TRUE end
  5. Olá pessoal, estou com 1 bug na base dxp, o pokémon marowak não da nem 1 tipo de dano em qualquer pokémon elétrico, alguém pode me ajudar ?
  6. Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). TFS 0.3.6 Base: PDA Source Adaptada Qual erro está surgindo/O que você procura? Você tem o código disponível? Se tiver publique-o aqui: .aHunter.lua local target = 0 local prevTarget = 0 local origPos = 0 local max_distance = 15 local fighting = false local challenger = 0 local battle_turn = 1 -- don't change local challenger_turn = 0 -- don't change --- --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-- local function doSummonGymPokemon(npc) local this = npc if not isCreature(this) or not ehNPC(this) then return true end --alterado v1.6 if #getCreatureSummons(this) >= 1 or target == 0 then return true end local it = wildHunter[getPlayerStorageValue(this, 665471)][battle_turn] if not it then return true end doSummonMonster(this, it.name) local summon = getCreatureSummons(this)[1] if not summon then --alterado v1.6 print("Error in npc: "..getCreatureName(this)..", tring to execute function 'doSummonGymPokemon', poke: "..it.name) battle_turn = battle_turn+1 return true end local balleffect = pokeballs["normal"].effect if it.ball and pokeballs[it.ball] then balleffect = pokeballs[it.ball].effect end doSendMagicEffect(getThingPos(summon), balleffect) setPlayerStorageValue(summon, 10000, balleffect) setPlayerStorageValue(summon, 10001, gobackmsgs[math.random(#gobackmsgs)].back:gsub("doka", it.nick ~= "" and it.nick or it.name)) setPlayerStorageValue(summon, 1007, it.nick ~= "" and it.nick or it.name) doSetMonsterGym(summon, target) addEvent(adjustWildPoke, 15, summon, it.optionalLevel) if it.nick ~= "" then doCreatureSetNick(summon, it.nick) end local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name --alterado v1.3 doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1) fighting = true battle_turn = battle_turn + 1 end --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-- local function goToOrigPos() target = 0 selfFollow(0) fighting = false challenger = 0 challenger_turn = 0 if #getCreatureSummons(getNpcCid()) >= 1 then setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 1006, 0) doCreatureAddHealth(getCreatureSummons(getNpcCid())[1], -getCreatureMaxHealth(getCreatureSummons(getNpcCid())[1])) end doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid())) doTeleportThing(getNpcCid(), origPos) end --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-- local function updateTarget() if(target == 0) then local list = getSpectators(getNpcPos(), 9, 9, false) for i = 1, table.getn(list) do local _target = list if(_target ~= 0) then if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then --alterado v1.8 selfSay(hunterTalks[math.random(#hunterTalks)]) doNpcSetCreatureFocus(_target) target = _target prevTarget = target break end end end end end --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-- function onCreatureAppear(cid) end function onCreatureDisappear(cid) end function onCreatureMove(creature, oldPos, newPos) -- end --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-- function onThink() if not isCreature(getNpcCid()) then return false end --alterado v1.6 if origPos == 0 then origPos = getNpcPos() end if getPlayerStorageValue(getNpcCid(), 665471) <= 0 then setPlayerStorageValue(getNpcCid(), 665471, math.random(1, 5)) randOutfit(getNpcCid()) end updateTarget() ------------------------------------------------------ if getDistanceBetween(getNpcPos(), origPos) >= max_distance or (isCreature(target) and getTileInfo(getThingPos(target)).protection) or getTileInfo(getThingPos(getNpcCid())).protection then goToOrigPos() --alterado v1.9 end ------------------------------------------------------ if(target == 0) then if getPlayerStorageValue(getNpcCid(), 154788) <= 0 then setPlayerStorageValue(getNpcCid(), 154788, 1) doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid())) addEvent(randWalk, 2000, getNpcCid(), 1000, getPlayerStorageValue(getNpcCid(), 154788)) end return true end ------------------------------------------------------ local playerPos = getThingPosWithDebug(target) --alterado v1.6 local myPos = getNpcPos() ------------------------------------------------------ if(myPos.z ~= playerPos.z) then goToOrigPos() battle_turn = battle_turn == 1 and battle_turn or battle_turn-1 return true end ------------------------------------------------------ if getDistanceBetween(playerPos, myPos) > max_distance then goToOrigPos() battle_turn = battle_turn == 1 and battle_turn or battle_turn-1 return true end ------------------------------------------------------ if getDistanceBetween(playerPos, myPos) >= 5 then if getPlayerStorageValue(getNpcCid(), 154788) >= 1 then setPlayerStorageValue(getNpcCid(), 154788, -1) doRegainSpeed(getNpcCid()) if isCreature(target) then selfFollow(target) end end end ------------------------------------------------------ if getDistanceBetween(playerPos, myPos) <= 3 then if getPlayerStorageValue(getNpcCid(), 154788) <= 0 then setPlayerStorageValue(getNpcCid(), 154788, 1) doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid())) addEvent(randWalk, 2000, getNpcCid(), 1000, getPlayerStorageValue(getNpcCid(), 154788)) end end ------------------------------------------------------ if getDistanceBetween(playerPos, myPos) <= 5 then challenger = target addEvent(doSummonGymPokemon, 1000, getNpcCid()) local change = false if not isCreature(target) then target = 0 battle_turn = battle_turn == 1 and battle_turn or battle_turn-1 return true end if fighting then if not isCreature(getCreatureTarget(getNpcCid())) then if #getCreatureSummons(challenger) >= 1 then selfAttackCreature(getCreatureSummons(challenger)[1]) change = true else if change then change = false challenger_turn = challenger_turn + 1 end end end if #getCreatureSummons(getNpcCid()) == 0 and isCreature(target) then if battle_turn > #wildHunter[getPlayerStorageValue(getNpcCid(), 665471)] then addEvent(doCreateNpc, 300000, ".aHunter", myPos) --alterado v1.5 local outfit = getCreatureOutfit(getNpcCid()) doRemoveCreature(getNpcCid()) ---------------------------------------- if outfit.lookType == 1016 then --verifica se o npc eh female.. ;p monster = doCreateMonster("aHunterFemale", myPos) else monster = doCreateMonster("aHunter", myPos) end ---------------------------------------- doCloneOut(monster, outfit) addEvent(beDrunk, 100, monster) end addEvent(doSummonGymPokemon, 1000, getNpcCid()) end if #getCreatureSummons(challenger) <= 0 then selfAttackCreature(challenger) end end end end Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  7. Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). Ex. TFS 1.3; Base: Qual erro está surgindo/O que você procura? Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  8. Ola, galera... Gostaria de pedir um script, que quando o Player matasse um monstro adicionasse o nome do monstro em um livro, e os itens que eles podem dropar. Tipo: "Uma PokeDex" Desde já grato!
  9. É possível bloquear o player de summonar monster em determinado evento? eu precisava..
  10. Eai galera, Estou usando o TFS do 8.0 (8.6 com downgrade feito pelo Ninja) + Datapack do Realera 8.0; Consegui arrumar alguns bugs pelo mapa, porém, alguns npcs estão tendo basicamente esse erro ao conversar certas coisas com eles: Queria entender o que está faltando ou o porque do erro, para conseguir arrumar todos... Valeu!
  11. i need change first items remove for second items Please This items only Ae Galera Preciso de uma script que uma stone transforma Event Helmet = Terra Helmet Event Armor = Terra Armor Event Legs = Terra Legs Event Shield = Terra Shield Event Staff = Terra Staff Event Axe = Terra Axe Event Lance = Terra Lance Obrigado Por Ter Lido E Tentado Ajudar Noisx Help Please
  12. Olá pessoal, minha dúvida é a seguinte, como usar o comando for nessa situação: Eu tenho a seguinte função: E a seguinte tabela como exemplo, e como já deve ser definida usando essa função: Se eu usar a função da seguinte maneira, ela funciona corretamente,a finalidade para qual eu vou usa-la é para remover monstros de uma area: Até ai tudo certo se eu usar dessa forma, como já disse tudo funciona corretamente, no entando, eu preciso que seja configurável quantas posições eu quiser checar para remover os montros, pois as vezes indices diferentes terão numeros de areas diferentes para serem checadas. Para isso, tentei usar o for da seguinte maneira: Mas fica dando o seguinte erro: for initial value must be a number, algo assim. Ainda estou aprendendo a programar e não tenho muito conhecimento, por isso gostaria que me ajudassem e me esclarecessem minha dúvida de como usar o for nessa situação. Caso não tenha ficado totalmente claro oque eu pretendo fazer, seria basicamente salas para matar monstros, tipo uma quest, só que toda vez que o jogador for entrar se ainda tiver monstros lá eles ser ão removidos, cada indice da tabela seria uma actionID diferente pra colocar em uma alavanca diferente pra startar a sala. Bom, acho que deu pra entender, espero que me ajudem com essa dúvida, e obrigado desde já!
  13. Fala Galerinha Do TK Estou Com Um NPC DE Presente Diario Criado Pelo VODCART Gostaria De Que Colocasse Ele Pra Verificar O IP Do player Para Que Eles Nao Criar Mcs E Ficar Pegando o Presente Toda Hora Segue O Script 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 msg = string.lower(msg) local config = { hours = 24, storage = 58485, rewards = {{itemid = 11192,chance = 30}} -- itens que ele poderá ganhar } function doAddReward() a = true while a == true do local m = math.random(1,#config.rewards) if config.rewards[m].chance > math.random(1, 100) then doPlayerAddItem(cid, config.rewards[m].itemid, isItemStackable(config.rewards[m].itemid) and 100 or 1) npcHandler:say("seu prêmio foi: "..getItemNameById(config.rewards[m].itemid), cid) a = false end end end if isInArray({"presente","present"}, msg) then npcHandler:say("você deseja receber seu presente agora?! {yes}", cid) talkState[talkUser] = 1 elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if getPlayerStorageValue(cid,config.storage) <= os.time() then doAddReward() setPlayerStorageValue(cid, config.storage, os.time()+config.hours*3600) else npcHandler:say("Desculpe, mas você deve aguardar até "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,config.storage)).." para pegar seu presente novamente!", cid) talkState[talkUser] = 0 end elseif msg == "no" then selfSay("Then not", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Obrigado +REP
  14. Por favor me ajude para este problema rápido function onThink(interval, lastExecution) for _, name in ipairs(getOnlinePlayers()) do local cid = getPlayerByName(name) if(getPlayerStorageValue(cid, 10000) == 1) then if (getPlayerPvpValue(cid, 1) == 1) then doSendMagicEffect(getPlayerPosition(cid), 27) doSendAnimatedText(getPlayerPosition(cid), "20%! Pvp", TEXTCOLOR_RED) end end end return true end
  15. Utilizo Tfs 0.4, Achei uma script de task system do Vodkart, Só que gostaria de adicionar uma coisa ao finalizar todas as tasks! Que seria o seguinte, O player que finalizar todas tasks recebera a storage 89745, Cuja value seria 6! E também receberia uma outfit que depende de sua vocação ou seja, Cada vocação receberia uma outfit diferente! Os 2 scripts estão abaixo! Mod Simple Task.xml <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Simple Task" version="4.0" author="Vodkart" contact="tibiaking.com" enabled="yes"> <config name="task_func"><![CDATA[ task_sys = { [1] = {name = "Beezer", start = 176201, monsters_list = {"beezer"}, level = 1, count = 5, points = 0, items = {}, reward = {}, exp = 2000, money = 2000}, [2] = {name = "Bandit", start = 176202, monsters_list = {"Bandit"}, level = 25, count = 10, points = 0, items = {}, reward = {}, exp = 2500, money = 3000}, [3] = {name = "Gamaguren", start = 176203, monsters_list = {"gamaguren","gaara sc2"}, level = 50, count = 15, points = 0, items = {}, reward = {}, exp = 3000, money = 3000}, [4] = {name = "Shinobi Fire", start = 176204, monsters_list = {"shinobi fire","jya boss"}, level = 75, count = 20, points = 1, items = {}, reward = {}, exp = 10000, money = 5000}, [5] = {name = "Renegade", start = 176205, monsters_list = {"renegade","nukenin"}, level = 100, count = 30, points = 1, items = {}, reward = {}, exp = 10000, money = 5000}, [6] = {name = "Snake Najin", start = 176206, monsters_list = {"snake najin","giant furie"}, level = 125, count = 35, points = 2, items = {}, reward = {}, exp = 10000, money = 5000}, [7] = {name = "Jya Boss", start = 176207, monsters_list = {"jya boss"}, level = 150, count = 5, points = 3, items = {}, reward = {}, exp = 12000, money = 7000}, [8] = {name = "Dog Fear", start = 176208, monsters_list = {"dog fear","skeleton","skeleton fear","supreme skeleton"}, level = 175, count = 50, points = 3, items = {}, reward = {}, exp = 8000, money = 8000}, [9] = {name = "Akatsuki", start = 176209, monsters_list = {"akatsuki"}, level = 200, count = 60, points = 2, items = {}, reward = {}, exp = 12000, money = 8200}, [10] = {name = "Frozen Wolf", start = 176210, monsters_list = {"frozen wolf"}, level = 225, count = 75, points = 3, items = {}, reward = {}, exp = 0, money = 0}, [11] = {name = "Zetsu", start = 176211, monsters_list = {"zetsu"}, level = 250, count = 100, points = 2, items = {}, reward = {}, exp = 8000, money = 8500}, [12] = {name = "White Zetsu", start = 176212, monsters_list = {"white zetsu"}, level = 275, count = 120, points = 1, items = {}, reward = {}, exp = 9000, money = 9000}, [13] = {name = "Salamandra" ,start = 176213, monsters_list = {"salamandra"}, level = 300, count = 150, points = 3, items = {}, reward = {}, exp = 20000, money = 15000}, [14] = {name = "Crystal Spiders" ,start = 176214, monsters_list = {"Crystal Spider"}, level = 63, count = 250, points = 3, items = {}, reward = {}, exp = 25000, money = 11000}, [15] = {name = "Giant Spider" ,start = 176215, monsters_list = {"Giant Spider","The old widow"}, level = 80, count = 500, points = 0, items = {}, reward = {}, exp = 20000, money = 32000}, [16] = {name = "Underwater Quaras" ,start = 176216, monsters_list = {"quara predator","quara constrictor","quara hydromancer","quara mantassin","quara pincher"}, level = 82, count = 550, points = 3, items = {}, reward = {}, exp = 22000, money = 15000}, [17] = {name = "Underwater Quaras Scout" ,start = 176217, monsters_list = {"quara predator scout","quara constrictor scout","quara hydromancer scout","quara mantassin scout","quara pincher scout"}, level = 83, count = 600, points = 3, items = {}, reward = {}, exp = 25000, money = 18000}, [18] = {name = "Hellspawn" ,start = 176218, monsters_list = {"Hellspawn"}, level = 85, count = 600, points = 4, items = {}, reward = {}, exp = 28000, money = 26000}, [19] = {name = "Dragon Lords" ,start = 176219, monsters_list = {"Dragon lord"}, level = 88, count = 650, points = 3, items = {}, reward = {}, exp = 30000, money = 35000}, [20] = {name = "Lizard Dragons" ,start = 176220, monsters_list = {"Lizard Chosen","Lizard Dragon Priest","Lizard High Guard","Lizard Legionnaire", "Lizard Zaogun"}, level = 90, count = 600, points = 4, items = {}, reward = {}, exp = 28000, money = 26000}, [21] = {name = "Nightmare" ,start = 176221, monsters_list = {"Nightmare","nightmare scion"}, level = 95, count = 650, points = 2, items = {}, reward = {}, exp = 30000, money = 35000}, [22] = {name = "Hydras" ,start = 176222, monsters_list = {"Hydra"}, level = 100, count = 700, points = 3, items = {}, reward = {}, exp = 40000, money = 40000}, [23] = {name = "Serpent Spawn" ,start = 176223, monsters_list = {"Serpent Spawn"}, level = 103, count = 720, points = 4, items = {}, reward = {}, exp = 50000, money = 45000}, [24] = {name = "Hellhounds" ,start = 176224, monsters_list = {"Hellhound"}, level = 107, count = 650, points = 2, items = {}, reward = {}, exp = 30000, money = 35000}, [25] = {name = "Demons" ,start = 176225, monsters_list = {"Demon"}, level = 110, count = 666, points = 4, items = {}, reward = {}, exp = 66600, money = 66000} } daily_task = { [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000}, [2] = {name = "TarantulaS" ,monsters_list = {"Tarantula"}, count = 120, points = 1, reward = {}, exp = 9000, money = 12000}, [3] = {name = "Wyvern" ,monsters_list = {"Wyvern"}, count = 125, points = 2, reward = {}, exp = 9000, money = 15000}, [4] = {name = "Dragons" ,monsters_list = {"Dragon","Dragon Hatchling"}, count = 150, points = 0, reward = {}, exp = 2000, money = 10000}, [5] = {name = "Wailing Widows" ,monsters_list = {"Wailing Widows"}, count = 200, points = 1, reward = {}, exp = 20000, money = 25000}, [6] = {name = "Ancient Scarabs" ,monsters_list = {"Ancient Scarab"}, count = 180, points = 5, reward = {}, exp = 22000, money = 18000}, [7] = {name = "High Class Lizards" ,monsters_list = {"Corrupted Soul","Eternal Guardian","Lizard Chosen","Lizard Dragon Priest","Lizard High Guard","Lizard Legionnaire","Lizard Magistratus","Lizard Noble","Lizard Zaogun"}, count = 300, points = 3, reward = {}, exp = 50000, money = 60000}, [8] = {name = "Mutated BatS" ,monsters_list = {"Mutated Bat"}, count = 260, points = 2, reward = {}, exp = 40000, money = 55000}, [9] = {name = "Giant Spiders" ,monsters_list = {"Giant Spider"}, count = 350, points = 3, reward = {}, exp = 60000, money = 70000}, [10] = {name = "Undead Dragons" ,monsters_list = {"Undead Dragon"}, count = 500, points = 3, reward = {{2173,1}}, exp = 90000, money = 120000}, [11] = {name = "HydraS" ,monsters_list = {"Hydra"}, count = 600, points = 3, reward = {{2173,1}}, exp = 100000, money = 160000}, [12] = {name = "Ghastly Dragons" ,monsters_list = {"Ghastly Dragon"}, count = 700, points = 3, reward = {{2173,1}}, exp = 130000, money = 200000} } task_sys_storages = {176601, 176602, 176603, 176604, 176605, 176606, 176607, 176608} -- task, points, count, daily task, daily count, daily time , daily start, contador function getTaskMission(cid) return getPlayerStorageValue(cid,task_sys_storages[1]) < 0 and 1 or getPlayerStorageValue(cid,task_sys_storages[1]) end function getDailyTaskMission(cid) return getPlayerStorageValue(cid,task_sys_storages[4]) < 0 and 1 or getPlayerStorageValue(cid,task_sys_storages[4]) end function getTaskPoints(cid) return getPlayerStorageValue(cid,task_sys_storages[2]) < 0 and 0 or getPlayerStorageValue(cid,task_sys_storages[2]) end function doRandomDailyTask(cid) local t = { [{6,49}] = {1,3}, [{50,79}] = {4,6}, [{80,129}] = {7,9}, [{130,math.huge}] = {10,12} } for a , b in pairs(t) do if getPlayerLevel(cid) >= a[1] and getPlayerLevel(cid) <= a[2] then return math.random(b[1], b[2]) end end return 0 end function GetRankTask(cid) local ranks = { [{1, 20}] = "Huntsman", [{21, 50}] = "Ranger", [{51, 100}] = "Big Game Hunter", [{101, 200}] = "Trophy Hunter", [{201, math.huge}] = "Elite Hunter" } for v , r in pairs(ranks) do if getTaskPoints(cid) >= v[1] and getTaskPoints(cid) <= v[2] then return r end end return 0 end function getItemsFromList(items) local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1]) if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function doRemoveItemsFromList(cid,items) local count = 0 if table.maxn(items) > 0 then for i = 1, table.maxn(items) do if getPlayerItemCount(cid,items[i][1]) >= items[i][2] then count = count + 1 end end end if count == table.maxn(items) then for i = 1, table.maxn(items) do doPlayerRemoveItem(cid,items[i][1],items[i][2]) end else return false end return true end function getMonsterFromList(monster) local str = '' if #monster > 0 then for i = 1, #monster do str = str .. monster[i] if i ~= #monster then str = str .. ', ' end end end return str end function GiveRewardsTask(cid, items) local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID for _, i_i in ipairs(items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then doAddContainerItem(backpack, item, amount) else for i = 1, amount do doAddContainerItem(backpack, item, 1) end end end end function isSummon(cid) if(not isCreature(cid)) then return false end return getCreatureMaster(cid) ~= cid end ]]></config> <event type="login" name="TaskLogin" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "KillTask") registerCreatureEvent(cid, "TaskLook") return true end]]></event> <talkaction words="/task;!task" event="buffer"><![CDATA[ domodlib('task_func') param,task,daily = param:lower(), getTaskMission(cid), getDailyTaskMission(cid) if isInArray({"counter","contador"},param) then setPlayerStorageValue(cid, task_sys_storages[8], getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and 1 or 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Task System] O contador foi "..(getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and "ativado" or "desativado")..".") return true elseif isInArray({"daily","diaria"},param) then if not daily_task[daily] or getPlayerStorageValue(cid, task_sys_storages[7]) <= 0 then doPlayerSendCancel(cid, "Desculpe, Mas você não está em nenhuma Daily Task.") return true elseif getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() <= 0 and getPlayerStorageValue(cid, task_sys_storages[5]) < daily_task[daily].count then doPlayerSendCancel(cid,"Desculpe, Mas Você não terminou a Daily Task a tempo! Por favor volte ao npc e comece uma nova Daily Task!") return true end return doShowTextDialog(cid, 8983, "[->] CURRENT DAILY TASK INFO [<-]\n\nNome: "..daily_task[daily].name.."\nProgresso: ["..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and 0 or getPlayerStorageValue(cid, task_sys_storages[5])).."/"..daily_task[daily].count.."]\nPrazo para entrega: "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).."\nMonstros para caçar: "..getMonsterFromList(daily_task[daily].monsters_list).."\n\n[->] CURRENT TASK REWARDS [<-]\n\nMoney: "..(daily_task[daily].money > 0 and daily_task[daily].money or 0).."\nExperiencia: "..(daily_task[daily].exp > 0 and daily_task[daily].exp or 0).."\nTask Points: "..daily_task[daily].points.."\nItems: "..(#daily_task[daily].reward > 0 and getItemsFromList(daily_task[daily].reward) or "Nenhum item de recompensa")..".") end if not task_sys[task] or getPlayerStorageValue(cid, task_sys[task].start) <= 0 then doPlayerSendCancel(cid, "você não está em nenhuma task.") return true end return doShowTextDialog(cid, 8983, "-> CURRENT TASK ["..getTaskMission(cid).."/"..#task_sys.."] <-\n\nTask Name: "..task_sys[task].name.."\nTask Level: "..task_sys[task].level.."\nTask Progress: ["..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and 0 or getPlayerStorageValue(cid, task_sys_storages[3])).."/"..task_sys[task].count.."]\nMonster To Hunt: "..getMonsterFromList(task_sys[task].monsters_list)..".\nItens Para Entrega: "..(#task_sys[task].items > 0 and getItemsFromList(task_sys[task].items) or "Nenhum")..".\n\n[->] CURRENT TASK REWARDS [<-]\n\nReward Money: "..(task_sys[task].money > 0 and task_sys[task].money or 0).."\nReward Experiencia: "..(task_sys[task].exp > 0 and task_sys[task].exp or 0).."\nReward Points: "..task_sys[task].points.."\nRedward Items: "..(#task_sys[task].reward > 0 and getItemsFromList(task_sys[task].reward) or "Nenhum item de recompensa")..".") ]]></talkaction> <event type="look" name="TaskLook" event="script"><![CDATA[ domodlib('task_func') function onLook(cid, thing, position, lookDistance) if isPlayer(thing.uid) and getTaskPoints(thing.uid) > 0 then doPlayerSetSpecialDescription(thing.uid, "\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").. " is a "..GetRankTask(thing.uid)) end return true end]]></event> <event type="kill" name="KillTask" event="script"><![CDATA[ domodlib('task_func') function onKill(cid, target) if isPlayer(cid) and isMonster(target) then local t,daily = task_sys[getTaskMission(cid)], daily_task[getDailyTaskMission(cid)] if t and getPlayerStorageValue(cid, t.start) > 0 and isInArray(t.monsters_list, getCreatureName(target):lower()) and getPlayerStorageValue(cid, task_sys_storages[3]) < t.count then setPlayerStorageValue(cid, task_sys_storages[3], getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and 1 or (getPlayerStorageValue(cid, task_sys_storages[3])+1)) if getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and getPlayerStorageValue(cid, task_sys_storages[3]) < t.count then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task System] defeated Total [" .. getPlayerStorageValue(cid, task_sys_storages[3]) .. "/" .. t.count .. "] da Task do " .. t.name .. ".") end if getPlayerStorageValue(cid, task_sys_storages[3]) >= t.count then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task System] Parabéns! Você terminou a Task do "..t.name..", volte ao npc parece receber sua recompensa.") end end if daily and getPlayerStorageValue(cid, task_sys_storages[7]) > 0 and getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() >= 0 and isInArray(daily.monsters_list, getCreatureName(target):lower()) and getPlayerStorageValue(cid, task_sys_storages[5]) < daily.count then setPlayerStorageValue(cid, task_sys_storages[5], getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and 1 or (getPlayerStorageValue(cid, task_sys_storages[5])+1)) if getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and getPlayerStorageValue(cid, task_sys_storages[5]) < daily.count then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Daily Task System] defeated Total [" .. getPlayerStorageValue(cid, task_sys_storages[5]) .. "/" .. daily.count .. "] da Task do " .. daily.name .. ".") end if getPlayerStorageValue(cid, task_sys_storages[5]) >= daily.count then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Daily Task System] Parabéns! Você terminou a Task do "..daily.name..", volte ao npc parece receber sua recompensa.") end end end return true end]]></event> </mod> Npc domodlib('task_func') 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,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"","" local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24 if isInArray({"task","tasks","missao","mission"}, msg) then if task_sys[task] then if getPlayerStorageValue(cid, task_sys[task].start) <= 0 then if getPlayerLevel(cid) >= task_sys[task].level then setPlayerStorageValue(cid, task_sys[task].start, 1) npcHandler:say("[Task System] Parabéns, agora você está participando da Task do "..task_sys[task].name.." e deverá matar "..task_sys[task].count.." desta lista: "..getMonsterFromList(task_sys[task].monsters_list)..". "..(#task_sys[task].items > 0 and "Ah e por favor me traga "..getItemsFromList(task_sys[task].items).." para mim." or "").."" , cid) else npcHandler:say("Desculpe, Mas você precisa alcançar level "..task_sys[task].level.." para poder participar da Task dos "..task_sys[task].name.."!", cid) end else npcHandler:say("Desculpe, Mas você atualmente está na task "..task_sys[task].name..". Você pode {entregar} caso já tenha terminado.", cid) end else npcHandler:say("Desculpe, Mas por enquanto não tenho mais nenhuma task para você!", cid) end elseif isInArray({"diaria","daili","daily","dayli","diario"}, msg) then if getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() > 0 then npcHandler:say("Desculpe, você deve esperar até "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).." para iniciar uma nova task diaria!", cid) return true elseif daily_task[daily] and getPlayerStorageValue(cid, task_sys_storages[5]) >= daily_task[daily].count then npcHandler:say("Desculpe, você tem task para {entregar} !", cid) return true end local r = doRandomDailyTask(cid) if r == 0 then npcHandler:say("Desculpe, mas você não tem level para completar nenhuma Task diaria.", cid) return true end setPlayerStorageValue(cid, task_sys_storages[4], r) setPlayerStorageValue(cid, task_sys_storages[6], os.time()+hours*3600) setPlayerStorageValue(cid, task_sys_storages[7], 1) setPlayerStorageValue(cid, task_sys_storages[5], 0) local dtask = daily_task[r] npcHandler:say("[Daily Task System] Parabéns, agora você está participando da Task Diaria do "..dtask.name.." e deverá matar "..dtask.count.." monstros desta lista: "..getMonsterFromList(dtask.monsters_list).." até "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6]))..". Boa sorte!" , cid) elseif isInArray({"receber","reward","recompensa","report","reportar","entregar","entrega"}, msg) then local v, k = task_sys[task], daily_task[daily] if v then -- original task if getPlayerStorageValue(cid, v.start) > 0 then if getPlayerStorageValue(cid,task_sys_storages[3]) >= v.count then if #v.items > 0 and not doRemoveItemsFromList(cid, v.items) then npcHandler:say("Desculpe, Mas você também precisa entregar os itens desta lista: "..getItemsFromList(v.items), cid) return true end if v.exp > 0 then doPlayerAddExp(cid, v.exp) str = str.."".. (str == "" and "" or ", ") .." "..v.exp.." de exp" end if v.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+v.points)) str = str.."".. (str == "" and "" or ", ") .." + "..v.points.."task points" end if v.money > 0 then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ", ") ..""..v.money.." gps" end if table.maxn(v.reward) > 0 then GiveRewardsTask(cid, v.reward) str = str.."".. (str == "" and "" or ", ") ..""..getItemsFromList(v.reward) end npcHandler:say("Obrigado pela sua ajuda Recompensas: "..(str == "" and "nenhuma" or ""..str.."").." por ter completado a task do "..v.name, cid) setPlayerStorageValue(cid, task_sys_storages[3], 0) setPlayerStorageValue(cid, task_sys_storages[1], (task+1)) else npcHandler:say("Desculpe, Mas você ainda não terminou a sua task do "..v.name..". Preciso que mate mais "..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and v.count or -(getPlayerStorageValue(cid,task_sys_storages[3])-v.count)).." Destes monstros terriveis!", cid) end end end if k then -- daily task if getPlayerStorageValue(cid, task_sys_storages[7]) > 0 then if getPlayerStorageValue(cid, task_sys_storages[5]) >= k.count then if k.exp > 0 then doPlayerAddExp(cid, v.exp) rst = rst.."".. (rst == "" and "" or ", ") .." "..k.exp.." de exp" end if k.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+k.points)) rst = rst.."".. (rst == "" and "" or ", ") .." + "..k.points.."task points" end if k.money > 0 then doPlayerAddMoney(cid, k.money) rst = rst.."".. (rst == "" and "" or ", ") ..""..k.money.." gps" end if table.maxn(k.reward) > 0 then GiveRewardsTask(cid, k.reward) rst = rst.."".. (rst == "" and "" or ", ") ..""..getItemsFromList(k.reward) end npcHandler:say("Obrigado pela sua ajuda! Recompensas: "..(rst == "" and "nenhuma" or ""..rst.."").." por ter completado a task do "..k.name, cid) setPlayerStorageValue(cid, task_sys_storages[4], 0) setPlayerStorageValue(cid, task_sys_storages[5], 0) setPlayerStorageValue(cid, task_sys_storages[7], 0) else npcHandler:say("Desculpe, Mas você ainda não terminou a sua task diaria do "..k.name..". Preciso que mate mais "..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and k.count or -(getPlayerStorageValue(cid,task_sys_storages[5])-k.count)).." Destes monstros!", cid) end end end elseif msg == "no" then selfSay("Tudo bem então", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) @Vodkart Poderia ajudar ?
  16. local config = { requiredLevel = 1, daily = true, centerRazzagornRoomPosition = Position(33423, 32466, 14), playerPositions = { Position(33388, 32457, 14) }, newPositions = { Position(33417, 32467, 14), Position(33417, 32467, 14), Position(33417, 32467, 14), Position(33417, 32467, 14), Position(33417, 32467, 14) }, RazzagornPositions = { Position(33425, 32466, 14) } } function onUse(player, item, fromPosition, target, toPosition, isHotkey) if item.itemid == 9825 then local storePlayers, playerTile = {} for i = 1, #config.playerPositions do playerTile = Tile(config.playerPositions[i]):getTopCreature() if not playerTile or not playerTile:isPlayer() then player:sendTextMessage(MESSAGE_STATUS_SMALL, "You need 5 players.") return true end if playerTile:getLevel() < config.requiredLevel then player:sendTextMessage(MESSAGE_STATUS_SMALL, "All the players need to be level ".. config.requiredLevel .." or higher.") return true end storePlayers[#storePlayers + 1] = playerTile end local specs, spec = Game.getSpectators(config.centerRazzagornRoomPosition, false, false, 22, 22, 22, 22) for i = 1, #specs do spec = specs[i] if spec:isPlayer() then player:sendTextMessage(MESSAGE_STATUS_SMALL, "A team is already inside the quest room.") return true end spec:remove() end for i = 1, #config.RazzagornPositions do Game.createMonster("Razzagorn", config.RazzagornPositions[i]) end local players for i = 1, #storePlayers do players = storePlayers[i] config.playerPositions[i]:sendMagicEffect(CONST_ME_POFF) players:teleportTo(config.newPositions[i]) config.newPositions[i]:sendMagicEffect(CONST_ME_ENERGYAREA) players:setDirection(DIRECTION_EAST) end elseif item.itemid == 9825 then if config.daily then player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_NOTPOSSIBLE)) return true end end item:transform(item.itemid == 9826 and 9825 or 9826) return true end Alguem me ajuda colocar um cooldown de 48 horas nesse script
  17. tem como por pra mudar a outfit do target alem da minha nessa spell? local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal * 0.5 + levelTotal), -(skillTotal * 1.5 + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var, target) local mninja = {lookType = 117, lookHead = 0, lookBody = 0, lookLegs = 0, lookFeet = 0, lookTypeEx = 0, lookAddons = 3} local fninja = {lookType = 117, lookHead = 0, lookBody = 0, lookLegs = 0, lookFeet = 0, lookTypeEx = 0, lookAddons = 3} local sex = getPlayerSex(cid) if sex == 0 then doSetCreatureOutfit(cid, mninja, 500) else doSetCreatureOutfit(cid, fninja, 500) end return doCombat(cid, combat, var) end
  18. Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). Ex. TFS 1.3; Base: TFS 1.3 Qual erro está surgindo/O que você procura? Já procurei, e tentei, mas, não consigo colocar o nome do jogador na mensagem, alguém poderia me ajudar? Você tem o código disponível? Se tiver publique-o aqui: function onUse(player, item, fromPosition, target, toPosition, isHotkeym, cid) if target.itemid == 26398 then target:transform(26443) target:decay() item:remove(1) broadcastMessage("|player| improved item to +1", MESSAGE_EVENT_ADVANCE) return true end Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  19. uma action que dou use no item o player fala por ex: olá , tchau.. help?
  20. Boa tarde galera. Teria como vocês me ajudarem? Procurei por todos os tópicos sobre alavancas e tp mas não consegui. Estou procurando um script que faça o seguinte: - Player A puxa alavanca - Se tiver algum player em x = 123, y = 123, z = 123 ou/e x = 456, y = 456, z = 456 ou/e x = 789, y = 789, z = 789 , eles serão teleportados para os pontos x = 777, y = 777, z = 777, ou/e x = 888, y = 888, z = 888 ou/e x = 999, y = 999, z = 999 - Não seja necessário mais do que um jogador - Os jogadores que forem teleportados receberam uma mensagem "Bem-Vindo" Valeu TK!
  21. Ola galerinha do tk vcs podem me ajuda com um script de aura e o seguinte esse esquipt quando e ativado fica rodando uma bola de energia ao redor do player efeito ( /x 30) mas quero q fique saindo do lado direito e equerdo do player o soquinho ( efeito /z 59) teria como fazer essas mudanças para min?? des de ja agradeço segue o script Aura 1 -- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 100 -- chance de curar em cada volta da aura, em porcentagem quantheal = 5 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 5% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 59 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura1(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura1,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura1(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if getPlayerStorageValue(cid, 89123) <= 0 then doPlayerSendCancel(cid, "Você precisa ter feito a quest.") return true end if getPlayerStorageValue(cid, 25943) == 2 then doPlayerSendCancel(cid, "Você precisa desativar sua aura level 2.") return true end if getPlayerStorageValue(cid, 27651) == 2 then doPlayerSendCancel(cid, "Você precisa desativar sua aura level 3.") return true end if getPlayerStorageValue(cid, 28911) == 2 then doPlayerSendCancel(cid, "Você precisa desativar sua aura level 4.") return true end if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura level 1 novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua Aura Level 1 já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura Level 1 ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura1(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)== 2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura Level 1 desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return true end Script aura 2 -- CONFIGURAÇÕES aurastrs = 25943 -- storage da aura estrs = 25813 -- storage para o exhaust porcentagems = 100 -- chance de curar em cada volta da aura, em porcentagems quantheals = 5 -- porcentagems do hp máximo que cada cura irá curar. (No caso, irá curar 5% do hp máximo cada cura) tempos = 1180 -- tempos para dar uma volta no player (este tempos foi o que achei mais agradável visualmente, é recomendável não mudar) tipoauras = 53 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocuras = 60 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura2s(i,tm,cid) if(isCreature(cid)) then local atuals = getCreaturePosition(cid) local posauras = { {x=(atuals.x)-1, y=(atuals.y)-1, z=atuals.z}, {x=atuals.x, y=(atuals.y)-1, z=atuals.z}, {x=(atuals.x)+1, y=(atuals.y)-1, z=atuals.z}, {x=(atuals.x)+1, y=atuals.y, z=atuals.z}, {x=(atuals.x)+1, y=(atuals.y)+1, z=atuals.z}, {x=atuals.x, y=(atuals.y)+1, z=atuals.z}, {x=(atuals.x)-1, y=(atuals.y)+1, z=atuals.z}, {x=(atuals.x)-1, y=atuals.y, z=atuals.z}, } local chances = math.random(100) if(chances<=porcentagems/8) then doCreatureAddMana(cid, getCreatureMaxMana(cid)/quantheals) if(i<=8 and i>1) then doSendDistanceShoot({x=posauras.x, y=posauras.y, z=posauras.z}, atuals, tipoauras) else doSendDistanceShoot({x=posauras[1].x, y=posauras[1].y, z=posauras[1].z}, atuals, tipoauras) end doSendMagicEffect(atuals, efeitocuras) end if(i==8) then doSendDistanceShoot({x=posauras.x, y=posauras.y, z=posauras.z}, {x=posauras[1].x, y=posauras[1].y, z=posauras[1].z}, tipoauras) elseif(i<8) then doSendDistanceShoot({x=posauras.x, y=posauras.y, z=posauras.z}, {x=posauras[i+1].x, y=posauras[i+1].y, z=posauras[i+1].z}, tipoauras) end if(i<=8 and getPlayerStorageValue(cid, aurastrs)==2) then i = i+1 tm = tempos/8 return addEvent(efeitosAura2s,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastrs)==2) then return efeitosAura2s(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if getPlayerStorageValue(cid, 89124) <= 0 then doPlayerSendCancel(cid, "Você precisa ter feito a quest.") return true end if getPlayerStorageValue(cid, 25950) == 2 then doPlayerSendCancel(cid, "Você precisa desativar sua aura level 1.") return true end if getPlayerStorageValue(cid, 27651) == 2 then doPlayerSendCancel(cid, "Você precisa desativar sua aura level 3.") return true end if getPlayerStorageValue(cid, 28911) == 2 then doPlayerSendCancel(cid, "Você precisa desativar sua aura level 4.") return true end if(param=="on") then if getPlayerStorageValue(cid, estrs) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estrs) - os.time()).." segundos para poder habilitar aura level 2 novamente.") else if(getPlayerStorageValue(cid, aurastrs)==2) then doPlayerSendCancel(cid,"Sua Aura Level 2 já está habilitada.") elseif(getPlayerStorageValue(cid, aurastrs)==-1) then doPlayerSendCancel(cid,"Aura Level 2 ligada!") setPlayerStorageValue(cid, aurastrs, 2) efeitosAura2s(1,tempos/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastrs)== 2) then setPlayerStorageValue(cid, estrs, os.time()+2) setPlayerStorageValue(cid, aurastrs, -1) doPlayerSendCancel(cid,"Aura Level 2 desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura2 on' para ligar sua aura, e '!aura2 off' para desligá-la.") end return true end os dois quero com o mesmo efeito /z 59 saindo so do lado direito e esquerdo do player obrigado
  22. iam usar esse script tem bug precisa de bpssa 20 amuleto de pele de pedra local config = { soulcost = -50, itemid = 2197, charges = 3 } function onSay(cid, words, param) if getPlayerSoul(cid) >= config.soulcost then doPlayerAddSoul(cid, config.soulcost) local container = doPlayerAddItem(cid, 2000, 1) --backpack doAddContainerItem(container, config.itemid, config.charges) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) doSendAnimatedText(getCreaturePosition(cid), "SSA!", TEXTCOLOR_DARKYELLOW) doPlayerSendTextMessage(cid,22,"Thanks for buying!") else doPlayerSendCancel(cid,"You need ".. config.soulcost .." soul points to purchase a backpack of ssa.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end return true end <talkaction access="0-4" words="!bpssa" event="script" value="bpssa.lua"/>
  23. TFS 8.6 ola, eu gostaria de adicionar "groupID" para OTClient -> "getPlayerGroupID e.t.c". mas eu tenho um problema com a "parsing" do lado TFS Um problema em game.cpp código: int32_t Game::parsePlayerGroupID(uint32_t playerId, uint8_t groupID) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return 1; return player->getGroupId(groupID); }[/CODE] esse error: In member function `int32_t Game::parsePlayerGroupID(uint32_t, uint8_t)': no matching function for call to `Player::getGroupId(uint8_t&)' candidates are: int32_t Player::getGroupId() const If someone could help I've used translator
  24. Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). TFS 0.4 Base: Queria colocar esse script de exp potion pra NAO usar na protection zone, alguem sabe colocar? grato <?xml version="1.0" encoding="UTF-8"?> <mod name="AdvancedExpPotionSystem" enabled="yes" author="MatheusMkalo" forum="TibiaKing.com"> <!-- Configs and Functions --> <config name="PotionExpConfigs50"><![CDATA[ ------ CONFIGURE SEU SCRIPT ------ TRUE ou FALSE configs = { time = 30, ---- TIME IN MINUTES needpa = FALSE, needlvl = {TRUE, level = 1}, costmana = {FALSE, mana = 10}, addrate = 25, -- Exp que vai adicionar em % removeonuse = TRUE } function getTime(s) local n = math.floor(s / 60) s = s - (60 * n) return n, s end CreatureEventChecker = function(event, ...) -- Colex if isCreature(arg[1]) then event(unpack(arg)) end end creatureEvent = function(event, delay, ...) -- Colex addEvent(CreatureEventChecker, delay, event, unpack(arg)) end function getPlayerExtraExpRate(cid) -- By MatheusMkalo return (getPlayerRates(cid)[8]-1)*100 end ]]></config> <!-- exppotion.lua --> <action itemid="6544" event="script"><![CDATA[ domodlib('PotionExpConfigs50') if getPlayerStorageValue(cid, 49015) >= 1 then doSendMagicEffect(getPlayerPosition(cid), 2) return doCreatureSay(cid, "[Error] So pode usar 1 EXP POT por vez.", TALKTYPE_ORANGE_1) end if configs.needpa and not isPremium(cid) then return doPlayerSendCancel(cid, "You need to be a premmium account to use this item.") end if configs.needlvl[1] and getPlayerLevel(cid) < configs.needlvl.level then return doPlayerSendCancel(cid, "You need to be level " .. configs.needlvl.level .. " to use this item.") end if configs.costmana[1] then if getCreatureMana(cid) < configs.costmana.mana then return doPlayerSendCancel(cid, "You need " .. configs.costmana.mana .. " mana to use this item.") else doCreatureAddMana(cid, -configs.costmana.mana) end end if configs.removeonuse then doRemoveItem(item.uid, 1) end for i = configs.time*60, 1, -1 do local a = math.floor(i/60) .. ":" .. i - (60 * math.floor(i/60)) if #a < 4 then a = string.sub(a,1,2) .. "0" .. string.sub(a, 3) end if i == configs.time*60 then creatureEvent(doPlayerSendCancel, configs.time*60*1000, cid, "The effect of the exp potion end.") end creatureEvent(doPlayerSendCancel, (configs.time*60-i)*1000, cid, "[Exp +25%], o efeito acabara em "..a..".") end doPlayerSetExperienceRate(cid, (1+(configs.addrate/100))+(getPlayerExtraExpRate(cid)/100)) creatureEvent(doPlayerSetExperienceRate, configs.time *60*1000, cid, 1+(getPlayerExtraExpRate(cid)/100-(configs.addrate/100))) doCreatureSay(cid, "EXP POTION Ativada, voce ganhou um bonus de EXP [+25%] por 30 minutos.", TALKTYPE_ORANGE_1) doSendMagicEffect(getPlayerPosition(cid), 21) setPlayerStorageValue(cid, 49015, os.time()) creatureEvent(setPlayerStorageValue, configs.time *60*1000, cid, 49015, 0) return TRUE ]]></action> <creaturescript type="login" name="ExpPotion" event="script"><![CDATA[ domodlib('PotionExpConfigs50') local time = configs.time if os.time()-getPlayerStorageValue(cid, 49015) < time *60 then doPlayerSetExperienceRate(cid, (1+(configs.addrate/100))+(getPlayerExtraExpRate(cid)/100)) creatureEvent(doPlayerSetExperienceRate, (time*60-(os.time()-getPlayerStorageValue(cid, 49015))) * 1000, cid, 1+(getPlayerExtraExpRate(cid)/100-(configs.addrate/100))) creatureEvent(setPlayerStorageValue, (time*60-(os.time()-getPlayerStorageValue(cid, 49015))) * 1000 , cid, 49015, 0) for i = (time*60-(os.time()-getPlayerStorageValue(cid, 49015))), 1, -1 do local a = math.floor(i/60) .. ":" .. i - (60 * math.floor(i/60)) if #a < 4 then a = string.sub(a,1,2) .. "0" .. string.sub(a, 3) end if i == (time*60-(os.time()-getPlayerStorageValue(cid, 49015))) then creatureEvent(doPlayerSendCancel, (time*60-(os.time()-getPlayerStorageValue(cid, 49015)))*1000, cid, "The effect of the exp potion end.") end creatureEvent(doPlayerSendCancel, ((time*60-(os.time()-getPlayerStorageValue(cid, 49015)))-i)*1000, cid, "+25% de experiencia!, o efeito acabara em "..a..".") end end return TRUE ]]></creaturescript> </mod> Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  25. Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). dbnew.zapto.org Base: 0.4 Qual erro está surgindo/O que você procura? Gostaria de dificultar mais o Magic Level, esta no 1 ja. Mesmo removendos a SkillsStages, ta muito facil ainda. Aparentemente, parece que esse 1 conta como 1%. Quando eu tento coloca "0.1" ou "0.5" nao upa. Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.

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 começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário 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!

Tibia King Recomenda

DokeHost - Soluções em Hospedagem

VPS Windows
VPS Linux
Servidor VPS
×
×
  • Create New...