Ir para conteúdo
Close

REFORMULAMOS A SEÇÃO DE CLASSIFICADOS! - Crie grátis os seus anúncios de procura e oferta de serviços e produtos relacionados ao OTServ! - Acesse através do nosso menu ou clique aqui e confira já!

IceWar

Membro
  • Total de itens

    60
  • Registro em

  • Última visita

Sobre IceWar

  • Rank
    Pedro Minaré
  • Data de Nascimento 23/09/1994

Informação de Perfil

  • Genero
    Masculino
  • Localização
    Brasil
  • Eu sou
    Programmer
  • OTServ favorito
    Baiakuda
  • Bot preferido
    Elfbot
  • Interesses
    Montar equipes de otserver, mas já tenho um :D

Últimos Visitantes

4.394 visualizações
  1. Troquei a função no script pela que o Vodkart falou, e fica dando erro na distro Onde você adicionou esse [if is Container(tile.uid) then ...] ? Tentei adicionar no meu, ficou assim: function corpseRetireItems(cid, pos) local check = false for i = 0, 255 do pos.stackpos = i tile = getTileThingByPos(pos) if tile.uid > 0 and isCorpse(tile.uid) then check = true break end end if check == true then if isContainer(tile.uid) then local items = getContainerItems(tile.uid) end if items then for i,x in pairs(items) do if isInArray(getPlayerStorageTable(cid, info.Storages[1]), tonumber(x.itemid)) or getPlayerStorageValue(cid, info.Storages[2]) > 0 and isInArray({2148,2152,2160,12662},tonumber(x.itemid)) then if isItemStackable(x.itemid) then doPlayerAddItemStacking(cid, x.itemid, x.type) if info.AutomaticDeposit == true and isInArray({2148,2152,2160,12662}, tonumber(x.itemid)) then AutomaticDeposit(cid,x.itemid,x.type) end else doPlayerAddItem(cid, x.itemid) end doRemoveItem(x.uid) end end end end end E continua dando erro na distro: Alguém sabe resolver?
  2. Galera, como esse problema já tem mais de um ano, eu já resolvi a algum tempo... E não me lembro de qual foi a solução. Vim aqui neste post só porque eu vi resposta, mas já resolvi. A única direção que posso dar, que é no caso o único passo que me lembro, foi eu ter editado essa parte dos exhausted nas sources da distro.
  3. Meu problema continua, também não sei a solução ahsuahus
  4. Salve galera do TK! Hoje venho aqui tirar uma dúvida a respeito de um problema que, creio eu, muitos donos de OTserver vem sofrendo: a grande questão de ter que usar OTX ou TFS operando em apenas 1 núcleo de processador. Bom, eu gostaria de saber se existe alguma possibilidade de uma distro OTX trabalhar utilizando mais de um núcleo de processador, visto que mesmo que o Host seja de alto nível de processamento a distro acaba trabalhando apenas com 1 núcleo de processador, fazendo assim com que o processador não possa trabalhar da maneira que foi construído, dividindo a execução de tarefas em núcleos para um melhor desempenho, deixando assim o server com lag caso atinja uma grande quantidade de players online. Eu já notei que o OTX consome muito processamento, assim como o MySQL (banco de dados), o que o torna complicado de se trabalhar. Enfim, existe alguma alternativa? Outra distro, outro sistema, etc...
  5. Então amigo, eu também já executei este comando mas o erro persiste. Não sei exatamente em qual monstro está dando o erro, pois quem já está usando são os players kkk. Qual seria a solução? Isso no caso é porque o sistema não está encontrando o corpo do monstro quando ele é morto? E se o monstro não tiver corpse? Ele vai bugar?
  6. Sim, poderia ser, aí surge um TP no templo com avisos, dizendo que o evento vai começar. O tp vai levar os caras pra uma determinada sala, onde depois eles serão divididos automaticamente em 2 times e vão fazendo a WAR até que o limite de kills seja atingido por um dos times, que seria o vencedor ! seria legal... vc é demais
  7. As storages dos times, os jogadores conseguem ao entrar num teleport (10001 e 10002). As storages das kills eu não cheguei a iniciar, elas iniciam quando o player mata algum inimigo. (no caso as storages que estão no libs - 10400 e 10600) Cada membro do time carrega a storage correspondente ao seu time, seja ela pro time vermelho (10002) e pro time verde (10001). O evento eu sempre inicio de forma manual, mas se quiser fazer surgir um teleport através de um comando para dividir os times, seria interessante kkk. Vlw !
  8. Já fiz isso tb... como eu disse, está funcionando, mas apenas contando as kills de forma individual, não para o time todo. Tem como vc adaptar este script que eu fiz para contar, além do jeito que já está (contando as kills individualmente) contar pro time?
  9. Ok, vou postar os 3 códigos que precisei usar: as libs, o creaturescripts do onpreparedeath e onkill. EventPoints.lua - libs: eventconfig = { GSR = 10400, GSG = 10600, narrow = 3 } Creaturescripts/scripts/Event_Dead.lua: function onPrepareDeath(cid, deathList, lastHitKiller, mostDamageKiller) dofile('data/lib/EventPoints.lua') local storageIdGreen = 10001 local storageIdRed = 10002 -- apenas para rapida alteracao de quantidade de kills para acabar o evento, a titulo de testes. local eventconfigs = { narrow = 3, constante = 1 } local config = { pos_rock_green = {x=489, y=281, z=7, stackpos=1}, pos_TP_green = {x=488, y=278, z=7, stackpos=1}, pos_rock_red = {x=479, y=278, z=7, stackpos=1}, pos_TP_red = {x=477, y=281, z=7, stackpos=1}, townid = 13 } if isPlayer(cid) then if getPlayerStorageValue(cid, storageIdRed) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSR).."] pontos.") setPlayerStorageValue(deathList[1], eventconfig.GSG, getPlayerStorageValue(deathList[1], eventconfig.GSG) + eventconfigs.constante) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSG).."] pontos.") end if getPlayerStorageValue(cid, storageIdGreen) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSG).."] pontos.") setPlayerStorageValue(deathList[1], eventconfig.GSR, getPlayerStorageValue(deathList[1], eventconfig.GSR) + eventconfigs.constante) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSR).."] pontos.") end -- fim do evento if getPlayerStorageValue(deathList[1], eventconfig.GSR) >= eventconfigs.narrow or getPlayerStorageValue(deathList[1], eventconfig.GSG) >= eventconfigs.narrow then --criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM doCreateItem(1285,1,config.pos_rock_green) doCreateItem(1285,1,config.pos_TP_green) doCreateItem(1285,1,config.pos_rock_red) doCreateItem(1285,1,config.pos_TP_red) if getPlayerStorageValue(deathList[1], storageIdRed) == 1 then doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25) end if getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25) end for _, cid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(deathList[1], storageIdRed) == 1 or getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then doTeleportThing(cid, getTownTemplePosition(config.townid)) if getPlayerStorageValue(cid, eventconfig.GSG) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSG) ~= 0 then setPlayerStorageValue(cid, eventconfig.GSG, 0) setPlayerStorageValue(deathList[1], eventconfig.GSG, 0) end if getPlayerStorageValue(cid, eventconfig.GSR) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSR) ~= 0 then setPlayerStorageValue(cid, eventconfig.GSR, 0) setPlayerStorageValue(deathList[1], eventconfig.GSR, 0) end end end end end end return true end Creaturescripts/scripts/eventkill.lua: function onKill(cid, target) dofile('data/lib/EventPoints.lua') local green = 10001 local red = 10002 -- local GSR = 10400 -- local GSG = 10600 if isPlayer(cid) then if getPlayerStorageValue(cid, red) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu time recebeu ponto ! Voce possui: ["..getPlayerStorageValue(cid, eventconfig.GSR).."] kills.") end if getPlayerStorageValue(cid, green) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu time recebeu ponto ! Voce possui: ["..getPlayerStorageValue(cid, eventconfig.GSG).."] kills.") end end return true end prontinho !
  10. Registrei sim mano, substitui certinho mas mesmo assim não tive sucesso. A unica solução que encontrei mesmo foi fazer contabilizar as kills de forma individual. Fiz um script que conseguiu contabilizar as kills por player, e não pelo time, aí deu certo :(. Vou deixar o meu script que deu certo aqui, se vc achar melhor implementar a ideia nele (de contar as kills tanto por players quanto por equipes) ficaria interessante também, pros players terem uma espécie de frags dentro do evento... function onPrepareDeath(cid, deathList, lastHitKiller, mostDamageKiller) dofile('data/lib/EventPoints.lua') local storageIdGreen = 10001 local storageIdRed = 10002 -- apenas para rapida alteracao de quantidade de kills para acabar o evento, a titulo de testes. local eventconfigs = { narrow = 3, constante = 1 } local config = { pos_rock_green = {x=489, y=281, z=7, stackpos=1}, pos_TP_green = {x=488, y=278, z=7, stackpos=1}, pos_rock_red = {x=479, y=278, z=7, stackpos=1}, pos_TP_red = {x=477, y=281, z=7, stackpos=1}, townid = 13 } if isPlayer(cid) then if getPlayerStorageValue(cid, storageIdRed) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSR).."] pontos.") setPlayerStorageValue(deathList[1], eventconfig.GSG, getPlayerStorageValue(deathList[1], eventconfig.GSG) + eventconfigs.constante) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSG).."] pontos.") end if getPlayerStorageValue(cid, storageIdGreen) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSG).."] pontos.") setPlayerStorageValue(deathList[1], eventconfig.GSR, getPlayerStorageValue(deathList[1], eventconfig.GSR) + eventconfigs.constante) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSR).."] pontos.") end -- fim do evento if getPlayerStorageValue(deathList[1], eventconfig.GSR) >= eventconfigs.narrow or getPlayerStorageValue(deathList[1], eventconfig.GSG) >= eventconfigs.narrow then --criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM doCreateItem(1285,1,config.pos_rock_green) doCreateItem(1285,1,config.pos_TP_green) doCreateItem(1285,1,config.pos_rock_red) doCreateItem(1285,1,config.pos_TP_red) if getPlayerStorageValue(deathList[1], storageIdRed) == 1 then doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25) end if getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25) end for _, cid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(deathList[1], storageIdRed) == 1 or getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then doTeleportThing(cid, getTownTemplePosition(config.townid)) if getPlayerStorageValue(cid, eventconfig.GSG) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSG) ~= 0 then setPlayerStorageValue(cid, eventconfig.GSG, 0) setPlayerStorageValue(deathList[1], eventconfig.GSG, 0) end if getPlayerStorageValue(cid, eventconfig.GSR) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSR) ~= 0 then setPlayerStorageValue(cid, eventconfig.GSR, 0) setPlayerStorageValue(deathList[1], eventconfig.GSR, 0) end end end end end end return true end
  11. O script continua não contando as mortes mano Fiz o teste aqui, atacando com 1 player ou com 2, ele não conta as mortes, sempre [1].
  12. Certo, eu tentei fazer ele por onPrepareDeath, até deu certo só que na hora de contar as kills na variável global ele explode kkkkk. Ele não conta da forma correta! Ex: Seu time recebeu ponto ! Total: [1] Seu time recebeu ponto ! Total: [2] Seu time recebeu ponto ! Total: [1] Seu time recebeu ponto ! Total: [1] ... e por aí vai... Eu imagino que seja porque essa variável global que eu criei lá nas libs (pasta libs) seja alguma string, porque quando eu tentei criar uma variável local pra testar um incremento e deixar ela recebendo o getGlobalStorageValue, o script explodiu, informando algo do tipo. Vou enviar o código atual com PrepareDeath: function onPrepareDeath(cid, deathList) local storageIdGreen = 10001 local storageIdRed = 10002 local config = { pos_rock_green = {x=489, y=281, z=7, stackpos=1}, pos_TP_green = {x=488, y=278, z=7, stackpos=1}, pos_rock_red = {x=479, y=278, z=7, stackpos=1}, pos_TP_red = {x=477, y=281, z=7, stackpos=1}, townid = 13 } if isPlayer(cid) then if getPlayerStorageValue(cid, storageIdRed) == 1 then setGlobalStorageValue(eventconfig.GSG, getGlobalStorageValue(eventconfig.GSG) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(eventconfig.GSR).."]") end if getPlayerStorageValue(cid, storageIdGreen) == 1 then setGlobalStorageValue(eventconfig.GSR, getGlobalStorageValue(eventconfig.GSR) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(eventconfig.GSG).."]") -- local getglob = getGlobalStorageValue(eventconfig.GSR) end -- for i = 1, #deathList do -- pid = deathList[i] -- if isPlayer(pid) then -- fim do evento if getGlobalStorageValue(eventconfig.GSR) >= eventconfig.narrow or getGlobalStorageValue(eventconfig.GSG) >= eventconfig.narrow then --criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM doCreateItem(1285,1,config.pos_rock_green) doCreateItem(1285,1,config.pos_TP_green) doCreateItem(1285,1,config.pos_rock_red) doCreateItem(1285,1,config.pos_TP_red) if getPlayerStorageValue(cid, storageIdRed) == 1 then doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25) end if getPlayerStorageValue(cid, storageIdGreen) == 1 then doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25) end for _, cid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then doTeleportThing(cid, getTownTemplePosition(config.townid)) if getGlobalStorageValue(eventconfig.GSG) ~= 0 then setGlobalStorageValue(eventconfig.GSG, 0) end if getGlobalStorageValue(eventconfig.GSR) ~= 0 then setGlobalStorageValue(eventconfig.GSR, 0) end end end end end return true end libs do evento (pasta libs): eventconfig = { GSR = 10400, GSG = 10600, narrow = 3 } ME ajuda kkkk :"(
  13. Saudações meus caros amigos do TK! Preciso da ajuda de algum gênio para um problema ! É o seguinte: eu tenho um evento no meu server que consiste em dividir 2 times (Green e Red), onde cada membro de cada time possui uma storage registrada justamente para diferenciar cada membro entre aliado e inimigo, isso vale para manter a cor do outfit, manter efeitos durante o evento, selecionar o vencedor, dentre outras funções. Mas então me surgiu uma ideia: por que não contar as kills dos players durante o evento? Basta eu criar um creaturescript que conte cada vez que eu matar um player (onKill), logo em seguida eu salvo uma globalstorage referente a cada time, diferenciando pela propria storage dos jogadores, faço um incremento a cada vez que um player matar um inimigo, e pronto! SÓ QUE NÃO !!!!! Eu fiz dessa forma, e realmente quando um player mata um inimigo o seu time recebe 1 ponto, só que se 2 ou mais players atacarem o mesmo inimigo e o matarem, o time recebe 2 ou mais pontos ! É como se o script tivesse contando os pontos pela quantidade de players atacando o inimigo e o matando, e não necessariamente contando a quantidade de inimigos mortos !!! Quem pode me ajudar nessa empreitada? Vou mandar o código que fiz : -- ativando funcao para red team local storageIdGreen = 10001 local storageIdRed = 10002 local storageID = 10100 local townid = 13 eventconfig = { GSR = 10400, GSG = 10600, narrow = 3 } function onKill(cid, target, lastHit) if isPlayer(cid) then if getPlayerStorageValue(cid, storageIdRed) == 1 then setGlobalStorageValue(eventconfig.GSR, getGlobalStorageValue(eventconfig.GSR)+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Booa ! Ponto pra sua equipe! Seu time possui "..getGlobalStorageValue(eventconfig.GSR).." pontos! Um vencedor precisa de "..eventconfig.narrow.." pontos !") end -- time verde matando if getPlayerStorageValue(cid, storageIdGreen) == 1 then setGlobalStorageValue(eventconfig.GSG, getGlobalStorageValue(eventconfig.GSG)+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Booa ! Ponto pra sua equipe! Seu time possui "..getGlobalStorageValue(eventconfig.GSG).." pontos! Um vencedor precisa de "..eventconfig.narrow.." pontos !") end Se alguém souber de alguma solução, ou de como tratar esses globalstorages, por favor, me ajudem!

Open Tibia Server

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

Redes Sociais

Anuncie no Tibia King

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

×