Ir para conteúdo

Snowsz

Héroi
  • Registro em

  • Última visita

Tudo que Snowsz postou

  1. Isso depende da source utilizada no servidor, se tem ou não esse recurso, o certo mesmo seria essa área de programação, aqui podem resolver facilmente.
  2. O tópico foi movido para a área correta, preste mais atenção da próxima vez! Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680 Este tópico foi movido: De: "OTServ → Suporte OTServ → Suporte de Scripts" Para: "OTServ → Suporte OTServ → Suporte de Programação"
  3. Vps

    Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    Lá deve ter sistemas como "Ubunto", "Debian", isso é "linux", nomes de diferentes sistemas operacionais do linux, eu usaria o "Ubunto".
  4. local holeId = {3369, 7062, 7064, 7066, 392, 408, 409, 427, 428, 430, 462, 469, 470, 482, 484, 485, 489, 924, 3135, 3136} function onUse(cid, item, fromPosition, itemEx, toPosition) local groundTile = getThingfromPos(toPosition) if groundTile.itemid == 7062 or groundTile.itemid == 7066 or groundTile.itemid == 4988 then doTeleportThing(cid, {x = toPosition.x, y = toPosition.y - 1, z = toPosition.z - 1}, false) elseif groundTiel.itemid == 1409 then doTeleportThing(cid, {x = toPosition.x, y = toPosition.y - 1, z = toPosition.z + 1}, false) elseif isInArray(holeId, itemEx.itemid) then local hole = getThingfromPos({x = toPosition.x, y = toPosition.y, z = toPosition.z + 1, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE}) if hole.itemid > 0 then doTeleportThing(hole.uid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z}, false) else doPlayerSendCancel(cid, "Sorry, not possible.") end else return false end return true end
  5. Vps

    Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    Não tem essa de melhor sistema para o vps, é o sistema que você escolher e pronto, normalmente o mais seguro é o linux.
  6. Tenta. function doResetStorageValue(cid, time, storage, value) if isCreature(cid) then return addEvent(function() setPlayerStorageValue(cid, value, storage) end, time) end end local signal = {[NORTH] = {0, -1}, [SOUTH] = {0, 1}, [EAST] = {1, 0}, [WEST] = {-1, 0}} local d = isCreature(target) and getCreatureDirectionToTarget(cid, target) or getCreatureLookDir(cid) local p = getThingPosWithDebug(cid) local t = {} for b = 1, 6 do local pos = getThingPositionWithDebug(cid) pos.x = pos.x + signal[d][1] * b pos.y = pos.y + signal[d][2] * b if canWalkOnPos(pos, false, true, true, true, false) and isSightClear(getThingPositionWithDebug(cid), pos, false) then table.insert(t, pos) end end if #t <= 0 then return true end function doAquaJet(cid, area, areaEff, eff, pos, a) if not isCreature(cid) then return true end if not pos then return true end doAreaCombatHealth(cid, WATERDAMAGE, areaEff, 0, 0, 0, eff) doAreaCombatHealth(cid, WATERDAMAGE, area, whirl3, -min, -max, 0) doTeleportThing(cid, pos, true) -- if a == 6 then // essa opçao pra tirar a storage eu eliminei porque se o pokemon parar antes de terminar o for a storage tb nao sae -- setPlayerStorageValue(cid, 4440929, -1) --end ) end for a = 0, 6 do local AquaJet = { [0] = {675, {x=p.x, y=p.y-(a+0), z=p.z}, {x=p.x+1, y=p.y-(a-2), z=p.z}}, --pra cima [1] = {673, {x=p.x+(a+0), y=p.y, z=p.z}, {x=p.x+(a+0), y=p.y+1, z=p.z}}, --direito [2] = {674, {x=p.x, y=p.y+(a+0), z=p.z}, {x=p.x+1, y=p.y+(a+0), z=p.z}}, --baixo [3] = {676, {x=p.x-(a+0), y=p.y, z=p.z}, {x=p.x-(a-2), y=p.y+1, z=p.z}} --esquerdo } addEvent(doAquaJet, 310*a, cid, AquaJet[d][2], AquaJet[d][3], AquaJet[d][1], t[a], a) end doResetStorageValue(cid, 2000, 4440929, -1) setPlayerStorageValue(cid, 4440929, 1) addEvent(doDisapear, 180, cid) addEvent(doAppear, 1950, cid, 0)
  7. Isso está errado. Se não me engano acho que é assim: <events> <script>"MonsterPusher"</script> </events> Não lembro, mas sei que não é usando aquela função
  8. local medalId = 5785 --ID da Medal of Honour. local toPosition = {x = 238, y = 256, z = 7} --Para onde o jogador será teleportado. function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function onUse(cid) if getPlayerSkullType(cid) == SKULL_WHITE or isPlayerPzLocked(cid) then doPlayerSendCancel(cid, "Você não pode passar aqui com PZ Locked ou com PK.") else if #getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, medalId) < 1 then local medalCheck for i = 1, 10 do if getPlayerSlotItem(cid, i).itemid == medalId then medalCheck = true break end end if not medalCheck then return doPlayerSendCancel(cid, "Você não pode passar aqui sem um "..getItemNameById(medalId)..".") end end doTeleportThing(cid, toPosition) end return true end
  9. Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    O auto loot é assim, ele funciona dessa maneira, se não quiser auto loot, remova do seu servidor.
  10. Sim mas ele disse que também quer sem skull(não disse quais).
  11. Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    Desde quando isso acontece?
  12. local medalId = 5785 --ID da Medal of Honour. local toPosition = {x = 238, y = 256, z = 7} --Para onde o jogador será teleportado. function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function onUse(cid) if isInArray({SKULL_YELLOW, SKULL_WHITE, SKULL_RED, SKULL_BLACK}, getPlayerSkullType(cid)) or getCreatureCondition(cid, CONDITION_INFIGHT) then doPlayerSendCancel(cid, "Você não pode passar aqui em batalha ou com PK.") else if #getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, medalId) < 1 then local medalCheck for i = 1, 10 do if getPlayerSlotItem(cid, i).itemid == medalId then medalCheck = true break end end if not medalCheck then return doPlayerSendCancel(cid, "Você não pode passar aqui sem um "..getItemNameById(medalId)..".") end end doTeleportThing(cid, toPosition) end return true end
  13. local medalId = 5785 --ID da Medal of Honour. local toPosition = {x = 238, y = 256, z = 7} --Para onde o jogador será teleportado. function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function onUse(cid) if isInArray({SKULL_YELLOW, SKULL_WHITE, SKULL_RED, SKULL_BLACK},getPlayerSkullType(cid)) then doPlayerSendCancel(cid, "Você não pode passar aqui com PK.") else if #getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, medalId) < 1 then local medalCheck for i = 1, 10 do if getPlayerSlotItem(cid, i).itemid == medalId then medalCheck = true break end end if not medalCheck then return doPlayerSendCancel(cid, "Você não pode passar aqui sem um "..getItemNameById(medalId)..".") end end doTeleportThing(cid, toPosition) end return true end
  14. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, 12) local muted = createConditionObject(CONDITION_MUTED) setConditionParam(muted, CONDITION_PARAM_TICKS, 4000) local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat, area) local exhausted = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhausted, CONDITION_PARAM_TICKS,4000) function onCastSpell(cid, var) if exhaustion.check(cid, 23023) == false then exhaustion.set(cid, 23023, 28) local target = variantToNumber(var) doTargetCombatCondition(0, target, exhausted, CONST_ME_MAGIC_RED) doCreatureSetNoMove(target, false) doAddCondition(target, muted) doAddCondition(target, exhausted) addEvent(doCreatureSetNoMove, 4000, target, false) return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "Cooldown for Silence is " ..exhaustion.get(cid, 23023).." seconds") return false end return true end
  15. Snowsz postou uma resposta no tópico em Playground (Off-topic)
    Bem vindo e boa sorte. Se não me engano comentários como esse são considerados flood não?
  16. Snowsz postou uma resposta no tópico em Tutoriais sobre Clients
    Isso foi um bug que deu, esqueci de arrumar... Que bom! um elogio vindo de você @Edit Bugs arrumados(espero).
  17. Snowsz postou uma resposta no tópico em Tutoriais sobre Clients
    Obrigado , espero que todos comecem a mexer no OTC.
  18. Snowsz postou uma resposta no tópico em Tutoriais sobre Clients
    Neste tutorial espero ensina-los a criar um mod simples, composto por uma janela e um botão, para ativa-la e desativá-la. O mod deve ficar mais ou menos assim: • Entre na pasta mods do seu otclient, e crie um arquivo com um nome quaisquer, como por exemplo, o nome que quer para seu mod, o meu, vou chamar de "tutorial". • Dentro da pasta criada, crie um novo arquivo com extensão "otmod", coloque o nome do seu mod nele, eu vou colocar o nome de "tutorial", ficando "tutorial.otmod": • Dentro do seu arquivo de extensão "otmod" adicione o seguinte código: Module name: description: author: website: version: autoload: autoload-priority: scripts: [ ] @onLoad: @onUnload: • Explicando Dai você me pergunta por que isso está identado dessa forma? Module name: Com dois espaços antes de "name:"? Porque "Module" é uma declaração do tipo de arquivo que está sendo utilizado, já o "name:", é um componente do "Module", por isso, ele deve estar dentro de "Module", caso contrário, poderá ocorrer erros. Nesta linha: Module Ele está declarando que este arquivo é um modulo, uma modificação para seu client. Nesta linha: name: Aqui, estará sendo declarado o nome do seu módulo, eu vou colocar o nome "Tutorial": name: Tutorial Ao clicar no gerenciador de módulos, ele irá mostrar o seu mod com o nome escolhido: Nesta linha: description: Aqui, entrará a descrição do seu mod, por exemplo: description: Um mod simples. Irá mostrar mais ou menos assim: Nesta linha: author: Entrará o seu nome, ou seja, o nome de quem criou o mod(autor óbvio), por exemplo: author: Snowsz Ficaria mais ou menos assim: Nesta linha: website: Você pode declarar o seu site, por exemplo: website: tibiaking.com Ficaria mais ou menos assim: Nesta linha: version: Você pode colocar a versão do seu mod, por exemplo: version: 1.0 Ficaria mais ou menos assim: A parte com explicação gráfica terminou ! Nesta linha: autoload: Será determinado se o seu mod irá ser carregado automaticamente, por exemplo: Exemplo 1: autoload: false Assim, seu mod só irá ser carregado manualmente, você terá que ir no gerenciador de módulos e clicar em carregar para inciar seu mod. Exemplo 2: autoload: true Assim, seu mod só irá ser carregado automaticamente, sem a necessidade de clicar para ser carregado. Nesta linha: autoload-priority: Será determinada a prioridade de carregamento do seu mod, "Como assim?", é simples, ele irá carregar antes ou depois de outro mod, isso determina em que posição de carregamento seu mod deve estar, como por exemplo, em primeiro lugar , um exemplo de prioridade: autoload-priority: 1000 Acho que não tem nenhum mod com essa prioridade? Hehe, será um dos primeiros a carregar! Nesta linha: scripts: [ ] Será determinado os scripts carregados pelo seu módulo, os scripts usado por ele, por exemplo: scripts: [ tutorial ] Ele irá busca um arquivo com o nome tutorial.lua na mesma pasta que ele estiver, e carregará tudo que tem dentro daquele arquivo. Nesta linha: @onLoad: Será determinado que função o seu mod irá chamar ao iniciar, por exemplo: @onLoad: print("Hello World!") Irá mostrar uma mensagem no seu terminal do otclient. Por fim, nesta linha: @onUnload: Será determinado que função o seu mod irá chamar ao ser descarregado, ao se desligar, por exemplo: @onUnload: print("Bye World! ;(") Irá mostrar uma mensagem no seu terminal do otclient. Bom, a configuração que usaremos no nosso mod simples será essa: Module name: Tutorial description: Um mod simples. author: Snowsz website: tibiaking.com version: 1.0 autoload: true autoload-priority: 1000 scripts: [ tutorial ] @onLoad: init() @onUnload: terminate() Mexa apenas no que souber Na pasta do seu mod, crie um novo arquivo, com o nome "tutorial", ele deverá conter a extensão "lua", ficando "tutorial.lua", que é o arquivo de script setado no nosso "tutorial.otmod": scripts: [ tutorial ] Dentro dele, coloque o seguinte código: function init() tutorialWindow = g_ui.displayUI('tutorial.otui') tutorialWindow:hide() tutorialButton = modules.client_topmenu.addRightButton('tutorialButton', tr('Exemplo'), 'icone', onoff, true) end function terminate() tutorialWindow:hide() end function onoff() if tutorialWindow:isVisible() then tutorialWindow:hide() else tutorialWindow:show() end end A função "init()" é a função chamada pelo seu mod, ao iniciar, a função "terminate()", é chamada pelo seu mod, ao ser desligado. Na função "init()", em uma de suas linhas podemos encontrar isso: tutorialWindow = g_ui.displayUI('tutorial.otui') Onde tem "tutorialWindow", está sendo declarado uma variável global, um iniciante em lua deve saber o que é, então não vou explicar. Dentro de tal variável, há uma função, "O que essa função faz?", ela executa os elementos contidos em um arquivo, que seria os arquivos de extensão "otui", nela, estaremos executando o "tutorial.otui". Nesta linha: tutorialWindow:hide() Ele executa uma função na variável "tutorialWindow", que seria uma função para esconder a janela, pois, o que estava contido no "tutorial.otui" seria uma janela que criaremos logo logo. Nesta linha: tutorialButton = modules.client_topmenu.addRightButton('tutorialButton', tr('Exemplo'), 'icone', onoff, true) Está sendo declarado uma variável global, nela, está contido a referencia de uma função, que seria um botão adicionado ao lado direito do menu, exemplo: Utilizei a imagem de ícone do otclient para demonstração. Explicando a função: Sua base é essa: modules.client_topmenu.addRightButton(id, description, icon, callback, front) • Id: Será o id dado ao botão, para melhorar o acesso. • Description: É a descrição do botão, ao passar o mouse em cima, aparecerá um texto. • Icon: É a imagem do botão, como a que eu utilizei no exemplo, usei o ícone do otclient. • Callback: É uma função chamada ao clicar nele. • Front: Define se o botão será adicionado na frente ou atrás dos demais botões do seu menu. Explicando a função "terminate()", na sua única linha podemos encontrar isso: tutorialWindow:hide() É o seguinte, ao seu mod descarregar, ele irá esconder sua janela criada. Explicando a função "onoff()", nas suas linhas podemos encontrar isso: if tutorialWindow:isVisible() then tutorialWindow:hide() else tutorialWindow:show() end Mas bem, o que isso faz? Simples, "tutorialWindow:isVisible()", ele checa se a janela está visível, se estiver, ele irá esconde-la "tutorialWindow:hide()", caso a janela não esteja visível, ele irá mostra-la "tutorialWindow:show()", essa é a utilidade da função utilizada no botão do menu. Agora, na pasta do seu mod, crie um novo arquivo, com o nome de "tutorial", a extensão dele deve ser "otui", ficando "tutorial.otui", dentro desse arquivo, adicione isso: MainWindow id: tutorialwindow height: 255 width: 438 !text: tr("Mod simples") Explicando: • "MainWindow", seria o objeto que irá ser utilizado pelo arquivo, no caso, uma janela. • "id", o id, estaria setando um id para a sua janela. • "height", seria a altura da sua janela, do "MainWindow". • "width", seria a largura da sua janela, do "MainWindow". • "!text", seria o texto inserido como título de sua janela, a função chamada nele "tr()", chama uma tradução para aquela frase, caso não tenha ficaria aquilo mesmo, caso tenha, iria mudar para outro texto traduzido. Bom gente, espero que tenham gostado do tutorial, eu não sou bom com tutoriais... Se tiver me perdido peço desculpas, qualquer erro podem postar aqui que irei corrigir, se eu tiver me enrolado em algo, me desculpem, dei várias pausas enquanto fazia isso kk', espero que tenham entendido tudo. Créditos: Snowsz
  19. Snowsz postou uma resposta no tópico em Playground (Off-topic)
    Ngm da mais beijos ;(
  20. Snowsz postou uma resposta no tópico em Playground (Off-topic)
  21. Snowsz postou uma resposta no tópico em Playground (Off-topic)
    Que eu saiba não é cachoeira e sim cachorreira.
  22. Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    local porcentagem = 40 -- Porcentagem de dano que será BLO-QUE-A-DO local pt_br = true function onStatsChange(cid, attacker, type, combat, value) local lang = {"You lose %d hitpoints (damage protected by amulet: %d).", "Você perdeu %d pontos de vida (proteção do amuleto: %d)."} local reset = 9235 if getPlayerSlotItem(cid, 2).itemid == 2218 and isPlayer(attacker) then if type == 1 or type == 3 then if getPlayerStorageValue(cid,reset) == 2 then setPlayerStorageValue(cid,reset,1) return true else local new_dmg = math.ceil((porcentagem/100)*value) setPlayerStorageValue(cid,reset,2) doTargetCombatHealth(attacker, cid, combat, -new_dmg, -new_dmg, 255) doPlayerSendCancel(cid,(pt_br and lang[2]:format(new_dmg, value-new_dmg) or lang[1]:format(new_dmg, value-new_dmg))) return false end end end return true end
  23. Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    local porcentagem = 40 -- Porcentagem de dano que será BLO-QUE-A-DO local pt_br = true function onStatsChange(cid, attacker, type, combat, value) local lang = {"You lose %d hitpoints (damage protected by amulet: %d).", "Você perdeu %d pontos de vida (proteção do amuleto: %d)."} local reset = 9235 if getPlayerSlotItem(cid, 2).itemid == 2218 and isPlayer(attacker) then if type == 1 or type == 3 then if getPlayerStorageValue(cid,reset) == 2 then setPlayerStorageValue(cid,reset,1) return true else local new_dmg = math.ceil(((100-porcentagem)/100)*value) setPlayerStorageValue(cid,reset,2) doTargetCombatHealth(attacker, cid, combat, -new_dmg, -new_dmg, -1) doPlayerSendCancel(cid,(pt_br and lang[2]:format(new_dmg, value-new_dmg) or lang[1]:format(new_dmg, value-new_dmg))) return false end end end return true end
  24. Snowsz postou uma resposta no tópico em Suporte Tibia OTServer
    local porcentagem = 40 -- Porcentagem de dano que será BLO-QUE-A-DO local pt_br = true function onStatsChange(cid, attacker, type, combat, value) local lang = {"You lose %d hitpoints (damage protected by amulet: %d).", "Você perdeu %d pontos de vida (proteção do amuleto: %d)."} local reset = 9235 if getPlayerSlotItem(cid, 2).itemid == 2218 then if type == 1 or type == 3 then if getPlayerStorageValue(cid,reset) == 2 then setPlayerStorageValue(cid,reset,1) return true else local new_dmg = math.ceil(((100-porcentagem)/100)*value) setPlayerStorageValue(cid,reset,2) doTargetCombatHealth(attacker, cid, combat, -new_dmg, -new_dmg, -1) doPlayerSendCancel(cid,(pt_br and lang[2]:format(new_dmg, value-new_dmg) or lang[1]:format(new_dmg, value-new_dmg))) return false end end end return true end
  25. O tópico foi movido para a área correta, preste mais atenção da próxima vez! Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680 Este tópico foi movido: De: "OTServ → Suporte OTServ → Suporte de Scripts" Para: "OTServ → Suporte OTServ → Suporte de OTServ Geral"

Informação Importante

Confirmação de Termo